kubeadm部署K8S,安装calico网络后,部分节点状态始终NotReady 排查过程 (是节点系统时间错误,导致下载镜像报证书错误)

#查看node状态

kubectl get nodes

#k8s-master节点始终NodtReady

#查看pod状态,发现有calico的pod状态Init:ImagePullBackOff

kubectl get pods --all-namespaces

#删除那台pod查看能否正常

kubectl delete pod calico-node-x2bfz  -n kube-system

#依然下载镜像失败

#上问题节点docker查看calico的容器状态

docker ps |grep calico             #查找容器

docker logs 问题容器ID    #查看容器状态

#报错,是系统时间和实际时间不同导致“证书过期无效错误”

x509: certificate has expired or is not yet valid

#解决同步系统时间解决

yum install ntpdate
ntpdate cn.pool.ntp.org

<think>嗯,用户需要详细步骤在CentOS7上部署Kubernetes 1.27版本,包含一个master节点和两个worker节点。首先,我需要确认各个组件的版本兼容性,尤其是kubeadm、kubectl、kubelet和容器运行时。用户指定了使用1.27版本,所以需要确保这些组件的版本一致,同时容器运行时比如containerd或者Docker也需要兼容。 接下来,我得考虑CentOS7的环境准备。可能需要的步骤包括关闭防火墙、禁用SELinux、配置主机名解析、设置系统参数如bridge-nf-call-iptables等。还有可能需要配置yum源,安装必要的工具,比如socat、conntrack等。 然后,安装容器运行时。用户没有指定,但常见的可能是containerd。需要安装containerd并配置其systemd cgroup驱动,因为Kubernetes 1.27推荐使用systemd作为cgroup驱动。需要生成containerd的配置文件,启用必要的插件,并重启服务。 接下来是安装kubeadm、kubelet、kubectl。需要添加Kubernetes的yum源,指定版本为1.27,然后安装安装完成后,设置kubelet开机启动,但暂时不启动,因为需要先初始化集群。 初始化master节点时,使用kubeadm init命令,指定pod网络CIDR,比如使用Calico网络的默认CIDR。需要生成kubeadm的配置文件,配置cgroupDriver为systemd,并指定kubernetesVersion为1.27.0。初始化成功后,配置kubectl的配置文件,安装Calico CNI插件。 然后,加入worker节点。用户有两个worker节点,需要在每个节点上执行kubeadm join命令,命令中的token和ca-cert-hash需要从master节点的初始化输出中获取。如果有token过期的问题,可能需要重新生成token。 最后,验证集群状态,确认所有节点状态为Ready,并测试集群功能,比如部署一个测试应用,检查pod调度情况。 需要注意的几点:版本兼容性、cgroup驱动配置、网络插件的选择、节点之间的通信(如防火墙是否关闭)、时间同步等。另外,可能需要处理初始化过程中可能出现的错误,比如镜像拉取失败,需要配置镜像仓库或者提前拉取镜像。 可能用户遇到的问题包括:初始化时cgroup驱动不一致导致的问题,kubelet启动失败,网络插件配置错误导致节点NotReady,以及节点加入时的认证问题。需要确保每一步的配置正确,日志查看(如journalctl -xeu kubelet)来排查问题。</think>以下是基于CentOS7部署Kubernetes 1.27版本的详细步骤(1个Master+2个Worker): --- ### 一、所有节点基础配置(Master+Worker) ```bash # 关闭防火墙 systemctl stop firewalld systemctl disable firewalld # 禁用SELinux setenforce 0 sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config # 关闭swap swapoff -a sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab # 配置hosts解析(所有节点执行) cat <<EOF >> /etc/hosts <master-ip> k8s-master <worker1-ip> k8s-worker1 <worker2-ip> k8s-worker2 EOF # 配置内核参数 cat <<EOF > /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 EOF sysctl --system # 安装依赖工具 yum install -y conntrack socat ebtables ipset ``` --- ### 二、安装容器运行时(所有节点) 推荐使用containerd 1.6+: ```bash # 安装containerd yum install -y yum-utils yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum install -y containerd.io-1.6.21 # 生成配置文件 containerd config default > /etc/containerd/config.toml # 修改cgroup驱动为systemd sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml # 启动服务 systemctl enable containerd systemctl restart containerd ``` --- ### 三、安装Kubernetes组件(所有节点) ```bash # 配置yum源 cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://pkgs.k8s.io/core:/stable:/v1.27/rpm/ enabled=1 gpgcheck=1 gpgkey=https://pkgs.k8s.io/core:/stable:/v1.27/rpm/repodata/repomd.xml.key EOF # 安装指定版本 yum install -y kubelet-1.27.0-0 kubeadm-1.27.0-0 kubectl-1.27.0-0 # 设置开机启动 systemctl enable kubelet ``` --- ### 四、初始化Master节点 ```bash # 生成初始化配置文件 kubeadm config print init-defaults > kubeadm-init.yaml # 修改关键参数 sed -i 's/advertiseAddress: 1.2.3.4/advertiseAddress: <master-ip>/g' kubeadm-init.yaml sed -i 's/name: node/name: k8s-master/g' kubeadm-init.yaml sed -i '/clusterConfiguration:/a \ imageRepository: registry.aliyuncs.com/google_containers' kubeadm-init.yaml sed -i '/clusterConfiguration:/a \ kubernetesVersion: v1.27.0' kubeadm-init.yaml sed -i '/controllerManager:/a \ extraArgs:\n node-cidr-mask-size: "24"' kubeadm-init.yaml sed -i '/networking:/a \ podSubnet: 10.244.0.0/16' kubeadm-init.yaml # 适配flannel网络 # 执行初始化 kubeadm init --config=kubeadm-init.yaml # 配置kubectl mkdir -p $HOME/.kube cp -i /etc/kubernetes/admin.conf $HOME/.kube/config chown $(id -u):$(id -g) $HOME/.kube/config ``` --- ### 五、安装网络插件(Master节点) 以Calico为例: ```bash kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.1/manifests/calico.yaml ``` --- ### 六、Worker节点加入集群 在Worker节点执行Master初始化时输出的join命令: ```bash kubeadm join <master-ip>:6443 --token <token> \ --discovery-token-ca-cert-hash sha256:<hash> ``` --- ### 七、验证集群 ```bash # 查看节点状态 kubectl get nodes -o wide # 查看组件状态 kubectl get pods -n kube-system # 测试DNS解析 kubectl run -it --rm --image=busybox:1.28 test-dns -- nslookup kubernetes.default ``` --- ### 关键注意点: 1. **版本兼容性** 验证containerd与K8s 1.27版本兼容性,推荐containerd >=1.6.21 2. **镜像加速** 如果遇到镜像拉取失败,可手动拉取: ```bash kubeadm config images pull --image-repository=registry.aliyuncs.com/google_containers ``` 3. **节点NotReady排查** 检查网络插件是否安装成功,查看kubelet日志: ```bash journalctl -xeu kubelet ``` 4. **证书续期** 若token过期,在Master节点生成新token: ```bash kubeadm token create --print-join-command ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

io_py

你的鼓励是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值