RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

什么是Kubernetes標簽 標簽選擇運算符介紹

西西 ? 來源:OSC開源社區(qū) ? 作者:Gauss松鼠會 ? 2022-09-06 10:56 ? 次閱讀

來源| OSCHINA 社區(qū)

作者 |Gauss松鼠會

前言

我們知道使用 pod 控制器創(chuàng)建的 pod,在 pod 故障以后重建后的 pod ip 地址和名稱是變化的,為了解決 pod 訪問問題,我們特此創(chuàng)建了 service,我們訪問 service 的 ip 地址就可以正常訪問到 pod;那么問題來了,service 是怎樣去關聯(lián) pod 的呢?在 k8s 上如果使用 pod 控制創(chuàng)建的 pod,在 pod 發(fā)生故障以后,對應 pod 會被對應的控制器重啟或重建,一個 pod 重建以后,對應的 ip 地址和名稱都是會發(fā)生變化的,所以靠 ip 地址和名稱關聯(lián) pod 是不行的;那靠什么關聯(lián) pod 呢?在 k8s 上是使用的標簽和標簽選擇器的機制實現(xiàn)資源和資源間相互關聯(lián)的。 什么是標簽?它的作用是干嘛用的? 所謂標簽就是指一個鍵值數(shù)據(jù),在 k8s 上任何資源都可以擁有標簽;我們可以在創(chuàng)建資源時在配置清單中指定,也可以創(chuàng)建好資源以后再使用命令添加標簽;有了標簽以后,我們后續(xù)就可以根據(jù)標簽來管理對應的資源;一個資源可以擁有多個標簽,同時一個標簽也可以附加給多個資源;我們可以理解為標簽就是用來邏輯的對資源進行分組,擁有相同標簽的資源為一組;標簽的作用是方便用戶管理資源;比如在 k8s 上運行了幾百個 pod,我們想要管理功能相同的 pod,就可以把具有相似功能的 pod 附加同一個標簽,然后要管理這些 pod 的時,直接指定擁有指定標簽的 pod 即可。

一、什么是 Kubernetes 標簽

要學習 k8s 標簽,需要從以下幾個方面來學習。首先,我們需要知道什么是 k8s 標簽。
在 k8s 中,標簽(Labels)是附加到 k8s 對象(比如 Pods)上的鍵值對。
標簽的一個示例如下所示:

“metadata”:{  
    “l(fā)abels”:{    
    “key1” : ”value1”  
“key2” : ”value2”  }  }
標簽的作用主要有兩點: 一是標簽旨在用于指定對用戶有意義且相關的對象的標識屬性,但不直接對核心系統(tǒng)有語義含義。
二是標簽可以用于組織和選擇對象的子集。 標簽的特點主要有如下三點:
1、每個對象都可以定義一組鍵值標簽。
2、每個鍵對于給定對象必須是唯一的。
3、標簽能夠支持高效的查詢和監(jiān)聽操作,對于用戶界面和命令行是很理想的。

二、設計標簽的目的

設計標簽的主要目的是使用戶能夠以松耦合的方式將他們自己的組織結構映射到系統(tǒng)對象,而無需客戶端存儲這些映射。 有如下幾個示例標簽,例如: 1、在區(qū)分發(fā)行版本的時候,可以指定:
“release” : “canary”
“release” : “dev”
“release” : “beta”
“release” : “stable”
…… 2、在定義運行環(huán)境時,可以指定:
“environment”: “dev”
“environment”: “qa”
“environment”: “production”
……

三、標簽的語法

