天天看點

K8s3️⃣資源管理

【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
           
  1. 列出 ns
  2. 建立一個名為 temp 的 ns,檢視

2.1.2、建立 Pod

操作 Pod 時,若沒有指定

ns

,預設是 default。
  1. 建立并運作一個 Pod
    • run

      通過 pod 控制器運作 Pod
    • --image

      指定 Nginx 最新鏡像,

      -n

      指定 ns 為 temp
    • 若建立 Pod 時沒有指定 ns,預設屬于 default。
      kubectl run pod --image=nginx:latest -n temp
                 
  2. 檢視 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
                   
  3. 檢視 Pod 建立過程
    • kubectl describe pod 名稱 -n 命名空間
                 

2.1.3、删除

删除 Pod 和 ns
# 指定pod名稱
kubectl delete pod 名稱
# 指定ns名稱
kubectl delete namespace 名稱
           
  1. Pod:原來的 Pod 被删除,但 Pod 控制器啟動了一個新的 Pod
  2. 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 指令,

    -f

    指定 nginx.yaml 檔案,建立資源。
    kubectl create -f nginx.yaml
               
  • 若重複執行指令,會提示資源已建立。

③ 檢視:get

  • kubectl 根據指定給的

    get

    指令,

    -f

    指定 nginx.yaml 檔案,檢視資源
  • 檢視 pod 和 ns

④ 删除:delete

  • kubectl 根據指定給的

    delete

    指令,

    -f

    指定 nginx.yaml 檔案,删除資源
  • 删除資源後(未建立資源時),再次執行删除(查詢)指令,會提示資源不存在。

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 檔案名
           
  1. kubectl 檢測到資源未建立,建立資源。
  2. kubectl 檢測到資源已建立、配置檔案未變動,沒有任何變動。
  3. 修改配置檔案
    • 修改 Nginx 版本,再次執行 apply 指令。
    • kubectl 檢測到資源已建立、配置檔案有變動,更新配置。
  4. 檢視 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

JSON

格式輸出
-o name 僅輸出資源名稱
-o wide 純文字格式輸出,包含所有附加資訊
-o yaml

YAML

格式輸出
除了

-o

,flag 有其它👉 輸出選項

1

2、kubectl 指令補全

👉 Linux 中 kubectl 指令補全

Linux 伺服器預設沒有

kubectl

的指令補全,需要額外配置。

配置後,按

tab

即可實作指令補全。
  1. 安裝

    bash-completion

    并執行
    yum install -y bash-completion
    source /usr/share/bash-completion/bash_completion
               
  2. 加載

    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/