參考整理於《kubernetes in Action》
本章內容涵蓋
- 創建、 啟動和停止 pod
- 使用標簽組織 pod 和其他資源
- 使用特定標簽對所有 pod 執行操作
- 使用命名空間將多個 pod 分到不重疊的組中
- 調度 pod 到指定類型的工作節點
標簽
標簽配置

查看標簽
kubectl get pods 命令默認不會列出任何標簽,但我們可以使用 --show-labels 選項來查看 :
kubectl get po --show-labels

如果你只對某些標簽感興趣,可以使用 L 選項指定它們並將它們分別顯示在 自己的列中,而不是列出所有標簽。
指定標簽列查看
kubectl get po -L creation_method,env

添加標簽:
kubectl label pod pod名 key=values

修改標簽:
kubectl label pod pod名 key=values --overwrite

標簽選擇器
標簽選擇器允許我們選擇標記有特定標簽的 pod 子集, 並對這些 pod 執行操作。是一種能夠根據是否包含key/values來進行過濾資源的准則。
標簽選擇器根據資源的以下條件來選擇資源 :
- 包含或不包含特定鍵的標簽
- 包含特定鍵和值的標簽
- 包含特定鍵的標簽,但其值與我們指定的不同(也就是not)
查看匹配 標簽key=標簽values 的pod

查看匹配 標簽key的pod

查看 不包含標簽env的pod

更多匹配:
- 匹配標簽key不是標簽values的pod creation_method!=manual
- 匹配帶有 env 標簽且值是 prod 或 devel 的 pod env in (prod, devel)
- 匹配帶有 env 標簽且值不是 prod 或 devel 的 pod env notin (prod, devel)
多條件匹配
使用逗號分隔的情況下,即可使用多個條件匹配。

節點標簽
通過節點標簽和節點標簽選擇器完成 把pod調度到符合條件的節點上
(標簽相關的操作都一樣,不區分具體是什么資源)
為節點添加標簽
kubectl label node node名 標簽key=標簽values

查看匹配標簽條件的node
kubectl get nodes -l 標簽key=標簽values

將 pod 調度到特定節點
通過節點選擇器來實現:節點上打上需要的標簽,然后在Pod的yaml文件中通過nodeSelector來進行匹配

以上只是一個關於標簽和標簽選擇器是如何工作以及如何使用它們影響 Kubernetes 操作的快速演示。
注解
除了標簽,pod和其他資源還可以包含注解。形式也是key:values,本質很相似。作用是為了展示任何你想要展示的信息。
查看注解
1、通過yaml形式

2、kubectl describe

添加、修改注解

我們己將注解 mycompany.com/someannotation 添加為值 foo bar。使用這種格式的注解鍵來避免鍵沖突是一個好方法。當不同的工具或庫向對象添加注 解時,如果它們不像我們剛剛那樣使用唯一的前綴,可能會意外地覆蓋對方的注解。

命名空間
通過命名空間可以把資源對象分割成完全獨立且不重疊的組,可以實現將包含大量組件的復雜系統拆分為更小的不同組,比如將資源分配為生產、開發和測試環境等,命名空間為資源名稱提供了一個作用域。除了隔離資源,命名空間還可用於僅允許某些用戶訪問某些特定資源,甚至限 制單個用戶可用的計算資源數量。相同命名空間內的資源名保證唯一即可,因此不同的命名空間下可以使用相同的資源名。這樣可以注意 節點資源是全局獨立不被約束在命名空間下的。
查看所有命名空間
kubectl get ns

如果沒有單獨指定命名空間,默認顯示的就是default命名空間下的資源
查看指定的命名空間下的資源,使用方法:-n 命名空間 ,-n等同於--namespace

創建命名空間
1、通過編寫yaml文件並提交到api server來創建

2、通過kubectl create namespace 命令的方式來創建

管理指定命名空間中的資源對象
在列出 描述、修改或刪除其他命名空間中的對象時 需要給 kubectl 命令 傳遞--namespace (或-n) 選項
1、通過kubectl命令的方式指定 -n 命名空間

2、通過在創建資源的metadata字段中添加 namespace: 命名空間 的屬性

提示:要想快速切換到不同的命名空間,可以設置以下別名:alias kcd='kubectl config set-context $(kubectl config current-context) --namespace'。 然后,可以使用 “kcd 命名空間” 在命名空間之間進行切換。
命名空間提供的隔離
盡管命名空間將資源對象分隔到了不同的組,只允許你對屬於特定命名空間的對象進行操作,但是命名空間並不是想象中的做到資源完全隔離,比如網絡隔離,這取決於 Kubernetes 所使用的網絡解決方案。
停止和刪除pod
在刪除 pod 的過程中,實際上我 在指示 kubernetes 終止該 pod 中的所有容器。kubernetes向進程發送一個SIGTERM信號並等待默認30s,使其正常關閉。如果沒有及時關閉,則通過SIGKILL終止該進程。因此,為了確保你 的進程總是正常關閉,進程需要正確處理 SIGTERM 信號。
1、按名稱刪除(可以同時指定多個pod名)

2、使用標簽選擇器刪除 pod

3、通過刪除整個命名空間來刪除 pod(pod 將會 伴隨命名空間 自動刪除)

4、刪除命名空間下所有pod

5、刪除命名空間中的(幾乎)所有資源(命令中的第一個 all 指定正在刪除所有資源類型,而 --all 選項指定將刪除 所有資源實例),但是有一些資源比如secret會被保留下來,並且需要被明確指定刪除。

在本章中,你應該已經掌握 : ·
如何決定是否應將某些容器組合在一個 pod 中。
- pod 可以運行多個進程,這和非容器世界中的物理主機類似。
- 可以編寫 YAML 或 JSON 描述文件用於創建 pod, 然后查看 pod 的規格及其 當前狀態。
- 使用標簽來組織 pod,並且一次在多個 pod 上執行操作。
- 可以使用節點標簽將 pod 只調度到提供某些指定特性的節點上。
- 注解允許人們、工具或庫將更大的數據塊附加到 pod。
- 命名空間可用於允許不同團隊使用同 一 集群,就像它們使用單獨的 Kubemetes 集群一樣。
- 使用 kubectl explain 命令快速查看任何 Kubernetes 資源的信息。
