第一部分: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 # 最多可以多创建 1Pod
      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 概述

# IngressKubernetes 的 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、故障排查黄金法则
在这里插入图片描述

常用命令速查

快速排查三字经:看状态、查日志、查事件
分层排查四步法

  1. Pod 层:检查容器状态和日志
  2. Service 层:检查服务和端点
  3. Ingress 层:检查路由配置
  4. 集群层:检查节点和组件

故障排查十大工具

  • kubectl get - 查看资源状态
  • kubectl describe - 查看详细信息
  • kubectl logs - 查看日志
  • kubectl exec - 进入容器
  • kubectl top - 查看资源使用
  • kubectl get events - 查看事件
  • kubectl get componentstatuses - 查看组件状态
  • kubectl cluster-info - 查看集群信息
  • etcdctl - etcd 工具
  • crictl - 容器运行时工具
Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