在 Ubuntu 上使用 kubeadm 搭建 Kubernetes 集群
一 环境准备与前置检查
sudo swapoff -a 并注释 /etc/fstab 中的 swap 行,避免 kubelet 异常。sudo hostnamectl set-hostname master(主节点),worker1/worker2(工作节点)192.168.1.100 master192.168.1.101 worker1192.168.1.102 worker2br_netfilter、overlay 模块并开启转发:
sudo modprobe br_netfilterecho 1 | sudo tee /proc/sys/net/bridge/bridge-nf-call-iptablesecho 1 | sudo tee /proc/sys/net/ipv4/ip_forwardsudo apt-get update && sudo apt-get install -y docker.io{ "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2" }sudo systemctl enable --now docker二 安装 kubeadm kubelet kubectl
sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curlcurl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor | sudo tee /usr/share/keyrings/kubernetes-archive-keyring.gpg >/dev/nullecho "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.listsudo apt-get update && sudo apt-get install -y kubelet kubeadm kubectlsudo apt-mark hold kubelet kubeadm kubectl(防止被系统升级干扰)sudo systemctl enable --now kubelet三 初始化控制平面与配置 kubectl
sudo kubeadm init --pod-network-cidr=192.168.0.0/16mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/configkubectl apply -f https://docs.projectcalico.org/manifests/calico.yamlkubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.ymlkubectl get nodes(首次可能需要等待网络插件就绪)四 加入工作节点与验证
sudo kubeadm join 192.168.1.100:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>sudo kubeadm token create --print-join-commandkubectl get nodes,所有节点状态应为 Ready。kubectl create deployment nginx --image=nginxkubectl expose deployment nginx --port=80 --type=NodePortkubectl get svc nginx(获取 NodePort 后在浏览器访问 http://<任意节点IP>:<NodePort>)五 常见问题与排查要点
docker pull 所需镜像。sudo kubeadm reset -f,并清理 /etc/cni/net.d、/var/lib/kubelet 等残留目录后再试。