1. Kubernetes基础概念与核心架构解析
Kubernetes(简称K8s)作为容器编排领域的事实标准,其设计哲学源于Google多年大规模容器管理经验的沉淀。不同于传统的虚拟机管理方式,K8s采用声明式API和控制器模式来管理应用生命周期。其核心架构由控制平面(Control Plane)和工作节点(Worker Node)组成,前者包含API Server、Scheduler、Controller Manager等关键组件,后者运行kubelet、kube-proxy等代理程序。
1.1 核心组件交互机制
API Server作为唯一入口,通过etcd持久化集群状态,所有组件都通过watch机制监听资源变更。例如当用户提交Deployment配置时:
- API Server验证并存储配置到etcd
- Deployment Controller监听到变化,创建ReplicaSet
- Scheduler为ReplicaSet分配节点
- 目标节点上的kubelet驱动容器运行时(如Docker)拉取镜像并启动容器
这种松耦合设计使得各组件可独立升级扩展,也是K8s能支撑大规模集群的关键。
1.2 关键抽象对象详解
- Pod:最小调度单元,包含共享网络/存储的一个或多个容器
- Service:定义一组Pod的访问策略,提供稳定IP和DNS
- Volume:解耦存储与生命周期,支持多种存储后端
- Namespace:逻辑隔离机制,常用于多租户环境
经验提示:生产环境中建议为不同业务线划分独立Namespace,配合RBAC进行权限控制
2. 典型安装方案对比与选型指南
2.1 主流部署工具评测
| 工具 | 适用场景 | 复杂度 | 定制能力 | 适用版本 |
|---|---|---|---|---|
| kubeadm | 官方推荐,快速搭建 | 中 | 高 | 所有K8s版本 |
| minikube | 单节点开发测试 | 低 | 低 | 最新稳定版 |
| kops | AWS生产环境 | 高 | 极高 | 较新版本 |
| kubespray | 多云裸金属部署 | 高 | 极高 | 多版本支持 |
2.2 硬件资源规划建议
对于开发测试环境:
- Master节点:2核CPU/4GB内存/20GB磁盘
- Worker节点:4核CPU/8GB内存/50GB磁盘
生产环境基线配置:
- Master节点:4核CPU/16GB内存/100GB磁盘(需3节点高可用)
- Worker节点:根据负载动态扩展,建议8核CPU起
避坑指南:etcd对磁盘IOPS敏感,生产环境务必使用SSD并单独部署
3. 基于kubeadm的详细安装手册
3.1 前置条件准备
以CentOS 7为例的通用配置:
# 关闭Swap swapoff -a sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab # 设置内核参数 cat <<EOF > /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sysctl --system # 安装容器运行时(以containerd为例) yum install -y containerd.io systemctl enable --now containerd3.2 控制平面初始化
主节点执行:
kubeadm init \ --apiserver-advertise-address=192.168.1.100 \ --pod-network-cidr=10.244.0.0/16 \ --image-repository registry.aliyuncs.com/google_containers # 配置kubectl mkdir -p $HOME/.kube cp -i /etc/kubernetes/admin.conf $HOME/.kube/config chown $(id -u):$(id -g) $HOME/.kube/config3.3 网络插件部署
Calico安装示例:
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml常见网络方案对比:
- Flannel:配置简单但功能有限
- Calico:支持网络策略,性能优异
- Cilium:基于eBPF,适合云原生场景
4. 集群运维关键实践
4.1 节点管理操作
添加工作节点:
kubeadm join 192.168.1.100:6443 \ --token <token> \ --discovery-token-ca-cert-hash <hash>节点维护命令:
# 安全驱逐Pod kubectl drain <node-name> --ignore-daemonsets # 标记节点不可调度 kubectl cordon <node-name>4.2 常见故障排查
证书过期处理:
kubeadm certs renew all systemctl restart kubelet网络连通性检查:
- 确认CoreDNS Pod运行正常
- 检查kube-proxy日志是否有错误
- 验证网络插件配置是否符合集群CIDR
5. 生产环境加固方案
5.1 安全基线配置
关键加固措施:
- 启用PodSecurityPolicy(或新版PodSecurity标准)
- 配置NetworkPolicy限制Pod间通信
- 定期轮换证书(默认1年有效期)
- 审计日志开启并集中收集
5.2 高可用架构设计
典型拓扑示例:
+-----------------+ | 外部负载均衡器 | +--------+--------+ | +------------------+------------------+ | | | +--------+--------+ +-------+-------+ +--------+--------+ | Master Node 1 | | Master Node 2 | | Master Node 3 | | API Server | | API Server | | API Server | | Scheduler | | Scheduler | | Scheduler | | Controller Man. | | Controller M. | | Controller Man. | | etcd (Member) | | etcd (Member) | | etcd (Member) | +------------------+ +---------------+ +-----------------+实现方式:
- 使用keepalived+haproxy实现API Server负载均衡
- etcd集群部署奇数节点(3/5/7)
- 所有组件配置健康检查探针
6. 版本升级策略
6.1 滚动升级流程
- 备份etcd数据:
ETCDCTL_API=3 etcdctl \ --endpoints=https://127.0.0.1:2379 \ --cacert=/etc/kubernetes/pki/etcd/ca.crt \ --cert=/etc/kubernetes/pki/etcd/server.crt \ --key=/etc/kubernetes/pki/etcd/server.key \ snapshot save snapshot.db- 升级控制平面:
kubeadm upgrade plan kubeadm upgrade apply v1.24.3- 逐节点升级kubelet:
yum install -y kubelet-1.24.3 kubectl-1.24.3 systemctl daemon-reload systemctl restart kubelet6.2 版本兼容性矩阵
| 当前版本 | 可升级版本 | 注意事项 |
|---|---|---|
| 1.20.x | 1.21.x | 需检查Deprecated API迁移情况 |
| 1.23.x | 1.24.x | 移除dockershim兼容层 |
| 1.25.x | 1.26.x | 需验证CSI驱动兼容性 |
7. 生态工具链集成
7.1 监控方案部署
Prometheus-Operator安装:
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm install prometheus prometheus-community/kube-prometheus-stack关键监控指标:
- 节点资源使用率(CPU/Mem/Disk)
- Pod重启次数
- API Server延迟
- 网络丢包率
7.2 日志收集架构
EFK技术栈配置示例:
# Filebeat DaemonSet配置片段 - type: container paths: - /var/log/containers/*.log processors: - add_kubernetes_metadata: host: ${NODE_NAME} matchers: - logs_path: logs_path: "/var/log/containers/"8. 典型问题诊断手册
8.1 启动故障排查表
| 现象 | 可能原因 | 检查点 |
|---|---|---|
| kubelet无法启动 | 证书过期 | /var/log/messages |
| Pod一直Pending | 资源不足 | kubectl describe pod |
| Service无法访问 | kube-proxy未运行 | iptables -L -n |
| DNS解析失败 | CoreDNS异常 | kubectl logs -n kube-system |
8.2 性能调优参数
kubelet关键配置(/var/lib/kubelet/config.yaml):
apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration evictionHard: memory.available: "500Mi" nodefs.available: "10%" kubeReserved: cpu: "500m" memory: "1Gi" systemReserved: cpu: "500m" memory: "1Gi"9. 学习路径与资源推荐
9.1 分阶段学习建议
入门阶段:
- 掌握Pod/Deployment/Service基础概念
- 熟悉kubectl常用命令
- 理解K8s调度原理
进阶阶段:
- 研究Custom Resource Definition(CRD)
- 掌握Operator开发模式
- 深入网络策略与存储方案
9.2 官方认证体系
CKAD(认证K8s应用开发者):
- 考察Workloads配置能力
- 注重实操效率(计时考试)
CKA(认证K8s管理员):
- 侧重集群运维技能
- 包含故障排查场景
CKS(认证K8s安全专家):
- 聚焦安全加固技术
- 要求掌握PSP/RBAC等机制