kubernetes:用label让pod在指定的node上运行(kubernetes1.18.3)
KubernetesNode 运行 指定 Pod Label
2023-09-14 08:59:33 时间
一,为什么要为node指定label?
通常scheduler会把pod调度到所有可用的Node,有的情况下我们希望能把 Pod 部署到指定的 Node,
例如:
有的Node上配备了速度更快的SSD磁盘
有的Node上配备了性能更强的GPU,
这样pod中的应用才能更好的发挥node的硬件优势
说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/architectforest
对应的源码可以访问这里获取: https://github.com/liuhongdi/
说明:作者:刘宏缔 邮箱: 371125307@qq.com
二,用label让pod在指定的node上运行:
1,查看各个node的label:
[root@kubemaster k8s]# kubectl get nodes --show-labels NAME STATUS ROLES AGE VERSION LABELS kubemaster Ready master 27h v1.18.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=kubemaster,kubernetes.io/os=linux,node-role.kubernetes.io/master= node1 Ready <none> 72m v1.18.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node1,kubernetes.io/os=linux
说明:各node的label都是系统默认的,还没有我们手动添加的
2,给一个node添加label
格式:
kubectl label nodes <node-name> <label-key>=<label-value>
添加
[root@kubemaster k8s]# kubectl label node kubemaster apptype=web1 node/kubemaster labeled [root@kubemaster k8s]# kubectl label node node1 apptype=web2 node/node1 labeled
查看效果:
[root@kubemaster k8s]# kubectl get nodes --show-labels NAME STATUS ROLES AGE VERSION LABELS kubemaster Ready master 28h v1.18.3 apptype=web1beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=kubemaster,kubernetes.io/os=linux,node-role.kubernetes.io/master= node1 Ready <none> 75m v1.18.3 apptype=web2,beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node1,kubernetes.io/os=linux
3,修改label
[root@kubemaster k8s]# kubectl label node node1 apptype=noweb --overwrite
node/node1 labeled
查看效果:
[root@kubemaster k8s]# kubectl get nodes --show-labels NAME STATUS ROLES AGE VERSION LABELS kubemaster Ready master 28h v1.18.3 apptype=web1,beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=kubemaster,kubernetes.io/os=linux,node-role.kubernetes.io/master= node1 Ready <none> 85m v1.18.3 apptype=noweb,beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node1,kubernetes.io/os=linux
4,删除label
#格式:
kubectl label nodes <node-name> <label-key>-
删除
[root@kubemaster k8s]# kubectl label nodes node1 apptype-
node/node1 labeled
三,如何把Pod 部署到指定label的 Node:
在yaml文件中添加:
spec:段下面
nodeSelector:
apptype: web
看一个例子:
[root@kubemaster k8s]# more nginx-rc.yaml apiVersion: v1 kind: ReplicationController metadata: name: nginx-demo spec: replicas: 2 selector: app: nginx-demo template: metadata: labels: app: nginx-demo spec: nodeSelector: apptype: web containers: - name: nginx-demo image: nginx ports: - containerPort: 80
查看当前node的label
[root@kubemaster k8s]# kubectl get nodes --show-labels NAME STATUS ROLES AGE VERSION LABELS kubemaster Ready master 28h v1.18.3 apptype=noweb,beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=kubemaster,kubernetes.io/os=linux,node-role.kubernetes.io/master= node1 Ready <none> 107m v1.18.3 apptype=web,beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node1,kubernetes.io/os=linux
运行:
[root@kubemaster k8s]# kubectl apply -f nginx-rc.yaml
replicationcontroller/nginx-demo created
查看效果:
[root@kubemaster k8s]# kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-demo-b5vwt 1/1 Running 0 15m 172.16.166.136 node1 <none> <none> nginx-demo-j8n7d 1/1 Running 0 15m 172.16.166.135 node1 <none> <none>
四,查看kubernetes的版本
[root@kubemaster ~]# kubelet --version
Kubernetes v1.18.3
[root@kubemaster ~]# kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.3", GitCommit:"2e7996e3e2712684bc73f0dec0200d64eec7fe40",
GitTreeState:"clean", BuildDate:"2020-05-20T12:49:29Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64”}
五,查看linux的版本
[root@kubemaster ~]# cat /etc/redhat-release
CentOS Linux release 8.2.2004 (Core)
[root@kubemaster ~]# uname -r
4.18.0-193.el8.x86_64
相关文章
- CNCF 官方大使张磊:Kubernetes 是一个“数据库”吗?
- [Node.js] Pass command line arguments to node.js
- [Whole Web, Node.js, PM2] Restarting your node.js app on code change using pm2
- [Node.js] Using npm link to use node modules that are "in progress"
- [WASM] Run WebAssembly in Node.js using the node-loader
- linux(centos8):kubeadm单机安装kubernetes(kubernetes 1.18.3)
- 使用Prometheus的Node-exporter监控Kubernetes的Node节点失败(dial tcp i/o timeout)问题解决
- 使用Prometheus的Node-exporter监控Kubernetes的Node节点失败问题解决
- Kubernetes statefulset有状态应用
- Kubernetes 集群安全 鉴权
- k8s taint命令让master节点参与调度(去除污点node-role.kubernetes.io/master:NoSchedule)
- 【云原生 | Kubernetes 系列】----K8s持续集成与部署
- [K8s] Kubernetes核心基础概念 Node, Pod, ReplicaSet, Deployment, Service, Ingress, ConfigMap
- Kubernetes Rook + Ceph
- Kubernetes web界面kubernetes-dashboard安装【h】
- 【云原生 • Kubernetes】kubernetes 核心技术 - 集群安全机制
- 【云原生 • Kubernetes】kubernetes 核心技术 - RC、Replica Set 和 Deployment
- 【云原生 • Kubernetes】kubernetes 核心技术 - Label 和 Selector
- Node.js(二)node 核心模块 fs、HTTP模块、express框架
- Node.js(一)概述、全局对象/函数、node各模块使用介绍
- MySQL----使用Kubernetes集群环境部署MySQL数据库
- Kubernetes(k8s)API Server详解
- Kubernetes 深入理解kubernetes(一)
- Kubernetes 架构基础 核心控制平面组件
- Kubernetes Pod Resource和Qos
- Kubernetes Pod调度 Node亲和调度
- Kubernetes 调度 Node污点/容忍
- Kubernetes_容器网络_04_Calico底层隧道tunl0通信全过程(不同Node之间Pod通信)
- Kubernetes_21_查询所有命名空间下的所有资源(kubectl查询操作)