排错常用的命令
journalctl -xefu kubelet
systemctl status kubelet
docker ps | grep NAME
kubectl get cs
kubectl get nodes #获取集群状态
kubectl get pods -n kube-system

1.系统初始化时遇到的问题

this version of kubeadm only supports deploying clusters with the control plane version >= 1.13.0. Current version: v1.11.1

换一个k8s的版本:
kubeadm init --kubernetes-version=v1.18.6 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap

2.镜像拉取的问题

a.先进入https://hub.docker.com/search?q=kube-proxy&type=image,找一个k8s的镜像源,点击进去复制拉取的地址
b.写个脚本自动拉取镜像,并自动打tag
c.配置一个加速源,添加一个文件/etc/docker/daemon.json
{
 "registry-mirrors": ["http://hub-mirror.c.163.com"]
}
重启:systemctl daemon-reload
	 systemctl restart docker
#!/bin/bash

#可能有些版本镜像在这个仓库下是没有的,这时可以拉取一个其他版本的,然后打个tag就行

KUBE_VERSION=v1.18.6
KUBE_PAUSE_VERSION=3.2
ETCD_VERSION=3.4.3-0
DNS_VERSION=1.6.7

GCR_URL=k8s.gcr.io
##这里就是写你要使用的仓库
DOCKERHUB_URL=kubesphere
##这里是镜像列表
images=(
kube-proxy:${KUBE_VERSION}
kube-scheduler:${KUBE_VERSION}
kube-controller-manager:${KUBE_VERSION}
kube-apiserver:${KUBE_VERSION}
pause:${KUBE_PAUSE_VERSION}
etcd:${ETCD_VERSION}
coredns:${DNS_VERSION}
)
##这里是拉取和改名的循环语句
for imageName in ${images[@]} ; do
  docker pull $DOCKERHUB_URL/$imageName
  docker tag $DOCKERHUB_URL/$imageName $GCR_URL/$imageName
  docker rmi $DOCKERHUB_URL/$imageName
done

3.拉取镜像报错
Error response from daemon: manifest for kubesphere/etcd:3.4.3 not found: manifest unknown: manifest unknown

这个是因为镜像不存在,可以拉取一个其他版本的镜像然后tag一下,恢复到指定的名称

4.docker驱动配置问题
Failed to start ContainerManager failed to initialize top level QOS containers: failed to update top
配置完成后,重启一下主机

vim /usr/lib/systemd/system/docker.service文件
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --exec-opt native.cgroupdriver=systemd

5.failed to set supported cgroup subsystems for cgroup [kubepods besteffort]: failed to find subsystem mount for required subsystem: pids

	解决:在/etc/sysconfig/kubelet文件中添加--feature-gates SupportPodPidsLimit=false --feature-gates SupportNodePidsLimit=false 

6.unable to recognize “https://raw.githubusercontent.com/coreos/flannel/c5d10c8/Documentation/kube-flannel.yml”: no matches for kind “DaemonSet” in version “extensions/v1beta1”

解决:换一个flannel文件,部署完成后,稍等几分钟网络pods就可以起来了,网络pods起来了coredns就可以起来了

7.Container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitializ

稍等几分钟

8.kubectl get cs获取集群状态时
Get http://127.0.0.1:10252/healthz: dial tcp 127.0.0.1:10252: connect: connection refused

解决: 修改/etc/kubernetes/manifest/中的相应文件,去掉--port字段,稍等1分钟就好了

9.failed to decode cluster configuration data: no kind “ClusterConfiguration” is registered

kubernetes的源不一致,会导致两台机器安装的kubadm版本不一致,致使node节点使用join命令加入集群时报上面的错误。
最好使用scp命令将kuernetes源文件copy成一致,并重新安装kubeadm,使版本一致

10.使用root用户运行相应的命令报错

# 应该使用普通用户运行相关命令,而不是root用户(提前需要配置普通用户)
[root@k8s-master ~]# kubectl get pods -n kube-system
Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes")

11./var/lib/kubelet/config.yaml", error: open /var/lib/kubelet/config.yaml: no such file or directory(查看集群状态是,node01位NotReady状态)

 解决:a.可能是集群中原本就有这个节点的信息,因此需要kubectl delete node node_name来删除,然后再重新加入集群

12.使用kubectl get pods -n kube-system时,有一个kube-proxy是异常的,同时flannel插件本来是正常running状态,但是过一会后也变得异常。

这个一般是多个节点中,有一个节点的镜像版本是有问题的,因为集群的kube-proxy使用
的是同一个版本,一旦某个节点的镜像版本不符合,那么就会有问题

13.使用local path provisioner创建的pv, storageClassNamelocal-path,granfana上使用,在一次机缘巧合之下,某个节点被移出了集群,并且pvc是绑定在这个节点上的,所以导致了pod一直处于pending状态,pod报错内容为2 node(s) had volume node affinity conflict.

解决方式

1.查看pv,找到pod使用的pv
~]# kubectl get pv
~]# kubectl describe pv pvc-e9d1dc5d-3316-49af-b73f-26600d80bc0f
Name:              pvc-e9d1dc5d-3316-49af-b73f-26600d80bc0f
Labels:            <none>
Annotations:       pv.kubernetes.io/provisioned-by: rancher.io/local-path
Finalizers:        [kubernetes.io/pv-protection]
StorageClass:      local-path
Status:            Bound
Claim:             default/prom-data-prometheus-kube-prometheus-stack-prometheus-0
Reclaim Policy:    Delete
Access Modes:      RWO
VolumeMode:        Filesystem
Capacity:          50Gi
Node Affinity:   # 此处的配置表示他已经绑定到了test-k8s-node-03节点,
				 # 但是节点test-k8s-node-03已经被移除集群了,因此这个pv是有问题的
  Required Terms:
    Term 0:        kubernetes.io/hostname in [test-k8s-node-03]
Message:
Source:
    Type:          HostPath (bare host directory volume)
    Path:          /opt/local-path-zcy/pvc-e9d1dc5d-3316-49af-b73f-26600d80bc0f_default_prom-data-prometheus-kube-prometheus-stack-prometheus-0
    HostPathType:  DirectoryOrCreate
Events:            <none>

2.导出pv配置,删除关联的pvc,删除此pv
3.删除重新创建pod,一般到这一步问题就会解决
4.如果pod不能自建pvc,那么就得手动重新创建一个pvc(可选)

手动重建pvc

# 创建pvc后,local path provisioner`会自动创建相应的pv
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: kube-prometheus-stack-grafana
  namespace: default
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-path
  resources:
    requests:
      storage: 10Gi

14.使用kubectl apply -f example.yaml的时候。报rom server for: "example.yaml": resource name may not be empty
解决

1.这是因为这个yaml文件里面有某个或者某些资源没有名字,简单来说就是metadata字段里面没有name字段
2.需要编辑这个yaml文件,然后在资源的metadata字段下加一个name字段,然后自定义一个名字
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