接著,我們來學習下標簽的語法。 1、前綴:
1) 前綴是可選的;
2) 如果指定,前綴必須是 DNS 子域:由點 “.” 分割的一系列 DNS 標簽,總共不超過 253 個字符,后跟斜杠 “/”;
3) 如果省略前綴,則假定標簽鍵對用戶是私有的。向最終用戶對象添加標簽的自動系統(tǒng)組件(例如:kube-scheduler、kube-controller-manager、kube-apiserver、kubctl 或其他第三方自動化工具)必須指定前綴 2、名稱:
1) 名稱段是必需的
2) 必須小于等于 63 個字符,以字母數(shù)字字符 “[a-z0-9A-Z]” 開頭和結尾,帶有破折號 “—”,下劃線 “_”,點 “.” 和之前的字母數(shù)字 3、小結:有效的標簽值
1) 必須為 63 個字符或更少(可以為空);
2) 除非標簽值為空,必須以字母數(shù)字字符 “[a-z0-9A-Z]” 開頭和結尾;
3) 包含破折號 “—”,下劃線 “_”,點 “.” 和之前的字母數(shù)字
示例:是一個有 environment 為 qa,同時 app 為 nginx 標簽的 pod 配置文件。

apiVersion:v1kind:Podmetadata: name:label-demo 
 labels:  environment:production 
 app:nginx 
 spec:    containers:  
  -name:nginx     
  Image:nginx:1.14.2  
 Ports: 
     -containerPort:80

四、標簽選擇運算符

然后,我們來學習下標簽選擇運算符。標簽選擇運算符分為兩種: 一種是基于等值的需求:
基于等值或基于不等值的需求允許按標簽鍵和值進行過濾。可接受的運算符有 “=”、“==”、“!=”。
一種是基于集合的需求:
基于集合的標簽需求允許你通過一組值來過濾鍵。持有三種操作符:“in”、“notin”、“exists”。 最后,我們來學習下如何使用 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
1、說明
標簽 label:
資源標志
格式 key=value
可添加刪除多個標簽 標簽選擇器 label selector:
用于選擇資源
name=name1
name!=name1
name in (name1,name2)
name not in (name1,name2) 2、指令
1)幫助:

kubectl label --help

2)打標簽:

pod:kubectl label pods busybox app=busybox node:kubectl label node k8s-node01 k8s-node02 env=test

3)查看:
?查看 pods 為 busybox 的標簽:

kubectl get pods busybox --show-labels

?查看默認名稱空間下所有 pod 資源的標簽:

kubectl get pods --show-labels

?查看指定名稱空間:

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

4)更新:
加上–overwrite 參數(shù)修改標簽

kubectl label po busybox app=busybox2 -n kube-public --overwrite

5)通過標簽篩選:
?列出默認名稱空間下標簽 key 是 app 的 pod,不顯示標簽:

kubectl get pods -l app

?列出默認名稱空間下標簽 key 是 app、值是 busybox 的 pod,不顯示標簽:

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-

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:TCP
2)創(chuàng)建

kubectl create -f label-nginx.yaml

3)刪除

kubectl delete -f label-nginx.yaml

以上就是 K8s 標簽的介紹。

編輯:黃飛

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 控制器
    +關注

    關注

    112

    文章

    16332

    瀏覽量

    177803
  • 選擇器
    +關注

    關注

    0

    文章

    107

    瀏覽量

    14534
  • kubernetes
    +關注

    關注

    0

    文章

    224

    瀏覽量

    8710

原文標題:Kubernetes(k8s)標簽詳解

