高橋  陽子

高橋 陽子

1658825040

如何使用 Terraform 和 Argo CD 管理 Kubernetes 集群

在本文中,您將學習如何使用 Terraform 創建 Kubernetes 集群,然後使用 Argo CD 對其進行管理。Terraform 對於自動化基礎設施非常有用。另一方面,Argo CD 幫助我們為我們的應用程序實施 GitOps 和持續交付。看來我們可以成功地結合這兩種工具。讓我們考慮一下它們如何幫助我們以 GitOps 風格使用 Kubernetes。

介紹

首先,我想定義整個集群並將其配置存儲在 Git 中。我不能只使用 Argo CD 來實現它,因為 Argo CD 必須在現有的 Kubernetes 集群上運行。這就是為什麼我需要一個能夠創建集群然後在那里安裝 Argo CD 的工具。在這種情況下,Terraform 似乎是一個自然的選擇。另一方面,我不想使用 Terraform 來管理在 Kubernetes 上運行的應用程序。它非常適合創建集群等一次性活動,但不適用於應用交付和配置管理等持續任務。

這是我們要做的事情的清單:

  1. 第一步,我們將使用 Terraform 創建一個本地 Kubernetes 集群
  2. 然後我們將在集群上安裝 OLM(Operator Lifecycle Manager)。我們需要它來使用 Strimzi 安裝 Kafka(步驟 5)
  3. 我們將使用 Terraform 從 Helm chart 安裝 Argo CD,並創建一個 Argo CDApplication負責基於 Git 的整個集群配置
  4. 之後,Argo CDApplication安裝 Strimzi Operator,創建Project專用於 Kafka 安裝的 Argo CD 和Application在 Kubernetes 上運行 Kafka 的Argo CD
  5. 最後,Argo CD 應用程序會自動創建運行 Kafka 所需的所有 CRD 對象

這裡最重要的是,一切都應該在運行terraform apply命令之後發生。Terraform 安裝 Argo CD,然後 Argo CD 安裝 Kafka,這是我們在該場景中的示例應用程序。讓我們看看它是如何工作的。

terraform-kubernetes-arch

 

源代碼

如果您想自己嘗試一下,可以隨時查看我的源代碼。為此,您需要克隆我的 GitHub 存儲庫。之後,您應該按照我的指示進行操作。讓我們開始。

1. 使用 Terraform 創建 Kubernetes 集群

為了輕鬆創建 Kubernetes 集群,我們將使用Kind這裡有一個專門的用於 Kind 的 Terraform 提供程序。當然,你可以在任何云上運行 Kubernetes,你也可以找到 Terraform 提供者。

我們的集群由三個工作節點和一個主節點組成。我們需要三個節點,因為最後,我們將安裝一個在三個實例中運行的 Kafka 集群。它們中的每一個都將部署在不同的節點上。這是該步驟的 Terraformmain.tf文件。我們需要在該部分中定義tehcyx/kind提供程序的最新版本(即0.0.12required_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,但您可能還記得,我們​​將在最後所有配置準備好後,在一個命令中應用所有內容。

2. 在 Kubernetes 上安裝 OLM

正如我之前提到的,操作員生命週期管理器(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}"
}

3. 使用 Helm 安裝 Argo CD

這是 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 圖表參數允許我們傳遞附加Applications 的聲明。為此,我們必須設置一個自定義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

4. 使用 Argo CD 配置 Kubernetes 集群

最後兩個步驟由 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 CDProjectApplication用於 Kafka 配置。這是我們的Project定義:

apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: kafka
  namespace: argocd
spec:
  clusterResourceWhitelist:
    - group: '*'
      kind: '*'
  destinations:
    - name: '*'
      namespace: '*'
      server: '*'
  sourceRepos:
    - '*'

讓我們將kafkaArgoCDApplication放在新創建的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

5. 使用 GitOps 創建 Kafka 集群

最後,我們練習的最後一部分。我們將在 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

在 Kubernetes 上執行

地形

我們已經準備好了所有需要的腳本。讓我們進入執行階段。如果您還沒有克隆 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

terraform-kubernetes-應用程序

阿爾戈光盤

之後,我們可以進入 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 操作符並創建kafkaArgo CD 應用程序。我還可以為kafka應用程序啟用自動同步。但僅出於演示目的,我留下了手動批准。所以,讓我們在集群上運行 Kafka。為此,請單擊磁貼上的Sync按鈕kafka

terraform-kubernetes-argocd

完成後,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

What is GEEK

Buddha Community

如何使用 Terraform 和 Argo CD 管理 Kubernetes 集群
Christa  Stehr

Christa Stehr

1602964260

50+ Useful Kubernetes Tools for 2020 - Part 2

Introduction

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 和 Argo CD 管理 Kubernetes 集群

