部署第一個(無狀態)應用程式

Kubernetes 入門

Frank Heilmann

Platform Architect and Freelance Instructor

更多關於「kubectl」

  • kubectl:與 Kubernetes 物件互動的主要指令
  • 物件例如 podservice

$$

  • 常見用法:

    • kubectl create -f <Manifest.yml>:建立新物件,-f 表示「filename」
    • kubectl apply -f <Manifest.yml>:建立新物件並 變更物件狀態
    • kubectl get <object>: 檢視叢集中已部署物件的總覽
    • kubectl describe <object>:取得物件的詳細資訊

    $$

  • 可用指令列選項 --help 取得詳細說明

Kubernetes 入門

更多關於 Manifest

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 5
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.25.4
        ports:
        - containerPort: 80
  • 記住:Manifest 採用宣告式
  • 通常為 YAML,也可用 JSON 格式
  • 兩個重要區塊:
    • metadata:物件或資源的基本資訊
    • spec:定義物件或資源的規格與期望狀態
  • 視資源而定,區塊結構可能很深
Kubernetes 入門

無狀態應用程式

  • 無狀態應用:

    • 一般概念
    • 不侷限於 Kubernetes
    • 不保存內部狀態或已處理資料的脈絡
  • 一旦中斷,會重建新的副本並繼續運作。

  • 範例:
    • 查詢資料庫後端的資料庫前端
    • 查詢全文索引的搜尋應用
    • 將 IoT 感測器的溫度讀值從 °F 轉換為 °C 的資料串流應用
Kubernetes 入門

Kubernetes Deployments

  • 「無狀態應用程式」對應到「Kubernetes Deployments」
  • 範例 Manifest 包含:
    • apiVersionkind
    • metadataspec
  • spec 會定義 replicas 數量、selector,以及 template
  • selector 後面會再介紹
  • template 描述在 Deployment 中建立 pods 的細節
apiVersion: apps/v1
kind: Deployment
metadata:
  name: <deployment name>
  labels:
    app: <a label for the application>
spec:
  replicas: <number of initial replicas>
  selector:
    matchLabels:
      app: <matches the label above>
  template:
    metadata:
      labels:
        app: <label to be given to each pod>
    spec:
      containers:
      - name: <container name>
        image: <the image to be used>
        ports:
        - containerPort: <ports for networking>
Kubernetes 入門

部署到 Kubernetes 叢集

  • 使用 kubectl apply -f <manifest.yml> 來建立 pods 並 套用變更。
  • Kubernetes 控制平面會將 Deployment 排程到節點上。
    • 接著在節點上觸發建立 Pods。
  • Pods 會取得唯一但隨機(不可預測)的識別碼,每個 Pod 都「彼此等同」。
Kubernetes 入門

一起來練習吧!

Kubernetes 入門

Preparing Video For Download...