网站记录
关于Deployment的资源文件编写
1 2 3 4 5
| 1,在Deployment中必须写matchLables,
2,在定义模板的时候必须定义labels,因为Deployment.spec.selector是必须字段,而他又必须和template.labels对应,
3,template里面定义的内容会应用到下面所有的副本集里面,在template.spec.containers里面不能定义labels标签.
|
指令记录
k8s 清理namespace(命名空间)资源
1 2 3 4 5 6 7
| 1. 查找所有当前namespace下的资源 kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get --show-kind --ignore-not-found -n <ns> 2. 删除对应资源 kubectl get ingress -n <ns> |grep <rs-name> |awk '{print $1}'|xargs kubectl delete ingress -n <ns> kubectl get service -n <ns> |grep <rs-name> |awk '{print $1}'|xargs kubectl delete service -n <ns> kubectl get deployment -n <ns> |grep <rs-name> |awk '{print $1}'|xargs kubectl delete deployment -n <ns> ...
|
查看集群的CPU和内存资源的声明占用情况
可以使用下面的指令进行查看和过滤
1
| kubectl describe node |grep -E '((Name|Roles):\s{6,})|(\s+(memory|cpu)\s+[0-9]+\w{0,2}.+%\))'
|
下图是对k8s集群的检查结果。可以明显地看到,所有的worker节点的内存Requests都已经达到99%,剩余的1%不足1G

container执行指令
1
| kubectl exec podName -c containerName -n namespace -- <shell comand>
|
replace和aplly的区别
1 2 3
| kubectl replace 的执行过程,是使用新的 YAML 文件中的 API 对象,替换原有的 API 对象(前提是有这个原有api对象, 否则会报错)
kubectl apply,则是执行了一个对原有 API 对象的 PATCH 操作。(如果原有yaml文件内容没有变化,则不执行任何操作)
|
删除标签
1 2
| kubectl describe node <node> |grep Labels kubectl label nodes <node> k3s-worker1-
|
查看pod中的容器
1
| kubectl get pods sapi-customer-696cc7cc8f-6frfc -n sopei-biz -o jsonpath={.spec.containers[*].name}
|
重启pod
1
| kubectl get pod {podname} -n {namespace} -o yaml | kubectl replace --force -f -
|
查询某个node节点下{NAME_SPACE}所有pod的资源使用情况以及每个pod所在节点名称
1 2 3 4 5 6
|
NAME_SPACE={查询namespace} NODE={查询node节点}
kubectl get pods --namespace=$NAME_SPACE -o wide | awk '{if(NF > 9){print $1,$9}else{print $1,$7}}' | grep -v NAME | grep $NODE| while read -r name node; do echo -n "$name $node "; kubectl top pod $name -n $NAME_SPACE |grep -v NAME| tail -1 | awk '{print $2,$3,$5}'; done|sort -nrk 3
|
为什么当一个节点故障时,一个 Pod 需要大于 5 分钟时间才能被重新调度?#
这是因为下列默认 Kubernetes 设置共同产生的效果:
- kubelet
node-status-update-frequency:设置 kubelet 上报节点信息给 master 的频率。(默认 10s)
- kube-controller-manager
node-monitor-period:NodeController 中 NodeStatus 的同步周期(默认 5s)node-monitor-grace-period:节点被认定为不健康前,节点不作响应的总的时间。(默认 40s)pod-eviction-timeout:优雅删除故障节点上容器的周期。(默认 5m0s)
获取更多信息请参阅
- Kubernetes:kubelet
- Kubernetes: kube-controller-manager
- Kubernetes Kubelet 状态更新机制 node-status-update-frequency
在 Kubernetes v1.13 版本中,TaintBasedEvictions特性是默认开启的。请查阅 Kubernetes: Taint based Evictions 获取更多信息。
- kube-apiserver (Kubernetes v1.13 版本及以后)
default-not-ready-toleration-seconds: 表示 notReady:NoExecute 容忍的容忍时间。notReady:NoExecute 被默认添加到没有该容忍的所有 Pod。default-unreachable-toleration-seconds: 表示 unreachable:NoExecute 容忍的容忍时间。unreachable:NoExecute 被默认添加到没有该容忍的所有 Pod。
解决办法
可以参考下面这个示例调整tolerationSeconds时间:
1
| https://raw.githubusercontent.com/kingsd041/rancher-k3s/master/demo-busybox.yaml
|