k8s 调度不合理解决方案如下-临时方案

时间:2022-12-05 11:01:38

K8s问题一 ​

k8s 调度不合理解决方案如下-临时方案


服务获取pod ip (个人认为) 不合理,集群内部推荐使用cluster ip

集群外部使用




问题二​

K8s 调度不合理问题排查


方案一​


修改matser ,node节点 最大pod 数量 (需要评估总共pod 数量,以及各节点需要分配的pod 数量)以达到 均衡的目的


以下为本地实验案例没问题可以先上测试


修改master 节点数 数(多master 都需要修改)​

1、systemctl status kubelet.service

k8s 调度不合理解决方案如下-临时方案


cd /usr/lib/systemd/system/kubelet.service.d

vim 10-kubeadm.conf

k8s 调度不合理解决方案如下-临时方案


vim /etc/sysconfig/kubelet

KUBELET_EXTRA_ARGS="--max-pods=40"

k8s 调度不合理解决方案如下-临时方案



systemctl daemon-reload


systemctl restart kubelet

查看是否生效


systemctl status kubelet | grep max-pods

k8s 调度不合理解决方案如下-临时方案




修改node 节点​

  1. 登录master节点,查看 192.168.40.181节点上pods个数(注意一定是-all-namespaces)
  2. 冻结该node节点kubectl cordon zcsnode1
  3. 删除多余的pods需要评估改节点承载的pods个数,比如25个,则需要delete 掉多余的pods
    Kubectl delete pods podsname
  4. 登录node修改kubelet的max-pods个数

vim /usr/lib/systemd/system/kubelet.service

k8s 调度不合理解决方案如下-临时方案


  1. 修改/etc/kubernetes/kubelet,增加限制数量(没有就新增以下内容)



[root@zcsnode1 kubelet.service.d]# cat /etc/sysconfig/kubelet

KUBELET_EXTRA_ARGS="--fail-swap-notallow=false --max-pods=20"




6 修改/usr/lib/systemd/system/kubelet.service

k8s 调度不合理解决方案如下-临时方案



332 systemctl daemon-reload

333 systemctl restart kubelet

systemctl status kubelet |grep max-pods

k8s 调度不合理解决方案如下-临时方案



7 解冻该节点

kubectl uncordon zcsnode1


查看此节点pod是否正常

k8s 调度不合理解决方案如下-临时方案







方案二

Shell脚本 + Metrics Server + 计划任务

监控集群资源利用率

Metrics Server是一个集群范围的资源使用情况的数据聚合器。作为一个应用部署在集群中。Metric server从每个节点上Kubelet API收集指 标,通过Kubernetes聚合器注册在Master APIServer中。

项目地址:https://github.com/kubernetes-sigs/metrics-server

kubectl top -> apiserver -> metrics-server -> kubelet(cadvisor)(https)


Metrics Server部署:节点部署

wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.7/components.yaml

修改以下配置


- name: metrics-server​
image: zhaochengsheng/metrics-server #修改​
imagePullPolicy: IfNotPresent​
args:​
- --cert-dir=/tmp​
- --secure-port=4443​
- --kubelet-insecure-tls #修改不验证kubelet提供的https证书​
- --kubelet-preferred-address-types=InternalIP #修改使用节点IP连接kubelet


部署

Kubectl apply -f components.yaml


可以看到各节点的利用率

k8s 调度不合理解决方案如下-临时方案



#! /bin/bash

#对实际使用内存大于75%的机器停止调度,对实际使用内存小于65%的 关闭调度

# 获取实际内存小于或等于65%的机器
memory_lt_65=`kubectl top nodes |awk '{if($5+0<=65) print $1}'`
# 获取实际内存大于或等于75%的机器
memory_gt_75=`kubectl top nodes |awk '{if($5+0>=75) print $1}'`
#获取已经关闭调度的机器
SchedulingDisabled=`kubectl get nodes |egrep -v "control-plane|master" |grep SchedulingDisabled | awk '{print $1}'`

# 如果有关闭调度的机器,判断其内存小于或等于65%,则放开调度
if [ -n "$SchedulingDisabled" ];then
for node in $SchedulingDisabled ;do
if [[ $memory_lt_65 =~ $node ]];then
kubectl uncordon $node
fi
done
fi
#如果有内存大于或等于75%的机器,判断其是否停止调度,如果没有,则停止调度
if [ -n "$memory_gt_75" ];then
for node in $memory_gt_75 ;do
if [[ $SchedulingDisabled =~ $node ]];then
echo $node is aleady cordorned
else
kubectl cordon $node
fi
done
fi