本指南說明如何使用 Strimzi 運算子部署 Apache Kafka 叢集。
Kafka 是開放原始碼的分散式訊息傳遞系統,專為處理大量、高輸送量和即時串流資料而設計。您可以使用這項服務建構串流資料管道,在不同系統和應用程式之間可靠地傳輸資料,以支援處理和分析工作。
運算子是軟體擴充功能,可運用自訂資源管理應用程式及其元件。如要進一步瞭解使用運算子的動機,請參閱開放原始碼 Kubernetes 說明文件中的運算子模式。Strimzi 運算子提供彈性的部署選項,並可讓您使用 Kubernetes 汙點和容許度,在專用節點上執行 Kafka。
本指南適用於有興趣在 GKE 上部署 Kafka 叢集的平台管理員、雲端架構師和營運專員。
如果您想瞭解如何使用第三方運算子部署 Kafka 叢集,以自動化管理作業並減少錯誤,這項解決方案是個不錯的起點。如要更精細地控管作業,請參閱「在 GKE 上部署高可用性 Kafka 叢集」。
目標
- 規劃及部署 Apache Kafka 的 GKE 基礎架構
- 部署及設定 Strimzi 運算子
- 使用 Strimzi 運算子設定 Apache Kafka
優點
Strimzi 具有下列優點:
- Strimzi 運算子提供簡化的 Kubernetes 原生方法,可管理 Kafka 叢集。Strimzi 會使用代表 Kafka 主題和使用者的自訂資源,讓叢集管理作業更加簡單,並符合 Kubernetes 最佳做法。
- Strimzi 預設會優先考量安全性,為接聽器產生憑證,並支援 TLS、SCRAM-SHA 和 OAuth 等安全驗證方法。Strimzi 也會處理所有 Kafka 監聽器的 NetworkPolicy。
- Strimzi 不依賴外部依附元件。這項服務包含 Kafka 和 ZooKeeper 叢集,內建指標匯出工具,因此您不必處理額外工具。您也可以微調代理程式設定,以符合特定需求。
部署架構
Kafka 叢集由一或多個伺服器 (又稱代理程式) 組成,這些伺服器會協同管理傳入的資料串流,並為 Kafka 用戶端 (又稱消費者) 簡化發布/訂閱訊息傳遞作業。
Kafka 叢集中的每個資料分割區都會指派一個領導代理程式,負責管理該分割區的所有讀取和寫入作業。分區也可以有一或多個追隨者代理程式,被動複製領導者代理程式的動作。
在一般設定中,ZooKeeper 會協助在代理程式中選擇領導者,並確保發生任何問題時能順利容錯移轉,藉此協調 Kafka 叢集。
您也可以啟用 KRaft 模式,在沒有 Zookeeper 的情況下部署 Kafka 設定,但 Strimzi 社群認為這種方法尚未準備好用於正式環境,因為不支援 KafkaTopic 資源、憑證驗證等。
可用性和災難復原
本教學課程會為 Kafka 和 ZooKeeper 叢集使用不同的節點集區和區域,確保高可用性,並為災害復原做好準備。
如要在 Google Cloud 中建立高可用性 Kubernetes 叢集,請務必使用多個節點和區域,原因如下:
- 容錯能力:多個節點會在叢集中分配工作負載,確保某個節點故障時,其他節點可以接管工作,避免停機和服務中斷。
- 擴充性:使用多個節點可確保水平擴充功能視需要新增或移除節點,確保資源分配達到最佳狀態,並因應流量或工作負載需求增加的情況。
- 高可用性:在區域內使用多個可用區可確保備援,並將單點故障的風險降至最低。如果整個可用區發生中斷情形,叢集仍可在其他可用區繼續運作,維持服務可用性。
- 地理位置備援:將節點分散至各個區域,叢集的資料和服務就會分散至各地,即使單一區域發生天災、停電或其他區域性中斷情形,也能維持運作。
- 進行輪替更新和維護作業:使用多個可用區可確保在個別節點上執行輪替更新和維護作業時,不會影響叢集的整體可用性。確保服務不中斷,同時允許系統順利套用必要更新和修補程式。
- 服務水準協議 (SLA): Google Cloud 為多區域部署提供 SLA,保證最低運作時間和可用性。
部署圖
下圖顯示在 GKE 叢集的多個節點和區域中執行的 Kafka 叢集:
在圖中,Kafka StrimziPodSet
部署在三個不同可用區的三個節點上。如要控管這項設定,請在 StrimziPodSet
自訂資源規格中,設定必要的 Pod 親和性和拓撲擴散規則。
如果某個區域發生故障,使用建議的設定時,GKE 會在新節點上重新排定 Pod,並從其餘副本複製 Kafka 和 Zookeeper 的資料。
下圖顯示 ZooKeeper StrimziPodSet
部署在三個不同可用區的三個節點中:
StrimziPodSet
自訂資源
本教學課程使用 Strimzi 0.29 版導入的StrimziPodSet
自訂資源,而非 StatefulSets
。
StrimziPodSet
資源可提升叢集的擴充性,並讓您傳遞設定選項,進而更精細地變更 Pod。在 Strimzi 0.35 以上版本中,StrimziPodSet
資源預設為啟用。
費用
在本文件中,您會使用 Google Cloud的下列計費元件:
如要根據預測用量估算費用,請使用 Pricing Calculator。
完成本文所述工作後,您可以刪除已建立的資源,避免繼續計費。詳情請參閱清除所用資源一節。
事前準備
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine, IAM, GKE, Backup for GKE, and Resource Manager APIs:
gcloud services enable compute.googleapis.com
iam.googleapis.com container.googleapis.com gkebackup.googleapis.com cloudresourcemanager.googleapis.com -
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine, IAM, GKE, Backup for GKE, and Resource Manager APIs:
gcloud services enable compute.googleapis.com
iam.googleapis.com container.googleapis.com gkebackup.googleapis.com cloudresourcemanager.googleapis.com -
Grant roles to your user account. Run the following command once for each of the following IAM roles:
roles/storage.objectViewer, roles/logging.logWriter, roles/container.clusterAdmin, roles/container.serviceAgent, roles/iam.serviceAccountAdmin, roles/serviceusage.serviceUsageAdmin, roles/iam.serviceAccountAdmin
gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
- Replace
PROJECT_ID
with your project ID. -
Replace
USER_IDENTIFIER
with the identifier for your user account. For example,user:myemail@example.com
. - Replace
ROLE
with each individual role.
- Replace
準備環境
在本教學課程中,您將使用 Cloud Shell 管理託管在 Google Cloud上的資源。Cloud Shell 已預先安裝本教學課程所需的軟體,包括 kubectl
、gcloud CLI、Helm 和 Terraform。
如要使用 Cloud Shell 設定環境,請按照下列步驟操作:
在 Google Cloud 控制台中,按一下
Google Cloud 控制台中的「啟用 Cloud Shell」,即可啟動 Cloud Shell 工作階段。系統會在 Google Cloud 控制台的底部窗格啟動工作階段。
設定環境變數:
export PROJECT_ID=PROJECT_ID export KUBERNETES_CLUSTER_PREFIX=kafka export REGION=us-central1
將
PROJECT_ID
: your Google Cloud 替換為您的專案 ID。複製 GitHub 存放區:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples
變更為工作目錄:
cd kubernetes-engine-samples/streaming/
建立叢集基礎架構
在本節中,您將執行 Terraform 指令碼,建立高可用性的地區 GKE 私人叢集。請按照下列步驟公開存取控制層。如要限制存取權,請建立私人叢集。
您可以使用標準或 Autopilot叢集安裝運算子。
標準
下圖顯示部署在三個不同可用區的私有區域標準 GKE 叢集:
如要部署這項基礎架構,請在 Cloud Shell 中執行下列指令:
export GOOGLE_OAUTH_ACCESS_TOKEN=$(gcloud auth print-access-token)
terraform -chdir=kafka/terraform/gke-standard init
terraform -chdir=kafka/terraform/gke-standard apply -var project_id=${PROJECT_ID} \
-var region=${REGION} \
-var cluster_prefix=${KUBERNETES_CLUSTER_PREFIX}
系統顯示提示訊息時,請輸入 yes
。這個指令可能需要幾分鐘才能完成,且叢集會顯示就緒狀態。
Terraform 會建立下列資源:
- Kubernetes 節點的虛擬私有雲網路和私有子網路。
- 透過 NAT 存取網際網路的路由器。
us-central1
地區的私人 GKE 叢集。- 2 個啟用自動調度資源功能的節點集區 (每個可用區 1 到 2 個節點,每個可用區至少 1 個節點)
- 具備記錄與監控權限的
ServiceAccount
。 - Backup for GKE,用於災難復原。
- Google Cloud Managed Service for Prometheus,用於監控叢集。
輸出結果會與下列內容相似:
...
Apply complete! Resources: 14 added, 0 changed, 0 destroyed.
Outputs:
kubectl_connection_command = "gcloud container clusters get-credentials strimzi-cluster --region us-central1"
Autopilot
下圖顯示私人區域 Autopilot GKE 叢集:
如要部署基礎架構,請透過 Cloud Shell 執行下列指令:
export GOOGLE_OAUTH_ACCESS_TOKEN=$(gcloud auth print-access-token)
terraform -chdir=kafka/terraform/gke-autopilot init
terraform -chdir=kafka/terraform/gke-autopilot apply -var project_id=${PROJECT_ID} \
-var region=${REGION} \
-var cluster_prefix=${KUBERNETES_CLUSTER_PREFIX}
系統顯示提示訊息時,請輸入 yes
。這個指令可能需要幾分鐘才能完成,且叢集會顯示就緒狀態。
Terraform 會建立下列資源:
- Kubernetes 節點的虛擬私有雲網路和私人子網路。
- 透過 NAT 存取網際網路的路由器。
us-central1
地區的私人 GKE 叢集。- 具備記錄與監控權限的
ServiceAccount
- Google Cloud Managed Service for Prometheus,用於監控叢集。
輸出結果會與下列內容相似:
...
Apply complete! Resources: 12 added, 0 changed, 0 destroyed.
Outputs:
kubectl_connection_command = "gcloud container clusters get-credentials strimzi-cluster --region us-central1"
連線至叢集
設定 kubectl
與叢集通訊:
gcloud container clusters get-credentials ${KUBERNETES_CLUSTER_PREFIX}-cluster --region ${REGION}
將 Strimzi 運算子部署至叢集
在本節中,您將使用 Helm chart 部署 Strimzi 運算子。此外,您也可以透過其他幾種方式部署 Strimzi。
新增 Strimzi Helm 資訊套件存放區:
helm repo add strimzi https://strimzi.io/charts/
為 Strimzi Operator 和 Kafka 叢集新增命名空間:
kubectl create ns kafka
使用 Helm 部署 Strimzi 叢集運算子:
helm install strimzi-operator strimzi/strimzi-kafka-operator -n kafka
如要將 Strimzi Cluster Operator 和 Kafka 叢集部署至不同的命名空間,請在 helm 指令中新增
--set watchNamespaces="{kafka-namespace,kafka-namespace-2,...}"
參數。確認 Strimzi Cluster Operator 已使用 Helm 成功部署:
helm ls -n kafka
輸出結果會與下列內容相似:
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION strimzi-operator kafka 1 2023-06-27 11:22:15.850545 +0200 CEST deployed strimzi-kafka-operator-0.35.0 0.35.0
部署 Kafka
將運算子部署至叢集後,即可部署 Kafka 叢集執行個體。
在本節中,您將以基本設定部署 Kafka,然後嘗試各種進階設定情境,以滿足可用性、安全性和可觀測性需求。
基本設定
Kafka 執行個體的基本設定包含下列元件:
- 三個 Kafka 代理程式副本,至少需要兩個可用副本,才能確保叢集一致性。
- 三個 ZooKeeper 節點副本,組成一個叢集。
- 兩個 Kafka 監聽器:一個不含驗證,另一個使用 TLS 驗證,並搭配 Strimzi 產生的憑證。
- Java MaxHeapSize 和 MinHeapSize 分別設為 Kafka 4 GB 和 ZooKeeper 2 GB。
- 為 Kafka 和 ZooKeeper 分別配置 1 個 CPU 要求和 2 個 CPU 限制,以及為 Kafka 配置 5 GB 的記憶體要求和限制 (主要服務為 4 GB,指標匯出工具為 0.5 GB),並為 ZooKeeper 配置 2.5 GB 的記憶體要求和限制 (主要服務為 2 GB,指標匯出工具為 0.5 GB)。
- 實體運算子,具有下列要求和限制:
tlsSidecar
:100 公尺/500 公尺 CPU 和 128 Mi 記憶體。topicOperator
:100 m/500 m CPU 和 512 Mi 記憶體。userOperator
:500 m CPU 和 2 Gi 記憶體。
- 使用
premium-rwo
storageClass
為每個 Pod 分配 100 GB 的儲存空間。 - 為每個工作負載設定容許條件、nodeAffinity 和 podAntiAffinity,確保工作負載在節點之間適當分配,並利用各自的節點集區和不同區域。
- 透過自行簽署的憑證確保叢集內部的通訊安全:叢集和用戶端 (mTLS) 各有獨立的憑證授權單位 (CA)。您也可以設定使用其他憑證授權單位。
這項設定代表建立可供正式環境使用的 Kafka 叢集所需的最低設定。下列各節將示範自訂設定,以解決叢集安全性、存取控制清單 (ACL)、主題管理、憑證管理等問題。
建立基本 Kafka 叢集
使用基本設定建立新的 Kafka 叢集:
kubectl apply -n kafka -f kafka-strimzi/manifests/01-basic-cluster/my-cluster.yaml
這項指令會建立 Strimzi 運算子的 Kafka 自訂資源,其中包含 CPU 和記憶體要求與限制、區塊儲存空間要求,以及汙點和親和性的組合,可將佈建的 Pod 分散到 Kubernetes 節點。
請稍候片刻,等待 Kubernetes 啟動必要的工作負載:
kubectl wait kafka/my-cluster --for=condition=Ready --timeout=600s -n kafka
確認是否已建立 Kafka 工作負載:
kubectl get pod,service,deploy,pdb -l=strimzi.io/cluster=my-cluster -n kafka
輸出結果會與下列內容相似:
NAME READY STATUS RESTARTS AGE pod/my-cluster-entity-operator-848698874f-j5m7f 3/3 Running 0 44m pod/my-cluster-kafka-0 1/1 Running 0 5m pod/my-cluster-kafka-1 1/1 Running 0 5m pod/my-cluster-kafka-2 1/1 Running 0 5m pod/my-cluster-zookeeper-0 1/1 Running 0 6m pod/my-cluster-zookeeper-1 1/1 Running 0 6m pod/my-cluster-zookeeper-2 1/1 Running 0 6m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/my-cluster-kafka-bootstrap ClusterIP 10.52.8.80 <none> 9091/TCP,9092/TCP,9093/TCP 5m service/my-cluster-kafka-brokers ClusterIP None <none> 9090/TCP,9091/TCP,9092/TCP,9093/TCP 5m service/my-cluster-zookeeper-client ClusterIP 10.52.11.144 <none> 2181/TCP 6m service/my-cluster-zookeeper-nodes ClusterIP None <none> 2181/TCP,2888/TCP,3888/TCP 6m NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/my-cluster-entity-operator 1/1 1 1 44m NAME MIN AVAILABLE MAX UNAVAILABLE ALLOWED DISRUPTIONS AGE poddisruptionbudget.policy/my-cluster-kafka 2 N/A 1 5m poddisruptionbudget.policy/my-cluster-zookeeper 2 N/A 1 6m
運算子會建立下列資源:
- 兩個
StrimziPodSets
,分別適用於 Kafka 和 ZooKeeper。 - Kafka 代理程式副本的三個 Pod。
- 三個 ZooKeeper 副本的 Pod。
- 兩個
PodDisruptionBudgets
,確保叢集一致性至少有兩個副本可用。 - 名為
my-cluster-kafka-bootstrap
的 Service,可做為從 Kubernetes 叢集內連線的 Kafka 用戶端啟動伺服器。這項服務提供所有內部 Kafka 監聽器。 - 名為
my-cluster-kafka-brokers
的無介面 Service,可直接解析 Kafka 代理程式 Pod 的 IP 位址。這項服務用於代理程式間的通訊。 - 名為
my-cluster-zookeeper-client
的服務,可讓 Kafka 代理程式以用戶端身分連線至 ZooKeeper 節點。 - 名為
my-cluster-zookeeper-nodes
的無介面 Service,可直接解析 ZooKeeper Pod IP 位址的 DNS。這項服務用於連線至 ZooKeeper 副本。 - 名為
my-cluster-entity-operator
的 Deployment,內含 topic-operator 和 user-operator,可協助管理自訂資源KafkaTopics
和KafkaUsers
。
您也可以設定兩個 NetworkPolicies
,方便從任何 Pod 和 Namespace 連線至 Kafka 監聽器。這些政策也會將連線限制為代理程式,並啟用叢集 Pod 與叢集專屬內部服務連接埠之間的通訊。
驗證和使用者管理
本節說明如何啟用驗證和授權,確保 Kafka 監聽器安全無虞,並與用戶端共用憑證。
Strimzi 提供 Kubernetes 原生方法,可使用個別的 User Operator
和對應的 Kubernetes 自訂資源 KafkaUser
進行使用者管理,定義使用者設定。使用者設定包括驗證和授權設定,並在 Kafka 中佈建對應的使用者。
Strimzi 可以建立支援多種驗證機制的 Kafka 監聽器和使用者,例如以使用者名稱和密碼為基礎的驗證 (SCRAM-SHA-512) 或 TLS。您也可以使用 OAuth 2.0 驗證,相較於使用密碼或憑證進行驗證,這通常是較好的做法,因為 OAuth 2.0 驗證具有安全性,且可管理外部憑證。
部署 Kafka 叢集
本節說明如何部署 Strimzi 運算子,示範使用者管理功能,包括:
- Kafka 叢集,其中一個接聽程式已啟用密碼驗證 (SCRAM-SHA-512)。
- 包含 3 個副本的
KafkaTopic
。 - 具有 ACL 的
KafkaUser
,指定使用者對主題擁有讀取和寫入權限。
將 Kafka 叢集設定為在通訊埠 9094 上使用具備密碼型 SCRAM-SHA-512 驗證的接聽程式,以及簡單授權:
kubectl apply -n kafka -f kafka-strimzi/manifests/03-auth/my-cluster.yaml
建立
Topic
、User
和用戶端 Pod,對 Kafka 叢集執行指令:kubectl apply -n kafka -f kafka-strimzi/manifests/03-auth/topic.yaml kubectl apply -n kafka -f kafka-strimzi/manifests/03-auth/my-user.yaml
Secret
my-user
會以磁碟區的形式,掛接到用戶端 Pod。這些憑證會確認使用者有權透過啟用密碼驗證 (SCRAM-SHA-512) 的接聽程式,將訊息發布至主題。
建立用戶端 Pod:
kubectl apply -n kafka -f kafka-strimzi/manifests/03-auth/kafkacat.yaml
請稍待幾分鐘,等待用戶端 Pod 變成
Ready
,然後連線至該 Pod:kubectl wait --for=condition=Ready pod --all -n kafka --timeout=600s kubectl exec -it kafkacat -n kafka -- /bin/sh
使用
my-user
憑證產生新訊息,然後嘗試取用:echo "Message from my-user" |kcat \ -b my-cluster-kafka-bootstrap.kafka.svc.cluster.local:9094 \ -X security.protocol=SASL_SSL \ -X sasl.mechanisms=SCRAM-SHA-512 \ -X sasl.username=my-user \ -X sasl.password=$(cat /my-user/password) \ -t my-topic -P kcat -b my-cluster-kafka-bootstrap.kafka.svc.cluster.local:9094 \ -X security.protocol=SASL_SSL \ -X sasl.mechanisms=SCRAM-SHA-512 \ -X sasl.username=my-user \ -X sasl.password=$(cat /my-user/password) \ -t my-topic -C
輸出結果會與下列內容相似:
Message from my-user % Reached end of topic my-topic [0] at offset 0 % Reached end of topic my-topic [2] at offset 1 % Reached end of topic my-topic [1] at offset 0
輸入
CTRL+C
即可停止消費者程序。退出 Pod 殼層
exit
備份與災難復原
雖然 Strimzi 運算子未提供內建備份功能,但您可以按照特定模式實作有效的備份策略。
您可以使用 GKE 備份服務備份下列項目:
- Kubernetes 資源資訊清單。
- 從備份叢集的 Kubernetes API 伺服器擷取的 Strimzi API 自訂資源及其定義。
- 與資訊清單中找到的 PersistentVolumeClaim 資源對應的磁碟區。
如要進一步瞭解如何使用 GKE 備份功能備份及還原 Kafka 叢集,請參閱「準備進行災難復原」。
您也可以備份使用 Strimzi 運算子部署的 Kafka 叢集。建議備份的項目:
- Kafka 設定,包括 Strimzi API 的所有自訂資源,例如
KafkaTopics
和KafkaUsers
。 - 資料儲存在 Kafka 代理程式的 PersistentVolume 中。
在 Git 存放區中儲存 Kubernetes 資源資訊清單 (包括 Strimzi 設定),可免除 Kafka 設定的個別備份需求,因為必要時,資源可以重新套用至新的 Kubernetes 叢集。
為確保在 Kafka 伺服器執行個體或部署 Kafka 的 Kubernetes 叢集遺失時,Kafka 資料能夠復原,建議您將用於為 Kafka 代理程式佈建磁碟區的 Kubernetes 儲存空間類別,設定為 reclaimPolicy
選項設為 Retain
。此外,我們也建議您為 Kafka 代理程式磁碟區建立快照。
下列資訊清單說明使用 reclaimPolicy
選項 Retain
的 StorageClass:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: premium-rwo-retain
...
reclaimPolicy: Retain
volumeBindingMode: WaitForFirstConsumer
以下範例顯示新增至 Kafka 叢集自訂資源 spec
的 StorageClass:
# ...
spec:
kafka:
# ...
storage:
type: persistent-claim
size: 100Gi
class: premium-rwo-retain
完成這項設定後,即使刪除對應的 PersistentVolumeClaim,系統也不會刪除使用儲存空間類別佈建的 PersistentVolume。
如要使用現有設定和代理程式執行個體資料,在新 Kubernetes 叢集上復原 Kafka 執行個體,請按照下列步驟操作:
- 將現有的 Strimzi Kafka 自訂資源 (
Kakfa
、KafkaTopic
、KafkaUser
等) 套用至新的 Kubernetes 叢集 - 使用 PersistentVolumeClaim 的
spec.volumeName
屬性,以舊的 PersistentVolumes 更新 PersistentVolumeClaims,並使用新的 Kafka 代理程式執行個體名稱。
清除所用資源
如要避免系統向您的 Google Cloud 帳戶收取本教學課程中所用資源的相關費用,請刪除含有該項資源的專案,或者保留專案但刪除個別資源。
刪除專案
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
刪除個別資源
如果您使用現有專案,但不想刪除專案,請刪除個別資源。
設定環境變數。
export PROJECT_ID=${PROJECT_ID} export KUBERNETES_CLUSTER_PREFIX=kafka export REGION=us-central1
執行
terraform destroy
指令:export GOOGLE_OAUTH_ACCESS_TOKEN=$(gcloud auth print-access-token) terraform -chdir=kafka/terraform/FOLDER destroy -var project_id=${PROJECT_ID} \ -var region=${REGION} \ -var cluster_prefix=${KUBERNETES_CLUSTER_PREFIX}
將
FOLDER
替換為gke-autopilot
或gke-standard
。系統顯示提示訊息時,請輸入
yes
。找出所有未連接的磁碟:
export disk_list=$(gcloud compute disks list --filter="-users:* AND labels.name=${KUBERNETES_CLUSTER_PREFIX}-cluster" --format "value[separator=|](name,zone)")
這是必要步驟,因為 Strimzi 預設會使用
deleteClaim: false
參數進行儲存。刪除叢集後,所有磁碟仍可使用。刪除磁碟:
for i in $disk_list; do disk_name=$(echo $i| cut -d'|' -f1) disk_zone=$(echo $i| cut -d'|' -f2|sed 's|.*/||') echo "Deleting $disk_name" gcloud compute disks delete $disk_name --zone $disk_zone --quiet done
後續步驟
- 探索 Google Cloud 的參考架構、圖表和最佳做法。 歡迎瀏覽我們的雲端架構中心。