Kubernetes完全指南:从入门到精通
Kubernetes完全指南:从入门到精通
第一部分:Kubernetes 基础篇
第1章 Kubernetes 概述
1.1 什么是 Kubernetes
Kubernetes(简称 K8s)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。它最初由 Google 设计并开源,现在由 Cloud Native Computing Foundation (CNCF) 维护。
K8s 这个名字来源于希腊语,意思是"舵手"或"飞行员"。Google 在 2014 年将 Kubernetes 作为开源项目发布,其前身是 Google 内部使用了 15 年的集群管理系统 Borg。
1.2 为什么需要 Kubernetes
1.2.1 容器技术的挑战
•手动管理大量容器困难
•容器故障恢复需要自动化
•负载均衡和服务发现复杂
•滚动更新和回滚难以管理
•资源配置和调度需要智能化
1.2.2 Kubernetes 的核心价值

1.3 K8s 发展历史
时间线:
1.2014年:Google 开源 Kubernetes 项目
2.2015年:Kubernetes v1.0 正式发布,加入 CNCF
3.2017年:Kubernetes 赢得容器编排之战,成为行业标准
4.2018年:Kubernetes 支持 Windows 容器
5.2020年:Kubernetes API 稳定化,生态成熟
6.2021年至今:云原生技术栈成熟,Kubernetes 成为基础设施标准
1.4 K8s 核心特性
1.4.1 声明式 API
Kubernetes 采用声明式 API,用户只需要描述期望的状态,系统会自动将当前状态转换为期望状态。
例如:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 3 # 期望运行 3 个副本 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.21.0
1.4.2 可扩展架构
•插件化架构,易于扩展
•支持自定义资源 CRD
•支持自定义控制器
•丰富的生态系统
1.5 与 Docker 的关系
常见误区澄清:
•Kubernetes 不是 Docker 的替代品
•Kubernetes 使用 Docker 作为容器运行时(之一)
•Docker 负责构建和运行容器
•Kubernetes 负责编排和管理容器
架构关系:
• Docker:容器引擎,负责容器的创建、运行和分发
• Kubernetes:容器编排平台,管理跨主机的容器部署
• CRI (Container Runtime Interface):Kubernetes 与容器运行时的接口
第2章 核心概念详解
2.1 Pod 详解
2.1.1 什么是 Pod
Pod 是 Kubernetes 中最小的可部署计算单元,一个 Pod 包含一个或多个共享存储和网络的容器。
Pod 的关键特性:
•共享网络命名空间:同一 Pod 内的容器共享 localhost
•共享存储:通过 Volume 可以在容器间共享数据
•原子性调度:Pod 总是被整体调度到同一节点
•临时性:Pod 是短暂的,可以被创建、销毁和重建
2.1.2 Pod 生命周期
Pod 的生命周期阶段:
1.Pending:Pod 已被创建,但容器尚未启动
2.Running:Pod 中至少有一个容器正在运行
3.Succeeded:Pod 中所有容器已成功终止
4.Failed:Pod 中至少有一个容器异常终止
5.Unknown:无法获取 Pod 状态
2.1.3 Pod 重启策略
2.1.4 Pod 资源限制
apiVersion: v1
kind: Pod
metadata:
name: resource-pod
spec: containers:
- name: nginx
image: nginx:1.21.0
resources: requests: # 调度时的最低保证
memory: "64Mi" cpu: "250m"
limits: # 最大使用上限
memory: "128Mi" cpu: "500m"
资源说明:
• requests:保证资源,调度器根据此值选择节点
• limits:资源上限,超出时 CPU 节流,内存 OOM
• CPU 单位:100m = 0.1 核,1000m = 1 核
• Memory 单位:Mi, Gi, MB, GB(注意大小写)
2.2 Controller 类型
2.2.1 Deployment
Deployment 是最常用的控制器,用于管理无状态应用,提供声明式更新和回滚能力。
Deployment 核心功能:
•确保指定数量的 Pod 副本运行
•滚动更新(Rolling Update)
•版本回滚(Rollback)
•暂停和恢复部署
•扩缩容
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.21.0
ports: - containerPort: 80
2.2.2 StatefulSet
StatefulSet 特点:
•稳定的网络标识(Pod 名称固定)
•稳定的持久化存储(PVC)
•有序的部署、扩展、删除
•适用于数据库等有状态应用
2.2.3 DaemonSet
DaemonSet 特点:
•在每个节点上运行一个 Pod 副本
•适用于日志收集、监控代理等
•节点添加时自动添加 Pod,节点删除时自动清理
2.2.4 控制器对比

