问题记录

1.pod一直处于terminating状态
可使用kubectl中的强制删除命令

# 删除POD
kubectl delete pod [pod name] --force --grace-period=0 -n [namespace]
 
# 删除NAMESPACE
kubectl delete namespace NAMESPACENAME --force --grace-period=0

2.node怎么重新加入集群?
master操作

kubectl get node  #列出所有nodes
kubectl delete node node3  #删除节点

node操作

kubeadm reset  #重新加入 在删除的node3对应的服务器上执行:

使节点加入集群的命令格式是kubeadm join --token :<master-port(6443)> --discovery-token-ca-cert-hash sha256:
token查看,在master所在机器上执行:kubeadm token list
默认情况下,token的有效期是24小时,如果token已经过期的话,执行:kubeadm token create
如果找不到hash可以执行:openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed ‘s/^.* //’
登录到node3服务器重新执行加入集群命令就OK了;
ps:若出现Failed to connect to API Server “:<master-port(6443)>”: cluster CA found in cluster-info configmap is invalid: public key sha256:xxxxxxxxxx not pinned
可以试试kubeadm join --token :<master-port(6443)> --discovery-token-unsafe-skip-ca-verification

ps:token 过期的话会加入不成功提示Unauthorized,换个不过期的token就好了

3.修改 Kubernetes apiserver 启动参数
修改/etc/kubernetes/manifests/kube-apiserver.yaml这个文件
Kubelet 会监听该文件的变化,当您修改了 /etc/kubernetes/manifests/kube-apiserver.yaml 文件之后,kubelet 将自动终止原有的 kube-apiserver-{nodename} 的 Pod,并自动创建一个使用了新配置参数的 Pod 作为替代。

参考:地址

4.docker:Failed to get D-Bus connection: Operation not permitted
背景:容器里面想开启crond定时任务,包以上错误
以特权模式运行容器

docker run -d --name <container_name> --privileged=true <image_name> /usr/sbin/init
#例:
docker run -d --name centos7 --privileged=true centos:7 /usr/sbin/init
docker exec -it centos7 /bin/bash
yum install -y cronie && systemctl start crond  
systemctl status crond. #启动正常

5.查找 Docker 容器内文件系统在宿主机上的位置

# docker inspect --format='{{.GraphDriver.Data.MergedDir}}' <容器 ID>
/var/lib/docker/overlay2/756eb8b3d8663ff88c75c8b2cb24a5ea3d4762da69c68bd9c92bfe3c0c56b368/merged
#还有LogPath也能在这里找到(容器退出后,查看容器日志)

6.制作dockerfile-ADD:file not found in build context or excluded by .dockerignore

背景:采用 ADD 将主机的文件拷贝到要构建的docker镜像的时候,报错:
file not found in build context or excluded by .dockerignore
原因:
dockerfile 不能获取 父目录
方案:
将文件copy到当前目录

#例
ADD /root/test /root
#而dockerfile文件在/tmp,需要把/root/test文件夹移动到/tmp

7.SandboxChanged: Pod sandbox changed, it will be killed and re-created

#查看pod事件
kubectl describe pod calico-node-xm4lm -n kube-system
SandboxChanged: Pod sandbox changed, it will be killed and re-created

很可能是由于内存限制导致容器被 OOMKilled,或者其他资源不足,top查看内存剩余资源只有10%左右,粗暴解决

echo 1 > /proc/sys/vm/drop_caches

8.“transport: Error while dialing dial unix:///run/containerd/containerd.sock: timeout”: unavailable.
问题:是docker服务的问题,有想法的人可以深究
解决办法:删除然后重启docker

9.k8s集群异常
在这里插入图片描述
a.kube-proxy:
The node was low on resource: ephemeral-storage. Container kube-proxy was using 40Ki, which exceeds its request of 0.
物理磁盘空间不够,清理日志空出磁盘空间即可

10.Unable to connect to the server: x509: certificate signed by unknown authority
重新init完,kubectl get nodes报错

#解决办法:
rm -f $HOME/.kube/config

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

11.coredns Readiness probe failed: HTTP probe failed with statuscode: 503

原因:
当您使用kubeadm init时,请指定pod-network-cidr。确保主机/主网络的IP不在您引用的子网中。
即如果您的网络运行在192.168.*.*使用10.0.0.0/16
如果您的网络是10.0.*.*使用192.168.0.0/16
解决办法:
重新初始化,设置--pod-network-cidr网段与宿主机网断没有重合,并且修改网络插件配置文件中的网断,与--pod-network-cidr一致
”sudo kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.13.1 --pod-network-cidr=10.0.0.0/16“

12.k8s集群内部pod-ip,ping不通,集群内的容器servername无法解析
未搞定

13.Error: invalid argument “client” for “–dry-run” flag: strconv.ParseBool: parsing “client”: invalid syntax

Error: invalid argument "client" for "--dry-run" flag: strconv.ParseBool: parsing "client": invalid syntax

请使用–dry-run=1如下所示,因为某些版本不支持 client 作为值,所以在这些情况下 1 可以代替

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