0
点赞
收藏
分享

微信扫一扫

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


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

  • ​​1 基础概念​​
  • ​​2 常见用法​​
  • ​​3 注意事项​​
  • ​​4 说明​​

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>

  1. 查看节点资源使用率

$ kubectl top nodes
NAME CPU(cores) CPU% MEMORY(bytes)

  1. 查看集群节点的标签信息

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=

  1. 增删节点的角色标签

添加角色为node的标签
$ kubectl label nodes knode01 node-role.kubernetes.io/node=
node/knode01 labeled
删除节点的角色标签
$ kubectl label nodes knode01 node-role.kubernetes.io/node-

  1. 查看节点资源详细详细

kubectl describe nodes knode01 
返回结果显示节点cpu、内存、存储、系统信息、pod资源、events等各类信息;

  1. 设置节点不可调度

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

  1. 驱逐节点上的pod

kubectl drain knode01 --ignore-daemonsets --delete-local-data
该命令驱逐除了daemonsets之外的所有pod,并且删除pod对应的本地数据
此时节点knode01 状态为:
knode01 Ready,SchedulingDisabled node 5d22h v1.19.4
恢复正常调度:
kubectl uncordon knode01

  1. 给节点设置污点
    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 对象-标签和选择算符​​


举报

相关推荐

0 条评论