k8s☞记录点

阅读量: zyh 2020-08-25 01:08:44
Categories: > Tags:

1. pv和pvc的绑定关系是终生的. 也就是说你删除了当前pvc, pv依然不能被其它pvc所绑定.

删除pvc后, pv的状态将从bound转为Released.

如果你想让pv从新绑定到原来的pvc上, 则需要两个步骤:

  1. 先创建原来的pvc.
  2. 删除当前pv并重新创建, 或者修改当前pv的配置, 删除spec.claimRef信息.

2. pod无法正常启动,报错:“mounting \“/var/lib/lxcfs/proc/loadavg\”

to rootfs \"/export/docker-data-root/overlay2/710d09a6715d88a01b417ba1a669dab69b67c3d57e576c1ae6d79aa03e1b294a/merged”

根据信息可知问题点应该是 lxcfs 问题。

查看故障pod所在节点的 lxcfs pod 日志,得到信息

“fuse: mountpoint is not empty
fuse: if you are sure this is safe, use the ‘nonempty’ mount option”

因此删除节点 lxcfs 目录,并重建 lxcfs pod

rm -rf  /var/lib/lxcfs/ && kubectl delete pod/lxcfs-hthgq

3. 变更pv回收策略

kubectl patch pv <your-pv-name> -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'

4. kubernetes qos

kubernetes 有三种策略,分别是Guaranteed和Burstable和BestEffort

Guaranteed:任何容器的cpu请求值和限制值必须一样。内存同样如此

Burstable:最少有一个容器的cpu请求值和限制值必须一样。内存同样如此

BestEffort: 没有任何限制

5. kubelet无法启动,报错:kubelet.service holdoff time over

确认节点swap是否关闭

临时关闭swapoff -a

永久关闭注释/etc/fstab文件里的swap挂载行

6. 拉取私有镜像

kubectl create secret docker-registry <secret_name> --docker-server=<FQDN:your-registry-server> --docker-username=<your-name> --docker-password=<your-pword> --docker-email=<your-email>

deployment 对象中调用:deployment.spec.template.spec.imagePullSecrets: [<secret_name>]

7. pv一直无法删除掉

# 检查是否受保护
kubectl describe pv <pv> | grep Finalizers 
# 重置策略为空
kubectl patch pv <pv> -p '{"metadata":{"finalizers":null}}'

8. 统计节点容器磁盘使用情况

kubectl get --raw /api/v1/nodes/<节点名>/proxy/stats/summary | jq '.pods[0] | "PodName: ", .podRef.name, "usedBytes: ", .containers[].rootfs.usedBytes'

9. 在 Kubernetes 中查看崩溃的 pod 的日志

已崩溃的pod无法通过kubectl logs查看.

kubectl get events -n <ns_name> --sort-by='.metadata.createTimestamp''

10.Pod一直处于删除状态

检查Pod所在节点的kubelet日志,发现出现Error: "UnmountVolume.TearDown failed for volume无法反挂载的错误。

进一步查看错误后面信息,得知Unmount的Path:/var/lib/kubelet/pods/aa104758-a3a0-4ec3-977b-be9ef8530e5c/volumes/kubernetes.io~projected/kube-api-access-6vltw/

path=/var/lib/kubelet/pods/aa104758-a3a0-4ec3-977b-be9ef8530e5c/volumes/kubernetes.io~projected/kube-api-access-6vltw
find /proc/*/mounts -exec grep ${path} {} +
ps -ef | grep <pid 号>

确认占用的进程信息,是否属于处于删除状态的Pod,如果是,kill掉即可。