Namespace,Pod,Label,Deployment,Service
1、Namespace
1.1、簡介
命名空間(namespace, ns)
- 作用:實作多環境、多租戶的資源隔離。
- 預設情況下,K8s 叢集中任意 Pod 可以互相通路。
- 将叢集中的 Pod 等資源配置設定到不同的
,可形成邏輯上的 ”組“,以實作對不同組資源的隔離使用和管理。ns
- 示例
- 通過 K8s 授權機制,将 ns 交給不同租戶進行管理,實作多租戶資源隔離。
- 結合 K8s 資源配額機制,實作不同租戶的可用資源管理(如 CPU、記憶體使用量等)。
K8s 叢集啟動後,預設建立以下 ns
說明 | |
---|---|
default | 建立時未指定 ns 的資源,預設配置設定到 default 下。 |
kube-node-lease | 叢集節點的心跳維護(v1.13 引入) |
kube-public | 公開,包括未認證使用者 |
kube-system | 由 K8s 系統建立的資源 |
1.2、操作
👉 K8s 資源管理
示例:基于指令式指令,對 ns 資源進行操作。
1.2.1、建立
kubectl create ns 名稱
1.2.2、檢視
kubectl get ns [NAME] [flags]
kubectl describe ns [NAME] [flags]
① 所有 & 指定名稱
不指定 NAME,則列出所有。
② 輸出選項
-o
指定輸出選項
常用參數:json,name,wide,yaml
③ 描述
- Labels,Annotation
- Status:使用中(Active),終止中(Terminating)
- quota:針對 namespace 的資源限額。
- LimitRange:針對 namespace 中每個元件的資源限額。
1.2.3、删除
kubectl delete ns 名稱
2、Pod
2.1、簡介
Pod(pods, po)
- Pod 是 K8s 建立和管理的,可部署的最小計算單元。
- 程式部署在容器中,容器運作于 Pod 中。
- K8s 元件以
方式運作在Pod
命名空間下。kube-system
- master 元件:etcd,API server,Controller Manager,Scheduler
- node 元件:kube-proxy(包括 master 在内的每個節點都會生成)
- 其它:DNS 服務,網絡插件 flannel
2.2、操作
👉 K8s 資源管理
- 資源管理方式
- 指令式指令:通過 Pod 控制器管理 Pod,而不是直接管理 Pod。
- 對象配置:可直接管理 Pod。
- 操作 Pod 時,若沒有指定
,預設是 default。ns
示例:基于指令式指令,對 Pod 資源進行操作。
2.2.1、建立
建立 Pod 控制器并指定選項,由控制器去管理 Pod。
示例:建立名為 deploy-nginx 的 Pod 控制器,指定 Nginx 鏡像,暴露端口号 80,在 temp 命名空間下運作)。
-
kubectl run deploy-nginx --image=nginx:latest --port=80 --namespace temp
2.2.2、檢視
kubectl get pod [NAME] [flags]
kubectl describe pod [NAME] [flags]
① 所有 & 指定 ns
Hint:不會列出根容器(Pause)
- 所有:
-A
- 指定 ns:
-n
② 輸出選項
-o
指定輸出選項
常用參數:json,name,wide,yaml
示例 - wide:包含 IP 位址,運作節點等資訊。
③ 描述
指定 pod 名稱,命名空間
重點關注 Event。
④ 通路
通過以上指令檢視 pod 的 IP 位址,通過 curl
指令通路。
2.2.3、 删除
kubectl delete pod 名稱 -n 命名空間
kubectl delete deployment 名稱 -n 命名空間
① Pod
Pod 控制器監測 Pod 狀态,發現 Pod 死亡後會自動建立。
② Pod 控制器
删除 Pod 控制器後,Pod 自動被删除。
Hint
- 基于指令式指令隻能通過 Pod 控制器管理 Pod,
- 基于對象配置可直接管理 Pod。
3、Label
3.1、簡介
3.1.1、标簽
Label
- 作用:在資源上添加辨別,以實作資源的多元度分組,更靈活友善地進行資源配置設定、排程、配置、部署等管理工作。
- 特點:
- 鍵值對形式,任意數量。
- 通常在對象配置(yaml)中定義,也可在對象建立後動态更新。
- 示例
# 版本 "version":"1.0" "version":"release" "version":"stable" # 環境 "environment":"dev" "environment":"test" "environment":"pro" # 架構 "tier":"frontend" "tier":"backend"
3.1.2、标簽選擇器
Label Selector
- 作用:基于指定條件,查詢和篩選對應标簽的資源對象。
- 分類:可自由組合篩選條件,使用逗号
分隔。,
等式選擇 集合選擇 相等/包含 key = value
key in (v1, v2, ...)
不等/不含 key != value
key not in (v1, v2, ...)
3.2、操作
👉 K8s 資源管理
示例:基于指令式指令,對 Pod 進行 Label 相關資源操作。
- 指令
label
- 選項
,--show-labels
,-l
--overwrite
3.2.1、建立
示例:為 temp(命名空間)下的 Nginx(Pod)添加 version 标簽。
-
kubectl label pod pod名稱 -n 命名空間 version=1.0
3.2.2、檢視 & 篩選
kubectl get pod -n 命名空間 -l 标簽選擇器 --showlabels
- 檢視:
選項--show-labels
- 标簽選擇器:
選項-l
- 指定 Key:篩選帶有該 Key 的 Pod
- 指定 Key 和 Value:篩選帶有該 Key,且 Value 比對的 Pod。
3.2.3、更新 & 删除
- 更新:使用
選項,覆寫相同 key 的 label。--overwrite
-
# 更新version标簽 kubectl label --overwrite pod pod名稱 -n 命名空間 version=2.0
-
- 删除:在待删除的 key 值後添加減号
。-
-
# 删除version标簽 kubectl label pod pod名稱 -n 命名空間 version-
-
Hint:
基于聲明式對象配置方式,可更加靈活修改 Label 配置。
4、Deployment
4.1、簡介
Deployment(deploy)
- 通常,K8s 通過 Pod 控制器來實作對 Pod 的管理,確定 Pod 資源符合預期狀态。
- Deloyment 是 K8s 的一種 Pod 控制器。
4.2、操作
👉 K8s 資源管理
示例:基于指令式指令,對 Deployment 資源進行操作。
4.2.1、建立
kubectl run Pod控制器名稱 [flags]
常用選項:
- image:指定 Pod 中的容器鏡像。
- port:暴露的端口号。
- replicas:建立的 Pod 數量,預設 1。
- namespace:Pod 控制器和 Pod 的命名空間。
示例
建立名為 deploy-nginx1 的 Pod 控制器,指定 Nginx 鏡像,暴露端口号 80,數量 3,在 temp 命名空間下運作)。
kubectl run deploy-nginx --image=nginx:latest --port=80 --replicas=3 -n demo
4.2.2、檢視
kubectl get pod,deployment -n 命名空間
kubectl describe deployment 名稱 -n 命名空間
- Pod:以 Deployment 名稱作為 Pod 名稱字首和标簽。
- Deployment:通過标簽選擇器管理 Pod。
- Deployment 描述
4.2.3、删除
kubectl delete deployment 名稱 -n 命名空間
分析
- 通過 Deployment 管理 Pod,可提供高可用服務。
- 每個 Pod 會生成一個 IP,可在叢集内部通過 Pod 的 IP 位址通路 Pod 中的容器應用。
- 問題:通過
解決。Service
- Pod IP 随着 Pod 重建而變化。
- Pod IP 是叢集内可見的虛拟 IP,外部無法通路。
5、Service
5.1、簡介
Service(svc)
作用:提供遠端服務能力,作為 Pod 對外服務的統一入口。
5.2、操作
👉 K8s 資源管理
示例:基于指令式指令,對 Service 資源進行操作。
5.2.1、建立 & 檢視
需指定 deployment,用于建立 Service 與 Pod 的映射關系。
kubectl expose deployment 名稱 [flags]
常用選項:
- -n:命名空間
- --name:Service 名稱
- --type:Service 類型
- ClusterIP:僅叢集内部可通路。
- NodePort:可被叢集外部通路
- LoadBalancer:負載均衡
- 端口映射
- --port:Service 端口号
- --target-port:Pod 端口号
① ClusterIP
僅叢集内部可通路
- 暴露 Deployment,建立 Service
- 叢集内部通路 Service
② NodePort
可被叢集外部通路
- 暴露 Deployment,建立 Service
- 通路:内部通過 Service 的 IP 和端口号通路,外部通過主控端的 IP 和暴露端口号通路。
5.2.2、删除
kubectl delete service 名稱 -n 命名空間