系列目錄html
在爲對象定義好Label後,其餘對象就能夠經過Label來對對象進行引用。Label的最多見的用法即是經過spec.selector來引用對象。nginx
apiVersion: v1 kind: ReplicationController metadata: name: nginx spec: replicas: 3 selector: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx ports: - containerPort: 80
關於Label的用法重點在於這兩步:redis
經過template.metadata.labels
字段爲即將新建的Pod附加Label
。在上面的例子中,新建了一個名稱爲nginx的Pod,它擁有一個鍵值對爲app:nginx的Label。api
經過spec.selector
字段來指定這個RC管理哪些Pod
。在上面的例子中,新建的RC會管理全部擁有app:nginxLabel的Pod。這樣的spec.selector
在Kubernetes中被稱做Label Selector
。app
咱們一般使用metadata.labels
字段,來爲對象添加Label。Label能夠爲多個。一個簡單的例子以下:frontend
apiVersion: v1 kind: Pod metadata: name: nginx labels: app: nginx release: stable spec: containers: - name: nginx image: nginx ports: - containerPort: 80
上面的描述文件爲名爲nginx的Pod添加了兩個Label,分別爲app: nginx和release: stable。日誌
注: label爲任意鍵值對,只要selector在選擇的時候匹配便可code
通常來講,咱們會給一個Pod(或其餘對象)定義多個Label
,以便於配置,部署等管理工做。例如:部署不一樣版本的應用到不一樣的環境中;或者監控和分析應用(日誌記錄,監控,報警等)。經過多個Label的設置,咱們就能夠多維度的Pod或其餘對象進行精細化管理。一些經常使用的Label示例以下:htm
relase: stable release: canary environment: dev environemnt: qa environment: production tier: frontend tier: backend tier: middleware ......
上面說過,Label是自定義的一些key/value對,你能夠爲所欲爲的設置,可是強烈建議按照必定的慣例或者組織內部規則,以便維護管理對象
帶有Label的對象建立好以後,咱們就能夠經過Label Selector來引用這些對象。
一般咱們經過描述文件中的spec.selector
字段來指定Label,從而Kubernetes尋找到全部包含你指定Label的對象,進行管理。
Kubernetes目前支持兩種類型的Label Selector:
RC只支持基於等式的Selector,而RS兩種Selector都支持。而RC是很早版本就建議棄用的特徵,所以實際項目中強烈建議使用
Deployment
來代替Repliation Controller (RC)
上文中建立RC的例子中的使用的就是基於等式的Selector。基於等式的Selector經過等式類的表達式來進行篩選。例如:
基於集合的Selector經過集合操做的表達式來進行篩選。例如
name in (redis-master, redis-slave) 選擇全部Label中key爲name,而且value爲redis-master或redis-slave的對象。
env not in (dev) 選擇全部Label中key爲env,而且value不爲dev的對象。
使用Label能夠給對象建立一組或多組標籤,Service,ReplicationController ReplicaSet,Deployment等組件則經過Label Selector來定位須要管理的對象,Label和Label Selector共同構成了Kubernetes系統中最核心的應用模型,使得對象可以精細分組,同時實現了集羣的高可用性。