掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
作者:Gauss松鼠會 2022-09-05 08:26:29
云計算
云原生 所謂標簽就是指一個鍵值數(shù)據(jù),在 k8s 上任何資源都可以擁有標簽;我們可以在創(chuàng)建資源時在配置清單中指定,也可以創(chuàng)建好資源以后再使用命令添加標簽。

成都創(chuàng)新互聯(lián)長期為上千客戶提供的網(wǎng)站建設(shè)服務(wù),團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為三山企業(yè)提供專業(yè)的做網(wǎng)站、網(wǎng)站設(shè)計,三山網(wǎng)站改版等技術(shù)服務(wù)。擁有十余年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。
我們知道使用 pod 控制器創(chuàng)建的 pod,在 pod 故障以后重建后的 pod ip 地址和名稱是變化的,為了解決 pod 訪問問題,我們特此創(chuàng)建了 service,我們訪問 service 的 ip 地址就可以正常訪問到 pod;那么問題來了,service 是怎樣去關(guān)聯(lián) pod 的呢?在 k8s 上如果使用 pod 控制創(chuàng)建的 pod,在 pod 發(fā)生故障以后,對應(yīng) pod 會被對應(yīng)的控制器重啟或重建,一個 pod 重建以后,對應(yīng)的 ip 地址和名稱都是會發(fā)生變化的,所以靠 ip 地址和名稱關(guān)聯(lián) pod 是不行的;那靠什么關(guān)聯(lián) pod 呢?在 k8s 上是使用的標簽和標簽選擇器的機制實現(xiàn)資源和資源間相互關(guān)聯(lián)的。
什么是標簽?它的作用是干嘛用的?
所謂標簽就是指一個鍵值數(shù)據(jù),在 k8s 上任何資源都可以擁有標簽;我們可以在創(chuàng)建資源時在配置清單中指定,也可以創(chuàng)建好資源以后再使用命令添加標簽;有了標簽以后,我們后續(xù)就可以根據(jù)標簽來管理對應(yīng)的資源;一個資源可以擁有多個標簽,同時一個標簽也可以附加給多個資源;我們可以理解為標簽就是用來邏輯的對資源進行分組,擁有相同標簽的資源為一組;標簽的作用是方便用戶管理資源;比如在 k8s 上運行了幾百個 pod,我們想要管理功能相同的 pod,就可以把具有相似功能的 pod 附加同一個標簽,然后要管理這些 pod 的時,直接指定擁有指定標簽的 pod 即可。
要學習 k8s 標簽,需要從以下幾個方面來學習。 首先,我們需要知道什么是 k8s 標簽。
在 k8s 中,標簽(Labels)是附加到 k8s 對象(比如 Pods)上的鍵值對。
標簽的一個示例如下所示:
“metadata”:{
“l(fā)abels”:{
“key1” : ”value1”
“key2” : ”value2”
}
}標簽的作用主要有兩點:
標簽的特點主要有如下三點:
設(shè)計標簽的主要目的是使用戶能夠以松耦合的方式將他們自己的組織結(jié)構(gòu)映射到系統(tǒng)對象,而無需客戶端存儲這些映射。
有如下幾個示例標簽,例如:
在區(qū)分發(fā)行版本的時候,可以指定:
在定義運行環(huán)境時,可以指定:
接著,我們來學習下標簽的語法。
示例:是一個有 environment 為 qa,同時 app 為 nginx 標簽的 pod 配置文件。
apiVersion:v1
kind:Pod
metadata:
name:label-demo
labels:
environment:production
app:nginx
spec:
containers:
-name:nginx
Image:nginx:1.14.2
Ports:
-containerPort:80
然后,我們來學習下標簽選擇運算符。 標簽選擇運算符分為兩種:
最后,我們來學習下如何使用 API 來使用標簽。 前面提到的兩種標簽選擇算符都可以通過 REST 客戶端用于 list 或者 watch 資源。
基于等值的需求可以使用如下命令來獲取 pods。
Kubectl get pods –l environment-production,tier=frontend
基于集合的需求可以使用如下命令來獲取 pods。
Kubectl get pods –l ‘environment in (production),tier in (frontend)’
K8S 中資源標簽 label
標簽 label:
標簽選擇器 label selector:
name=name1
name!=name1
name in (name1,name2)
name not in (name1,name2)
(1) 幫助:
kubectl label --help
(2) 打標簽:
pod:kubectl label pods busybox app=busybox
node:kubectl label node k8s-node01 k8s-node02 env=test
(3) 查看:
kubectl get pods busybox --show-labels
kubectl get pods --show-labels
kubectl get pods -n kube-system --show-labels
(4) 更新:
加上–overwrite 參數(shù)修改標簽:
kubectl get pods -n kube-system --show-labels
(5) 通過標簽篩選:
kubectl get pods -l app
kubectl get pods -l app=busybox
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-
(1) 創(chuàng)建 label-nginx.yaml
apiVersion: v1
kind: Pod
metadata:
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: TCP
(2) 創(chuàng)建
kubectl create -f label-nginx.yaml
(3) 刪除
kubectl delete -f label-nginx.yaml
以上就是 K8s 標簽的介紹。

我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流