网站Logo linux从入门到入土

掌握Kubernetes:从架构解析到集群部署实战

admin
23
2022-11-25

掌握Kubernetes:从架构解析到集群部署实战

在云原生时代,Kubernetes(简称K8S)已成为容器编排的事实标准。无论是初创公司还是大型企业,掌握K8S都是现代运维和开发工程师的必备技能。本文将带你深入理解K8S的核心架构,并通过实战演示如何使用kubeadm快速搭建生产可用的K8S集群。

一、Kubernetes核心架构解析

什么是Kubernetes?

Kubernetes是一款开源的容器编排平台,用于自动化部署、扩展和管理容器化应用。它支持单机与集群模式,提供强大的服务发现、负载均衡、自我修复和滚动更新等功能。

架构组成

K8S集群采用主从架构,分为控制平面(Master)和工作节点(Worker Node):

控制平面组件:

  • etcd:分布式键值存储,保存整个集群的状态数据
  • API Server:集群管理的统一入口,提供RESTful API
  • Controller Manager:维护集群状态,确保实际状态与期望状态一致
  • Scheduler:负责将Pod调度到合适的节点上

工作节点组件:

  • Kubelet:管理节点上容器的生命周期,与API Server通信
  • Kube-proxy:实现服务发现和负载均衡,维护节点网络规则

CNI网络插件:

  • Flannel、Calico、Cilium等,负责Pod间的网络通信

K8S的三种网络类型

  1. 节点网络:物理主机IP网络
  2. Pod网络:容器间的虚拟网络
  3. Service网络:服务的虚拟IP,提供负载均衡和服务发现

二、Kubernetes部署方案对比

官方部署方式

  1. 二进制部署

    • 优势:高度可定制化
    • 劣势:配置复杂,证书管理繁琐
    • 适合:对K8S有深入了解的团队
  2. kubeadm部署

    • 优势:快速简单,官方推荐
    • 劣势:灵活性相对较低
    • 适合:快速搭建测试或生产环境

第三方部署方案

  • 国内方案:KubeSphere、Kuboard、kubeasz
  • 国外方案:Rancher(含轻量级K3S)
  • 云厂商服务:阿里云ACK、腾讯云TKE、华为云CCE等
  • 开发工具:minikube、kind(适合本地开发测试)

生产环境版本选择建议

  • K8S 1.24+版本已移除对Docker的原生支持
  • 建议使用Containerd作为容器运行时,性能更优
  • 长期支持版本(LTS)更适合生产环境

三、实战:使用kubeadm部署K8S集群

环境准备

  • 操作系统:Ubuntu 22.04 LTS
  • 节点规划:
    • Master: 10.0.0.231
    • Worker1: 10.0.0.232
    • Worker2: 10.0.0.233
  • 硬件要求:至少2核CPU、4GB内存

关键配置步骤

1. 系统优化配置

# 关闭swap分区
swapoff -a
sed -i '/swap/s/^/#/' /etc/fstab

# 启用内核模块
cat > /etc/modules-load.d/k8s.conf <<EOF
br_netfilter
EOF

# 配置网络参数
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sysctl --system

2. 安装运行时和K8S组件

# 安装Docker(或Containerd)
# 配置阿里云K8S源
apt-get update && apt-get install -y apt-transport-https
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -

# 安装指定版本(以1.23.17为例)
apt-get install -y kubelet=1.23.17-00 kubeadm=1.23.17-00 kubectl=1.23.17-00

3. 初始化Master节点

# 提前拉取镜像(国内加速)
kubeadm init \
  --kubernetes-version=v1.23.17 \
  --image-repository=registry.aliyuncs.com/google_containers \
  --pod-network-cidr=10.100.0.0/16 \
  --service-cidr=10.200.0.0/16

# 配置kubectl
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

4. 加入Worker节点
使用Master初始化后生成的join命令:

kubeadm join <master-ip>:6443 --token <token> --discovery-token-ca-cert-hash <hash>

网络插件部署(以Flannel为例)

# 修改网段匹配Pod CIDR
wget https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
sed -i 's|"Network": "10.244.0.0/16"|"Network": "10.100.0.0/16"|' kube-flannel.yml

# 部署Flannel
kubectl apply -f kube-flannel.yml

验证集群状态

# 查看节点状态
kubectl get nodes -o wide

# 查看所有Pod状态
kubectl get pods --all-namespaces -o wide

# 测试网络连通性
kubectl run test --image=nginx --port=80

四、集群优化与维护建议

生产环境优化

  1. 证书管理:kubeadm自动生成的证书有效期为1年,需定期更新
  2. 高可用部署:通过多Master节点实现控制平面高可用
  3. 监控告警:集成Prometheus + Grafana监控体系
  4. 日志收集:使用EFK或Loki堆栈

故障排查技巧

  • 使用 kubectl describe查看资源详情
  • 使用 kubectl logs查看容器日志
  • 检查各组件日志:journalctl -u kubelet
  • 验证网络插件:使用 busybox进行Pod间连通性测试

五、总结

通过本文的实践,我们完成了从K8S架构理解到实际集群部署的全过程。掌握K8S不仅需要理解其核心组件和工作原理,更需要通过实践积累部署和维护经验。随着云原生技术的不断发展,K8S生态系统也在快速演进,建议持续关注CNCF技术蓝图,了解最新技术动态。

学习建议:

  1. 从单节点集群开始,逐步扩展到多节点
  2. 尝试不同的网络插件(Calico、Cilium)
  3. 实践常用资源类型:Deployment、Service、ConfigMap、Secret等
  4. 学习Helm进行应用打包和部署
  5. 参与开源社区,阅读官方文档和最佳实践

掌握Kubernetes是现代云计算领域的核心竞争力之一,希望本文能为你的云原生之旅提供有价值的参考。


本文基于Kubernetes 1.23.17版本编写,部分配置可能随版本更新有所变化,请以官方文档为准。文中涉及的技术方案已在实际生产环境验证,可根据具体需求进行调整优化。

动物装饰