k8s資源管理方式

misakivv發表於2024-06-16

目錄
  • 一、什麼是k8s資源管理
    • 1、簡介
    • 2、系統資源檢視
    • 3、常見的資源型別
  • 二、資源管理的方式
    • 1、命令式物件管理
    • 2、命令式物件配置
    • 3、宣告式物件配置
    • 4、區別
  • 三、命令式物件管理
    • 1、kubectl命令
      • 1.1、語法格式
      • 1.2、常見操作
      • 1.3、示例
        • 1.3.1、檢視所有的pod
        • 1.3.2、檢視某個pod
        • 1.3.3、檢視某個pod,以yaml格式展示
        • 1.3.4、建立一個namespace
        • 1.3.5、獲取namespace
        • 1.3.6、在此namespace下建立並執行一個nginx的Pod
        • 1.3.7、檢視新建立的pod
        • 1.3.8、刪除指定的pod
        • 1.3.9、刪除指定的namespace
  • 四、命令式物件配置
    • 1、示例
      • 1.1、建立一個nginxpod.yaml
      • 1.2、執行create命令建立資源
      • 1.3、執行get命令檢視資源
      • 1.4、執行delete命令刪除資源
    • 2、總結
  • 五、宣告式物件配置
    • 1、示例
      • 1.1、建立一個httpdpod.yaml
      • 1.2、第一次執行apply,資源正確建立
      • 1.3、檢視建立的資源
      • 1.4、第二次執行apply,反饋為unchanged
      • 1.5、修改yaml檔案內容
      • 1.6、第三次執行apply
    • 2、總結
  • 六、三種資源管理方式適用場景

一、什麼是k8s資源管理

1、簡介

在kubernetes中,所有的內容都抽象為資源,使用者需要透過操作資源來管理kubernetes。

kubernetes的本質上就是一個叢集系統,使用者可以在叢集中部署各種服務,所謂的部署服務,其實就是在kubernetes叢集中執行一個個的容器,並將指定的程式跑在容器中。

kubernetes的最小管理單元是pod而不是容器,所以只能將容器放在Pod中,而kubernetes一般也不會直接管理Pod,而是透過Pod控制器來管理Pod的。

Pod可以提供服務之後,就要考慮如何訪問Pod中服務,kubernetes提供了Service資源實現這個功能。

當然,如果Pod中程式的資料需要持久化,kubernetes還提供了各種儲存系統。

image-20240614112627753

學習kubernetes的核心,就是學習如何對叢集上的Pod、Pod控制器、Service、儲存等各種資源進行操作

2、系統資源檢視

kubectl api-resources

後續kubectl命令操作的資源有的用縮寫名,跟用全名一樣的。

image-20240614114543307

3、常見的資源型別

資源分類 資源名稱 縮寫 資源作用
叢集級別資源 nodes no 叢集組成部分
namespaces ns 隔離pod
pod資源 pods po 裝載容器
pod資源控制器 replicationcontrollers rc 控制pod資源
replicasets rs 控制pod資源
deployment deploy 控制pod資源
daemonsets ds 控制pod資源
jobs 控制pod資源
cronjobs cj 控制pod資源
horizontalpodautoscalers hpa 控制pod資源
statefulsets sts 控制pod資源
服務發現資源 servcies svc 統一pod對外介面
ingress ing 統一pod對外介面
儲存資源 volumeattachments 儲存
persistentvolumes pv 儲存
persistentvolumeclaims pvc 儲存
配置資源 configmaps cm 配置
secrets 配置

二、資源管理的方式

1、命令式物件管理

直接使用命令去操作kubernetes資源

kubectl run nginx-pod --image=nginx:1.17.1 --port=80

2、命令式物件配置

透過命令配置和配置檔案去操作kubernetes資源

kubectl create/patch -f nginx-pod.yaml

3、宣告式物件配置

透過apply命令和配置檔案去操作kubernetes資源

kubectl apply -f nginx-pod.yaml

4、區別

  • kubectl create命令可建立新資源。 因此,如果再次執行該命令,則會丟擲錯誤,因為資源名稱在名稱空間中是唯一的。
  • kubectl apply命令將配置應用於資源。 如果資源不在那裡,那麼它將被建立。 kubectl apply命令可以第二次執行,如果資源存在就執行更新,相當於kubectl patch操作
型別 操作物件 適用環境 優點 缺點
命令式物件管理 物件 測試 簡單 只能操作活動物件,無法審計、跟蹤
命令式物件配置 檔案 開發 可以審計、跟蹤 專案大時,配置檔案多,操作麻煩
宣告式物件配置 目錄 開發 支援目錄操作 意外情況下難以除錯

三、命令式物件管理

1、kubectl命令

kubectl是kubernetes叢集的命令列工具,透過它能夠對叢集本身進行管理,並能夠在叢集上進行容器化應用的安裝部署

1.1、語法格式

