记录总结一下自己在学习过程中遇到过的一些问题


问题一:user is not running as root
[ERROR IsPrivilegedUser]: user is not running as root
解决方法:
sudo su
问题二:The recommended driver is "systemd"
[WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver.
The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/
分析问题:
docker info | grep Cgroup
官方教程:
https://kubernetes.io/docs/setup/production-environment/container-runtimes/
解决方法一:
修改或者新增
vim /etc/docker/daemon.json
内容如下所示:
{
    "exec-opts": ["native.cgroupdriver=systemd"]
}

重启docker:systemctl restart docker
docker info | grep Cgroup

解决方法二:
vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --exec-opt native.cgroupdriver=systemd
systemctl daemon-reload && systemctl restart docker

问题三:the number of available CPUs 1 is less than the required 2
[ERROR NumCPU]: the number of available CPUs 1 is less than the required 2
解决方法:
增加cpu数量为2

问题四:running with swap on is not supported. Please disable swap
[ERROR Swap]: running with swap on is not supported. Please disable swap
解决方法:
swapoff -a
vim /etc/fstab注释掉最后一行
reboot

问题五
[WARNING SystemVerification]: 
this Docker version is not on the list of validated versions: 20.10.2. Latest validated version: 19.03
解决办法:
修改docker的版本,安装已存的最新版本19.03


问题六
Unable to connect to the server: x509: certificate signed by unknown authority
解决办法:
rm -rf $HOME/.kube
然后重新配置kubelet环境:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

问题七
集群搭建完成后,手贱修改了所有node的hostname,所有node状态都是NotReady怎么办?

切记: k8s安装完成后不要轻易修改hostname;否则集群的所有node状态都变为notReady;
解决办法:
第一步:所有节点执行kubeadm reset

第二步:master节点进行环境变量设置
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

第三步:重新搭建集群
To run kubeadm init again, you must first tear down the cluster:
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/#tear-down
remove the node:

kubeadm reset
kubectl drain <node name> --delete-local-data --force --ignore-daemonsets
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
ipvsadm -C
kubectl delete node <node name>


问题八:work node的Role为null
问题描述:
kubectl get nodes的时候,发现work node的Role为null,拍错很不方便?
解决办法:
k8s设置node节点Role属性:
在 kubeadm 引导的 k8s 集群中, 查看 nodes 信息时, ROLES 一列标记了 master 节点的身份, 其他节点默认没有标记
我们可以手动给任意 node 设置 ROLES,原理就是给 node 打标签, 只不过是特殊的标签;
官方教程:
https://kubernetes.io/docs/reference/setup-tools/kubeadm/implementation-details/

kubectl label node k8s-node1 node-role.kubernetes.io/worker=worker

问题九
问题描述:
很久之前的cluster要加入新的work node,不记得之前的join命令和token怎么办?
解决办法:
直接生成新的join语句:
kubeadm token create --print-join-command


问题十
跟这个问题类似:https://www.jianshu.com/p/ed1ae8443fff
问题描述:
kubectl get pod,svc -o wide命令查看pod的ip后,没有办法curl或者ping通
分析问题

原因是因为,我是用的VirtualBox虚拟化出了两台 ubuntu 主机搭建的 k8s ,详见 virtualbox 虚拟机组网 。具体可以参考:https://www.jianshu.com/p/e6684182471b
在组网的过程中,我采用了双网卡方案,网卡1使用NAT地址转换用来访问互联网,网卡2使用Host-only来实现虚拟机互相访问。
flannel默认使用了网卡1的 ip 地址,而网卡1的NAT地址转换是无法访问其他虚拟机的,从而导致的问题的产生。

解决方法:
因为是flannel使用的默认网卡1导致了这个问题的产生,所以我们需要使用--iface参数手动指定它使用网卡2来进行通信,这就需要修改flannel的配置文件:
sudo kubectl edit daemonset kube-flannel-ds  -n kube-system
如果你执行后出现了Error from server (NotFound): daemonsets.extensions "kube-flannel-ds-amd64" not found的问题,按照下列步骤找到其配置文件名称:
kubectl get po -n kube-system
kubectl get po -n kube-system kube-flannel-ds-xxxxxx -o yaml
在输出的内容开头可以找到ownerReferences字段,其下的name属性就是要找的配置文件名
sudo kubectl edit daemonset kube-flannel-ds  -n kube-system
spec.template.spec.containers[0].args
添加属性
- args:
  - --ip-masq
  - --kube-subnet-mgr
  - --iface=enp0s8
 

使用kubectl delete pod -n kube-system <pod名1> <pod名2>
把所有的flannel删除即可。k8s 会自动按照你修改好的yaml配置重建flannel。

kubectl get pod -n kube-system | grep flannel就发现所有flannel都已经重启成功了

Logo

开源、云原生的融合云平台

更多推荐