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

# 永久关闭(注释 /etc/fstab 中的 swap 行)
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
# Ubuntu
apt-get update
apt-get install -y containerd

# 生成默认配置
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml

# 修改 SystemdCgroup = true
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
# 添加 GPG 密钥
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
# kubeadm-config.yaml
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

# 配置 kubectl
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
# 在第一个 master 上获取证书密钥
kubeadm init phase upload-certs --upload-certs

# 在其他 master 节点执行
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
# 所有 Master 节点安装
apt-get install -y keepalived haproxy

# 配置 HAProxy(/etc/haproxy/haproxy.cfg)
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
# /etc/keepalived/keepalived.conf
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
# 查看 Pod 事件
kubectl describe pod <pod-name>

# 查看 kubelet 日志
journalctl -u kubelet -f

10.2 网络不通

1
2
3
4
5
# 检查 Calico 节点
kubectl get caliconodes

# 检查 BGP 状态
calicoctl node status

10.3 证书过期

1
2
3
4
5
# 查看证书有效期
kubeadm certs check-expiration

# 续期证书
kubeadm certs renew all

十一、总结

本文档详细介绍了使用 kubeadm 部署高可用 Kubernetes 集群的完整流程。生产环境部署时还需注意:

  1. 备份 etcd 数据:定期备份 /etc/kubernetes/pki/etcd
  2. 监控告警:部署 Prometheus + Grafana 监控集群
  3. 日志收集:部署 EFK/ELK 栈收集容器日志
  4. 安全加固:启用 RBAC、NetworkPolicy、PodSecurityPolicy
  5. 资源限制:为 Pod 设置 requests/limits

文档版本: v1.0
最后更新: 2026-03-06
适用版本: Kubernetes 1.28.x