k8s nodeSelector


labels 在 K8s 中是一個很重要的概念,作為一個標識,Service、Deployments 和 Pods 之間的關聯都是通過 label 來實現的。而每個節點也都擁有 label,通過設置 label 相關的策略可以使得 pods 關聯到對應 label 的節點上。

nodeSelector

nodeSelector 是最簡單的約束方式。nodeSelectorPodSpec 的一個字段。

通過 --show-labels 可以查看當前 nodeslabels

$ kubectl get nodes --show-labels
NAME       STATUS    ROLES     AGE       VERSION   LABELS
minikube   Ready     <none>    1m        v1.10.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/
hostname=minikube

 如果沒有額外添加 nodes labels,那么看到的如上所示的默認標簽。我們可以通過 kubectl label node 命令給指定 node 添加 labels:

$ kubectl label node minikube disktype=ssd
node/minikube labeled
$ kubectl get nodes --show-labels
NAME       STATUS    ROLES     AGE       VERSION   LABELS
minikube   Ready     <none>    5m        v1.10.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,disktype=ssd,kubernetes.io/host

當然,你也可以通過 kubectl label node 刪除指定的 labels(標簽 key 接 - 號即可)

$ kubectl label node minikube disktype-
node/minikube labeled
$ kubectl get node --show-labels
NAME       STATUS    ROLES     AGE       VERSION   LABELS
minikube   Ready     <none>    23m       v1.10.0 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=minikube

 創建測試 pod 並指定 nodeSelector 選項綁定節點:

$ cat nginx.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    env: test
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
  nodeSelector:
    disktype: ssd
$ kubectl create -f nginx.yaml
pod/nginx created

 查看 pod 調度的節點,即我們指定有 disktype=ssd label 的 minikube 節點:

$ kubectl get pods -o wide
NAME      READY     STATUS    RESTARTS   AGE       IP           NODE
nginx     1/1       Running   0          1m        172.18.0.4   minikube

 


免責聲明!

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



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