1. pv和pvc的绑定关系是终生的. 也就是说你删除了当前pvc, pv依然不能被其它pvc所绑定.
删除pvc后, pv的状态将从bound转为Released.
如果你想让pv从新绑定到原来的pvc上, 则需要两个步骤:
- 先创建原来的pvc.
- 删除当前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掉即可。