第一步:系统初始化
K8s 对系统环境要求很严,必须关闭 Swap 和配置内核转发。
- 关闭 Swap
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab
- 配置内核转发 (让流量可以在 Pod 之间转发)
cat <<EOF | tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
modprobe overlay
modprobe br_netfilter
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
EOF
sysctl --system
第二步:安装 Containerd(容器运行时)
K8s 现在标准推荐 Containerd。
-
安装 containerd
apt-get update && apt-get install -y containerd -
生成默认配置
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
-
开启 SystemdCgroup (K8s 1.24+ 强制要求)
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml -
配置 Containerd 代理(根据实际情况替换)
mkdir -p /etc/systemd/system/containerd.service.d
cat <<EOF | tee /etc/systemd/system/containerd.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://192.168.1.10:7890"
Environment="HTTPS_PROXY=http://192.168.1.10:7890"
Environment="NO_PROXY=localhost,127.0.0.1,10.96.0.0/12,192.168.0.0/16,.svc,.cluster.local"
EOF
- 重启使其生效
systemctl daemon-reload
systemctl restart containerd
第三步:安装 Kubeadm
-
安装依赖
apt-get install -y apt-transport-https ca-certificates curl gpg -
下载 Google Cloud 公钥
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg -
添加官方 apt 源
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 -
安装工具 (锁定在 1.28.2 版本)
apt-get update
apt-get install -y kubelet=1.28.2-1.1 kubeadm=1.28.2-1.1 kubectl=1.28.2-1.1
apt-mark hold kubelet kubeadm kubectl
第四步:初始化集群
- 获取本机 IP
export APISERVER_IP=$(hostname -I | awk '{print $1}')
2. 初始化
kubeadm init \
--apiserver-advertise-address=${APISERVER_IP} \
--kubernetes-version v1.28.2 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=192.168.0.0/16
第五步:收尾工作 (配置 kubectl + 网络 + 去污点)
- 配置 kubectl 权限
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
- 安装 Calico 网络
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/tigera-operator.yaml
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/custom-resources.yaml
- 解除单机限制 (允许 Master 跑业务 Pod)
kubectl taint nodes --all node-role.kubernetes.io/control-plane-
验证时刻
kubectl get nodes
kubectl get pods -A