- 一、什麼是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、kubectl命令
- 四、命令式物件配置
- 1、示例
- 1.1、建立一個nginxpod.yaml
- 1.2、執行create命令建立資源
- 1.3、執行get命令檢視資源
- 1.4、執行delete命令刪除資源
- 2、總結
- 1、示例
- 五、宣告式物件配置
- 1、示例
- 1.1、建立一個httpdpod.yaml
- 1.2、第一次執行apply,資源正確建立
- 1.3、檢視建立的資源
- 1.4、第二次執行apply,反饋為unchanged
- 1.5、修改yaml檔案內容
- 1.6、第三次執行apply
- 2、總結
- 1、示例
- 六、三種資源管理方式適用場景
一、什麼是k8s資源管理
1、簡介
在kubernetes中,所有的內容都抽象為資源,使用者需要透過操作資源來管理kubernetes。
kubernetes的本質上就是一個叢集系統,使用者可以在叢集中部署各種服務,所謂的部署服務,其實就是在kubernetes叢集中執行一個個的容器,並將指定的程式跑在容器中。
kubernetes的最小管理單元是pod而不是容器,所以只能將容器放在Pod
中,而kubernetes一般也不會直接管理Pod,而是透過Pod控制器
來管理Pod的。
Pod可以提供服務之後,就要考慮如何訪問Pod中服務,kubernetes提供了Service
資源實現這個功能。
當然,如果Pod中程式的資料需要持久化,kubernetes還提供了各種儲存
系統。
學習kubernetes的核心,就是學習如何對叢集上的
Pod、Pod控制器、Service、儲存
等各種資源進行操作
2、系統資源檢視
kubectl api-resources
後續kubectl命令操作的資源有的用縮寫名,跟用全名一樣的。
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(子命令):指定要對資源執行的操作,例如
create
、get
、describe
、delete
、apply
等。 - type(資源型別):指定資源的物件型別,如
pod
、deployment
、service
、configmap
等。資源型別區分大小寫,可以是單數、複數形式或某些情況下的縮寫形式,例如po
可以代表pod
。 - name(資源名稱):指定資源的具體名稱。如果省略名稱,命令將作用於該型別的所有資源。名稱也是區分大小寫的。
- flags(標誌/選項):可選引數,用於指定額外的指令或覆蓋預設行為。常見的 flags 包括
-n
或--namespace
用於指定名稱空間,-o
或--output
用於指定輸出格式(如yaml
、json
),--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
1.3.5、獲取namespace
kubectl get ns
1.3.6、在此namespace下建立並執行一個nginx的Pod
kubectl run pod1 --image=nginx:1.8 -n dev
1.3.7、檢視新建立的pod
kubectl get pod -n dev
1.3.8、刪除指定的pod
kubectl delete pod pod1 -n dev
1.3.9、刪除指定的namespace
kubectl delete ns dev
四、命令式物件配置
命令式物件配置就是使用命令配合配置檔案一起來操作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
發現建立了兩個資源物件,分別是namespce和pod
1.3、執行get命令檢視資源
kubectl get -f nginxpod.yaml
1.4、執行delete命令刪除資源
kubectl delete -f nginxpod.yaml
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
1.3、檢視建立的資源
kubectl get -f httpdpod.yaml
1.4、第二次執行apply,反饋為unchanged
kubectl apply -f httpdpod.yaml
由於資源已經存在且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
由於只改了pod,沒有改名稱空間,所以反饋一個是unchanged(沒有改變),另一個是configured
2、總結
其實宣告式物件配置就是使用apply描述一個資源最終的狀態(在yaml中定義狀態) 使用apply操作資源:
- 如果資源不存在,就建立,相當於 kubectl create
- 如果資源已存在,就更新,相當於 kubectl patch
六、三種資源管理方式適用場景
-
建立/更新資源 使用
宣告式物件配置
-
kubectl apply -f XXX.yaml
-
-
刪除資源 使用
命令式物件配置
-
kubectl delete -f XXX.yaml
-
-
查詢資源 使用
命令式物件管理
-
kubectl get(describe) 資源名稱
-