在本文中,您將學習如何使用 Terraform 創建 Kubernetes 集群,然後使用 Argo CD 對其進行管理。Terraform 對於自動化基礎設施非常有用。另一方面,Argo CD 幫助我們為我們的應用程序實施 GitOps 和持續交付。看來我們可以成功地結合這兩種工具。讓我們考慮一下它們如何幫助我們以 GitOps 風格使用 Kubernetes。

介紹

首先,我想定義整個集群並將其配置存儲在 Git 中。我不能只使用 Argo CD 來實現它,因為 Argo CD 必須在現有的 Kubernetes 集群上運行。這就是為什麼我需要一個能夠創建集群然後在那里安裝 Argo CD 的工具。在這種情況下,Terraform 似乎是一個自然的選擇。另一方面,我不想使用 Terraform 來管理在 Kubernetes 上運行的應用程序。它非常適合創建集群等一次性活動,但不適用於應用交付和配置管理等持續任務。

這是我們要做的事情的清單:

  1. 第一步,我們將使用 Terraform 創建一個本地 Kubernetes 集群
  2. 然後我們將在集群上安裝 OLM(Operator Lifecycle Manager)。我們需要它來使用 Strimzi 安裝 Kafka(步驟 5)
  3. 我們將使用 Terraform 從 Helm chart 安裝 Argo CD,並創建一個 Argo CDApplication負責基於 Git 的整個集群配置
  4. 之後,Argo CDApplication安裝 Strimzi Operator,創建Project專用於 Kafka 安裝的 Argo CD 和Application在 Kubernetes 上運行 Kafka 的Argo CD
  5. 最後,Argo CD 應用程序會自動創建運行 Kafka 所需的所有 CRD 對象

這裡最重要的是,一切都應該在運行terraform apply命令之後發生。Terraform 安裝 Argo CD,然後 Argo CD 安裝 Kafka,這是我們在該場景中的示例應用程序。讓我們看看它是如何工作的。

terraform-kubernetes-arch

 

源代碼

如果您想自己嘗試一下,可以隨時查看我的源代碼。為此,您需要克隆我的 GitHub 存儲庫。之後,您應該按照我的指示進行操作。讓我們開始。

1. 使用 Terraform 創建 Kubernetes 集群

為了輕鬆創建 Kubernetes 集群,我們將使用Kind這裡有一個專門的用於 Kind 的 Terraform 提供程序。當然,你可以在任何云上運行 Kubernetes,你也可以找到 Terraform 提供者。

我們的集群由三個工作節點和一個主節點組成。我們需要三個節點,因為最後,我們將安裝一個在三個實例中運行的 Kafka 集群。它們中的每一個都將部署在不同的節點上。這是該步驟的 Terraformmain.tf文件。我們需要在該部分中定義tehcyx/kind提供程序的最新版本(即0.0.12required_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,但您可能還記得,我們​​將在最後所有配置準備好後,在一個命令中應用所有內容。

2. 在 Kubernetes 上安裝 OLM

正如我之前提到的,操作員生命週期管理器(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}"
}

3. 使用 Helm 安裝 Argo CD

這是 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 圖表參數允許我們傳遞附加Applications 的聲明。為此,我們必須設置一個自定義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

4. 使用 Argo CD 配置 Kubernetes 集群

最後兩個步驟由 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 CDProjectApplication用於 Kafka 配置。這是我們的Project定義:

apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: kafka
  namespace: argocd
spec:
  clusterResourceWhitelist:
    - group: '*'
      kind: '*'
  destinations:
    - name: '*'
      namespace: '*'
      server: '*'
  sourceRepos:
    - '*'

讓我們將kafkaArgoCDApplication放在新創建的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

5. 使用 GitOps 創建 Kafka 集群

最後,我們練習的最後一部分。我們將在 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

在 Kubernetes 上執行

地形

我們已經準備好了所有需要的腳本。讓我們進入執行階段。如果您還沒有克隆 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

terraform-kubernetes-應用程序

阿爾戈光盤

之後,我們可以進入 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 操作符並創建kafkaArgo CD 應用程序。我還可以為kafka應用程序啟用自動同步。但僅出於演示目的,我留下了手動批准。所以,讓我們在集群上運行 Kafka。為此,請單擊磁貼上的Sync按鈕kafka

terraform-kubernetes-argocd

完成後,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

Maud  Rosenbaum

Maud Rosenbaum

1601051854

Kubernetes in the Cloud: Strategies for Effective Multi Cloud Implementations

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.

Kubernetes: Your Multi Cloud Strategy

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

Mitchel  Carter

Mitchel Carter

1601305200

Microsoft Announces General Availability Of Bridge To Kubernetes

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

Hans  Marvin

Hans Marvin

1658846897

How to Manage Kubernetes Cluster with Terraform & Argo CD

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