k8s初级实战02--节点标签

k8s初级实战02--节点标签

1 基础概念

  1. 节点
    Kubernetes 通过将容器放入在节点(Node)上运行的 Pod 中来执行用户的工作负载。 节点可以是一个虚拟机或者物理机器,取决于所在的集群配置。每个节点都包含用于运行 Pod 所需要的服务,这些服务由控制面负责管理。
    节点上的组件包括 kubelet、 容器运行时以及 kube-proxy。
    向 API 服务器添加节点的方式主要有两种:1)节点上的 kubelet 向控制面执行自注册,2)用户手动添加一个Node对象。
  2. 标签
    标签(Labels) 是附加到 Kubernetes 对象(比如 Pods)上的键值对。 标签旨在用于指定对用户有意义且相关的对象的标识属性,但不直接对核心系统有语义含义。 标签可以用于组织和选择对象的子集。标签可以在创建时附加到对象,随后可以随时添加和修改。
    每个对象都可以定义一组键/值标签,每个键对于给定对象必须是唯一的。

2 常见用法

  1. 查看节点信息
    $ kubectl get nodes
    NAME      STATUS   ROLES    AGE     VERSION
    kmaster   Ready    master   5d22h   v1.19.4
    添加-o wide 后查看扩展信息
    $ kubectl get nodes -o wide
    NAME      STATUS   ROLES    AGE     VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIME
    kmaster   Ready    master   5d22h   v1.19.4   192.168.2.131   <none>        Ubuntu 16.04.4 LTS   4.4.0-197-generic   docker://19.3.14
    
  2. 查看节点资源使用率
    $ kubectl top nodes
    NAME      CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
    kmaster   163m         8%     1241Mi          42%       
    knode01   65m          6%     842Mi           44%
    
  3. 查看集群节点的标签信息
    kubectl get node --show-labels 
    NAME     STATUS   ROLES    AGE   VERSION   LABELS
    kmaster   Ready    master   5d21h   v1.19.4   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=kmaster,kubernetes.io/os=linux,node-role.kubernetes.io/master=
    
  4. 增删节点的角色标签
    添加角色为node的标签
    $ kubectl label nodes knode01 node-role.kubernetes.io/node=
    node/knode01 labeled
    删除节点的角色标签
     $ kubectl label nodes knode01 node-role.kubernetes.io/node-
    
  5. 查看节点资源详细详细
    kubectl describe nodes knode01 
    返回结果显示节点cpu、内存、存储、系统信息、pod资源、events等各类信息;
    
  6. 设置节点不可调度
    kubectl cordon knode01
    此时其状态变为:
    knode01   Ready,SchedulingDisabled   node     5d22h   v1.19.4
    此时对 deployment scale, kubectl scale deployment nginx --replicas=5 ,发现新增加的pod都落在node02 和node03 上了;
    恢复可调度:
     kubectl uncordon knode01
    
  7. 驱逐节点上的pod
    kubectl drain knode01 --ignore-daemonsets --delete-local-data
    该命令驱逐除了daemonsets之外的所有pod,并且删除pod对应的本地数据 
    此时节点knode01 状态为:
    knode01   Ready,SchedulingDisabled   node     5d22h   v1.19.4
    恢复正常调度:
    kubectl uncordon knode01
    
  8. 给节点设置污点
    drain 设置节点为不可调度,并且驱逐节点上现有的pod(apiserver无法删除的镜像pod除外)
    $ kubectl describe nodes kmaster|grep Taints
    Taints:             node-role.kubernetes.io/master:NoSchedule
    默认情况下,master节点通过设置污点,从而使其它pod不调度到master节点
    去掉kmaster的taint:
    $ kubectl taint node kmaster node-role.kubernetes.io/master:NoSchedule-
    node/kmaster untainted
    再次scale nginx,发现可以调度到master上:
    $ kubectl get pods -A -o wide|grep kmaster
    default                nginx-8548df5d4c-dx9tr                       1/1     Running   0          18s     10.244.0.20     kmaster   <none>           <none>
    添加污点,使其它pod无法调度到master上:
    $ kubectl taint node kmaster node-role.kubernetes.io/master:NoSchedule
    node/kmaster tainted
    

3 注意事项

  1. 节点维护时候一般需要先设置为不可调度,然后迁移节点上的业务(pod),维护完成后恢复节点调度。

4 说明

1 使用 Kubernetes 对象-标签和选择算符

猜你喜欢

转载自blog.csdn.net/u011127242/article/details/111657498