zoukankan      html  css  js  c++  java
  • k8s pod节点调度及k8s资源优化

    一、k8s pod 在节点间调度控制

    k8s起pod时,会通过调度器scheduler选择某个节点完成调度,选择在某个节点上完成pod创建。
    当需要在指定pod运行在某个节点上时,可以通过以下几种方式:

    1. 在部署pod的yaml中,指定nodeName

    指定了nodeName的Pod会直接跳过Scheduler的调度逻辑,直接写入PodList列表,该匹配规则是强制匹配。
    eg:
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
    name: tomcat-deploy
    spec:
    replicas: 1
    template:
    metadata:
    labels:
    app: tomcat-app
    spec:
    nodeName: k8s.node1 #指定调度节点为k8s.node1
    containers:
    - name: tomcat
    image: tomcat:8.0
    ports:
    - containerPort: 8080

    2. 在部署pod的yaml中,指定NodeSelector
    通过kubernetes的label-selector机制进行节点选择,由scheduler调度策略MatchNodeSelector进行label匹配,调度pod到目标节点,该匹配规则是强制约束。启用节点选择器的步骤为:
    起pod步骤:

    i. 先给node打上对应的label
    #标记规则:kubectl label nodes <node-name> <label-key>=<label-value>
    kubectl label nodes k8s.node1 cloudnil.com/role=dev

    #确认标记
    root@k8s.master1:~# kubectl get nodes k8s.node1 --show-labels
    NAME STATUS AGE LABELS
    k8s.node1 Ready 29d beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,cloudnil.com/role=dev,kubernetes.io/hostname=k8s.node1

    ii. 起pod的时候,在yaml中指定nodeSelector

    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
    name: tomcat-deploy
    spec:
    replicas: 1
    template:
    metadata:
    labels:
    app: tomcat-app
    spec:
    nodeSelector:
    cloudnil.com/role: dev #指定调度节点为带有label标记为:cloudnil.com/role=dev的node节点
    containers:
    - name: tomcat
    image: tomcat:8.0
    ports:
    - containerPort: 8080

    3. 使用污点(Taint)
    taint是k8s 1.6版本开始提供的功能,在k8s同样用于节点调度的,还有一个容忍(Tolerations)功能
    污点的组成为
    key=value:effect

    effect支持的类型包括一下三类:
    NoSchedule:表示k8s将不会将Pod调度到具有该污点的Node上
    PreferNoSchedule:表示k8s将尽量避免将Pod调度到具有该污点的Node上
    NoExecute:表示k8s将不会将Pod调度到具有该污点的Node上,同时会将Node上已经存在的Pod驱逐出去
    当希望起pod的时候,某个node不参与调度,可以给这个node加上一个NoSchedule的污点,eg:

    # 设置污点
    kubectl taint nodes kube-node1 key1=value1:NoSchedule

    # 去除污点
    kubectl taint nodes kube-node1 key1:NoSchedule-
    此污点可以通过kubectl describe node <xxx-node> 查看

    4. 容忍(tolerance)
    当参与taint给node打算NoSchedule的污点之后,pod无法调度到该节点上运行,但有时我们希望某些pod仍然能运行到该node上时,可以通过在部署pod的yaml中添加tolerance,使pod能跳过污点,调度到对应节点上:

    eg:
    tolerations:
    - key: "key1"
    operator: "Equal"
    value: "value1"
    effect: "NoSchedule"
    tolerationSeconds: 3600
    - key: "key1"
    operator: "Equal"
    value: "value1"
    effect: "NoExecute"
    - key: "key2"
    operator: "Exists"
    effect: "NoSchedule"

    其中:
    operator为Equal时,key, vaule, effect要与Node上设置的taint保持一致
    operator为Exist时,将会忽略value的值
    tolerationSeconds指当pod需要被驱逐时,仍能在node上保留运行的时间
    当tolerance不指定effect时,将容忍污点的所有作用
    tolerations:
    - key: "key"
    operator: "Exists"

    5. cordon/uncordon/drain
    这几个命令用于k8s节点维护,用法:
    kubectl cordon <xxx-node>
    此时通过

    kubectl get node -o wide
    可以看到node的状态为scheduleDisable,即该节点为不可调度状态。

    可以通过uncordon来恢复node状态:
    kubectl uncordon <xxx-node>
    当cordon node之后,原来运行在node上的pod,当超过保活周期之后,将会重新调度在其他node上运行。如果想让pod马上实现迁移,可以使用drain完成。

    drain:标记节点为不可调度,并驱逐节点上的pod,用法:
    kubectl drain <xxx-node>
    注意:drain不只是当node被cordon时才适用,其实当node正常运行时,也可以用drain将运行在该node的pod驱赶出去

    二、k8s(node节点资源)优化设置

    在k8s节点中通过ExecStart=/usr/bin/kubelet设置系统保留资源来提高node节点的稳定行。

    涉及到的参数:1.--system-reserved
                      2.--kube-reserved

    vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
    添加参数:
    1:设置预留系统服务的资源
    --system-reserved=cpu=200m,memory=1G


    2:设置预留给k8s组件的资源(主要组件)
    --kube-reserved=cpu=200m,memory=1G
    系统内存--sytem-reserved --kube-reserved就是可以分配给pod的内存


    3.驱逐条件
    --eviction-hard=memory.available<500Mi,nodefs.available<1Gi,imagefsavailable<100Gi


    4.最小驱逐
    --eviction-minimum-reclaim="memory.available<0Mi,nodefs.available<500Mi,imagefsavailable<2Gi"


    5.节点状态更新时间
    --node-status-update-frequency=10s


    6.驱逐等待时间
    --eviction-pressure-transition-period=20s

  • 相关阅读:
    HTTP协议详解
    ASP.NET 页生命周期概述
    两种典型的双工MEP
    ASP.NET并发处理
    Nodejs
    官方教程
    SQL server 版本
    MVC、MVP、MVVM
    SOHO 创业
    考证
  • 原文地址:https://www.cnblogs.com/xiaoyaojinzhazhadehangcheng/p/11065510.html
Copyright © 2011-2022 走看看