Helm 是 Kubernetes 的包管理工具,可以簡化應用程式的安裝、升級和管理。這部分將介紹如何使用 Helm 來管理你的 Kubernetes 應用程式。

Helm CLI

Helm 的命令列介面(CLI)提供了多種命令來管理 Helm charts 和 releases。

## 安裝 Helm
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh

這個指令碼會下載並安裝 Helm 3,這是目前最新的 Helm 版本。安裝後,你就可以使用 Helm CLI 來管理你的 Kubernetes 應用程式。

Helm charts

Helm charts 是 Helm 的核心概念,它們是一組 Kubernetes 資源檔案,用於定義應用程式的設定。

## 圖表格.yaml
apiVersion: v2
name: myapp
description: A Helm chart for myapp
type: application
version: 0.1.0
appVersion: "1.16.0"

這個 圖表格.yaml 檔案定義了一個名為 myapp 的 Helm chart,套件含了版本資訊和應用程式的描述。這是建立 Helm chart 的第一步。

圖表格 範本化

Helm charts 使用範本來生成 Kubernetes 資源檔案,這些範本可以根據不同的環境進行自定義。

## templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Values.name }}
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      app: {{ .Values.name }}
  template:
    metadata:
      labels:
        app: {{ .Values.name }}
    spec:
      containers:
      - name: {{ .Values.name }}
        image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
        ports:
        - containerPort: {{ .Values.service.port }}

這個 deployment.yaml 檔案是一個 Helm 範本,它使用 {{ }} 語法來參照 values.yaml 檔案中的值。這種方式可以讓你根據不同的環境生成不同的設定。

倉函式庫

Helm 倉函式庫是儲存和分發 Helm charts 的地方,你可以從這些倉函式庫中安裝 charts。

## 新增一個 Helm 倉函式庫
helm repo add bitnami https://charts.bitnami.com/bitnami

## 更新倉函式庫列表
helm repo update

這些命令會新增 Bitnami 的 Helm 倉函式庫並更新倉函式庫列表,讓你可以從這個倉函式庫中安裝 charts。

Releases

Helm releases 是安裝在 Kubernetes 叢集中的 charts 例項,每個 release 都有唯一的名稱和版本。

## 安裝一個 chart
helm install my-release bitnami/nginx

## 欄出所有 releases
helm list

這些命令會從 Bitnami 的倉函式庫中安裝一個名為 nginx 的 chart,並且命名為 my-releasehelm list 命令會列出所有安裝的 releases。

使用 Helm charts 安裝應用程式

使用 Helm charts 可以快速安裝複雜的應用程式。

## 使用自定義值安裝 chart
helm install my-release bitnami/nginx -f values.yaml

這個命令會使用 values.yaml 檔案中的自定義值來安裝 nginx chart,這樣可以根據你的需求調整應用程式的設定。

升級 Helm releases

當需要更新應用程式時,可以使用 helm upgrade 命令。

## 升級一個 release
helm upgrade my-release bitnami/nginx -f new-values.yaml

這個命令會使用 new-values.yaml 檔案中的新值來升級 my-release release,這樣可以無縫更新應用程式的設定。

回復到之前的 Helm release

如果升級後出現問題,可以使用 helm rollback 命令來回復到之前的版本。

## 回復到之前的版本
helm rollback my-release 1

這個命令會將 my-release release 回復到版本 1,這對於快速修復問題非常有用。

使用 Helm 的範本命令

Helm 的範本命令可以讓你預覽生成的 Kubernetes 資源檔案。

## 使用範本命令生成資源檔案
helm template my-release bitnami/nginx -f values.yaml

這個命令會根據 values.yaml 檔案中的值生成 nginx chart 的 Kubernetes 資源檔案,讓你可以在安裝前檢查設定。

建立 Helm chart

如果你有特定的需求,可以自己建立 Helm chart。

## 建立一個新的 chart
helm create mychart

這個命令會建立一個名為 mychart 的新 chart,套件含了基本的結構和檔案。你可以根據需求修改這些檔案來定義你的應用程式設定。

