ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

使用kubeadm搭建生产级Kubernetes集群指南

使用kubeadm搭建生产级Kubernetes集群指南

1. Kubernetes集群搭建概述

Kubernetes作为当前最流行的容器编排系统,已经成为云原生应用部署的事实标准。对于刚接触Kubernetes的开发者来说,搭建一个可用的生产级集群往往面临诸多挑战。本指南将使用kubeadm工具,带你从零开始构建一个符合最佳实践的Kubernetes集群。

kubeadm是Kubernetes官方推荐的集群引导工具,它能够:

  • 快速初始化符合一致性测试标准的控制平面
  • 简化节点加入流程
  • 支持集群生命周期管理(如升级、证书续期等)
  • 作为其他自动化工具的基础组件

2. 环境准备

2.1 硬件要求

至少需要2台Linux主机(物理机或虚拟机):

  • 控制平面节点:2核CPU/2GB内存/30GB磁盘
  • 工作节点:1核CPU/1GB内存/20GB磁盘

生产环境建议控制平面节点配置4核CPU/8GB内存以上

2.2 系统要求

所有节点需要:

  1. 禁用swap:swapoff -a并注释/etc/fstab中的swap行
  2. 确保唯一主机名:hostnamectl set-hostname <name>
  3. 时间同步:安装并启用chrony或ntpd
  4. 加载内核模块:
    cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf overlay br_netfilter EOF sudo modprobe overlay sudo modprobe br_netfilter

2.3 网络配置

确保:

  • 节点间网络互通
  • 开放6443(API Server)、2379-2380(etcd)等端口
  • 为Pod和Service分配独立CIDR(不与主机网络重叠)

3. 安装基础组件

3.1 容器运行时安装

以containerd为例:

# 安装依赖 apt-get update && apt-get install -y apt-transport-https ca-certificates curl # 添加Docker仓库 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # 安装containerd apt-get update && apt-get install -y containerd.io # 配置containerd mkdir -p /etc/containerd containerd config default | sudo tee /etc/containerd/config.toml systemctl restart containerd

3.2 安装kubeadm/kubelet/kubectl

# 添加Kubernetes仓库 curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list deb https://apt.kubernetes.io/ kubernetes-xenial main EOF # 安装指定版本(示例为1.26.0) apt-get update && apt-get install -y kubelet=1.26.0-00 kubeadm=1.26.0-00 kubectl=1.26.0-00 apt-mark hold kubelet kubeadm kubectl

4. 初始化控制平面

4.1 初始化命令

kubeadm init \ --apiserver-advertise-address=192.168.1.100 \ --pod-network-cidr=10.244.0.0/16 \ --upload-certs \ --control-plane-endpoint=cluster.example.com:6443

关键参数说明:

  • --pod-network-cidr:必须与后续安装的CNI插件匹配
  • --control-plane-endpoint:高可用集群的负载均衡地址
  • --upload-certs:自动分发证书到其他控制平面节点

4.2 初始化后配置

mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config

4.3 安装网络插件

以Calico为例:

kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/calico.yaml

验证网络插件:

watch kubectl get pods -n kube-system # 等待所有Pod变为Running状态

5. 添加工作节点

在控制平面初始化输出的join命令基础上添加参数:

kubeadm join cluster.example.com:6443 \ --token <token> \ --discovery-token-ca-cert-hash sha256:<hash> \ --node-labels="node-role.kubernetes.io/worker=worker"

验证节点加入:

kubectl get nodes # 应看到新节点状态为Ready

6. 集群验证

6.1 基础检查

kubectl get componentstatus kubectl cluster-info kubectl get all -A

6.2 部署测试应用

kubectl create deployment nginx --image=nginx kubectl expose deployment nginx --port=80 --type=NodePort kubectl get svc nginx

访问测试:

curl http://<node-ip>:<node-port>

7. 生产级配置建议

7.1 证书管理

自动续期配置:

# /etc/kubernetes/kubelet.conf rotateCertificates: true serverTLSBootstrap: true

手动续期检查:

kubeadm certs check-expiration kubeadm certs renew all

7.2 高可用方案

推荐架构:

  • 3个控制平面节点
  • 外部etcd集群(非堆叠式)
  • 负载均衡器(如HAProxy+Keepalived)

7.3 监控与日志

基础监控栈:

# 安装Metrics Server kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml # 推荐Prometheus Operator helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm install prometheus prometheus-community/kube-prometheus-stack

8. 常见问题排查

8.1 节点NotReady

检查步骤:

  1. 查看kubelet状态:systemctl status kubelet
  2. 检查容器运行时:crictl ps -a
  3. 查看节点详情:kubectl describe node <node-name>

8.2 网络问题

诊断方法:

# 检查CNI插件日志 kubectl logs -n kube-system -l k8s-app=calico-node # 测试Pod间通信 kubectl run test-nginx --image=nginx kubectl exec test-nginx -- curl <other-pod-ip>

8.3 证书过期

应急处理:

# 备份原有证书 cp -r /etc/kubernetes/pki /etc/kubernetes/pki.bak # 更新证书 kubeadm certs renew all # 重启控制平面组件 docker ps | grep kube-apiserver | awk '{print $1}' | xargs docker restart

9. 维护与升级

9.1 版本升级流程

  1. 升级kubeadm:apt-get update && apt-get install -y kubeadm=1.27.0-00
  2. 检查升级计划:kubeadm upgrade plan
  3. 升级控制平面:kubeadm upgrade apply v1.27.0
  4. 升级节点:
    kubeadm upgrade node apt-get install -y kubelet=1.27.0-00 kubectl=1.27.0-00 systemctl restart kubelet

9.2 日常维护命令

# 查看集群事件 kubectl get events -A --sort-by=.metadata.creationTimestamp # 检查资源使用 kubectl top nodes kubectl top pods -A # 清理终止状态的Pod kubectl delete pods -A --field-selector=status.phase==Failed

10. 安全加固建议

  1. 启用Pod安全准入:

    kubectl apply -f https://raw.githubusercontent.com/kubernetes/website/main/content/en/examples/security/podsecurity-psa.yaml
  2. 限制kubelet权限:

    # /var/lib/kubelet/config.yaml authorization: mode: Webhook authentication: x509: clientCAFile: /etc/kubernetes/pki/ca.crt
  3. 网络策略示例:

    apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: default-deny spec: podSelector: {} policyTypes: - Ingress - Egress

通过以上步骤,你应该已经成功搭建了一个生产可用的Kubernetes集群。实际环境中还需要根据具体需求调整存储配置、网络策略、资源配额等参数。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进