链接:https://pan.baidu.com/s/1-zTo9HadKGtVhTe3mYNbHg
提取码:7ur6
这是咱们课件云盘地址,后续也会同步到这里,如果不用qq的可以保存下,方便后面获取课件。

1、资源监控

1、kubeadm部署的集群controller-manager、scheduler is Unhealthy

  • 对集群没啥影响
  1. kubectl get cs
  2. Warning: v1 ComponentStatus is deprecated in v1.19+
  3. NAME STATUS MESSAGE ERROR
  4. controller-manager Unhealthy Get "http://127.0.0.1:10252/healthz": dial tcp 127.0.0.1:10252: connect: connection refused
  5. scheduler Unhealthy Get "http://127.0.0.1:10251/healthz": dial tcp 127.0.0.1:10251: connect: connection refused
  6. etcd-0 Healthy {"health":"true"}

笔记 - 图1

大概从1.17版本就存在该问题(类似于bug),至今(1.21版本)未被修复

解决:

  1. ll /etc/kubernetes/manifests/
  2. 总用量 16
  3. -rw------- 1 root root 2216 7 30 14:57 etcd.yaml
  4. -rw------- 1 root root 3325 7 30 14:57 kube-apiserver.yaml
  5. -rw------- 1 root root 2827 7 30 14:57 kube-controller-manager.yaml
  6. -rw------- 1 root root 1413 7 30 14:57 kube-scheduler.yaml
  7. # kube-system下的对应pod就是上面这几个yaml资源清单创建的
  8. kubectl get pods -n kube-system
  9. NAME READY STATUS RESTARTS AGE
  10. etcd-k8s-master1 1/1 Running 4 4d
  11. kube-apiserver-k8s-master1 1/1 Running 6 4d
  12. kube-controller-manager-k8s-master1 1/1 Running 4 4d
  13. kube-proxy-98s2v 1/1 Running 4 4d
  14. kube-proxy-pv4xw 1/1 Running 4 4d
  15. kube-proxy-r5jpb 1/1 Running 4 4d
  16. kube-scheduler-k8s-master1 1/1 Running 4 4d

其中修改kube-controller-manager.yamlkube-scheduler.yaml中的--port=0,将该值注释重启kubelet,或者改为对应的端口如下:

笔记 - 图2

笔记 - 图3

2、上面的问题中:为什么没有apiserver

没必要把apiserver放进来

实际上我们执行任何kubectl命令都会发送给apiserver,所以apiserver不正常那么任何命令都将执行失败,kubectl依赖域apiserver

  • 当我们执行<font style="background-color:#FADB14;">kubectl</font>出现错误时,就可以从<font style="background-color:#FADB14;">apiserver</font>入口进行排查
  • kubectl —-> apiserver —-> etc

3、查询所有资源

  1. kubectl api-resources
  2. # 资源名称、简称、apiserver、是否支持名称空间、kind
  3. NAME SHORTNAMES APIVERSION NAMESPACED KIND
  4. bindings v1 true Binding
  5. componentstatuses cs v1 false ComponentStatus
  6. configmaps cm v1 true ConfigMap
  7. endpoints ep v1 true Endpoints
  8. events ev v1 true Event
  9. limitranges limits v1 true LimitRange
  10. namespaces ns v1 false Namespace
  11. nodes no v1 false Node
  12. persistentvolumeclaims pvc v1 true PersistentVolumeClaim
  13. persistentvolumes pv v1 false PersistentVolume
  14. pods po v1 true Pod
  • 其中:apiserver和kind对应的是yaml资源清单中的字段,不知道可以使用该命令进行查看

4、查看节点信息时:没有master节点

  1. kubectl get node
  2. NAME STATUS ROLES AGE VERSION
  3. k8s-master1 Ready control-plane,master 4d v1.21.0
  4. k8s-node1 Ready <none> 4d v1.21.0
  5. k8s-node2 Ready <none> 4d v1.21.0

有时候部署的k8s集群,使用上面命令kubectl get nodes进行查看时,没有k8s-master,为什么呢?

  • 没有安装node节点的组件,该命令只显示node节点的信息(二进制部署时,一般不会在master上部署node组件)
  • 将master同时作为node时,才会显示
  • 在master上部署node组件还是有必要的,后期可以加入污点使其不进行工作

上面的status状态信息是由kubelet组件控制的,如果状态是NotReady,就需要排查kubelet,它是以守护进行启动运行的

  • kubelet —> runtime

5、kubectl top使用

6、命令补全

  1. yum install -y bash-completion
  2. source /usr/share/bash-completion/bash_completion
  3. source <(kubectl completion bash)
  4. echo "source <(kubectl completion bash)" >> ~/.bashrc