天天看點

K8s4️⃣淺談 K8s 術語

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 時,若沒有指定

    ns

    ,預設是 default。

示例:基于指令式指令,對 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、更新 & 删除

  • 更新:使用

    --overwrite

    選項,覆寫相同 key 的 label。
    • # 更新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

僅叢集内部可通路
  1. 暴露 Deployment,建立 Service
  2. 叢集内部通路 Service

② NodePort

可被叢集外部通路
  1. 暴露 Deployment,建立 Service
  2. 通路:内部通過 Service 的 IP 和端口号通路,外部通過主控端的 IP 和暴露端口号通路。

5.2.2、删除

kubectl delete service 名稱 -n 命名空間