欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

[k8s部署踩过的坑]

程序员文章站 2024-03-12 17:26:20
...

系统环境

系统版本 docker版本 role ip地址

CentOS8.4.2105

(Linux version 4.18.0-348.xx

Red Hat 8.5.0-4)

20.10.12

k8s-master

192.168.100.129
k8s-node1 192.168.100.130
k8s-node2 192.168.100.131

kubernetes组件

组件 版本
kubeadm 1.23.1-0
kubectl 1.23.1-0
kubelet 1.23.1-0

docker镜像

REPOSITORY TAG IMAGE ID SIZE
registry.aliyuncs.com/google_containers/kube-apiserver     v1.23.1   b6d7abedde39 135 MB
registry.aliyuncs.com/google_containers/kube-proxy v1.23.1 b46c42588d51 112MB
registry.aliyuncs.com/google_containers/kube-controller-manager v1.23.1 f51846a4fd28 125MB
registry.aliyuncs.com/google_containers/kube-scheduler v1.23.1 71d575efe628 53.5MB
registry.aliyuncs.com/google_containers/etcd 3.5.1-0 25f8c7f3da61 293MB
registry.aliyuncs.com/google_containers/coredns v1.8.6 a4ca41631cc7 46.8MB
registry.aliyuncs.com/google_containers/pause 3.6 6270bb605e12 683 kB

发现在master上init的时候出现以下问题

kubeadm init \
--apiserver-advertise-address=192.168.100.129 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.23.1 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16

# service-cidr和pod-network-cidr需要和其他机器IP不冲突皆可

部署的时候碰到好几个问题还未解决,并且每次init之前都会再reset一下,具体见4.4.2:

1. error execution phase wait-control-plane: couldn't initialize a Kubernetes cluster

To see the stack trace of this error execute with --v=5 or higher

尝试重启下kubelet

systemctl restart kubelet && systemctl enable kubelet

systemctl status kubelet

如果重启kubelet失败,则可能是swap交换分区还开启的原因,再次关闭swapoff -a然后重复上面步骤

2. 我这里初始化一直报错,目前还未解决,后续再更新

[kubelet-check] Initial timeout of 40s passed.
[kubelet-check] It seems like the kubelet isn't running or healthy.
[kubelet-check] The HTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed with error: Get "http://localhost:10248/healthz": dial tcp [::1]:10248: connect: connection refused.

试过以下办法: 

1. 打开/usr/lib/systemd/system/docker.service,然后将代码Environment="NO_PROXY=127.0.0.1/8, 127.0.0.1/16",一定要放在[Service] Type=notify的后面,然后重启daemon和docker,然后重启

 sudo systemctl daemon-reload
 sudo systemctl restart docker
 sudo systemctl restart kubelet

无效

2. 在 usr/docker/daemon.json当中添加以下内容, docker的默认驱动为cgroupfs,同步docker驱动到kubelet的默认驱动systemd

{
    "exec-opts": ["native.cgroupdriver=systemd"]
}

{
    "exec-opts": ["native.cgroupdriver=systemd"],
    "log-driver": "json-file",
    "log-opts": {
      "max-size": "100m"
    },
    "storage-driver": "overlay2"
}

然后重启

 sudo systemctl daemon-reload
 sudo systemctl restart docker
 sudo systemctl restart kubelet

依然无效

3. 有人说swapoff永久关闭,但是我一直都是永久的,重启系统也未起效

sudo swapoff -a
sudo sed -i '/ swap / s/^/#/' /etc/fstab

4. Init的时候增加一个参数--ignore-preflight-errors=Swap

kubeadm init \
--apiserver-advertise-address=192.168.100.129 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.23.1 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
--ignore-preflight-errors=Swap

依然无效

猜测是系统版本,docker版本和OS+k8s版本不兼容导致,正常情况下以上几种方法能解决大部分问题

后续,将版本切换至1.21.1之后,init成功了,只能后续再调查下了