本地部署kubernetes
手动启用 IPv4 数据包转发
#设置所需的 sysctl 参数,参数在重新启动后保持不变 cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.ipv4.ip_forward = 1 EOF #应用 sysctl 参数而不重新启动 sudo sysctl --system #验证 sysctl net.ipv4.ip_forward
默认情况下,Linux 内核不允许 IPv4 数据包在接口之间路由。
大多数 Kubernetes 集群网络实现都会更改此设置(如果需要)
禁用交换分区
free -h sudo swapoff -a sudo sed -i '/swap/s/\/swap/#\/swap/' /etc/fstab
配置/etc/hosts
192.168.10.20 cka-master 192.168.10.21 cka-node1 192.168.10.22 cka-node2
. 开放防火墙端口
Master 节点需开放:
6443(API Server) 2379-2380(etcd,仅单节点或独立部署时需要) 10250(kubelet API) 30000-32767(NodePort 服务)
Worker 节点需开放:
10250(kubelet API) 30000-32767(NodePort 服务)
设置NTP时间同步
# 启用 NTP 自动同步(依赖 systemd-timesyncd 服务) sudo timedatectl set-ntp true
安装 containerd
下载地址:https://github.com/containerd/containerd/releases/containerd-1.6.2-linux-amd64.tar.gz
解压到:
/usr/local
:$ tar Cxzvf /usr/local containerd-1.6.2-linux-amd64.tar.gz
配置containerd.service
下载地址:https://raw.githubusercontent.com/containerd/containerd/main/containerd.service
保存至:/usr/local/lib/systemd/system/containerd.service
#需手动创建containerd.service服务目录 sudo mkdir -p /usr/local/lib/systemd/system/
#重新加载和重启containerd服务 systemctl daemon-reload systemctl enable --now containerd
安装 runc
下载地址:https://github.com/opencontainers/runc/releases/runc/runc.amd64
安装路径:
/usr/local/sbin/runc
.sudo install -m 755 runc.amd64 /usr/local/sbin/runc
配置containerd
#生成containerd默认配置文件 sudo mkdir /etc/containerd/ containerd config default | sudo tee /etc/containerd/config.toml#修改 BinaryName 字段为实际路径(如 /usr/sbin/runc) grep BinaryName /etc/containerd/config.toml -n sudo vi /etc/containerd/config.toml +129 BinaryName = '/usr/local/sbin/runc'#配置cgroup驱动 cat <<EOF | sudo tee -a /etc/containerd/config.toml [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] SystemdCgroup = true EOF#替换阿里云镜像--用于kubenetes核心组件镜像拉取 grep sandbox /etc/containerd/config.toml sudo sed -i 's/registry.k8s.io/registry.aliyuncs.com\/google_containers/' /etc/containerd/config.tomlsudo systemctl restart containerd
安装kubernetes三件套
#下载地址: https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.32/deb/amd64/sudo dpkg -i kubernetes-cni_1.6.0-1.1_amd64.deb sudo dpkg -i kubeadm_1.32.2-1.1_amd64.deb sudo dpkg -i kubectl_1.32.2-1.1_amd64.debsudo dpkg -i cri-tools_1.32.0-1.1_amd64.deb sudo dpkg -i kubelet_1.32.2-1.1_amd64.deb && sudo apt --fix-broken install sudo dpkg -i kubelet_1.32.2-1.1_amd64.deb
配置cgroup驱动-kubelet
手动生成kubeadm默认配置文件
sudo kubeadm config print init-defaults > kubeadm-init.yaml
编辑 kubeadm-init.yaml, 配置 kubelet 的 cgroup 驱动
在
kubeadm-init.yaml
中设置:cat <<EOF | sudo tee -a kubeadm-init.yaml --- kind: KubeletConfiguration apiVersion: kubelet.config.k8s.io/v1beta1 cgroupDriver: systemd EOF注意:不要少漏了分界线“---”,否则回报错。
预先拉取组件镜像
# 显示当前配置要求拉取的镜像列表 kubeadm config images list#查看阿里云容器仓库镜像版本 sudo kubeadm config images list \ --image-repository=registry.aliyuncs.com/google_containers \ --kubernetes-version=v1.32.2 # 预先拉取 Kubernetes 集群初始化所需的组件镜像 sudo kubeadm config images pull \ --kubernetes-version=v1.32.2 \ --image-repository=registry.aliyuncs.com/google_containers # 查看拉取的镜像 sudo crictl images# 可能需提前创建配置文件 cat <<EOF | sudo tee /etc/crictl.yaml runtime-endpoint: "unix:///run/containerd/containerd.sock" image-endpoint: "unix:///run/containerd/containerd.sock" timeout: 10 debug: false EOF
执行初始化
sudo kubeadm init \ --pod-network-cidr=10.244.0.0/16 \ --apiserver-advertise-address=192.168.10.20 \ --image-repository=registry.aliyuncs.com/google_containers \ --kubernetes-version=v1.32.2 \ --upload-certs
或
#kubeadm-init.yaml配置参数 advertiseAddress: 192.168.10.20 # 控制平面节点对外通告的IP地址 imageRepository: registry.aliyuncs.com/google_containers # 镜像拉取仓库地址 serviceSubnet: 10.244.0.0/16 # 服务虚拟IP地址范围sudo kubeadm init --v=5 --config=kubeadm-init.yaml --upload-certs
初始化成功
# 初始化成功后,记录令牌信息: kubeadm join 192.168.10.20:6443 --token abcdef.0123456789abcdef \ --discovery-token-ca-cert-hash sha256:25393deeda6473b58b70cb5f8d7ebb5cbe9633f370815af643641d844aaf4a69 # 令牌过期重生tocken kubeadm token create --print-join-command# 获取证书哈希 openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | \ openssl rsa -pubin -outform der 2>/dev/null | \ openssl dgst -sha256 -hex | sed 's/^.* //'
配置权限
#要使非 root 用户可以运行 kubectl,请运行以下命令: mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
检验master节点的运行状态
# 检查控制平面组件状态 kubectl get componentstatus # 验证 API Server 可用性 curl -k https://localhost:6443/healthz# 检查端口监听状态 ss -tulnp | grep -E '6443|2379|2380|12250'# 查看节点就绪状态 kubectl get nodes -o wide# 检查控制平面 Pod 状态 kubectl get pods -n kube-system -l tier=control-plane# 查看组件日志 kubectl logs -n kube-system # 排查初始化容器问题 kubectl logs <pod-name> -c <init-container-name> # 集群配置完整性确认,检查节点 IP 与主机名映射是否正确 cat /etc/hosts# 检查证书与 kubeconfig 文件 ls /etc/kubernetes/pki # 确认证书文件(如 apiserver.crt)存在且未过期 kubectl config view # 验证 kubeconfig 中 API Server 地址与证书匹配
下载 calico.yaml
wget https://docs.projectcalico.org/manifests/calico.yaml
修改calico.yaml
# 替换镜像源为阿里云镜像 sed -i 's/docker.io/registry.cn-hangzhou.aliyuncs.com/g' calico.yaml # 替换镜像源为华为云镜像 sed -i 's/docker.io/swr.cn-north-4.myhuaweicloud.com\/ddn-k8s\/docker.io/g' calico.yaml# 修改 IP 池配置(示例:10.244.0.0/16) #修改Pod CIDR网络 - name: CALICO_IPV4POOL_CIDRvalue: "10.244.0.0/16"
部署 Calico
kubectl apply -f calico.yaml#查验安装是否成功,Calico 组件将正常启动,节点状态变为Ready get pods -n kube-system -l k8s-app=calico-node
执行 kubeadm join
sudo kubeadm join 192.168.10.20:6443 --token 5ealr1.c4ozr01xcwtjji8h --discovery-token-ca-cert-hash sha256:25393deeda6473b58b70cb5f8d7ebb5cbe9633f370815af643641d844aaf4a69
验证节点状态
kubectl get nodes#预期输出: NAME STATUS ROLES AGE VERSION master Ready control-plane 1h v1.27.3 worker1 Ready <none> 2m v1.27.3
常见问题排查
问题:节点状态为
NotReady
原因:CNI 插件未安装或配置错误。
解决:
kubectl describe node <NODE-NAME> # 查看详细错误信息 journalctl -u kubelet -f # 检查 kubelet 日志
问题: Token 过期
原因:默认 Token 有效期为 24 小时。
解决:
kubeadm token create --print-join-command # 生成新 Token
问题: 网络连接失败
原因:防火墙未开放端口或 Master IP 错误。
解决:
telnet <Master-IP> 6443 # 测试端口连通性
总结
完成以下步骤即可成功加入节点:
- Master 节点:保存
kubeadm join
命令、安装 CNI 插件、开放端口。- Worker 节点:安装运行时和工具、关闭 Swap、同步时间、执行
kubeadm join
。- 验证:检查节点状态,排查常见问题。
通过上述流程,工作节点将成功加入集群并参与任务调度。