Linux容器大师:K8s集群部署入门指南

引言

在云原生时代,Kubernetes就像一位"集群调度大师"🎮,轻松管理成千上万的容器化应用!本文将带你从零开始搭建生产级K8s集群,从基础概念到实战部署,从核心组件到安全运维。无论你是要搭建开发环境还是生产集群,这些技能都将助你轻松驾驭容器编排的浪潮!准备好你的Linux服务器,让我们一起探索K8s的奥秘吧~ 🌊

Kubernetes
Master节点
Worker节点
网络存储
监控运维

一、Kubernetes 基础概念

1.1 核心组件

组件功能描述
Master节点集群控制平面
Node节点运行工作负载的机器
PodKubernetes最小部署单元
Deployment管理Pod副本的声明式方式
Service定义Pod访问策略
kubelet节点代理,管理Pod生命周期
kube-proxy维护节点网络规则

1.2 基本工作流程

  1. 用户通过kubectl提交YAML配置
  2. API Server接收请求并验证
  3. Scheduler分配Pod到合适Node
  4. kubelet创建并监控Pod
  5. kube-proxy配置网络规则

二、集群部署方案选择

2.1 本地开发环境

工具特点适用场景
Minikube单节点集群,简单易用本地开发测试
Kind使用Docker容器作为节点CI/CD测试
MicroK8s轻量级生产级K8s边缘计算/IoT

2.2 生产环境部署

方案特点适用场景
kubeadm官方工具,灵活可控自定义集群
kOps自动化生产级集群AWS等云环境
RKERancher的K8s发行版混合云部署

三、使用kubeadm部署集群

3.1 环境准备(所有节点)

# 禁用swap
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

# 安装Docker
sudo apt-get update && sudo apt-get install -y docker.io
sudo systemctl enable --now docker

# 安装kubeadm/kubelet/kubectl
sudo apt-get update && sudo apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

3.2 初始化Master节点

sudo kubeadm init \
  --pod-network-cidr=10.244.0.0/16 \
  --apiserver-advertise-address=<master-ip>

# 按照输出提示配置kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

# 安装网络插件(Flannel)
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

3.3 加入Worker节点

# 在Master节点上获取join命令
kubeadm token create --print-join-command

# 在Worker节点上执行输出的join命令
sudo kubeadm join <master-ip>:6443 --token <token> --discovery-token-ca-cert-hash <hash>

四、基本操作入门

4.1 集群状态检查

# 查看节点状态
kubectl get nodes -o wide

# 查看所有资源
kubectl get all --all-namespaces

# 查看集群信息
kubectl cluster-info

4.2 部署第一个应用

# nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80
# 创建部署
kubectl apply -f nginx-deployment.yaml

# 查看部署状态
kubectl get deployments
kubectl get pods -o wide

4.3 暴露服务

# nginx-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: NodePort
# 创建服务
kubectl apply -f nginx-service.yaml

# 获取服务访问信息
kubectl get svc nginx-service

# 测试访问(使用输出的NodePort)
curl http://<node-ip>:<node-port>

五、核心概念深入

5.1 Pod生命周期

  1. Pending:调度中
  2. Running:至少一个容器运行中
  3. Succeeded:所有容器成功终止
  4. Failed:至少一个容器异常终止
  5. Unknown:状态无法获取

5.2 控制器类型

类型用途
Deployment无状态应用部署
StatefulSet有状态应用部署
DaemonSet每个节点运行一个Pod
Job/CronJob批处理任务

5.3 服务发现

# 环境变量方式
kubectl exec <pod-name> -- env | grep SERVICE

# DNS方式(集群内访问)
<service-name>.<namespace>.svc.cluster.local

六、存储管理

6.1 卷类型

# pod-with-volume.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-with-volume
spec:
  containers:
  - name: nginx
    image: nginx
    volumeMounts:
    - name: html-volume
      mountPath: /usr/share/nginx/html
  volumes:
  - name: html-volume
    hostPath:
      path: /data/html
      type: Directory

6.2 PersistentVolume(PV)示例

# pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-volume
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /mnt/data

6.3 PersistentVolumeClaim(PVC)示例

# pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-claim
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 3Gi

七、集群维护

7.1 节点管理

# 标记节点不可调度
kubectl cordon <node-name>

# 排空节点(迁移Pod)
kubectl drain <node-name> --ignore-daemonsets

# 恢复节点
kubectl uncordon <node-name>

7.2 升级集群

# 升级kubeadm
sudo apt-get update && sudo apt-get install -y kubeadm=1.23.5-00

# 检查升级计划
sudo kubeadm upgrade plan

# 升级Master节点
sudo kubeadm upgrade apply v1.23.5

# 升级kubelet和kubectl
sudo apt-get update && sudo apt-get install -y kubelet=1.23.5-00 kubectl=1.23.5-00
sudo systemctl restart kubelet

八、监控与日志

8.1 基础监控

# 查看Pod日志
kubectl logs <pod-name>

# 实时日志流
kubectl logs -f <pod-name> -c <container-name>

# 进入Pod调试
kubectl exec -it <pod-name> -- /bin/bash

8.2 部署监控栈(Prometheus+Grafana)

# 添加Helm仓库
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts

# 安装kube-prometheus-stack
helm install prometheus prometheus-community/kube-prometheus-stack

九、安全最佳实践

9.1 RBAC配置

# role.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: pod-reader
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "watch", "list"]
# rolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: read-pods
  namespace: default
subjects:
- kind: User
  name: jane
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io

9.2 网络策略

# network-policy.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  - Egress

十、学习资源推荐

10.1 官方文档

10.2 交互式教程

10.3 认证路径

  1. CKAD (Certified Kubernetes Application Developer)
  2. CKA (Certified Kubernetes Administrator)
  3. CKS (Certified Kubernetes Security Specialist)

总结 🎯

通过本文的系统学习,我们已经掌握了K8s集群的核心技能:

  1. 架构理解:Master/Worker节点协同原理 🧠
  2. 集群部署:kubeadm生产级部署方案 🏗️
  3. 应用管理:从Pod到Deployment的完整编排 📦
  4. 运维安全:监控日志与安全加固体系 🔍

云原生黄金法则

  • 声明式配置:所有资源YAML化 📜
  • 自动化运维:CI/CD流水线整合 🔄
  • 渐进式扩展:从小集群开始实践 🐣

记住:Kubernetes不是终点,而是云原生的起点! 现在就去部署你的第一个集群吧!🚀✨


PS:如果你在学习过程中遇到问题,别慌!欢迎在评论区留言,我会尽力帮你解决!😄

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值