來(lái)源| OSCHINA 社區(qū)
作者 |Gauss松鼠會(huì)
前言
我們知道使用 pod 控制器創(chuàng)建的 pod,在 pod 故障以后重建后的 pod ip 地址和名稱(chēng)是變化的,為了解決 pod 訪問(wèn)問(wèn)題,我們特此創(chuàng)建了 service,我們?cè)L問(wèn) service 的 ip 地址就可以正常訪問(wèn)到 pod;那么問(wèn)題來(lái)了,service 是怎樣去關(guān)聯(lián) pod 的呢?在 k8s 上如果使用 pod 控制創(chuàng)建的 pod,在 pod 發(fā)生故障以后,對(duì)應(yīng) pod 會(huì)被對(duì)應(yīng)的控制器重啟或重建,一個(gè) pod 重建以后,對(duì)應(yīng)的 ip 地址和名稱(chēng)都是會(huì)發(fā)生變化的,所以靠 ip 地址和名稱(chēng)關(guān)聯(lián) pod 是不行的;那靠什么關(guān)聯(lián) pod 呢?在 k8s 上是使用的標(biāo)簽和標(biāo)簽選擇器的機(jī)制實(shí)現(xiàn)資源和資源間相互關(guān)聯(lián)的。 什么是標(biāo)簽?它的作用是干嘛用的? 所謂標(biāo)簽就是指一個(gè)鍵值數(shù)據(jù),在 k8s 上任何資源都可以擁有標(biāo)簽;我們可以在創(chuàng)建資源時(shí)在配置清單中指定,也可以創(chuàng)建好資源以后再使用命令添加標(biāo)簽;有了標(biāo)簽以后,我們后續(xù)就可以根據(jù)標(biāo)簽來(lái)管理對(duì)應(yīng)的資源;一個(gè)資源可以擁有多個(gè)標(biāo)簽,同時(shí)一個(gè)標(biāo)簽也可以附加給多個(gè)資源;我們可以理解為標(biāo)簽就是用來(lái)邏輯的對(duì)資源進(jìn)行分組,擁有相同標(biāo)簽的資源為一組;標(biāo)簽的作用是方便用戶(hù)管理資源;比如在 k8s 上運(yùn)行了幾百個(gè) pod,我們想要管理功能相同的 pod,就可以把具有相似功能的 pod 附加同一個(gè)標(biāo)簽,然后要管理這些 pod 的時(shí),直接指定擁有指定標(biāo)簽的 pod 即可。
一、什么是 Kubernetes 標(biāo)簽
要學(xué)習(xí) k8s 標(biāo)簽,需要從以下幾個(gè)方面來(lái)學(xué)習(xí)。首先,我們需要知道什么是 k8s 標(biāo)簽。
在 k8s 中,標(biāo)簽(Labels)是附加到 k8s 對(duì)象(比如 Pods)上的鍵值對(duì)。
標(biāo)簽的一個(gè)示例如下所示:
“metadata”:{ “l(fā)abels”:{ “key1” : ”value1” “key2” : ”value2” } }標(biāo)簽的作用主要有兩點(diǎn): 一是標(biāo)簽旨在用于指定對(duì)用戶(hù)有意義且相關(guān)的對(duì)象的標(biāo)識(shí)屬性,但不直接對(duì)核心系統(tǒng)有語(yǔ)義含義。
二是標(biāo)簽可以用于組織和選擇對(duì)象的子集。 標(biāo)簽的特點(diǎn)主要有如下三點(diǎn):
1、每個(gè)對(duì)象都可以定義一組鍵值標(biāo)簽。
2、每個(gè)鍵對(duì)于給定對(duì)象必須是唯一的。
3、標(biāo)簽?zāi)軌蛑С指咝У牟樵?xún)和監(jiān)聽(tīng)操作,對(duì)于用戶(hù)界面和命令行是很理想的。
二、設(shè)計(jì)標(biāo)簽的目的
設(shè)計(jì)標(biāo)簽的主要目的是使用戶(hù)能夠以松耦合的方式將他們自己的組織結(jié)構(gòu)映射到系統(tǒng)對(duì)象,而無(wú)需客戶(hù)端存儲(chǔ)這些映射。 有如下幾個(gè)示例標(biāo)簽,例如: 1、在區(qū)分發(fā)行版本的時(shí)候,可以指定:
“release” : “canary”
“release” : “dev”
“release” : “beta”
“release” : “stable”
…… 2、在定義運(yùn)行環(huán)境時(shí),可以指定:
“environment”: “dev”
“environment”: “qa”
“environment”: “production”
……
三、標(biāo)簽的語(yǔ)法
接著,我們來(lái)學(xué)習(xí)下標(biāo)簽的語(yǔ)法。 1、前綴:
1) 前綴是可選的;
2) 如果指定,前綴必須是 DNS 子域:由點(diǎn) “.” 分割的一系列 DNS 標(biāo)簽,總共不超過(guò) 253 個(gè)字符,后跟斜杠 “/”;
3) 如果省略前綴,則假定標(biāo)簽鍵對(duì)用戶(hù)是私有的。向最終用戶(hù)對(duì)象添加標(biāo)簽的自動(dòng)系統(tǒng)組件(例如:kube-scheduler、kube-controller-manager、kube-apiserver、kubctl 或其他第三方自動(dòng)化工具)必須指定前綴 2、名稱(chēng):
1) 名稱(chēng)段是必需的
2) 必須小于等于 63 個(gè)字符,以字母數(shù)字字符 “[a-z0-9A-Z]” 開(kāi)頭和結(jié)尾,帶有破折號(hào) “—”,下劃線 “_”,點(diǎn) “.” 和之前的字母數(shù)字 3、小結(jié):有效的標(biāo)簽值
1) 必須為 63 個(gè)字符或更少(可以為空);
2) 除非標(biāo)簽值為空,必須以字母數(shù)字字符 “[a-z0-9A-Z]” 開(kāi)頭和結(jié)尾;
3) 包含破折號(hào) “—”,下劃線 “_”,點(diǎn) “.” 和之前的字母數(shù)字
示例:是一個(gè)有 environment 為 qa,同時(shí) app 為 nginx 標(biāo)簽的 pod 配置文件。
apiVersion:v1kind:Podmetadata: name:label-demo labels: environment:production app:nginx spec: containers: -name:nginx Image:nginx:1.14.2 Ports: -containerPort:80
四、標(biāo)簽選擇運(yùn)算符
然后,我們來(lái)學(xué)習(xí)下標(biāo)簽選擇運(yùn)算符。標(biāo)簽選擇運(yùn)算符分為兩種: 一種是基于等值的需求:
基于等值或基于不等值的需求允許按標(biāo)簽鍵和值進(jìn)行過(guò)濾。可接受的運(yùn)算符有 “=”、“==”、“!=”。
一種是基于集合的需求:
基于集合的標(biāo)簽需求允許你通過(guò)一組值來(lái)過(guò)濾鍵。持有三種操作符:“in”、“notin”、“exists”。 最后,我們來(lái)學(xué)習(xí)下如何使用 API 來(lái)使用標(biāo)簽。前面提到的兩種標(biāo)簽選擇算符都可以通過(guò) REST 客戶(hù)端用于 list 或者 watch 資源。 基于等值的需求可以使用如下命令來(lái)獲取 pods。
Kubectl get pods –l environment-production,tier=frontend
基于集合的需求可以使用如下命令來(lái)獲取 pods。
Kubectl get pods –l ‘environment in (production),tier in (frontend)’
五、標(biāo)簽的使用
K8S 中資源標(biāo)簽 label
1、說(shuō)明
標(biāo)簽 label:
資源標(biāo)志
格式 key=value
可添加刪除多個(gè)標(biāo)簽 標(biāo)簽選擇器 label selector:
用于選擇資源
name=name1
name!=name1
name in (name1,name2)
name not in (name1,name2) 2、指令
1)幫助:
kubectl label --help
2)打標(biāo)簽:
pod:kubectl label pods busybox app=busybox node:kubectl label node k8s-node01 k8s-node02 env=test
3)查看:
?查看 pods 為 busybox 的標(biāo)簽:
kubectl get pods busybox --show-labels
?查看默認(rèn)名稱(chēng)空間下所有 pod 資源的標(biāo)簽:
kubectl get pods --show-labels
?查看指定名稱(chēng)空間:
kubectl get pods -n kube-system --show-labels
4)更新:
加上–overwrite 參數(shù)修改標(biāo)簽
kubectl label po busybox app=busybox2 -n kube-public --overwrite
5)通過(guò)標(biāo)簽篩選:
?列出默認(rèn)名稱(chēng)空間下標(biāo)簽 key 是 app 的 pod,不顯示標(biāo)簽:
kubectl get pods -l app
?列出默認(rèn)名稱(chēng)空間下標(biāo)簽 key 是 app、值是 busybox 的 pod,不顯示標(biāo)簽:
kubectl get pods -l app=busybox
?多個(gè)篩選條件:
kubectl get po -l version!=v1,app=nginx
6)刪除:
pod:kubectl label po busybox app- -n kube-public node:kubectl label node k8s-node02 env-
3、配置
1)創(chuàng)建 label-nginx.yaml
apiVersion: v1kind: Podmetadata: name: nginx namespace: dev labels: version: "1.0.0" env:"test"spec: containers: - image: nginx imagePullPolicy: IfNotPresent name: pod ports: - name: nginx-port containerPort: 80 protocol:TCP2)創(chuàng)建
kubectl create -f label-nginx.yaml
3)刪除
kubectl delete -f label-nginx.yaml
以上就是 K8s 標(biāo)簽的介紹。
編輯:黃飛
-
控制器
+關(guān)注
關(guān)注
112文章
16464瀏覽量
179613 -
選擇器
+關(guān)注
關(guān)注
0文章
109瀏覽量
14591 -
kubernetes
+關(guān)注
關(guān)注
0文章
227瀏覽量
8757
原文標(biāo)題:Kubernetes(k8s)標(biāo)簽詳解
文章出處:【微信號(hào):OSC開(kāi)源社區(qū),微信公眾號(hào):OSC開(kāi)源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
C語(yǔ)言運(yùn)算符的使用方法
![C語(yǔ)言<b class='flag-5'>運(yùn)算符</b>的使用方法](https://file1.elecfans.com/web2/M00/AC/09/wKgaomVDF1-AYBFKAACPJ18ESQk001.jpg)
條件運(yùn)算符是什么_條件運(yùn)算符有哪些
![條件<b class='flag-5'>運(yùn)算符</b>是什么_條件<b class='flag-5'>運(yùn)算符</b>有哪些](https://file1.elecfans.com//web2/M00/A6/E7/wKgZomUMQSuAbA9jAAA7bHPujzo538.png)
單目運(yùn)算符是什么_單目運(yùn)算符有哪些
![單目<b class='flag-5'>運(yùn)算符</b>是什么_單目<b class='flag-5'>運(yùn)算符</b>有哪些](https://file.elecfans.com/web1/M00/46/12/o4YBAFqRG1aAAzScAABA3aO8y-4633.png)
C運(yùn)算符的優(yōu)先級(jí)和結(jié)合性詳細(xì)解決
淺析MySQL中的各類(lèi)運(yùn)算符
![淺析MySQL中的各類(lèi)<b class='flag-5'>運(yùn)算符</b>](https://file.elecfans.com/web1/M00/BA/34/o4YBAF6YKCOAdrrkAADxZ-io9KA956.png)
python運(yùn)算符是什么
SystemVerilog-運(yùn)算符/表達(dá)式規(guī)則
什么是運(yùn)算符重載
條件(三元)運(yùn)算符
![條件(三元)<b class='flag-5'>運(yùn)算符</b>](https://file.elecfans.com/web2/M00/8F/7C/poYBAGPkkdmAAnFeAAbOE5WUhL4016.jpg)
Python中運(yùn)算符介紹
Go語(yǔ)言運(yùn)算符主要包括哪些呢?
![Go語(yǔ)言<b class='flag-5'>運(yùn)算符</b>主要包括哪些呢?](https://file1.elecfans.com/web2/M00/88/BD/wKgaomRwZX2AXGX6AAAQA292zsw400.jpg)
評(píng)論