Kubernetes基本概念之Label

在學習本節(jié)內容之前,希望你已經對Pod和ReplicaSet有了基本的了解。具體請參考以下兩篇文章:

Label是Kubernetes系統(tǒng)中的一個核心概念。Label以key/value鍵值對的形式附加到任何對象上,如Pod,Service,Node,RC(ReplicationController)/RS(ReplicaSet)等。Label可以在創(chuàng)建對象時就附加到對象上,也可以在對象創(chuàng)建后通過API進行額外添加或修改。

在為對象定義好Label后,其他對象就可以通過Label來對對象進行引用。Label的最常見的用法便是通過spec.selector來引用對象。下面是文章:Kubernetes對象之ReplicaSet 中新建一個RC的例子:

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的用法重點在于這兩步:

  • 通過template.metadata.labels字段為即將新建的Pod附加Label。在上面的例子中,新建了一個名稱為nginx的Pod,它擁有一個鍵值對為app:nginx的Label。
  • 通過spec.selector字段來指定這個RC管理哪些Pod。在上面的例子中,新建的RC會管理所有擁有app:nginxLabel的Pod。這樣的spec.selector在Kubernetes中被稱作Label Selector。

1. Label的定義

我們通常使用metadata.labels字段,來為對象添加Label。Label可以為多個。一個簡單的例子如下:

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: nginxrelease: stable。

1.1 常見的Label

一般來說,我們會給一個Pod(或其他對象)定義多個Label,以便于配置,部署等管理工作。例如:部署不同版本的應用到不同的環(huán)境中;或者監(jiān)控和分析應用(日志記錄,監(jiān)控,報警等)。通過多個Label的設置,我們就可以多維度的Pod或其他對象進行精細化管理。一些常用的Label示例如下:

relase: stable
release: canary
environment: dev
environemnt: qa
environment: production
tier: frontend
tier: backend
tier: middleware
......

Label是自定義的一些key/value對,你可以隨心所欲的設置。

2. Label Selector

帶有Label的對象創(chuàng)建好之后,我們就可以通過Label Selector來引用這些對象。

通常我們通過描述文件中的spec.selector字段來指定Label,從而Kubernetes尋找到所有包含你指定Label的對象,進行管理。

Kubernetes目前支持兩種類型的Label Selector:

  • 基于等式的Selector(Equality-based)
  • 基于集合的Selector(Set-based)

RC只支持基于等式的Selector,而RS兩種Selector都支持。

2.1 基于等式的Selector

上文中創(chuàng)建RC的例子中的使用的就是基于等式的Selector?;诘仁降腟elector通過等式類的表達式來進行篩選。例如:

  • app=nginx 選擇所有Label中key為app,value為nginx的對象。
  • env!=dev 選擇所有Label中key為env,value不等于dev的對象。

2.2 基于集合的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可以給對象創(chuàng)建一組或多組標簽,Service,RC/RS等組件則通過Label Selector來定位需要管理的對象,Label和Label Selector共同構成了Kubernetes系統(tǒng)中最核心的應用模型,使得對象能夠精細分組,同時實現(xiàn)了集群的高可用性。

參考文章

  • Kubernetes權威指南
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容