1. 程式人生 > >Kubernetes中Label的多維度用法

Kubernetes中Label的多維度用法

概述

kubernetes中有個Label的概念,是用來給叢集中的物件打標籤的,比如Node, Pod, Service, ReplicationController, ReplicaSet。它採用key=value的形式,在實際運用中這一功能是很有用處的,下面我會著重從給Node打標籤為例從各個不同的維度來說明它的神奇的用法。

區分環境

一個發展成熟的網際網路公司的產品完整週期包含開發環境、測試環境、預釋出環境、生產環境這幾個階段,你可以在你的容器平臺中把這幾個階段都包含進去,那怎麼區分哪些機器是屬於哪種環境呢?這時就用到了Label,比如你可以給測試環境的node1打標籤:

kubectl label node node1 zone=test

當然,在實際情況下,開發、測試、預釋出、生產這幾個環境互相都是不通的或者只是單向通,比如只有生產的機器才能向預釋出的機器傳送訊息,以此類推。如果容器平臺需要能操作所有環境,需要網路上打通防火牆。

區分機房

你的容器平臺可能會跨多個不同的機房,這樣為了把某個應用釋出到指定機房就需要在釋出的時候指定機房的標籤了,比如:

kubectl label node node1 zone=A

區分業務

如果你想在容器平臺中給不同的業務分別固定的資源池,就可以給Node打業務標籤,比如給廣告業務打標籤:

kubectl label node node1 business=guanggao

區分Master和Node節點

在openshift中master節點可以是可以被Pod排程使用的,有些情況下你只想要某個應用被排程到master節點上,比如內部映象庫的Pod,再比如構建映象的Pod。

想象一下,你的容器平臺和公司的程式碼庫地址是不通的,那麼你怎麼從程式碼庫拉取程式碼來編譯構建映象呢?你肯定會說讓網路部開通,那網路部會問你公司的程式碼庫是很重要的,不能隨便開,只能讓你指定一臺或幾臺機器來開通防火牆,那你要怎麼做呢?

解決方法就是把構建映象的Pod排程到指定節點,比如master節點上,然後開通從master節點到程式碼庫埠443的網路。

具體方法如下:

給master節點打標籤:

oc label node master1 region=infra

編輯master的/etc/origin/master/master-config.yaml

把:

projectConfig:
defaultNodeSelector: node-role.kubernetes.io/compute=true

改為:

projectConfig:
defaultNodeSelector: ''

然後重啟master服務

在所有的buildconfig中新增:

spec:
  nodeSelector:
    region: infra

更多容器技術請關注公眾號:
在這裡插入圖片描述