k8s 调度不合理解决方案如下-临时方案
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了k8s 调度不合理解决方案如下-临时方案相关的知识,希望对你有一定的参考价值。
K8s问题一
服务获取pod ip (个人认为) 不合理,集群内部推荐使用cluster ip
集群外部使用
问题二
K8s 调度不合理问题排查
方案一
修改matser ,node节点 最大pod 数量 (需要评估总共pod 数量,以及各节点需要分配的pod 数量)以达到 均衡的目的
以下为本地实验案例没问题可以先上测试
修改master 节点数 数(多master 都需要修改)
1、systemctl status kubelet.service
cd /usr/lib/systemd/system/kubelet.service.d
vim 10-kubeadm.conf
vim /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--max-pods=40"
systemctl daemon-reload
systemctl restart kubelet
查看是否生效
systemctl status kubelet | grep max-pods
修改node 节点
- 登录master节点,查看 192.168.40.181节点上pods个数(注意一定是-all-namespaces)
- 冻结该node节点kubectl cordon zcsnode1
- 删除多余的pods需要评估改节点承载的pods个数,比如25个,则需要delete 掉多余的pods
Kubectl delete pods podsname - 登录node修改kubelet的max-pods个数
vim /usr/lib/systemd/system/kubelet.service
- 修改/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
332 systemctl daemon-reload
333 systemctl restart kubelet
systemctl status kubelet |grep max-pods
7 解冻该节点
kubectl uncordon zcsnode1
查看此节点pod是否正常
方案二
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
可以看到各节点的利用率
#! /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
以上是关于k8s 调度不合理解决方案如下-临时方案的主要内容,如果未能解决你的问题,请参考以下文章