自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Kubernetes(k8s)標(biāo)簽詳解

云計(jì)算 云原生
所謂標(biāo)簽就是指一個(gè)鍵值數(shù)據(jù),在 k8s 上任何資源都可以擁有標(biāo)簽;我們可以在創(chuàng)建資源時(shí)在配置清單中指定,也可以創(chuàng)建好資源以后再使用命令添加標(biāo)簽。

我們知道使用 pod 控制器創(chuàng)建的 pod,在 pod 故障以后重建后的 pod ip 地址和名稱是變化的,為了解決 pod 訪問問題,我們特此創(chuàng)建了 service,我們?cè)L問 service 的 ip 地址就可以正常訪問到 pod;那么問題來了,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 地址和名稱都是會(huì)發(fā)生變化的,所以靠 ip 地址和名稱關(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)簽來管理對(duì)應(yīng)的資源;一個(gè)資源可以擁有多個(gè)標(biāo)簽,同時(shí)一個(gè)標(biāo)簽也可以附加給多個(gè)資源;我們可以理解為標(biāo)簽就是用來邏輯的對(duì)資源進(jìn)行分組,擁有相同標(biāo)簽的資源為一組;標(biāo)簽的作用是方便用戶管理資源;比如在 k8s 上運(yùn)行了幾百個(gè) pod,我們想要管理功能相同的 pod,就可以把具有相似功能的 pod 附加同一個(gè)標(biāo)簽,然后要管理這些 pod 的時(shí),直接指定擁有指定標(biāo)簽的 pod 即可。

一、什么是 Kubernetes 標(biāo)簽

要學(xué)習(xí) k8s 標(biāo)簽,需要從以下幾個(gè)方面來學(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ì)用戶有意義且相關(guān)的對(duì)象的標(biāo)識(shí)屬性,但不直接對(duì)核心系統(tǒng)有語義含義。
  • 二是標(biāo)簽可以用于組織和選擇對(duì)象的子集。

標(biāo)簽的特點(diǎn)主要有如下三點(diǎn):

  • 每個(gè)對(duì)象都可以定義一組鍵值標(biāo)簽。
  • 每個(gè)鍵對(duì)于給定對(duì)象必須是唯一的。
  • 標(biāo)簽?zāi)軌蛑С指咝У牟樵兒捅O(jiān)聽操作,對(duì)于用戶界面和命令行是很理想的。

二、設(shè)計(jì)標(biāo)簽的目的

設(shè)計(jì)標(biāo)簽的主要目的是使用戶能夠以松耦合的方式將他們自己的組織結(jié)構(gòu)映射到系統(tǒng)對(duì)象,而無需客戶端存儲(chǔ)這些映射。

有如下幾個(gè)示例標(biāo)簽,例如:

在區(qū)分發(fā)行版本的時(shí)候,可以指定:

  • “release” : “canary”
  • “release” : “dev”
  • “release” : “beta”
  • “release” : “stable”
  • ……

在定義運(yùn)行環(huán)境時(shí),可以指定:

  • “environment”: “dev”
  • “environment”: “qa”
  • “environment”: “production”
  • ……

三、標(biāo)簽的語法

接著,我們來學(xué)習(xí)下標(biāo)簽的語法。

1. 前綴:

  • 前綴是可選的;
  • 如果指定,前綴必須是 DNS 子域:由點(diǎn) “.” 分割的一系列 DNS 標(biāo)簽,總共不超過 253 個(gè)字符,后跟斜杠 “/”;
  • 如果省略前綴,則假定標(biāo)簽鍵對(duì)用戶是私有的。向最終用戶對(duì)象添加標(biāo)簽的自動(dòng)系統(tǒng)組件(例如:kube-scheduler、kube-controller-manager、kube-apiserver、kubctl 或其他第三方自動(dòng)化工具)必須指定前綴

2. 名稱:

  • 名稱段是必需的
  • 必須小于等于 63 個(gè)字符,以字母數(shù)字字符 “[a-z0-9A-Z]” 開頭和結(jié)尾,帶有破折號(hào) “—”,下劃線 “_”,點(diǎn) “.” 和之前的字母數(shù)字

3. 小結(jié):有效的標(biāo)簽值

  • 必須為 63 個(gè)字符或更少(可以為空);
  • 除非標(biāo)簽值為空,必須以字母數(shù)字字符 “[a-z0-9A-Z]” 開頭和結(jié)尾;
  • 包含破折號(hào) “—”,下劃線 “_”,點(diǎn) “.” 和之前的字母數(shù)字

示例:是一個(gè)有 environment 為 qa,同時(shí) app 為 nginx 標(biāo)簽的 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

四、標(biāo)簽選擇運(yùn)算符

然后,我們來學(xué)習(xí)下標(biāo)簽選擇運(yùn)算符。 標(biāo)簽選擇運(yùn)算符分為兩種:

  • 一種是基于等值的需求:基于等值或基于不等值的需求允許按標(biāo)簽鍵和值進(jìn)行過濾。 可接受的運(yùn)算符有 “=”、“==”、“!=”。
  • 一種是基于集合的需求:基于集合的標(biāo)簽需求允許你通過一組值來過濾鍵。 持有三種操作符:“in”、“notin”、“exists”。

最后,我們來學(xué)習(xí)下如何使用 API 來使用標(biāo)簽。 前面提到的兩種標(biāo)簽選擇算符都可以通過 REST 客戶端用于 list 或者 watch 資源。

基于等值的需求可以使用如下命令來獲取 pods。

Kubectl get pods –l environment-production,tier=frontend

基于集合的需求可以使用如下命令來獲取 pods。

Kubectl get pods –l ‘environment in (production),tier in (frontend)

五、標(biāo)簽的使用

K8S 中資源標(biāo)簽 label

1. 說明

標(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)名稱空間下所有 pod 資源的標(biāo)簽:
kubectl get pods --show-labels
  • 查看指定名稱空間:
kubectl get pods -n kube-system --show-labels

(4) 更新:

加上–overwrite 參數(shù)修改標(biāo)簽:

kubectl get pods -n kube-system --show-labels

(5) 通過標(biāo)簽篩選:

  • 列出默認(rèn)名稱空間下標(biāo)簽 key 是 app 的 pod,不顯示標(biāo)簽:
kubectl get pods -l app
  • 列出默認(rèn)名稱空間下標(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: 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 標(biāo)簽的介紹。

責(zé)任編輯:趙寧寧 來源: 開源博客
相關(guān)推薦

2024-06-26 00:22:35

2022-04-22 13:32:01

K8s容器引擎架構(gòu)

2023-12-01 15:46:01

Kubernetes容器

2023-11-24 17:51:18

Kubernetes云原生

2023-09-11 14:21:00

2024-11-15 12:04:33

K8S容器化應(yīng)用

2023-11-06 07:16:22

WasmK8s模塊

2023-04-12 11:28:36

Kubernetes服務(wù)器

2024-05-10 08:00:48

K8soperatorGitHub

2024-09-26 18:04:02

2023-11-07 08:23:05

2024-06-12 13:21:06

2023-09-06 08:12:04

k8s云原生

2020-05-12 10:20:39

K8s kubernetes中間件

2024-06-06 09:19:09

2024-06-18 13:22:42

Nginx云原生Kubernetes

2020-07-17 17:17:16

Kubernetes宕機(jī)Spring Clou

2020-04-16 09:00:00

機(jī)器學(xué)習(xí)Kubeflow人工智能

2023-08-03 08:36:30

Service服務(wù)架構(gòu)

2023-08-04 08:19:02

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)