# kubeadm 安装 K8s 集群 ## 场景 内网要跑一套 K8s,用 kubeadm 搭一个一主两从的集群。 ## 前置条件 - 3 台 Linux(2C4G 起),主机名能互相解析 - 关闭 swap - 时间同步 - 能访问镜像源(或提前 import 镜像) ## 配置 所有节点: ```bash 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 ``` 主节点: ```bash 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 ``` 从节点加入: ```bash kubeadm join 10.0.0.11:6443 --token xxx --discovery-token-ca-cert-hash sha256:xxx ``` ## 验证 ```bash kubectl get nodes kubectl get pods -A kubectl cluster-info ``` 三个节点都 `Ready`,`kube-system` 全 `Running` 才算好。 ## 回滚 ```bash 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-`。 - 节点时间不同步,证书校验和日志时间都会乱。