Kubernetes(简称 k8s)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用。以下是 Kubernetes 的详细解析,涵盖核心概念、架构、组件及关键功能:
1. Kubernetes 核心概念
-
Pod
- 最小的调度单元,包含一个或多个共享网络/存储的容器。
- 每个 Pod 有唯一 IP,内部容器通过
localhost通信。 - 示例:一个 Pod 包含主应用容器和日志收集 Sidecar 容器。
-
Deployment
- 定义 Pod 的副本数和更新策略(滚动更新、回滚)。
- 确保指定数量的 Pod 始终运行。
- 示例:
nginx-deployment管理 3 个 Nginx Pod。
-
Service
- 为 Pod 提供稳定的访问入口(ClusterIP、NodePort、LoadBalancer)。
- 通过标签选择器关联 Pod。
- 示例:
ClusterIP服务暴露一组后端 Pod。
-
Namespace
- 逻辑隔离资源(如
dev、prod),支持多租户。 - 系统命名空间:
kube-system(核心组件)、default(用户资源)。
- 逻辑隔离资源(如
-
ConfigMap & Secret
- ConfigMap:存储非敏感配置(如环境变量)。
- Secret:存储敏感数据(如密码、密钥),Base64 编码。
-
Volume
- 提供持久化存储(如
hostPath、nfs、云存储)。 - PersistentVolume (PV) 和 PersistentVolumeClaim (PVC) 解耦存储细节。
- 提供持久化存储(如
-
Ingress
- 管理外部访问(HTTP/HTTPS 路由),通常配合 Nginx/Istio 实现。
2. Kubernetes 架构
控制平面(Control Plane)
- API Server (kube-apiserver)
- 集群的入口,处理 REST 请求,校验资源定义。
- Scheduler (kube-scheduler)
- 决定 Pod 调度到哪个节点(基于资源、亲和性等)。
- Controller Manager (kube-controller-manager)
- 运行核心控制器(如 Deployment、Node 控制器)。
- etcd
- 分布式键值存储,保存集群状态(如 Pod、Service 信息)。
工作节点(Worker Node)
- kubelet
- 负责 Pod 生命周期管理(创建、监控)。
- kube-proxy
- 维护节点网络规则(Service 的 IPTABLES/IPVS 转发)。
- 容器运行时
- 如 Docker、containerd、CRI-O,负责运行容器。
3. 关键功能
-
自动扩缩
- Horizontal Pod Autoscaler (HPA):根据 CPU/内存等指标扩缩 Pod。
- Cluster Autoscaler:动态调整节点数量(云环境)。
-
自我修复
- 重启故障容器、替换不可用 Pod、重新调度节点故障的 Pod。
-
服务发现与负载均衡
- 通过
Service和DNS自动暴露应用。
- 通过
-
滚动更新与回滚
- Deployment 支持分批次更新,失败时自动回滚到上一版本。
-
安全机制
- RBAC:基于角色的访问控制。
- Network Policies:定义 Pod 间网络隔离规则。
4. 常用命令
# 查看资源
kubectl get pods -n <namespace>
kubectl describe pod <pod-name>
# 部署应用
kubectl apply -f deployment.yaml
# 调试
kubectl logs <pod-name> -c <container-name>
kubectl exec -it <pod-name> -- /bin/sh
# 扩缩容
kubectl scale deployment/nginx --replicas=3
5. 部署工具与生态
- Minikube:本地单节点集群。
- kubeadm:生产级集群部署工具。
- Helm:Kubernetes 包管理器(Charts)。
- Operator:扩展 Kubernetes 以管理有状态应用(如数据库)。
- 服务网格:Istio、Linkerd(增强流量管理、监控)。
6. 典型工作流程
- 开发者编写
Deployment和ServiceYAML。 kubectl apply提交到集群,API Server 接收请求。- Scheduler 分配 Pod 到合适节点,kubelet 创建容器。
- Service 和 Ingress 提供访问入口,HPA 根据负载调整副本数。
7. 学习资源
- 官方文档:kubernetes.io
- 互动教程:Katacoda
- 书籍:《Kubernetes in Action》《深入剖析Kubernetes》
Kubernetes 是云原生领域的核心工具,掌握其核心概念和运维技巧对现代 DevOps 和 SRE 至关重要。建议从本地环境(如 Minikube)开始实践,逐步深入集群管理和高级特性。