Kubernetes 集群部署与配置指南
一、前言
Kubernetes(简称 K8s)是目前最主流的容器编排平台,提供自动化部署、扩展和管理容器化应用的能力。本文档介绍如何使用 kubeadm 在生产环境中部署一个高可用的 Kubernetes 集群。
二、环境准备
2.1 硬件要求
| 节点类型 |
数量 |
CPU |
内存 |
磁盘 |
| Master |
3 |
4 核 |
8GB |
50GB |
| Worker |
≥2 |
4 核 |
8GB |
50GB |
2.2 系统要求
- 操作系统:Ubuntu 22.04 LTS / CentOS 7.9+
- 内核版本:≥ 4.15
- 容器运行时:containerd 1.6+ 或 Docker 20.10+
- 网络插件:Calico / Flannel / Cilium
2.3 网络规划
1 2 3 4 5
| Master 节点:192.168.1.10-12 Worker 节点:192.168.1.20-21 Pod 网段:10.244.0.0/16 Service 网段:10.96.0.0/12 VIP(负载均衡):192.168.1.100
|
三、前置配置
3.1 关闭 Swap
1 2 3 4 5
| swapoff -a
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
|
3.2 配置内核参数
1 2 3 4 5 6 7 8
| cat <<EOF | tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1 vm.swappiness = 0 EOF
sysctl --system
|
3.3 加载内核模块
1 2 3 4 5 6 7
| cat <<EOF | tee /etc/modules-load.d/k8s.conf overlay br_netfilter EOF
modprobe overlay modprobe br_netfilter
|
3.4 配置 hosts 解析
1 2 3 4 5 6 7 8
| cat <<EOF >> /etc/hosts 192.168.1.10 k8s-master-01 192.168.1.11 k8s-master-02 192.168.1.12 k8s-master-03 192.168.1.20 k8s-worker-01 192.168.1.21 k8s-worker-02 192.168.1.100 k8s-api EOF
|
四、安装容器运行时
4.1 安装 containerd
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| apt-get update apt-get install -y containerd
mkdir -p /etc/containerd containerd config default > /etc/containerd/config.toml
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
systemctl restart containerd systemctl enable containerd
|
五、安装 Kubernetes 组件
5.1 添加 Kubernetes 源
1 2 3 4 5 6 7
| curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /' | tee /etc/apt/sources.list.d/kubernetes.list
apt-get update
|
5.2 安装 kubeadm、kubelet、kubectl
1 2 3 4
| apt-get install -y kubelet=1.28.0-00 kubeadm=1.28.0-00 kubectl=1.28.0-00 apt-mark hold kubelet kubeadm kubectl
systemctl enable kubelet
|
六、初始化集群
6.1 准备 kubeadm 配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| apiVersion: kubeadm.k8s.io/v1beta3 kind: InitConfiguration localAPIEndpoint: advertiseAddress: 192.168.1.10 bindPort: 6443 nodeRegistration: criSocket: unix:///var/run/containerd/containerd.sock name: k8s-master-01 taints: - effect: NoSchedule key: node-role.kubernetes.io/master --- apiVersion: kubeadm.k8s.io/v1beta3 kind: ClusterConfiguration kubernetesVersion: v1.28.0 controlPlaneEndpoint: "k8s-api:6443" networking: podSubnet: "10.244.0.0/16" serviceSubnet: "10.96.0.0/12" dnsDomain: "cluster.local" --- apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration cgroupDriver: systemd
|
6.2 初始化第一个 Master 节点
1 2 3 4 5 6
| kubeadm init --config kubeadm-config.yaml --upload-certs
mkdir -p $HOME/.kube cp -i /etc/kubernetes/admin.conf $HOME/.kube/config chown $(id -u):$(id -g) $HOME/.kube/config
|
6.3 添加其他 Master 节点
1 2 3 4 5 6 7 8
| kubeadm init phase upload-certs --upload-certs
kubeadm join k8s-api:6443 --token <token> \ --discovery-token-ca-cert-hash sha256:<hash> \ --control-plane \ --certificate-key <key>
|
6.4 添加 Worker 节点
1 2
| kubeadm join k8s-api:6443 --token <token> \ --discovery-token-ca-cert-hash sha256:<hash>
|
七、部署网络插件
7.1 安装 Calico
1 2 3
| kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.0/manifests/tigera-operator.yaml
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.0/manifests/custom-resources.yaml
|
7.2 验证网络
1 2
| kubectl get pods -n calico-system kubectl get nodes
|
八、高可用配置
8.1 配置负载均衡(Keepalived + HAProxy)
1 2 3 4 5 6 7 8 9 10 11 12 13
| apt-get install -y keepalived haproxy
frontend k8s-api bind *:6443 default_backend k8s-masters
backend k8s-masters balance roundrobin server k8s-master-01 192.168.1.10:6443 check server k8s-master-02 192.168.1.11:6443 check server k8s-master-03 192.168.1.12:6443 check
|
8.2 配置 Keepalived
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| vrrp_script check_haproxy { script "killall -0 haproxy" interval 2 }
vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 virtual_ipaddresses { 192.168.1.100 } track_script { check_haproxy } }
|
九、验证集群状态
1 2 3 4 5 6 7 8 9
| kubectl get nodes -o wide
kubectl get pods -n kube-system
kubectl run nginx-test --image=nginx --restart=Never kubectl get pods
|
十、常见问题
10.1 Pod 无法启动
1 2 3 4 5
| kubectl describe pod <pod-name>
journalctl -u kubelet -f
|
10.2 网络不通
1 2 3 4 5
| kubectl get caliconodes
calicoctl node status
|
10.3 证书过期
1 2 3 4 5
| kubeadm certs check-expiration
kubeadm certs renew all
|
十一、总结
本文档详细介绍了使用 kubeadm 部署高可用 Kubernetes 集群的完整流程。生产环境部署时还需注意:
- 备份 etcd 数据:定期备份 /etc/kubernetes/pki/etcd
- 监控告警:部署 Prometheus + Grafana 监控集群
- 日志收集:部署 EFK/ELK 栈收集容器日志
- 安全加固:启用 RBAC、NetworkPolicy、PodSecurityPolicy
- 资源限制:为 Pod 设置 requests/limits
文档版本: v1.0
最后更新: 2026-03-06
适用版本: Kubernetes 1.28.x