文章出處:【微信號:OSC開源社區(qū),微信公眾號:OSC開源社區(qū)】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    C語言運算符的使用方法

    詳細介紹了C語言表達式、算術運算符、賦值運算符、關系運算符、條件結構、邏輯運算符、位運算符的語法
    發(fā)表于 11-02 11:30 ?1603次閱讀
    C語言<b class='flag-5'>運算符</b>的使用方法

    FBD運算符名稱

    本內(nèi)容介紹了FBD的運算符名稱的解釋
    發(fā)表于 04-29 10:51 ?0次下載
    FBD<b class='flag-5'>運算符</b>名稱

    條件運算符是什么_條件運算符有哪些

    運算符優(yōu)先級高于賦值、逗號運算符,低于其他運算符。關系運算實際上是邏輯比較運算,它是邏輯運算
    發(fā)表于 11-16 16:02 ?1.1w次閱讀
    條件<b class='flag-5'>運算符</b>是什么_條件<b class='flag-5'>運算符</b>有哪些

    單目運算符是什么_單目運算符有哪些

    單目運算符是指運算所需變量為一個的運算符,又叫一元運算符,其中有邏輯非運算符:!、按位取反運算符
    的頭像 發(fā)表于 02-24 15:42 ?6.1w次閱讀
    單目<b class='flag-5'>運算符</b>是什么_單目<b class='flag-5'>運算符</b>有哪些

    C運算符的優(yōu)先級和結合性詳細解決

    運算符是一種告訴編譯器執(zhí)行特定的數(shù)學或邏輯操作的符號。 C語言內(nèi)置了豐富的運算符,大體可分為10類:算術運算符、關系運算符、邏輯運算符、位
    的頭像 發(fā)表于 02-22 17:27 ?3232次閱讀

    淺析MySQL中的各類運算符

    MySQL支持多種運算符,我們在寫SQL腳本時經(jīng)常會需要用到各種各樣的運算符,這些運算符可以用來連接表達式,進而從數(shù)據(jù)庫中查詢我們需要的結果集等。這些類型主要包括算術運算符、比較
    的頭像 發(fā)表于 05-03 17:41 ?2051次閱讀
    淺析MySQL中的各類<b class='flag-5'>運算符</b>

    python運算符是什么

    python運算符 0. 什么是運算符? 本章節(jié)主要說明Python的運算符。舉個簡單的例子 4 +5 = 9 。 例子中,4和5被稱為操作數(shù),“+”號為運算符。 Python語言支持
    的頭像 發(fā)表于 02-21 16:44 ?2377次閱讀

    SystemVerilog-運算符/表達式規(guī)則

    RTL建模中廣泛使用的運算符是條件運算符,也稱為三元運算符,該運算符用于在兩個表達式之間進行選擇——表5-2列出了用于表示條件
    的頭像 發(fā)表于 08-03 09:03 ?3104次閱讀

    什么是運算符重載

    重載運算符是具有特殊名稱的函數(shù),是通過關鍵字** operator **后跟運算符的符號來定義的
    的頭像 發(fā)表于 01-20 15:30 ?2486次閱讀

    條件(三元)運算符

    RTL建模中廣泛使用的運算符是條件運算符,也稱為三元運算符,該運算符用于在兩個表達式之間進行選擇——表5-2列出了用于表示條件
    的頭像 發(fā)表于 02-09 15:42 ?1355次閱讀
    條件(三元)<b class='flag-5'>運算符</b>

    什么是移位運算符

    移位運算符將向量的位向右或向左移位指定的次數(shù)。SystemVerilog具有按位和算術移位運算符
    的頭像 發(fā)表于 02-09 15:49 ?1826次閱讀
    什么是移位<b class='flag-5'>運算符</b>

    Python中運算符介紹

    ? 1. 邏輯運算符 邏輯運算符總結: 測試代碼 a, b, c = 1, 2, 3 print((a 《 b) and (b 《 c)) print((a 》 b) or (a 《 b
    的頭像 發(fā)表于 03-08 17:22 ?1111次閱讀

    Go語言運算符主要包括哪些呢?

    Go語言運算符主要包括:算數(shù)運算符、關系運算符、邏輯運算符、位運算符、賦值運算符和其他
    的頭像 發(fā)表于 05-26 15:54 ?858次閱讀
    Go語言<b class='flag-5'>運算符</b>主要包括哪些呢?

    python中運算符的優(yōu)先級大小

    Python中運算符的優(yōu)先級決定了表達式中各個運算符的計算順序。了解運算符的優(yōu)先級對于正確理解和編寫復雜的表達式非常重要。本文將詳細介紹Python中
    的頭像 發(fā)表于 11-29 16:21 ?3382次閱讀

    c語言從右到左的運算符有哪些

    用在變量之后時,它們會先返回變量的原始值,然后再進行遞增或遞減。 三元條件運算符 ( ?: ):這個運算符的求值順序是從右到左。首先計算第三個表達式,然后根據(jù)第一個表達式的結果選擇第二個或第三個表達式。 賦值
    的頭像 發(fā)表于 08-20 11:39 ?895次閱讀
    RM新时代网站-首页