【K8s 萬物皆資源對象】通過 kubectl 操作資源實作對 K8s 的管理;
【資源管理方式】指令式指令,指令式對象配置,聲明式對象配置。
1、資源管理
K8s 本質是一組伺服器叢集,萬物皆資源對象
通過操作資源對象,實作對 K8s 的管理。
示例:(下劃線粗體部分是資源)
- 部署服務:在 Pod 中運作容器,在容器中部署微服務應用。
- 通路服務:通過 K8s 提供的 Service。
- 資料持久化:通過 K8s 提供的存儲系統。
2、資源管理方式
關于 kubectl
指令,見👉 本文附 1
Hint:對同一個資源對象的單次操作,隻能選用其中一種方式。
- 指令式指令:直接使用指令操作資源。
- 對象配置:先編寫配置檔案,再使用指令操作資源(指令式、聲明式)。
指令式指令 對象配置(指令式) 對象配置(聲明式) 操作方式 指令 + 追加選項 指令 + 配置檔案 apply + 配置檔案 操作對象 活躍對象 單個檔案 目錄 适用環境 測試、開發 生産 生産 審計和跟蹤(曆史記錄) ❌ ✔ ✔ 複用性(模闆) ❌ ✔ ✔ 其它 簡單易用 項目龐大時配置檔案多,操作麻煩 不易于調試
2.1、指令式指令
指令式指令:指令 + 追加選項
以參數的形式,将選項追加在指令之後。
示例:建立一個 namespace 和 pod,示範基本指令。
2.1.1、建立 ns
建立并檢視 namespace# 建立 kubectl create namespace 名稱 # 檢視 kubectl get namespace
- 列出 ns
- 建立一個名為 temp 的 ns,檢視
2.1.2、建立 Pod
操作 Pod 時,若沒有指定 ns
,預設是 default。
- 建立并運作一個 Pod
-
通過 pod 控制器運作 Podrun
-
指定 Nginx 最新鏡像,--image
指定 ns 為 temp-n
- 若建立 Pod 時沒有指定 ns,預設屬于 default。
kubectl run pod --image=nginx:latest -n temp
-
- 檢視 Pod
- 若沒有指定任何參數,預設列出 default 命名空間下的 Pod。
- 參數可搭配使用,更多參數👉
。kubectl get --help
# default下的 kubectl get pod # 指定ns下的 kubectl get pod -n 命名空間 # 指定名稱 kubectl get pod 名稱 # 以yaml格式展示 kubectl get pod pod_name -o yaml
- 參數可搭配使用,更多參數👉
- 若沒有指定任何參數,預設列出 default 命名空間下的 Pod。
- 檢視 Pod 建立過程
-
kubectl describe pod 名稱 -n 命名空間
-
2.1.3、删除
删除 Pod 和 ns# 指定pod名稱 kubectl delete pod 名稱 # 指定ns名稱 kubectl delete namespace 名稱
- Pod:原來的 Pod 被删除,但 Pod 控制器啟動了一個新的 Pod
- ns:ns 和 Pod 均被删除。
2.2、對象配置(❗)
Hint:在配置檔案中定義對象的屬性選項(推薦 YAML)
2.2.1、指令式
指令式對象配置:指令 + 配置檔案
需指定指令,即對資源的操作(見 2.1)。
示例:定義配置檔案,實作 3.1 中的案例指令。
① YAML 檔案
# ns
apiVersion: v1
kind: Namespace
metadata:
name: temp
---
# Pod
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
namespace: temp
spec:
containers:
- name: nginx-containers
image: nginx:latest
② 建立:create
- kubectl 根據指定的 create 指令,
指定 nginx.yaml 檔案,建立資源。-f
kubectl create -f nginx.yaml
- 若重複執行指令,會提示資源已建立。
③ 檢視:get
- kubectl 根據指定給的
指令,get
指定 nginx.yaml 檔案,檢視資源-f
- 檢視 pod 和 ns
④ 删除:delete
- kubectl 根據指定給的
指令,delete
指定 nginx.yaml 檔案,删除資源-f
- 删除資源後(未建立資源時),再次執行删除(查詢)指令,會提示資源不存在。
2.2.2、聲明式
聲明式對象配置:apply 指令 + 配置檔案
無需指定對資源的操作,kubectl 會自動檢測建立/更新/删除。
① YAML 檔案
(同 3.2.1)
# ns
apiVersion: v1
kind: Namespace
metadata:
name: temp
---
# Pod
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
namespace: temp
spec:
containers:
- name: nginx-containers
image: nginx:latest
② apply 指令
kubectl apply -f 檔案名
- kubectl 檢測到資源未建立,建立資源。
- kubectl 檢測到資源已建立、配置檔案未變動,沒有任何變動。
- 修改配置檔案
- 修改 Nginx 版本,再次執行 apply 指令。
- kubectl 檢測到資源已建立、配置檔案有變動,更新配置。
- 檢視 Pod 資源情況:注意 Nginx 版本變化
-
kubectl describe pod 名稱 -。n 命名空間
-
最佳實踐(❗)
如何正确選用資源管理方式?
适用場景 | 指令 | |
---|---|---|
指令式指令 | 查詢 | kubectl get(describe) 資源名稱 |
對象配置(指令式) | 删除 | kubectl delete -f XXX.yaml |
對象配置(聲明式) | 建立,更新 | kubectl apply -f XXX.yaml |
附
1、kubectl(❗)
kubectl
與 K8s 叢集的控制台(master)進行通信的指令行工具,用于管理資源。
文法: (kubectl 指令補全見附 2)
- command:對資源執行的操作
- TYPE:資源類型(不區分大小寫/單複數/縮寫)
- NAME:資源名稱(可選,大小寫敏感)
- flags:選項/參數(可選)
kubectl [command] [TYPE] [NAME] [flags]
1.1、操作(command)
Hint:輸入 kubectl help
檢視可用操作。
常用操作如下:
① 基本
含義 | |
---|---|
create | 建立資源 |
expose | 暴露服務端口 |
run | 運作鏡像(容器) |
get | 擷取資源 |
edit | 編輯資源 |
delete | 删除資源 |
② 部署 & 排錯 & 調試
含義 | |
---|---|
cluster-info | 叢集資訊 |
describe | 描述資源詳情 |
logs | 檢視容器在 Pod 中的日志 |
attach | 進入運作中的容器 |
exec | 在容器中執行指令 |
cp | 在容器内外複制檔案 |
③ 進階 & 設定
含義 | |
---|---|
apply | 對資源應用指定配置 |
patch | 更新資源的資訊 |
replace | 覆寫資源 |
label | 更新資源标簽 |
④ 其它
含義 | |
---|---|
api-resources | 列出伺服器支援的 API 資源 |
api-versions | 列出伺服器支援的 API 版本 |
version | 列出 Client 和 Server 版本 |
1.2、類型(TYPE)
Hint:通過 kubectl api-resources
檢視可用資源類型。
常見資源如下:
① 叢集級别
縮寫 | |
---|---|
namespace | ns |
nodes | no |
② Pod 相關
縮寫 | |
---|---|
Pods | po |
replicationcontrollers | rc |
daemonsets | ds |
deployments | deploy |
replicasets | rs |
statefulsets | sts |
horizontalpodautoscalers | hpa |
cronjobs | cj |
jobs |
③ 服務發現
縮寫 | |
---|---|
services | svc |
ingresses | ing |
④ 存儲資源
縮寫 | |
---|---|
volumeattachments | |
persistentvolumeclaims | pvc |
persistentvolumes | pv |
⑤ 配置資源
作用 | |
---|---|
configmaps | cm |
secrets |
1.3、選項(flag)
kubectl
指令預設輸出為純文字格式,
使用
(
-o
)選項,指定詳細資訊
--output
常用輸出選項值:
含義 | |
---|---|
-o json | 格式輸出 |
-o name | 僅輸出資源名稱 |
-o wide | 純文字格式輸出,包含所有附加資訊 |
-o yaml | 格式輸出 |
除了 -o
,flag 有其它👉 輸出選項
1
2、kubectl 指令補全
👉 Linux 中 kubectl 指令補全
Linux 伺服器預設沒有
kubectl
的指令補全,需要額外配置。
配置後,按
即可實作指令補全。
tab
- 安裝
并執行bash-completion
yum install -y bash-completion source /usr/share/bash-completion/bash_completion
- 加載
kubectl completion
# 本次會話臨時生效 source <(kubectl completion bash) # 重新開機會話後永久生效 echo "source <(kubectl completion bash)" >> ~/.bashrc
3、node 節點使用
kubectl
:與 K8s 叢集的控制台(master)進行通信的指令行工具,用于管理資源。
Q:kubectl 可以在 node 節點上運作嗎 ?
A:可以(但不建議),僅需一個配置檔案 👉 将 master 節點的
$HOME/.kube
檔案,複制到 node 節點。
# 在master節點執行以下指令
scp -r HOME/.kube node1: HOME/