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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了k8s 调度不合理解决方案如下-临时方案相关的知识,希望对你有一定的参考价值。

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

以上是关于k8s 调度不合理解决方案如下-临时方案的主要内容,如果未能解决你的问题,请参考以下文章

k8s合理设置 Request 与 Limit

k8s一个pod加载多个containers,指定pod运行的node

k8s之存储

时间片论法-优化方案

时间片论法-优化方案

airflow+k8s 多用户-分布式-跨集群-容器化调度