课后练习 9.1

测试对 CPU 的校验和准入行为

  • 定义一个 Pod,并将该 Pod 中的 nodeName 属性直接写成集群中的节点名。
  • 将 Pod 的 CPU 的资源设置为超出计算节点的 CPU 的值。
  • 创建该 Pod。
  • 观察行为并思考。

结果是OutOfcpu
制定了pod,应该会跳过schedule调度,直接到kubelet上(通过不超限的资源可以印证这一点,event中无调度这个过程)
在启动pod前会再次进行资源确认,因为超限了,所以OutOfcpu

9.3 kubernetes集群可能存在的问题

基础架构守护进程问题:ntp关闭等
硬件问题:CPU,内存、磁盘、网卡损坏
内核问题:内核死锁,文件系统损坏
容器运行时问题:运行时守护程序无响应

当k8s中节点发生上述问题,k8s 无法感知,会导致pod仍然调度到这些节点。

node-problem-detector
社区引入引入守护进程node-problem-detector

  • runtime无响应
  • linux kernel无响应
  • 网络异常
  • 文件描述符异常
  • 硬件问题如CPU,内存或者磁盘故障


    故障分类
    image.png
    问题汇报手段
    通过设置NdeCondition或者Event对象来汇报问题

  • NodeCondition:针对永久性故障,会通过NodeCondition来改变节点状态

  • Event:临时故障,通过Event来提醒相关对象,比兔通知当前节点运行的pod

https://github.com/kubernetes/node-problem-detector

  1. helm repo add deliveryhero https://charts.deliveryhero.io/
  2. helm install deliveryhero/node-problem-detector

集群部署时在动加载

kubectl logs [-f] [-p] (POD | TYPE/NAME) [-c CONTAINER]’

clusterapi

https://cluster-api.sigs.k8s.io/user/quick-start.html
安装clusterctl
https://cluster-api.sigs.k8s.io/user/quick-start.html#install-clusterctl