1658825040
在本文中,您將學習如何使用 Terraform 創建 Kubernetes 集群,然後使用 Argo CD 對其進行管理。Terraform 對於自動化基礎設施非常有用。另一方面,Argo CD 幫助我們為我們的應用程序實施 GitOps 和持續交付。看來我們可以成功地結合這兩種工具。讓我們考慮一下它們如何幫助我們以 GitOps 風格使用 Kubernetes。
首先,我想定義整個集群並將其配置存儲在 Git 中。我不能只使用 Argo CD 來實現它,因為 Argo CD 必須在現有的 Kubernetes 集群上運行。這就是為什麼我需要一個能夠創建集群然後在那里安裝 Argo CD 的工具。在這種情況下,Terraform 似乎是一個自然的選擇。另一方面,我不想使用 Terraform 來管理在 Kubernetes 上運行的應用程序。它非常適合創建集群等一次性活動,但不適用於應用交付和配置管理等持續任務。
這是我們要做的事情的清單:
Application
負責基於 Git 的整個集群配置Application
安裝 Strimzi Operator,創建Project
專用於 Kafka 安裝的 Argo CD 和Application
在 Kubernetes 上運行 Kafka 的Argo CD這裡最重要的是,一切都應該在運行terraform apply
命令之後發生。Terraform 安裝 Argo CD,然後 Argo CD 安裝 Kafka,這是我們在該場景中的示例應用程序。讓我們看看它是如何工作的。
如果您想自己嘗試一下,可以隨時查看我的源代碼。為此,您需要克隆我的 GitHub 存儲庫。之後,您應該按照我的指示進行操作。讓我們開始。
為了輕鬆創建 Kubernetes 集群,我們將使用Kind。這裡有一個專門的用於 Kind 的 Terraform 提供程序。當然,你可以在任何云上運行 Kubernetes,你也可以找到 Terraform 提供者。
我們的集群由三個工作節點和一個主節點組成。我們需要三個節點,因為最後,我們將安裝一個在三個實例中運行的 Kafka 集群。它們中的每一個都將部署在不同的節點上。這是該步驟的 Terraformmain.tf
文件。我們需要在該部分中定義tehcyx/kind
提供程序的最新版本(即0.0.12
)required_providers
。我們集群的名稱是cluster1
。我們還將啟用該wait_for_ready
選項,以便在集群準備好後繼續執行後續步驟。
terraform {
required_providers {
kind = {
source = "tehcyx/kind"
version = "0.0.12"
}
}
}
provider "kind" {}
resource "kind_cluster" "default" {
name = "cluster-1"
wait_for_ready = true
kind_config {
kind = "Cluster"
api_version = "kind.x-k8s.io/v1alpha4"
node {
role = "control-plane"
}
node {
role = "worker"
image = "kindest/node:v1.23.4"
}
node {
role = "worker"
image = "kindest/node:v1.23.4"
}
node {
role = "worker"
image = "kindest/node:v1.23.4"
}
}
}
只是為了驗證配置,您可以運行命令terraform init
,然後terraform plan
. 之後,您可以使用 應用配置terraform apply
,但您可能還記得,我們將在最後所有配置準備好後,在一個命令中應用所有內容。
正如我之前提到的,操作員生命週期管理器(OLM) 是安裝 Strimzi Kafka 操作員的先決條件。您可以在此處找到最新版本的 OLM 。事實上,它歸結為在 Kubernetes 上應用兩個 YAML 清單。其中第一個crds.yaml
包含 CRD 定義。其中第二個olm.yaml
提供了安裝 OLM 所需的所有 Kubernetes 對象。讓我們將這兩個文件複製到 Terraform 存儲庫中的本地目錄中。為了將它們應用到 Kubernetes,我們首先需要啟用 Terraformkubectl
提供程序。
terraform {
...
required_providers {
kubectl = {
source = "gavinbunney/kubectl"
version = ">= 1.7.0"
}
}
}
為什麼我們使用kubectl
提供者而不是官方的 Terraform Kubernetes 提供者?crds.yaml
包含超過大小限制的相當大的 CRD。我們可以通過在提供程序上啟用服務器端應用來輕鬆解決該問題kubectl
。下一種情況是在兩個 YAML 文件中定義了多個 Kubernetes 對象。提供者通過參數kubectl
支持它。for_each
data "kubectl_file_documents" "crds" {
content = file("olm/crds.yaml")
}
resource "kubectl_manifest" "crds_apply" {
for_each = data.kubectl_file_documents.crds.manifests
yaml_body = each.value
wait = true
server_side_apply = true
}
data "kubectl_file_documents" "olm" {
content = file("olm/olm.yaml")
}
resource "kubectl_manifest" "olm_apply" {
depends_on = [data.kubectl_file_documents.crds]
for_each = data.kubectl_file_documents.olm.manifests
yaml_body = each.value
}
讓我們考慮本節中的最後一種情況。在應用任何 YAML 之前,我們將在上一步中創建一個新的 Kubernetes 集群。因此,我們不能使用現有的上下文。幸運的是,我們可以將提供程序的輸出參數kubectl
與 Kubernetes 地址和身份驗證憑據一起使用。
provider "kubectl" {
host = "${kind_cluster.default.endpoint}"
cluster_ca_certificate = "${kind_cluster.default.cluster_ca_certificate}"
client_certificate = "${kind_cluster.default.client_certificate}"
client_key = "${kind_cluster.default.client_key}"
}
這是 Terraform 方面的最後一步。我們將使用其 Helm 圖表安裝 Argo CD。我們還需要創建一個Application
負責集群管理的 Argo CD。這Application
將安裝 Kafka Strimzi 操作符並創建另一個 Argo CD Application
,例如用於運行 Kafka 集群。第一步,我們需要做和之前一樣的事情:定義一個提供者並設置 Kubernetes 集群地址。這是我們在 Terraform 中的定義:
provider "helm" {
kubernetes {
host = "${kind_cluster.default.endpoint}"
cluster_ca_certificate = "${kind_cluster.default.cluster_ca_certificate}"
client_certificate = "${kind_cluster.default.client_certificate}"
client_key = "${kind_cluster.default.client_key}"
}
}
這裡棘手的是我們需要Application
在 Argo CD 安裝後創建。默認情況下,Terraform 會驗證 Kubernetes 上是否存在所需的 CRD 對象。在這種情況下,它需要Application
來自argoproj.io/v1alpha1
. 幸運的是,我們可以使用 Helm 圖表參數允許我們傳遞附加Application
s 的聲明。為此,我們必須設置一個自定義values.yaml
文件。這是 Argo CD 安裝的 Terraform 聲明:
resource "helm_release" "argocd" {
name = "argocd"
repository = "https://argoproj.github.io/argo-helm"
chart = "argo-cd"
namespace = "argocd"
version = "4.9.7"
create_namespace = true
values = [
file("argocd/application.yaml")
]
}
為了創建一個初始Application
值,我們需要使用 Helm 圖表server.additionalApplications
參數,如圖所示。這是整個argocd/application.yaml
文件。為簡化起見,Argo CD 使用的配置作為 Terraform 配置位於存儲庫中。argocd/manifests
您可以在目錄中找到所有必需的 YAML 。
server:
additionalApplications:
- name: cluster-config
namespace: argocd
project: default
source:
repoURL: https://github.com/piomin/sample-terraform-kubernetes-argocd.git
targetRevision: HEAD
path: argocd/manifests/cluster
directory:
recurse: true
destination:
server: https://kubernetes.default.svc
syncPolicy:
automated:
prune: false
selfHeal: false
最後兩個步驟由 Argo CD 管理。我們已經成功完成了 Kubernetes 集群的安裝過程。現在,是時候在那里安裝我們的第一個應用程序了。我們的示例應用程序是 Kafka。所以,首先我們需要安裝 Kafka Strimzi 算子。為此,我們只需要定義一個Subscription
由先前安裝的 OLM 管理的對象。該定義在存儲庫中作為strimzi.yaml
文件可用。
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
name: my-strimzi-kafka-operator
namespace: operators
spec:
channel: stable
name: strimzi-kafka-operator
source: operatorhubio-catalog
sourceNamespace: olm
我們可以在這裡配置很多與整個集群相關的方面。但是,我們只需要創建一個專用的 Argo CDProject
並Application
用於 Kafka 配置。這是我們的Project
定義:
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
name: kafka
namespace: argocd
spec:
clusterResourceWhitelist:
- group: '*'
kind: '*'
destinations:
- name: '*'
namespace: '*'
server: '*'
sourceRepos:
- '*'
讓我們將kafka
ArgoCDApplication
放在新創建的Project
.
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: kafka
namespace: argocd
spec:
destination:
namespace: kafka
server: https://kubernetes.default.svc
project: kafka
source:
path: argocd/manifests/kafka
repoURL: https://github.com/piomin/sample-terraform-kubernetes-argocd.git
targetRevision: HEAD
syncPolicy:
syncOptions:
- CreateNamespace=true
最後,我們練習的最後一部分。我們將在 Kind 上創建並運行一個 3 節點的 Kafka 集群。這是Kafka
我們存儲在 Git 中的對象定義。我們為 Kafka 和 Zookeeper(由 Kafka 集群使用)設置了 3 個副本。此清單在路徑下的存儲庫中可用argocd/manifests/kafka/cluster.yaml
。我們在9092
(普通)和9093
(TLS)端口上公開集群。Kafka 集群將存儲作為 PVC 安裝到Deployment
.
apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
name: my-cluster
spec:
kafka:
replicas: 3
version: 3.2.0
logging:
type: inline
loggers:
kafka.root.logger.level: "INFO"
config:
auto.create.topics.enable: "false"
offsets.topic.replication.factor: 3
transaction.state.log.replication.factor: 3
transaction.state.log.min.isr: 2
default.replication.factor: 3
min.insync.replicas: 2
inter.broker.protocol.version: "3.2"
listeners:
- name: plain
port: 9092
type: internal
tls: false
- name: tls
port: 9093
type: internal
tls: true
storage:
type: jbod
volumes:
- id: 0
type: persistent-claim
size: 30Gi
deleteClaim: true
zookeeper:
replicas: 3
storage:
type: persistent-claim
size: 10Gi
deleteClaim: true
entityOperator:
topicOperator: {}
userOperator: {}
我們還將在argocd/manifests/kafka/cluster.yaml
清單中定義一個單獨的 Kafka 主題。
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaTopic
metadata:
name: my-topic
labels:
strimzi.io/cluster: my-cluster
spec:
partitions: 10
replicas: 3
我們已經準備好了所有需要的腳本。讓我們進入執行階段。如果您還沒有克隆 Git 存儲庫,那麼是時候克隆了:
$ git clone https://github.com/piomin/sample-terraform-kubernetes-argocd.git
$ cd sample-terraform-kubernetes-argocd
首先,讓我們初始化包含 Terraform 配置的工作目錄:
$ terraform init
完成後,我們可以預覽要執行的操作列表:
$ terraform plan
您應該收到相當大的內容作為響應。這是我結果的最後一部分:
如果一切看起來都很好並且沒有錯誤,我們可以繼續下一步(最後)。讓我們開始這個過程:
$ terraform apply
應成功應用所有 24 個對象。這是日誌的最後一部分:
現在,您應該已準備好並運行集群。讓我們顯示一個 Kind 集群列表:
$ kind get clusters
cluster-1
我們集群的名稱是cluster-1
。但是 Kubernetes 上下文的名稱是kind-cluster-1
:
讓我們顯示在 Kind 集群上部署的應用程序列表。您至少應該安裝 Argo CD 和 OLM。一段時間後,Argo CD 應用存儲在 Git 存儲庫中的配置。然後,您應該會看到命名空間中安裝了 Kafka Strimzi 運算符operators
。
之後,我們可以進入 Argo CD Web 控制台。要在本地端口上輕鬆訪問它,讓我們啟用port-forward
:
$ kubectl port-forward service/argocd-server 8443:443 -n argocd
現在,您可以在https://localhost:8443
. 默認用戶名是admin
. 密碼由 Argo CD 自動生成。你可以在 Kubernetes 中找到它Secret
argocd-initial-admin-secret
。
$ kubectl get secret argocd-initial-admin-secret -n argocd --template={{.data.password}} | base64 -D
這是我們的 Argo CD 列表Application
。cluster-config 啟用了自動同步選項。它安裝 Strimzi 操作符並創建kafka
Argo CD 應用程序。我還可以為kafka
應用程序啟用自動同步。但僅出於演示目的,我留下了手動批准。所以,讓我們在集群上運行 Kafka。為此,請單擊磁貼上的Sync
按鈕kafka
。
完成後,Kafka 安裝就開始了。最後,您應該準備好並運行整個集群。每個 Kafka 和 Zookeeper 節點都在不同的 Kubernetes 工作節點上運行:
就這樣。我們使用單個 Terraform 命令創建了所有內容,然後單擊 Argo CD Web 控制台。當然,我們可以為kafka
應用程序啟用自動同步,這樣我們甚至不需要登錄到 Argo CD Web 控制台來獲得最終效果。
鏈接:https ://piotrminkowski.com/2022/06/28/manage-kubernetes-cluster-with-terraform-and-argo-cd/
#terraform #kubernetes #argocd
1602964260
Last year, we provided a list of Kubernetes tools that proved so popular we have decided to curate another list of some useful additions for working with the platform—among which are many tools that we personally use here at Caylent. Check out the original tools list here in case you missed it.
According to a recent survey done by Stackrox, the dominance Kubernetes enjoys in the market continues to be reinforced, with 86% of respondents using it for container orchestration.
(State of Kubernetes and Container Security, 2020)
And as you can see below, more and more companies are jumping into containerization for their apps. If you’re among them, here are some tools to aid you going forward as Kubernetes continues its rapid growth.
(State of Kubernetes and Container Security, 2020)
#blog #tools #amazon elastic kubernetes service #application security #aws kms #botkube #caylent #cli #container monitoring #container orchestration tools #container security #containers #continuous delivery #continuous deployment #continuous integration #contour #developers #development #developments #draft #eksctl #firewall #gcp #github #harbor #helm #helm charts #helm-2to3 #helm-aws-secret-plugin #helm-docs #helm-operator-get-started #helm-secrets #iam #json #k-rail #k3s #k3sup #k8s #keel.sh #keycloak #kiali #kiam #klum #knative #krew #ksniff #kube #kube-prod-runtime #kube-ps1 #kube-scan #kube-state-metrics #kube2iam #kubeapps #kubebuilder #kubeconfig #kubectl #kubectl-aws-secrets #kubefwd #kubernetes #kubernetes command line tool #kubernetes configuration #kubernetes deployment #kubernetes in development #kubernetes in production #kubernetes ingress #kubernetes interfaces #kubernetes monitoring #kubernetes networking #kubernetes observability #kubernetes plugins #kubernetes secrets #kubernetes security #kubernetes security best practices #kubernetes security vendors #kubernetes service discovery #kubernetic #kubesec #kubeterminal #kubeval #kudo #kuma #microsoft azure key vault #mozilla sops #octant #octarine #open source #palo alto kubernetes security #permission-manager #pgp #rafay #rakess #rancher #rook #secrets operations #serverless function #service mesh #shell-operator #snyk #snyk container #sonobuoy #strongdm #tcpdump #tenkai #testing #tigera #tilt #vert.x #wireshark #yaml
1658825040
在本文中,您將學習如何使用 Terraform 創建 Kubernetes 集群,然後使用 Argo CD 對其進行管理。Terraform 對於自動化基礎設施非常有用。另一方面,Argo CD 幫助我們為我們的應用程序實施 GitOps 和持續交付。看來我們可以成功地結合這兩種工具。讓我們考慮一下它們如何幫助我們以 GitOps 風格使用 Kubernetes。
首先,我想定義整個集群並將其配置存儲在 Git 中。我不能只使用 Argo CD 來實現它,因為 Argo CD 必須在現有的 Kubernetes 集群上運行。這就是為什麼我需要一個能夠創建集群然後在那里安裝 Argo CD 的工具。在這種情況下,Terraform 似乎是一個自然的選擇。另一方面,我不想使用 Terraform 來管理在 Kubernetes 上運行的應用程序。它非常適合創建集群等一次性活動,但不適用於應用交付和配置管理等持續任務。
這是我們要做的事情的清單:
Application
負責基於 Git 的整個集群配置Application
安裝 Strimzi Operator,創建Project
專用於 Kafka 安裝的 Argo CD 和Application
在 Kubernetes 上運行 Kafka 的Argo CD這裡最重要的是,一切都應該在運行terraform apply
命令之後發生。Terraform 安裝 Argo CD,然後 Argo CD 安裝 Kafka,這是我們在該場景中的示例應用程序。讓我們看看它是如何工作的。
如果您想自己嘗試一下,可以隨時查看我的源代碼。為此,您需要克隆我的 GitHub 存儲庫。之後,您應該按照我的指示進行操作。讓我們開始。
為了輕鬆創建 Kubernetes 集群,我們將使用Kind。這裡有一個專門的用於 Kind 的 Terraform 提供程序。當然,你可以在任何云上運行 Kubernetes,你也可以找到 Terraform 提供者。
我們的集群由三個工作節點和一個主節點組成。我們需要三個節點,因為最後,我們將安裝一個在三個實例中運行的 Kafka 集群。它們中的每一個都將部署在不同的節點上。這是該步驟的 Terraformmain.tf
文件。我們需要在該部分中定義tehcyx/kind
提供程序的最新版本(即0.0.12
)required_providers
。我們集群的名稱是cluster1
。我們還將啟用該wait_for_ready
選項,以便在集群準備好後繼續執行後續步驟。
terraform {
required_providers {
kind = {
source = "tehcyx/kind"
version = "0.0.12"
}
}
}
provider "kind" {}
resource "kind_cluster" "default" {
name = "cluster-1"
wait_for_ready = true
kind_config {
kind = "Cluster"
api_version = "kind.x-k8s.io/v1alpha4"
node {
role = "control-plane"
}
node {
role = "worker"
image = "kindest/node:v1.23.4"
}
node {
role = "worker"
image = "kindest/node:v1.23.4"
}
node {
role = "worker"
image = "kindest/node:v1.23.4"
}
}
}
只是為了驗證配置,您可以運行命令terraform init
,然後terraform plan
. 之後,您可以使用 應用配置terraform apply
,但您可能還記得,我們將在最後所有配置準備好後,在一個命令中應用所有內容。
正如我之前提到的,操作員生命週期管理器(OLM) 是安裝 Strimzi Kafka 操作員的先決條件。您可以在此處找到最新版本的 OLM 。事實上,它歸結為在 Kubernetes 上應用兩個 YAML 清單。其中第一個crds.yaml
包含 CRD 定義。其中第二個olm.yaml
提供了安裝 OLM 所需的所有 Kubernetes 對象。讓我們將這兩個文件複製到 Terraform 存儲庫中的本地目錄中。為了將它們應用到 Kubernetes,我們首先需要啟用 Terraformkubectl
提供程序。
terraform {
...
required_providers {
kubectl = {
source = "gavinbunney/kubectl"
version = ">= 1.7.0"
}
}
}
為什麼我們使用kubectl
提供者而不是官方的 Terraform Kubernetes 提供者?crds.yaml
包含超過大小限制的相當大的 CRD。我們可以通過在提供程序上啟用服務器端應用來輕鬆解決該問題kubectl
。下一種情況是在兩個 YAML 文件中定義了多個 Kubernetes 對象。提供者通過參數kubectl
支持它。for_each
data "kubectl_file_documents" "crds" {
content = file("olm/crds.yaml")
}
resource "kubectl_manifest" "crds_apply" {
for_each = data.kubectl_file_documents.crds.manifests
yaml_body = each.value
wait = true
server_side_apply = true
}
data "kubectl_file_documents" "olm" {
content = file("olm/olm.yaml")
}
resource "kubectl_manifest" "olm_apply" {
depends_on = [data.kubectl_file_documents.crds]
for_each = data.kubectl_file_documents.olm.manifests
yaml_body = each.value
}
讓我們考慮本節中的最後一種情況。在應用任何 YAML 之前,我們將在上一步中創建一個新的 Kubernetes 集群。因此,我們不能使用現有的上下文。幸運的是,我們可以將提供程序的輸出參數kubectl
與 Kubernetes 地址和身份驗證憑據一起使用。
provider "kubectl" {
host = "${kind_cluster.default.endpoint}"
cluster_ca_certificate = "${kind_cluster.default.cluster_ca_certificate}"
client_certificate = "${kind_cluster.default.client_certificate}"
client_key = "${kind_cluster.default.client_key}"
}
這是 Terraform 方面的最後一步。我們將使用其 Helm 圖表安裝 Argo CD。我們還需要創建一個Application
負責集群管理的 Argo CD。這Application
將安裝 Kafka Strimzi 操作符並創建另一個 Argo CD Application
,例如用於運行 Kafka 集群。第一步,我們需要做和之前一樣的事情:定義一個提供者並設置 Kubernetes 集群地址。這是我們在 Terraform 中的定義:
provider "helm" {
kubernetes {
host = "${kind_cluster.default.endpoint}"
cluster_ca_certificate = "${kind_cluster.default.cluster_ca_certificate}"
client_certificate = "${kind_cluster.default.client_certificate}"
client_key = "${kind_cluster.default.client_key}"
}
}
這裡棘手的是我們需要Application
在 Argo CD 安裝後創建。默認情況下,Terraform 會驗證 Kubernetes 上是否存在所需的 CRD 對象。在這種情況下,它需要Application
來自argoproj.io/v1alpha1
. 幸運的是,我們可以使用 Helm 圖表參數允許我們傳遞附加Application
s 的聲明。為此,我們必須設置一個自定義values.yaml
文件。這是 Argo CD 安裝的 Terraform 聲明:
resource "helm_release" "argocd" {
name = "argocd"
repository = "https://argoproj.github.io/argo-helm"
chart = "argo-cd"
namespace = "argocd"
version = "4.9.7"
create_namespace = true
values = [
file("argocd/application.yaml")
]
}
為了創建一個初始Application
值,我們需要使用 Helm 圖表server.additionalApplications
參數,如圖所示。這是整個argocd/application.yaml
文件。為簡化起見,Argo CD 使用的配置作為 Terraform 配置位於存儲庫中。argocd/manifests
您可以在目錄中找到所有必需的 YAML 。
server:
additionalApplications:
- name: cluster-config
namespace: argocd
project: default
source:
repoURL: https://github.com/piomin/sample-terraform-kubernetes-argocd.git
targetRevision: HEAD
path: argocd/manifests/cluster
directory:
recurse: true
destination:
server: https://kubernetes.default.svc
syncPolicy:
automated:
prune: false
selfHeal: false
最後兩個步驟由 Argo CD 管理。我們已經成功完成了 Kubernetes 集群的安裝過程。現在,是時候在那里安裝我們的第一個應用程序了。我們的示例應用程序是 Kafka。所以,首先我們需要安裝 Kafka Strimzi 算子。為此,我們只需要定義一個Subscription
由先前安裝的 OLM 管理的對象。該定義在存儲庫中作為strimzi.yaml
文件可用。
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
name: my-strimzi-kafka-operator
namespace: operators
spec:
channel: stable
name: strimzi-kafka-operator
source: operatorhubio-catalog
sourceNamespace: olm
我們可以在這裡配置很多與整個集群相關的方面。但是,我們只需要創建一個專用的 Argo CDProject
並Application
用於 Kafka 配置。這是我們的Project
定義:
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
name: kafka
namespace: argocd
spec:
clusterResourceWhitelist:
- group: '*'
kind: '*'
destinations:
- name: '*'
namespace: '*'
server: '*'
sourceRepos:
- '*'
讓我們將kafka
ArgoCDApplication
放在新創建的Project
.
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: kafka
namespace: argocd
spec:
destination:
namespace: kafka
server: https://kubernetes.default.svc
project: kafka
source:
path: argocd/manifests/kafka
repoURL: https://github.com/piomin/sample-terraform-kubernetes-argocd.git
targetRevision: HEAD
syncPolicy:
syncOptions:
- CreateNamespace=true
最後,我們練習的最後一部分。我們將在 Kind 上創建並運行一個 3 節點的 Kafka 集群。這是Kafka
我們存儲在 Git 中的對象定義。我們為 Kafka 和 Zookeeper(由 Kafka 集群使用)設置了 3 個副本。此清單在路徑下的存儲庫中可用argocd/manifests/kafka/cluster.yaml
。我們在9092
(普通)和9093
(TLS)端口上公開集群。Kafka 集群將存儲作為 PVC 安裝到Deployment
.
apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
name: my-cluster
spec:
kafka:
replicas: 3
version: 3.2.0
logging:
type: inline
loggers:
kafka.root.logger.level: "INFO"
config:
auto.create.topics.enable: "false"
offsets.topic.replication.factor: 3
transaction.state.log.replication.factor: 3
transaction.state.log.min.isr: 2
default.replication.factor: 3
min.insync.replicas: 2
inter.broker.protocol.version: "3.2"
listeners:
- name: plain
port: 9092
type: internal
tls: false
- name: tls
port: 9093
type: internal
tls: true
storage:
type: jbod
volumes:
- id: 0
type: persistent-claim
size: 30Gi
deleteClaim: true
zookeeper:
replicas: 3
storage:
type: persistent-claim
size: 10Gi
deleteClaim: true
entityOperator:
topicOperator: {}
userOperator: {}
我們還將在argocd/manifests/kafka/cluster.yaml
清單中定義一個單獨的 Kafka 主題。
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaTopic
metadata:
name: my-topic
labels:
strimzi.io/cluster: my-cluster
spec:
partitions: 10
replicas: 3
我們已經準備好了所有需要的腳本。讓我們進入執行階段。如果您還沒有克隆 Git 存儲庫,那麼是時候克隆了:
$ git clone https://github.com/piomin/sample-terraform-kubernetes-argocd.git
$ cd sample-terraform-kubernetes-argocd
首先,讓我們初始化包含 Terraform 配置的工作目錄:
$ terraform init
完成後,我們可以預覽要執行的操作列表:
$ terraform plan
您應該收到相當大的內容作為響應。這是我結果的最後一部分:
如果一切看起來都很好並且沒有錯誤,我們可以繼續下一步(最後)。讓我們開始這個過程:
$ terraform apply
應成功應用所有 24 個對象。這是日誌的最後一部分:
現在,您應該已準備好並運行集群。讓我們顯示一個 Kind 集群列表:
$ kind get clusters
cluster-1
我們集群的名稱是cluster-1
。但是 Kubernetes 上下文的名稱是kind-cluster-1
:
讓我們顯示在 Kind 集群上部署的應用程序列表。您至少應該安裝 Argo CD 和 OLM。一段時間後,Argo CD 應用存儲在 Git 存儲庫中的配置。然後,您應該會看到命名空間中安裝了 Kafka Strimzi 運算符operators
。
之後,我們可以進入 Argo CD Web 控制台。要在本地端口上輕鬆訪問它,讓我們啟用port-forward
:
$ kubectl port-forward service/argocd-server 8443:443 -n argocd
現在,您可以在https://localhost:8443
. 默認用戶名是admin
. 密碼由 Argo CD 自動生成。你可以在 Kubernetes 中找到它Secret
argocd-initial-admin-secret
。
$ kubectl get secret argocd-initial-admin-secret -n argocd --template={{.data.password}} | base64 -D
這是我們的 Argo CD 列表Application
。cluster-config 啟用了自動同步選項。它安裝 Strimzi 操作符並創建kafka
Argo CD 應用程序。我還可以為kafka
應用程序啟用自動同步。但僅出於演示目的,我留下了手動批准。所以,讓我們在集群上運行 Kafka。為此,請單擊磁貼上的Sync
按鈕kafka
。
完成後,Kafka 安裝就開始了。最後,您應該準備好並運行整個集群。每個 Kafka 和 Zookeeper 節點都在不同的 Kubernetes 工作節點上運行:
就這樣。我們使用單個 Terraform 命令創建了所有內容,然後單擊 Argo CD Web 控制台。當然,我們可以為kafka
應用程序啟用自動同步,這樣我們甚至不需要登錄到 Argo CD Web 控制台來獲得最終效果。
鏈接:https ://piotrminkowski.com/2022/06/28/manage-kubernetes-cluster-with-terraform-and-argo-cd/
#terraform #kubernetes #argocd
1601051854
Kubernetes is a highly popular container orchestration platform. Multi cloud is a strategy that leverages cloud resources from multiple vendors. Multi cloud strategies have become popular because they help prevent vendor lock-in and enable you to leverage a wide variety of cloud resources. However, multi cloud ecosystems are notoriously difficult to configure and maintain.
This article explains how you can leverage Kubernetes to reduce multi cloud complexities and improve stability, scalability, and velocity.
Maintaining standardized application deployments becomes more challenging as your number of applications and the technologies they are based on increase. As environments, operating systems, and dependencies differ, management and operations require more effort and extensive documentation.
In the past, teams tried to get around these difficulties by creating isolated projects in the data center. Each project, including its configurations and requirements were managed independently. This required accurately predicting performance and the number of users before deployment and taking down applications to update operating systems or applications. There were many chances for error.
Kubernetes can provide an alternative to the old method, enabling teams to deploy applications independent of the environment in containers. This eliminates the need to create resource partitions and enables teams to operate infrastructure as a unified whole.
In particular, Kubernetes makes it easier to deploy a multi cloud strategy since it enables you to abstract away service differences. With Kubernetes deployments you can work from a consistent platform and optimize services and applications according to your business needs.
The Compelling Attributes of Multi Cloud Kubernetes
Multi cloud Kubernetes can provide multiple benefits beyond a single cloud deployment. Below are some of the most notable advantages.
Stability
In addition to the built-in scalability, fault tolerance, and auto-healing features of Kubernetes, multi cloud deployments can provide service redundancy. For example, you can mirror applications or split microservices across vendors. This reduces the risk of a vendor-related outage and enables you to create failovers.
#kubernetes #multicloud-strategy #kubernetes-cluster #kubernetes-top-story #kubernetes-cluster-install #kubernetes-explained #kubernetes-infrastructure #cloud
1601305200
Recently, Microsoft announced the general availability of Bridge to Kubernetes, formerly known as Local Process with Kubernetes. It is an iterative development tool offered in Visual Studio and VS Code, which allows developers to write, test as well as debug microservice code on their development workstations while consuming dependencies and inheriting the existing configuration from a Kubernetes environment.
Nick Greenfield, Program Manager, Bridge to Kubernetes stated in an official blog post, “Bridge to Kubernetes is expanding support to any Kubernetes. Whether you’re connecting to your development cluster running in the cloud, or to your local Kubernetes cluster, Bridge to Kubernetes is available for your end-to-end debugging scenarios.”
Bridge to Kubernetes provides a number of compelling features. Some of them are mentioned below-
#news #bridge to kubernetes #developer tools #kubernetes #kubernetes platform #kubernetes tools #local process with kubernetes #microsoft
1658846897
In this article, you will learn how to create a Kubernetes cluster with Terraform and then manage it with Argo CD. Terraform is very useful for automating infrastructure. On the other hand, Argo CD helps us implement GitOps and continuous delivery for our applications. It seems that we can successfully combine both these tools. Let’s consider how they can help us to work with Kubernetes in the GitOps style.
See more at: https://piotrminkowski.com/2022/06/28/manage-kubernetes-cluster-with-terraform-and-argo-cd/
#terraform #kubernetes #argocd