1、报错-- the number of available CPUs 1 is less than the required 2
解决方法:如图中报错,至少需要2核CPU,增加CPU核数
2、 报错kubelet service is not enabled
###解决方法:
kubelet没有开启开机自启动,按照提示运行:systemctl enable kubelet.service
3、this version of kubeadm only supports deploying clusters with the control planeversion >= 1.17.0. Current version: V1.10.2
###解决方法:
上图可以看出,此kubeadm版本过高导致的,安装相应支持版本的kubeadm
4、validated versions: 24.0.7. Latest validated version: 19.03
如上报错,k8s支持的docker版本最高19.03版本,现在docker是24.0.7,版本过高,运行下述,卸载现有版本,重新暗账19.03或者更低版本
###卸载现有docker
yum -y remove docker-ce
##安装19.03.9指定版本号docker
yum -y install ddocker-ce-19.03.9
##上述安装后,重启docker
systemctl restart docker
systemctl enable docker
5、Error response from daemon: manifest for gotok8s/kube-proxy:v1.14.10 not found
问题原因:可以看到上述报错,是因为gotok8s这个dockerhub中的gotok8s仓库中没有对应版本的包的问题
解决方法:可以找一下其他仓库中是否有对应版本
参考:https://www.freesion.com/article/20831079183/
6、node节点执行kubeadm join命令后,卡主,一直无返回
参考:https://blog.csdn.net/qq_62242833/article/details/124757455
是因为我虚拟机,用的两个网卡,master端直接运行kubeadm init拉取镜像的话,总是会生成第一张网卡对应的kubeadm join命令,在node节点运行的话,无反应;
所以master端需要运行kubeadm init时指定网卡IP,可以用下述命令
kubeadm init --pod-network-cidr=10.244.0.0/16 #网卡插件的 网络范围 --apiserver-advertise-address=172.30.14.236 ###master 的 ip 地址
会生成一段kubeadm join命令:
7、node节点运行kubeadm join命令报错: error execution phase preflight: couldn't validate the identity of the API Server: expected a 32 byte SHA-256 hash, found 31 bytes
原因: kubeadm join中 sha256值不对导致的
解决方法:
查看实际的 sha256
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
在node节点中执行kubeadm join命令中,修改sha256为上述查出的sha256就OK
8、node节点运行kubeadm join命令报错:error execution phase preflight: couldn't validate the identity of the API Server: abort connecting to API servers after timeout of 5m0s
9、添加node成功,但是在master运行kubectl get nodes 看不到子节点,如下图,只能看到localhosts
##问题原因:
因为master和node1、node2节点的主机名都是localhost,修改节点主机名
10、kubelet重启有问题,如下图:
直接 systemctl restart kubelet重启的话,会报错,如下图:
根据上图报错提示,可以看到需要先systemctl daemon-reload重新加载配置文件,再次systemctl restart kubelet重启,启动成功
11、重启服务器,kubelet服务挂掉,重启启动不来
问题原因+解决方法:
服务启动不了,看到上述status中指定配置文件位置,看情况是配置文件问题,找到对应配置文件,重命名配置文件
systemctl daemon-reload ##重新加载配置
systemctl restart kubelet ##重启kubelet
如下图可以看到启动成功
12、执行kubeadm init初始化主节点时,报docker版本过高,不支持
解决方法:那就卸载docker重新安装支持的版本,如图最后支持的版本为18.09版本,那就重新安装此版本docker
1、首先卸载旧版:
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
有时上述卸载不下来,可用下述命令卸载:
yum -y remove docker-ce
2、安装依赖包:
yum install -y yum-utils device-mapper-persistent-data lvm2
3、设置安装源(阿里云):
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4、启用测试库(可选):
yum-config-manager --enable docker-ce-edge
yum-config-manager --enable docker-ce-test
5、安装:
yum makecache fast
##根据我整套部署,目前最后支持的为18.09版本docker,直接yum install -y docker-ce安装的话,会默认安装最新版本,不支持,所以用下边语句直接安装支持的18.09版本docker
yum install -y docker-ce-18.09.0 docker-ce-cli-18.09.0 containerd.io
6、启动:
systemctl start docker开机自启
systemctl enable dockerDocker建议配置阿里云镜像加
按照上述重新安装之后,OK
13、从docker拉取镜像时,报错:
解决方法:我是写的一个脚本,用来拉取镜像,并修改名称,看到docker中jiamiao442仓库拉取镜像有问题,dockerhub上查看jiamiao442是有相应版本镜像的,重新编辑脚本,重新保存,重新运行,OK
14、kubelet一直启动不起来,查看错误状态码为 255
问题原因:
journalctl -xefu kubelet ##查看kubelet的启动日志
根据上述报错,查看百度查看,说是重启服务器可以解决问题,我重启了服务器,再次启动kubelet,查看启动日志报错:
查看上述报错,根据报错,百度查看下述连接:
https://blog.csdn.net/qqhappy8/article/details/107723158
然后找到下面连接:
https://coding-stream-of-consciousness.com/2020/01/15/minikube-start-failure-streaming-server-stopped-cannot-assign-requested-address/
检查该节点的/etc/hosts,确实发现没有localhost的解析文件了。采用了 echo “1.2.3.4 a.b.com” > /etc/hosts的操作,导致/etc/hosts中localhost解析被清空。
解决方法: 重新编辑hosts文件,localhost加上去
再次重启,OK
15、
16、报错:安装Kubernetes Dashboard 报错mapping values are not allowed in this context
报错原因+解决方法:
上述报文件第232行有问题,查看文件,发现文件内容是html格式,不是对应的yaml文件,发现是文件未下载成功导致的问题
重新下载文件,查看文件内容为正常格式,重新kubectl apply -f 引用文件,OK 如下图:
17、
18、
k8s的master节点部署后,检查pod状态一直显示NotReady,查看日志:journalctl -xefu kubelet
看到上述截图报错
问题原因:服务器内存资源不足导致的
解决方法:
在/etc/sysctl.conf中加入:
vm.zone_reclaim_mode = 1
然后执行sysctl -p
上述参数的作用就是告诉内核,当内存不够时,就直接回收buffer/cache
上述配置后,重新查看pod状态,可以看到已经ready
19、
k8s初始化报错如上,这种是因为拉取的阿里镜像,和需要的镜像名不同导致初始化报错:
给docker打tag,修改镜像名:
如上图,打完tag后,可以看到新镜像
重新运行k8s初始化命令,OK:
初始化成功,如下图,生成对应token:
20、k8s初始化,报错:running with swap on is not supported. Please disable swap
根据提示,关闭swap,重试,OK
###关闭swap
swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
21、 k8s初始化包镜像问题
如下截图,可以看到从阿里云拉取的镜像和k8s需要的镜像名不一样,需要打tag
[root@node1 ~]# docker tag registry.aliyuncs.com/google_containers/kube-proxy:v1.20.5 k8s.gcr.io/kube-proxy:v1.20.5
[root@node1 ~]# docker tag registry.aliyuncs.com/google_containers/kube-apiserver:v1.20.5 k8s.gcr.io/kube-apiserver:v1.20.5
[root@node1 ~]# docker tag registry.aliyuncs.com/google_containers/kube-controller-manager:v1.20.5 k8s.gcr.io/kube-controller-manager:v1.20.5
[root@node1 ~]# docker tag registry.aliyuncs.com/google_containers/kube-scheduler:v1.20.5 k8s.gcr.io/kube-scheduler:v1.20.5
[root@node1 ~]# docker tag registry.aliyuncs.com/google_containers/etcd:3.4.13-0 k8s.gcr.io/etcd:3.4.13-0
[root@node1 ~]# docker tag registry.aliyuncs.com/google_containers/coredns:1.7.0 k8s.gcr.io/coredns:1.7.0
[root@node1 ~]# docker tag registry.aliyuncs.com/google_containers/pause:3.2 k8s.gcr.io/pause:3.2
如下,打完tag后镜像
重新初始化,OK
22、查看k8s节点状态,报访问拒绝
解决方法:
配置k8s环境变量
##文件赋权
chmod 666 /etc/kubernetes/admin.conf
##k8s环境变量配置
cat > /etc/profile.d/k8s.sh <<EOF
#/bin/bash
export KUBECONFIG=/etc/kubernetes/admin.conf
EOF
##配置环境变量生效
source /etc/profile.d/k8s.sh
上述操作后,重新运行,OK
23、k8s查看master节点状态显示为NotReady状态
###查看k8s实时日志
journalctl -xefu kubelet
如下报错,显示未安装CNI网络插件
安装CNI网络插件
###下载calico插件的yaml
wget https://docs.projectcalico.org/manifests/calico.yaml
上述下载可能会报认证问题:
可以web访问上述连接地址,手动复制文件到服务器上(注意文件名保持不变)
---修改calico.yaml文件
下述要和初始化的时候kubeadm init中pod-network-cidr保持一致
--新增自动检测此主机的IPv4地址的方法配置
##应用
kubectl apply -f calico.yaml
上述CNI插件安装完后,查看k8s--master节点状态还是NotReady
重启docker(重启docker,同时会重启docker镜像,k8s重启,刷新状态)
systemctl restart docker
再次查看k8s --master节点状态Ready
24、k8s---master节点状态一直显示NotReady ,查看日志,报JSON进程突然意外结束
问题原因:服务器内存资源不足导致的
解决方法:
在/etc/sysctl.conf中加入:
vm.zone_reclaim_mode = 1
然后执行sysctl -p
上述参数的作用就是告诉内核,当内存不够时,就直接回收buffer/cache
上述配置后,重新查看pod状态,可以看到已经ready
25、node节点,join到master节点报错-------- x509: certificate has expired or is not yet valid
报错原因:
node节点时间和master节点时间不一致导致
解决方法:
ntpdate同步服务器时间到北京时间
###安装ntp
yum -y install ntp
##同步时间
ntpdate cn.pool.ntp.org
##查看时间,确认是否同步成功
date
26、如何在k8s的master节点的kubeadm 的join语句:
kubeadm token create --print-join-command
27、k8s查看master节点状态,报“Unable to connect to the server: net/http: TLS handshake timeout”异常问题处理
问题原因:
服务器时间未同步问题导致(因用的虚拟机,恢复快照,导致服务器时间异常)
解决方法:
ntp时间同步
ntpdate同步服务器时间到北京时间
###安装ntp
yum -y install ntp
##同步时间
ntpdate cn.pool.ntp.org
##查看时间,确认是否同步成功
date
28、k8s新加入node节点,运行kubeadm join命令报错:“unable to fetch the kubeadm-config ConfigMap: failed to get config map: Unauthorized”
问题原因:kubeadm join的token过期导致的报错(k8s的master节点初始化后,发现时间不一致,同步的时间,时间同步后,token过期--此token是24小时内有效的)
解决方法:
##重新生成token (注意是在master节点运行)
kubeadm token create
修改token后,重新运行kubeadm join语句,node节点新增成功
29、k8s中删除node节点
###在主节点驱逐该要删除node节点,如下命令,驱逐node2节点
kubectl drain node2 --delete-local-data --force --ignore-daemonsets
##上述驱逐后,节点状态改变,删除节点node2
kubectl delete node node2
##下述在要删的节点的服务器操作,清空集群信息
##重置k8s
kubeadm reset
##删除残留的文件
rm -rfv /etc/kubernetes/*
##清除iptables或者ipvs的配置
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
ipvsadm --clear
###注,如果是删除master节点,除了要跟上述一样要清数据外,还要用户目录下的.kube文件
rm -rf ~/.kube
30、————完整的k8s卸载
##首先清理运行到k8s集群中的pod
kubectl delete node --all
##使用脚本停止所有k8s服务
systemctl stop kube-apiserver kube-controller-manager kubectl kubelet etcd kube-proxy kube-scheduler;
##使用命令卸载k8s
kubeadm reset -f
##卸载k8s相关程序
yum -y remove kube*
##删除相关的配置文件
modprobe -r ipip
lsmod
##然后手动删除配置文件和flannel网络配置和flannel网口
rm -rf /etc/cni
rm -rf /root/.kube
##删除cni网络
ifconfig cni0 down
ip link delete cni0
ifconfig flannel.1 down
ip link delete flannel.1
##删除残留的配置文件
rm -rf ~/.kube/
rm -rf /etc/kubernetes/
rm -rf /etc/systemd/system/kubelet.service.d
rm -rf /etc/systemd/system/kubelet.service
rm -rf /etc/systemd/system/multi-user.target.wants/kubelet.service
rm -rf /var/lib/kubelet
rm -rf /usr/libexec/kubernetes/kubelet-plugins
rm -rf /usr/bin/kube*
rm -rf /opt/cni
rm -rf /var/lib/etcd
rm -rf /var/etcd
##更新镜像
yum clean all
yum makecache