Kubernetes 从入门到精通:容器编排与集群管理实战指南
一、Kubernetes 是什么
Kubernetes(简称 K8s)是由 Google 开源、CNCF(云原生计算基金会)维护的 容器编排系统。
它用于自动化容器的 部署、扩缩容、负载均衡、滚动更新 等全过程管理,是云原生时代的核心基础设施。
一句话概括:
Kubernetes = 容器的操作系统。
二、Kubernetes 的核心特性
| 特性 | 描述 |
|---|---|
| 自动部署与回滚 | 自动管理容器版本与滚动更新 |
| 服务发现与负载均衡 | 内建 Service 实现内部网络通信 |
| 自愈机制 | Pod 异常自动重启与重新调度 |
| 水平自动伸缩 | 根据负载自动扩容或缩容 |
| 配置与密钥管理 | 安全注入环境变量与凭证 |
| 声明式配置 | 通过 YAML 文件定义系统状态 |
| 跨平台支持 | 兼容云、本地与混合环境 |
| 生态丰富 | Helm、Prometheus、Istio 等配套工具齐全 |
三、Kubernetes 架构
+---------------------------------------------------------------+ | Master 控制平面 | |---------------------------------------------------------------| | API Server | Scheduler | Controller Manager | etcd | +---------------------+-----------------------------------------+ | Node 工作节点 | |---------------------------------------------------------------| | kubelet | kube-proxy | 容器运行时(Docker/Containerd) | |---------------------------------------------------------------| | Pod 1 | Pod 2 | Pod 3 ... | +---------------------------------------------------------------+
四、Kubernetes 核心组件
| 组件 | 作用 |
|---|---|
| API Server | 集群的通信接口,接收与分发请求 |
| etcd | 集群配置与状态的分布式存储 |
| Scheduler | 调度 Pod 到合适的节点 |
| Controller Manager | 监控集群状态并执行自动化控制 |
| kubelet | 管理节点内 Pod 的生命周期 |
| kube-proxy | 负责服务网络与负载均衡 |
| Container Runtime | 容器运行环境(如 Docker、Containerd) |
五、安装 Kubernetes
1. 安装工具
官方推荐使用 kubeadm 初始化集群。
sudo apt update sudo apt install -y kubeadm kubelet kubectl
2. 初始化 Master
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
初始化完成后,复制加入节点命令(如):
kubeadm join 192.168.1.10:6443 --token abcdef.0123456789abcdef
3. 配置 kubectl
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
六、部署网络插件
K8s Pod 需要网络才能互通。以 Flannel 为例:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
查看节点状态:
kubectl get nodes
所有节点状态为 Ready 即集群可用。
七、Pod(容器最小单元)
创建 Pod
pod.yaml:
apiVersion: v1 kind: Pod metadata: name: nginx-pod spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80
创建:
kubectl apply -f pod.yaml kubectl get pods
八、Deployment(部署控制器)
deployment.yaml:
apiVersion: apps/v1 kind: Deployment metadata: name: web-deploy spec: replicas: 3 selector: matchLabels: app: web template: metadata: labels: app: web spec: containers: - name: nginx image: nginx:1.25 ports: - containerPort: 80
执行:
kubectl apply -f deployment.yaml kubectl get deployments
滚动更新:
kubectl set image deployment/web-deploy nginx=nginx:1.26 kubectl rollout status deployment/web-deploy
九、Service(服务发现与访问)
暴露 Deployment
kubectl expose deployment web-deploy --type=NodePort --port=80 --target-port=80
查看端口:
kubectl get svc
访问:
http://<node-ip>:<nodeport>
Service 类型
| 类型 | 描述 |
|---|---|
| ClusterIP | 默认,仅集群内部访问 |
| NodePort | 外部访问节点 IP:Port |
| LoadBalancer | 云端负载均衡 |
| ExternalName | 映射外部域名服务 |
参考案例:www.jltxr.cn
十、ReplicaSet 与副本控制
replicas 控制副本数量:
kubectl scale deployment web-deploy --replicas=5 kubectl get pods
可根据负载自动扩缩容:
kubectl autoscale deployment web-deploy --min=2 --max=10 --cpu-percent=70
十一、ConfigMap 与 Secret
ConfigMap
kubectl create configmap app-config --from-literal=MODE=production
引用配置:
env: - name: APP_MODE valueFrom: configMapKeyRef: name: app-config key: MODE
Secret
kubectl create secret generic db-pass --from-literal=PASSWORD=123456
引用:
env: - name: MYSQL_PASS valueFrom: secretKeyRef: name: db-pass key: PASSWORD
十二、Volume(持久化存储)
apiVersion: v1 kind: Pod metadata: name: nginx-storage spec: containers: - name: nginx image: nginx volumeMounts: - name: web-data mountPath: /usr/share/nginx/html volumes: - name: web-data hostPath: path: /data/nginx
十三、StatefulSet(有状态服务)
适用于数据库、消息队列等场景。
apiVersion: apps/v1 kind: StatefulSet metadata: name: mysql spec: serviceName: "mysql" replicas: 2 selector: matchLabels: app: mysql template: metadata: labels: app: mysql spec: containers: - name: mysql image: mysql:8 env: - name: MYSQL_ROOT_PASSWORD value: 123456
十四、DaemonSet(系统级守护进程)
适合日志采集、监控 Agent:
apiVersion: apps/v1 kind: DaemonSet metadata: name: node-exporter spec: selector: matchLabels: app: exporter template: metadata: labels: app: exporter spec: containers: - name: exporter image: prom/node-exporter
十五、Job 与 CronJob
Job
执行一次性任务:
apiVersion: batch/v1 kind: Job metadata: name: backup-job spec: template: spec: containers: - name: backup image: alpine command: ["sh", "-c", "echo 'Backup Done'"] restartPolicy: Never
CronJob
周期性任务:
apiVersion: batch/v1 kind: CronJob metadata: name: daily-backup spec: schedule: "0 2 * * *" jobTemplate: spec: template: spec: containers: - name: backup image: alpine command: ["sh", "-c", "echo 'Daily backup'"] restartPolicy: OnFailure
十六、Ingress(反向代理与路由)
ingress.yaml:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: web-ingress spec: rules: - host: web.local http: paths: - path: / pathType: Prefix backend: service: name: web-deploy port: number: 80
启用 Ingress 控制器(如 nginx-ingress)后,访问:
http://web.local
十七、监控与日志
| 工具 | 功能 |
|---|---|
| kubectl logs | 查看 Pod 日志 |
| Prometheus | 指标采集 |
| Grafana | 可视化监控 |
| ELK(Elasticsearch + Logstash + Kibana) | 日志分析 |
| Lens / K9s | 图形化管理工具 |
十八、安全与 RBAC 权限控制
创建用户角色:
apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: default name: pod-reader rules: - apiGroups: [""] resources: ["pods"] verbs: ["get", "watch", "list"]
绑定用户:
kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: read-pods subjects: - kind: User name: dev roleRef: kind: Role name: pod-reader apiGroup: rbac.authorization.k8s.io
十九、集群自动化与升级
集群伸缩
kubectl scale deployment web-deploy --replicas=10
集群升级
sudo apt upgrade kubeadm kubelet kubectl -y sudo kubeadm upgrade apply v1.30.0
二十、企业级实战场景
| 场景 | 实践方案 |
|---|---|
| 微服务编排 | 每个服务独立 Deployment + Service |
| 持续交付 | Jenkins + K8s 自动化部署 |
| 灰度发布 | 使用 Deployment + Label 切流量 |
| 日志与监控系统 | Prometheus + Grafana + Loki |
| 弹性伸缩平台 | HPA 自动扩缩容 |
| 多集群管理 | Rancher / ArgoCD / Fleet |
| 混合云部署 | 支持 AWS、GCP、Azure、私有云 |
| Service Mesh 网格化 | 使用 Istio / Linkerd 管理流量 |
更多推荐


所有评论(0)