Oamc

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-。
  • 节点时间不同步,证书校验和日志时间都会乱。