kubectl [command] [type] [name] [flags]
  • command(子命令):指定要對資源執行的操作,例如 creategetdescribedeleteapply 等。
  • type(資源型別):指定資源的物件型別,如 poddeploymentserviceconfigmap 等。資源型別區分大小寫,可以是單數、複數形式或某些情況下的縮寫形式,例如 po 可以代表 pod
  • name(資源名稱):指定資源的具體名稱。如果省略名稱,命令將作用於該型別的所有資源。名稱也是區分大小寫的。
  • flags(標誌/選項):可選引數,用於指定額外的指令或覆蓋預設行為。常見的 flags 包括 -n--namespace 用於指定名稱空間,-o--output 用於指定輸出格式(如 yamljson),--dry-run 用於預覽操作而不實際執行等。
kubectl --help

檢視kubectl的詳細操作命令

1.2、常見操作

命令分類 命令 含義 命令作用
基本命令 create 建立 建立一個資源
edit 編輯 編輯一個資源
get 獲取 獲取一個資源
patch 更新 更新一個資源
delete 刪除 刪除一個資源
explain 解釋 展示資源文件
執行和除錯 run 執行 在叢集中執行一個指定的映象
expose 暴露 暴露資源為Service
describe 描述 顯示資源內部資訊
logs 日誌 輸出容器在 pod 中的日誌
attach 纏繞 進入執行中的容器
exec 執行 執行容器中的一個命令
cp 複製 在Pod內外複製檔案
rollout 首次展示 管理資源的釋出
scale 規模 擴(縮)容Pod的數量
autoscale 自動調整 自動調整Pod的數量
高階命令 apply rc 透過檔案對資源進行配置
label 標籤 更新資源上的標籤
其他命令 cluster-info 叢集資訊 顯示叢集資訊
version 版本 顯示當前Server和Client的版本

1.3、示例

1.3.1、檢視所有的pod

kubectl get pod

1.3.2、檢視某個pod

kubectl get pod pod_name

1.3.3、檢視某個pod,以yaml格式展示

kubectl get pod pod_name -o yaml

1.3.4、建立一個namespace

kubectl create namespace dev

image-20240614185317003

1.3.5、獲取namespace

kubectl get ns

image-20240614185422426

1.3.6、在此namespace下建立並執行一個nginx的Pod

kubectl run pod1 --image=nginx:1.8 -n dev

1.3.7、檢視新建立的pod

kubectl get pod -n dev

image-20240615220640911

1.3.8、刪除指定的pod

kubectl delete pod pod1 -n dev

image-20240615222633908

1.3.9、刪除指定的namespace

kubectl delete ns dev

image-20240615222744423

四、命令式物件配置

命令式物件配置就是使用命令配合配置檔案一起來操作kubernetes資源。

1、示例

1.1、建立一個nginxpod.yaml

apiVersion: v1
kind: Namespace
metadata:
  name: dev

---

apiVersion: v1
kind: Pod
metadata:
  name: nginxpod
  namespace: dev
spec:
  containers:
  - name: nginx-containers
    image: nginx:latest

1.2、執行create命令建立資源

kubectl create -f nginxpod.yaml

image-20240615224743998

發現建立了兩個資源物件,分別是namespce和pod

1.3、執行get命令檢視資源

kubectl get -f nginxpod.yaml

image-20240615224933573

1.4、執行delete命令刪除資源

kubectl delete -f nginxpod.yaml

image-20240615225049324

2、總結

命令式物件配置的方式操作資源,可以簡單的認為:命令 + yaml配置檔案(裡面是命令需要的各種引數)

五、宣告式物件配置

宣告式物件配置跟命令式物件配置很相似,但是它只有一個命令apply。

1、示例

1.1、建立一個httpdpod.yaml

apiVersion: v1
kind: Namespace
metadata:
  name: httpd

---

apiVersion: v1
kind: pod
metadata:
  name: httpdpod
  namespace: httpd
spec:
  containers:
  - name: httpd-containers
    image: httpd:latest

1.2、第一次執行apply,資源正確建立

kubectl apply -f httpdpod.yaml

image-20240615230650643

1.3、檢視建立的資源

kubectl get -f httpdpod.yaml

image-20240615230833881

1.4、第二次執行apply,反饋為unchanged

kubectl apply -f httpdpod.yaml

image-20240615231006109

由於資源已經存在且httpdpod.yaml檔案未做更改

所以第二次的apply沒有任何改變

1.5、修改yaml檔案內容

apiVersion: v1
kind: Namespace
metadata:
  name: httpd

---

apiVersion: v1
kind: pod
metadata:
  name: httpdpod
  namespace: httpd
spec:
  containers:
  - name: httpd-containers
    image: nginx:latest		#由httpd:latest修改為nginx:latest

1.6、第三次執行apply

kubectl apply -f httpdpod.yaml

image-20240615231525874

由於只改了pod,沒有改名稱空間,所以反饋一個是unchanged(沒有改變),另一個是configured

2、總結

其實宣告式物件配置就是使用apply描述一個資源最終的狀態(在yaml中定義狀態) 使用apply操作資源:

  • 如果資源不存在,就建立,相當於 kubectl create
  • 如果資源已存在,就更新,相當於 kubectl patch

六、三種資源管理方式適用場景

  • 建立/更新資源 使用宣告式物件配置

    • kubectl apply -f XXX.yaml
      
  • 刪除資源 使用命令式物件配置

    •  kubectl delete -f XXX.yaml
      
  • 查詢資源 使用命令式物件管理

    • kubectl get(describe) 資源名稱
      

相關文章