本地部署kubernetes详细步骤

基本环境:

192.168.10.20 master ubuntu 24.04
192.168.10.21 node1 ubuntu 24.04
192.168.10.22 node2 ubuntu 24.04
kubernetes 版本:1.32.3

手动启用 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    master
192.168.10.21    node1
192.168.10.22    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.toml

sudo 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.deb

sudo 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_CIDR
  value: "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  # 测试端口连通性
    

总结

完成以下步骤即可成功加入节点:

  1. Master 节点:保存 kubeadm join 命令、安装 CNI 插件、开放端口。
  2. Worker 节点:安装运行时和工具、关闭 Swap、同步时间、执行 kubeadm join
  3. 验证:检查节点状态,排查常见问题。

通过上述流程,工作节点将成功加入集群并参与任务调度。

posted @ 2025-03-10 13:05  HoraceXie  阅读(302)  评论(0)    收藏  举报