使用 Helm 的 linting 功能

Helm 的 linting 功能可以檢查你的 chart 是否符合標準。

## 使用 linting 檢查 chart
helm lint mychart

這個命令會對 mychart chart 進欄 linting,檢查是否有任何設定錯誤或不符合標準的地方。

使用外掛程式擴充功能 Helm

Helm 的外掛程式系統可以讓你擴充功能其功能,新增自定義命令或改進現有命令的使用體驗。

## 安裝一個外掛程式
helm plugin install https://github.com/databus23/helm-diff

## 使用外掛程式
helm diff revision my-release

這些命令會安裝 helm-diff 外掛程式,並且使用它來比較 my-release release 的不同版本。這種方式可以幫助你更好地管理和理解應用程式的變更。

透過這些 Helm 的功能和技巧,你可以更有效地在 Kubernetes 中管理你的應用程式,確保你的容器工作負載順利執行。在實際操作中,我發現這些方法不僅提高了工作效率,也讓我能夠更快速地解決問題。希望這些分享能夠幫助你在 Kubernetes 的世界中更加得心應手。

kubectl 最佳實踐與 Docker 命令

在 Kubernetes 中,kubectl 是管理叢集和應用程式的主要工具。這個部分將介紹一些 kubectl 的最佳實踐,以及如何將 Docker 命令變形為 kubectl 命令。

使用殼層別名可以大大簡化 kubectl 命令的使用,提高工作效率。

# 建立 kubectl 別名
alias k='kubectl'
alias kg='kubectl get'
alias kd='kubectl describe'
alias kdel='kubectl delete'

這些別名可以讓你更快速地執行常用的 kubectl 命令。例如,k 可以替代 kubectlkg 可以替代 kubectl get,這樣可以減少輸入的字元數量,提高工作效率。

在 kubectl 中使用類別似 Docker 的命令

許多 Docker 命令在 Kubernetes 中有相應的 kubectl 命令,可以幫助你更容易地過渡到 Kubernetes 環境。

Docker 的 docker ps 對應 kubectl 的 kubectl get pods

# Docker 命令
docker ps

# kubectl 命令
kubectl get pods

docker ps 命令用於列出所有正在執行的容器,而 kubectl get pods 則用於列出所有正在執行的 Pod。這兩個命令在功能上是相似的,但適用於不同的環境。

Docker 的 docker logs 對應 kubectl 的 kubectl logs

# Docker 命令
docker logs <container-id>

# kubectl 命令
kubectl logs <pod-name>

docker logs 命令用於檢視容器的日誌,而 kubectl logs 則用於檢視 Pod 的日誌。這兩個命令都可以幫助你診斷應用程式問題。

Docker 的 docker exec 對應 kubectl 的 kubectl exec

# Docker 命令
docker exec -it <container-id> /bin/bash

# kubectl 命令
kubectl exec -it <pod-name> -- /bin/bash

docker exec 命令用於在容器中執行命令,而 kubectl exec 則用於在 Pod 中執行命令。這兩個命令都可以讓你進入容器或 Pod 的內部進行除錯。

透過這些 kubectl 的最佳實踐和 Docker 命令的對應,你可以更有效地在 Kubernetes 中管理你的應用程式,確保你的容器工作負載順利執行。在實際操作中,我發現這些方法不僅提高了工作效率,也讓我能夠更快速地解決問題。希望這些分享能夠幫助你在 Kubernetes 的世界中更加得心應手。

在這個部分,我介紹瞭如何使用 kubectl 來管理 Kubernetes 叢集和節點、建立和佈署應用程式、更新和刪除應用程式、除錯和排錯應用程式,以及如何使用 kubectl 外掛和 Helm 來擴充套件 Kubernetes 的功能。透過這些工具和技巧,你可以更有效地在 Kubernetes 中管理你的容器工作負載,確保應用程式的穩定執行。

在實際操作中,我發現這些方法不僅提高了工作效率,也讓我能夠更快速地解決問題。希望這些分享能夠幫助你在 Kubernetes 的世界中更加得心應手。