一、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 管理流量

更多推荐