链接:https://pan.baidu.com/s/1-zTo9HadKGtVhTe3mYNbHg
提取码:7ur6
这是咱们课件云盘地址,后续也会同步到这里,如果不用qq的可以保存下,方便后面获取课件。
1、资源监控
1、kubeadm部署的集群controller-manager、scheduler is Unhealthy
- 对集群没啥影响
kubectl get cs
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME STATUS MESSAGE ERROR
controller-manager Unhealthy Get "http://127.0.0.1:10252/healthz": dial tcp 127.0.0.1:10252: connect: connection refused
scheduler Unhealthy Get "http://127.0.0.1:10251/healthz": dial tcp 127.0.0.1:10251: connect: connection refused
etcd-0 Healthy {"health":"true"}
大概从1.17版本就存在该问题(类似于bug),至今(1.21版本)未被修复
解决:
ll /etc/kubernetes/manifests/
总用量 16
-rw------- 1 root root 2216 7月 30 14:57 etcd.yaml
-rw------- 1 root root 3325 7月 30 14:57 kube-apiserver.yaml
-rw------- 1 root root 2827 7月 30 14:57 kube-controller-manager.yaml
-rw------- 1 root root 1413 7月 30 14:57 kube-scheduler.yaml
# kube-system下的对应pod就是上面这几个yaml资源清单创建的
kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
etcd-k8s-master1 1/1 Running 4 4d
kube-apiserver-k8s-master1 1/1 Running 6 4d
kube-controller-manager-k8s-master1 1/1 Running 4 4d
kube-proxy-98s2v 1/1 Running 4 4d
kube-proxy-pv4xw 1/1 Running 4 4d
kube-proxy-r5jpb 1/1 Running 4 4d
kube-scheduler-k8s-master1 1/1 Running 4 4d
其中修改kube-controller-manager.yaml
和kube-scheduler.yaml
中的--port=0
,将该值注释、重启kubelet
,或者改为对应的端口如下:
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、查询所有资源
kubectl api-resources
# 资源名称、简称、apiserver、是否支持名称空间、kind
NAME SHORTNAMES APIVERSION NAMESPACED KIND
bindings v1 true Binding
componentstatuses cs v1 false ComponentStatus
configmaps cm v1 true ConfigMap
endpoints ep v1 true Endpoints
events ev v1 true Event
limitranges limits v1 true LimitRange
namespaces ns v1 false Namespace
nodes no v1 false Node
persistentvolumeclaims pvc v1 true PersistentVolumeClaim
persistentvolumes pv v1 false PersistentVolume
pods po v1 true Pod
- 其中:apiserver和kind对应的是yaml资源清单中的字段,不知道可以使用该命令进行查看
4、查看节点信息时:没有master节点
kubectl get node
NAME STATUS ROLES AGE VERSION
k8s-master1 Ready control-plane,master 4d v1.21.0
k8s-node1 Ready <none> 4d v1.21.0
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、命令补全
yum install -y bash-completion
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc