kubeadm 安装 K8s 集群
场景
内网要跑一套 K8s,用 kubeadm 搭一个一主两从的集群。
前置条件
- 3 台 Linux(2C4G 起),主机名能互相解析
- 关闭 swap
- 时间同步
- 能访问镜像源(或提前 import 镜像)
配置
所有节点:
swapoff -a
sed -i '/swap/s/^/#/' /etc/fstab
cat >/etc/modules-load.d/k8s.conf <<'EOF'
overlay
br_netfilter
EOF
modprobe overlay && modprobe br_netfilter
cat >/etc/sysctl.d/k8s.conf <<'EOF'
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
sysctl --system
# 装容器运行时
dnf install -y containerd
containerd config default > /etc/containerd/config.toml
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
systemctl enable --now containerd
# 装 kubeadm / kubelet / kubectl
cat >/etc/yum.repos.d/kubernetes.repo <<'EOF'
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
EOF
dnf install -y kubelet kubeadm kubectl
systemctl enable --now kubelet
主节点:
kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository registry.aliyuncs.com/google_containers
mkdir -p $HOME/.kube
cp /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
# 装 CNI
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
从节点加入:
kubeadm join 10.0.0.11:6443 --token xxx --discovery-token-ca-cert-hash sha256:xxx
验证
kubectl get nodes
kubectl get pods -A
kubectl cluster-info
三个节点都 Ready,kube-system 全 Running 才算好。
回滚
kubeadm reset -f
rm -rf /etc/cni/net.d /var/lib/cni /root/.kube
坑
- swap 没关,kubelet 起不来。
- 主机名不一致或者解析不到,join 会失败。
- 镜像拉不到,
kubeadm init卡在PullImage。 - CNI 没装,节点一直是
NotReady。 - 只有主节点时 Pod 起不来,要
kubectl taint nodes --all node-role.kubernetes.io/control-plane-。 - 节点时间不同步,证书校验和日志时间都会乱。