2.3 Service 详解
2.3.1 Service 类型
2.3.2 Service 示例
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
type: ClusterIP # 默认类型
selector: app: nginx
ports: - protocol: TCP
port: 80 # Service 端口
targetPort: 80 # Pod 端口 #
nodePort: 30080 # NodePort 类型时需要
2.4 Volume 与存储
常见 Volume 类型:
•emptyDir:临时存储,Pod 删除时数据清空
•hostPath:宿主机路径,用于访问宿主机文件系统
•PersistentVolumeClaim (PVC):持久化存储声明
•ConfigMap:配置文件挂载
•Secret:敏感信息挂载
2.5 ConfigMap 和 Secret
2.5.1 ConfigMap
ConfigMap 用于存储配置数据,将配置与镜像分离,实现配置的版本管理和动态更新。
# 创建
ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data: # 键值对形式 database.url: "postgres://localhost:5432/mydb" # 文件形式 app.properties: | server.port=8080 logging.level=INFO
2.5.2 Secret
Secret 类型:
•Opaque:通用 Secret,默认类型
•kubernetes.io/tls:TLS 证书
•kubernetes.io/dockerconfigjson:Docker 镜像仓库凭证
•kubernetes.io/service-account-token:Service Account Token
# 创建 Secret(数据会自动 base64 编码)
apiVersion: v1
kind: Secret
metadata:
name: app-secret
type: Opaque
data: # echo -n 'admin' | base64 username: YWRtaW4= # echo -n 'password123' | base64 password: cGFzc3dvcmQxMjM=
2.6 Namespace 与资源隔离
Namespace 将集群资源划分为多个虚拟集群,实现资源隔离和权限控制。
默认命名空间:
•default:默认命名空间
•kube-system:系统组件
•kube-public:公共资源
•kube-node-lease:节点租约
第二部分:Kubernetes 架构篇
第3章 架构图详解
3.1 集群架构概览
Kubernetes 集群采用 Master-Worker 架构:
┌─────────────────────────────────────────────────┐
│ Control Plane (Master 节点) │
├─────────────────────────────────────────────────┤
│ ┌──────────┐ ┌──────────┐ ┌──────────────┐ │
│ │ API │ │Scheduler │ │ Controller │ │
│ │ Server │ │ │ │ Manager │ │
│ └──────────┘ └──────────┘ └──────────────┘ │
│ ┌──────────────┐ │
│ │ etcd │ │
│ └──────────────┘ │
└─────────────────────────────────────────────────┘
│
┌──────────┴──────────┐
▼ ▼
┌──────────────┐ ┌──────────────┐
│ Worker 节点1 │ │ Worker 节点2 │ ...
├──────────────┤ ├──────────────┤
│ Kubelet │ │ Kubelet │
│ Kube-proxy │ │ Kube-proxy │
│ Container │ │ Container │
│ Runtime │ │ Runtime │
│ ┌────────┐ │ │ ┌────────┐ │
│ │ Pods │ │ │ │ Pods │ │
│ └────────┘ │ │ └────────┘ │
└──────────────┘ └──────────────┘
3.2 Master 节点架构
Master 节点组件:
1.API Server:集群统一入口,处理 REST 操作,认证授权
2.etcd:键值数据库,存储集群所有配置和状态信息
3.Scheduler:资源调度,将 Pod 分配到合适的节点
4.Controller Manager:维护集群状态,执行副本控制、节点管理等
3.3 Worker 节点架构
Worker 节点组件:
1.Kubelet:与 Master 通信,管理容器生命周期
2.Kube-proxy:维护网络规则,实现 Service 负载均衡
3.Container Runtime:运行容器,支持 Docker、containerd 等
第4章 核心组件深度解析
4.1 API Server
API Server 是 Kubernetes 控制平面的核心组件,提供 RESTful API 接口,是集群的唯一入口。
核心功能:
•认证:验证用户身份(证书、Token、OAuth)
•授权:检查操作权限(RBAC、ABAC)
•准入控制:验证和修改资源对象
•数据持久化:将状态存储到 etcd
4.2 Scheduler
调度流程:
1.过滤:筛选满足 Pod 资源需求的节点
2.打分:根据策略对节点评分
3.绑定:选择最优节点并将 Pod 绑定
调度策略:
•资源限制:CPU、内存、存储
•亲和性/反亲和性:节点选择、Pod 互斥
•污点和容忍:节点标记和 Pod 容忍
•优先级:关键 Pod 优先调度
4.3 Controller Manager
包含的控制器:
•Replication Controller:维护副本数量
•Endpoints Controller:维护 Service 端点
•Node Controller:管理节点状态
•Service Account Controller:管理服务账户
•Namespace Controller:管理命名空间
4.4 Kubelet
核心职责:
•定期上报节点状态到 API Server
•监听 API Server,获取 Pod 分配任务
•通过 CRI 接口管理容器生命周期
•挂载 Volume
•执行健康检查(liveness、readiness)
4.5 Kube-proxy
工作模式:
•Userspace:用户空间代理,性能较差(已废弃)
•iptables:使用 iptables 规则实现负载均衡,默认模式
•IPVS:使用 IPVS 实现高性能负载均衡
第三部分:实战应用篇
第5章 部署第一个应用
5.1 创建 Deployment
# nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.21.0
ports:
- containerPort: 80
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
---
5.2 部署命令
# 部署应用
kubectl apply -f nginx-deployment.yaml
# 查看 Deployment 状态
kubectl get deployments
# 查看 Pod 状态
kubectl get pods
# 查看详细信息
kubectl describe deployment nginx-deployment
---
5.3 暴露服务
# 创建 Service
kubectl expose deployment nginx-deployment --name=nginx-service --port=80 --target-port=80 --type=ClusterIP
# 查看 Service
kubectl get services
# 测试访问
kubectl run curl --image=curlimages/curl -i --rm --restart=Never -- curl http://nginx-service
---
第6章 滚动更新与回滚
6.1 滚动更新策略
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1 # 最多可以多创建 1 个 Pod
maxUnavailable: 1 # 最多可以有多少个 Pod 不可用
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.21.0
---
6.2 执行更新
# 更新镜像版本
kubectl set image deployment/nginx-deployment nginx=nginx:1.22.0
# 查看更新状态
kubectl rollout status deployment/nginx-deployment
# 查看更新历史
kubectl rollout history deployment/nginx-deployment
---
6.3 版本回滚
# 回滚到上一个版本
kubectl rollout undo deployment/nginx-deployment
# 回滚到指定版本
kubectl rollout undo deployment/nginx-deployment --to-revision=2
# 暂停部署
kubectl rollout pause deployment/nginx-deployment
# 恢复部署
kubectl rollout resume deployment/nginx-deployment
---
第7章 配置管理实战
7.1 使用 ConfigMap
# 创建 ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
app.properties: |
database.url=postgres://localhost:5432/mydb
cache.enabled=true
server.port=8080
---
# 在 Pod 中使用
apiVersion: v1
kind: Pod
metadata:
name: config-pod
spec:
containers:
- name: app
image: nginx:1.21.0
volumeMounts:
- name: config-volume
mountPath: /etc/config
volumes:
- name: config-volume
configMap:
name: app-config
---
7.2 使用 Secret
# 创建 Secret
apiVersion: v1
kind: Secret
metadata:
name: db-secret
type: Opaque
data:
username: YWRtaW4=
password: cGFzc3dvcmQ=
---
# 在 Pod 中使用
apiVersion: v1
kind: Pod
metadata:
name: secret-pod
spec:
containers:
- name: app
image: nginx:1.21.0
env:
- name: DB_USERNAME
valueFrom:
secretKeyRef:
name: db-secret
key: username
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: db-secret
key: password
第四部分:高级特性篇
第8章 Ingress 详解
8.1 Ingress 概述
# Ingress 是 Kubernetes 的 API 对象,管理外部访问集群服务的规则,
# 提供 HTTP/HTTPS 路由、负载均衡、SSL 终止等功能。
#
# Ingress vs Service:
# • Service:基于 TCP/UDP 的四层负载均衡
# • Ingress:基于 HTTP/HTTPS 的七层负载均衡
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: nginx
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx-service
port:
number: 80
---
8.2 HPA (Horizontal Pod Autoscaler)
# HPA 根据指标自动调整 Pod 副本数量。
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: nginx-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: nginx-deployment
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 80
8.3 VPA (Vertical Pod Autoscaler)
VPA 自动调整 Pod 的资源请求和限制。
⚠️ 注意:VPA 会重建 Pod,生产环境慎用。
第10章 安全与 RBAC
10.1 RBAC 概述
RBAC (Role-Based Access Control) 基于角色的访问控制,是 Kubernetes 默认的授权机制。
RBAC 核心概念:
•Subject(主体):用户、组或服务账户
•Role(角色):定义命名空间内的权限
•ClusterRole(集群角色):定义集群范围的权限
•RoleBinding(角色绑定):将角色绑定到主体
•ClusterRoleBinding(集群角色绑定):将集群角色绑定到主体
10.2 RBAC 示例
---
# 创建 Role
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: pod-reader
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "watch", "list"]
---
# 创建 RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: read-pods
subjects:
- kind: User
name: jane
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: pod-reader
apiGroup: rbac.authorization.k8s.io
第五部分:生产实践篇
第11章 集群安装与配置
11.1 使用 kubeadm 安装
前置要求:
•至少 2 台服务器(1 Master + 1 Worker)
•2GB+ 内存,2 核 CPU
•网络互通
# 1. 初始化 Master 节点 kubeadm init --apiserver-advertise-address--pod-network-cidr 10.244.0.0/16 #
2. 配置 kubectl mkdir -p $HOME/.kube cp -i /etc/kubernetes/admin.conf $HOME/.kube/config chown $(id -u):$(id -g) $HOME/.kube/config #
3. 安装网络插件(以 Calico 为例) kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml #
4. Worker 节点加入集群 kubeadm join:6443 --token--discovery-token-ca-cert-hash sha256:
第12章 故障排查
12.1 常用排查命令

12.2 常见问题
•ImagePullBackOff:镜像拉取失败,检查镜像名称、仓库凭证
•CrashLoopBackOff:容器启动失败,检查应用日志和健康检查配置
•Pending:调度失败,检查资源请求、污点容忍
•OOMKilled:内存不足,调整资源限制
第六部分:生态系统篇
第13章 Helm 包管理
13.1 Helm 简介
Helm 是 Kubernetes 的包管理工具,类似于 apt、yum,可以简化应用的部署和管理。
Helm 核心概念:
•Chart:Helm 包,包含应用的所有资源定义
•Repository:Chart 仓库
•Release:Chart 的实例化
•Values:配置文件,用于自定义 Chart
13.2 Helm 常用命令
# 搜索 Chart helm search repo nginx
# 安装应用 helm install my-nginx bitnami/nginx
# 列出 Release helm list
# 升级应用 helm upgrade my-nginx bitnami/nginx --set replicaCount=5
# 回滚 helm rollback my-nginx 1
# 卸载 helm uninstall my-nginx
第14章 监控与日志
14.1 Prometheus 监控
Prometheus 架构:
•Prometheus Server:时序数据库
•Node Exporter:节点指标采集
•Kube-State-Metrics:K8s 资源指标
•Grafana:可视化面板
14.2 ELK 日志系统
ELK Stack:
•Elasticsearch:日志存储和搜索
•Logstash/Fluentd:日志收集和处理
•Kibana:日志可视化
常用命令速查表
A附录

B附录
故障排查流程
1、Pod
2、网络
3、存储
4、PV/PVC
5、常见存储问题
6、节点故障主流程
7、集群故障诊断
8、API Server 故障排查
9、应用故障诊断流程
10、快速诊断表
11、故障排查黄金法则
常用命令速查
快速排查三字经:看状态、查日志、查事件
分层排查四步法:
- Pod 层:检查容器状态和日志
- Service 层:检查服务和端点
- Ingress 层:检查路由配置
- 集群层:检查节点和组件
故障排查十大工具:
kubectl get- 查看资源状态kubectl describe- 查看详细信息kubectl logs- 查看日志kubectl exec- 进入容器kubectl top- 查看资源使用kubectl get events- 查看事件kubectl get componentstatuses- 查看组件状态kubectl cluster-info- 查看集群信息etcdctl- etcd 工具crictl- 容器运行时工具
更多推荐

所有评论(0)