kubernetes:用label讓pod在指定的node上運行(kubernetes1.18.3)


一,為什么要為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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM