Управляйте Kubernetes с помощью компакт-диска Terraform и Argo

В этой статье вы узнаете, как создать кластер Kubernetes с помощью Terraform, а затем управлять им с помощью компакт-диска Argo. Terraform очень полезен для автоматизации инфраструктуры. С другой стороны, Argo CD помогает нам внедрять GitOps и непрерывную доставку для наших приложений. Кажется, мы можем удачно совместить оба этих инструмента. Рассмотрим, как они могут нам помочь в работе с Kubernetes в стиле GitOps.

Введение

Прежде всего, я хотел бы определить весь кластер и сохранить его конфигурацию в Git. Я не могу использовать для этого только Argo CD, потому что Argo CD должен работать в существующем кластере Kubernetes. Вот почему мне нужен инструмент, способный создать кластер, а затем установить туда компакт-диск Argo. В этом случае Terraform кажется естественным выбором. С другой стороны, я не хочу использовать Terraform для управления приложениями, работающими в Kubernetes. Он идеально подходит для разовых действий, таких как создание кластера, но не для непрерывных задач, таких как доставка приложений и управление конфигурацией.

Вот список вещей, которые мы собираемся сделать:

  1. На первом этапе мы создадим локальный кластер Kubernetes с помощью Terraform.
  2. Затем мы установим OLM (диспетчер жизненного цикла оператора) на кластер. Он нужен нам для установки Kafka с помощью Strimzi (Шаг 5)
  3. Мы будем использовать Terraform для установки компакт-диска Argo из диаграммы Helm и создания единого компакт-диска Argo, Applicationотвечающего за всю конфигурацию кластера на основе Git.
  4. После этого компакт-диск Argo Applicationустанавливает Strimzi Operator, создает компакт-диск Argo, Projectпредназначенный для установки Kafka, и компакт-диск Argo Application, который запускает Kafka в Kubernetes.
  5. Наконец, приложение Argo CD автоматически создает все объекты CRD, необходимые для запуска Kafka.

Самое главное здесь то, что все должно произойти после запуска terraform applyкоманды. Terraform устанавливает компакт-диск Argo, а затем компакт-диск Argo устанавливает Kafka, которая является нашим примером приложения в этом сценарии. Давайте посмотрим, как это работает.

terraform-kubernetes-арка

 

Исходный код

Если вы хотите попробовать это самостоятельно, вы всегда можете взглянуть на мой исходный код. Для этого вам нужно клонировать мой  репозиторий GitHub . После этого вы должны просто следовать моим инструкциям. Давайте начнем.

1. Создайте кластер Kubernetes с помощью Terraform

Чтобы легко создать кластер Kubernetes, мы будем использовать Kind . Существует специальный поставщик Terraform для Kind, доступный здесь . Конечно, вы можете запустить Kubernetes в любом облаке, и вы также найдете для этого поставщиков Terraform.

Наш кластер состоит из трех рабочих узлов и одного главного узла. Нам нужно три узла, потому что, наконец, мы установим кластер Kafka, работающий в трех экземплярах. Каждый из них будет развернут на другом узле. Вот наш main.tfфайл Terraform для этого шага. Нам нужно определить последнюю версию 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, но как вы, наверное, помните, мы сделаем это после того, как последняя вся конфигурация будет готова применить все одной командой.

2. Установите OLM в Kubernetes

Как я упоминал ранее, диспетчер жизненного цикла оператора (OLM) является необходимым условием для установки оператора Strimzi Kafka. Вы можете найти последнюю версию OLM здесь . Фактически все сводится к применению двух манифестов YAML в Kubernetes. Первый из них crds.yamlсодержит определения CRD. Второй из них olm.yamlпредоставляет все необходимые объекты Kubernetes для установки OLM. Давайте просто скопируем оба этих файла в локальный каталог внутри нашего репозитория Terraform. Чтобы применить их к Kubernetes, нам сначала нужно включить kubectlпоставщика Terraform.

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. Установите компакт-диск Argo с Helm

Это последний шаг на стороне Terraform. Мы собираемся установить компакт-диск Argo, используя его диаграмму Helm. Также нам необходимо создать единый компакт-диск Argo, Applicationотвечающий за управление кластером. Это Applicationустановит оператор Kafka Strimzi и создаст другой компакт-диск Argo 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. По умолчанию Terraform проверяет наличие необходимых объектов CRD в Kubernetes. В этом случае требуется ApplicationCRD от argoproj.io/v1alpha1. К счастью, мы можем использовать параметр диаграммы Helm, позволяющий передать объявление дополнительных Applications. Для этого нам нужно установить пользовательский values.yamlфайл. Вот декларация Terraform для установки компакт-диска Argo:

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, нам нужно использовать server.additionalApplicationsпараметр диаграммы Helm, как показано. Вот весь argocd/application.yamlфайл. Для упрощения конфигурация, используемая Argo CD, находится в репозитории как конфигурация Terraform. Вы можете найти все необходимые файлы YAML в argocd/manifestsкаталоге.

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. Настройте кластер Kubernetes с помощью компакт-диска Argo.

Последние два шага управляются 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 Projectи Applicationнастроить Kafka. Вот наше Projectопределение:

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

Давайте kafkaпоместим ArgoCD Applicationво вновь созданный файл 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. Создайте кластер Kafka с помощью GitOps

Наконец, последняя часть нашего упражнения. Мы создадим и запустим 3-узловой кластер Kafka на Kind. Вот Kafkaопределение объекта, которое мы храним в Git. Мы устанавливаем 3 реплики для Kafka и Zookeeper (используется кластером Kafka). Этот манифест доступен в репозитории по пути 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: {}

Мы также определим одну тему Kafka внутри argocd/manifests/kafka/cluster.yamlманифеста.

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. Чтобы легко получить к нему доступ через локальный порт, давайте включим port-forward:

$ kubectl port-forward service/argocd-server 8443:443 -n argocd

Теперь вы можете отобразить веб-консоль Argo CD на https://localhost:8443. Имя пользователя по умолчанию admin. Пароль автоматически генерируется компакт-диском Argo. Вы можете найти его внутри Kubernetes Secret argocd-initial-admin-secret.

$ kubectl get secret argocd-initial-admin-secret -n argocd --template={{.data.password}} | base64 -D

Вот список наших компакт-дисков Argo Application. В конфигурации кластера включена опция автоматической синхронизации. Он устанавливает оператора Strimzi и создает kafkaприложение Argo CD. Я также мог бы включить автоматическую синхронизацию для kafkaApplication. Но только для демонстрационных целей я оставил там ручное одобрение. Итак, давайте запустим Kafka на нашем кластере. Для этого нажмите Syncкнопку на kafkaплитке.

terraform-kubernetes-argocd

Как только вы это сделаете, начнется установка Kafka. Наконец, у вас должен быть готов и запущен весь кластер. Каждый узел Kafka и Zookeeper работает на разных рабочих узлах Kubernetes:

Это все. Мы создали все с помощью одной команды Terraform и одного клика в веб-консоли Argo CD. Конечно, мы могли бы включить автоматическую синхронизацию для kafkaприложения, поэтому нам даже не нужно входить в веб-консоль Argo CD для окончательного эффекта.

Ссылка: https://piotrminkowski.com/2022/06/28/manage-kubernetes-cluster-with-terraform-and-argo-cd/

#terraform #kubernetes #argocd

What is GEEK

Buddha Community

Управляйте Kubernetes с помощью компакт-диска Terraform и Argo
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

Управляйте Kubernetes с помощью компакт-диска Terraform и Argo

В этой статье вы узнаете, как создать кластер Kubernetes с помощью Terraform, а затем управлять им с помощью компакт-диска Argo. Terraform очень полезен для автоматизации инфраструктуры. С другой стороны, Argo CD помогает нам внедрять GitOps и непрерывную доставку для наших приложений. Кажется, мы можем удачно совместить оба этих инструмента. Рассмотрим, как они могут нам помочь в работе с Kubernetes в стиле GitOps.

Введение

Прежде всего, я хотел бы определить весь кластер и сохранить его конфигурацию в Git. Я не могу использовать для этого только Argo CD, потому что Argo CD должен работать в существующем кластере Kubernetes. Вот почему мне нужен инструмент, способный создать кластер, а затем установить туда компакт-диск Argo. В этом случае Terraform кажется естественным выбором. С другой стороны, я не хочу использовать Terraform для управления приложениями, работающими в Kubernetes. Он идеально подходит для разовых действий, таких как создание кластера, но не для непрерывных задач, таких как доставка приложений и управление конфигурацией.

Вот список вещей, которые мы собираемся сделать:

  1. На первом этапе мы создадим локальный кластер Kubernetes с помощью Terraform.
  2. Затем мы установим OLM (диспетчер жизненного цикла оператора) на кластер. Он нужен нам для установки Kafka с помощью Strimzi (Шаг 5)
  3. Мы будем использовать Terraform для установки компакт-диска Argo из диаграммы Helm и создания единого компакт-диска Argo, Applicationотвечающего за всю конфигурацию кластера на основе Git.
  4. После этого компакт-диск Argo Applicationустанавливает Strimzi Operator, создает компакт-диск Argo, Projectпредназначенный для установки Kafka, и компакт-диск Argo Application, который запускает Kafka в Kubernetes.
  5. Наконец, приложение Argo CD автоматически создает все объекты CRD, необходимые для запуска Kafka.

Самое главное здесь то, что все должно произойти после запуска terraform applyкоманды. Terraform устанавливает компакт-диск Argo, а затем компакт-диск Argo устанавливает Kafka, которая является нашим примером приложения в этом сценарии. Давайте посмотрим, как это работает.

terraform-kubernetes-арка

 

Исходный код

Если вы хотите попробовать это самостоятельно, вы всегда можете взглянуть на мой исходный код. Для этого вам нужно клонировать мой  репозиторий GitHub . После этого вы должны просто следовать моим инструкциям. Давайте начнем.

1. Создайте кластер Kubernetes с помощью Terraform

Чтобы легко создать кластер Kubernetes, мы будем использовать Kind . Существует специальный поставщик Terraform для Kind, доступный здесь . Конечно, вы можете запустить Kubernetes в любом облаке, и вы также найдете для этого поставщиков Terraform.

Наш кластер состоит из трех рабочих узлов и одного главного узла. Нам нужно три узла, потому что, наконец, мы установим кластер Kafka, работающий в трех экземплярах. Каждый из них будет развернут на другом узле. Вот наш main.tfфайл Terraform для этого шага. Нам нужно определить последнюю версию 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, но как вы, наверное, помните, мы сделаем это после того, как последняя вся конфигурация будет готова применить все одной командой.

2. Установите OLM в Kubernetes

Как я упоминал ранее, диспетчер жизненного цикла оператора (OLM) является необходимым условием для установки оператора Strimzi Kafka. Вы можете найти последнюю версию OLM здесь . Фактически все сводится к применению двух манифестов YAML в Kubernetes. Первый из них crds.yamlсодержит определения CRD. Второй из них olm.yamlпредоставляет все необходимые объекты Kubernetes для установки OLM. Давайте просто скопируем оба этих файла в локальный каталог внутри нашего репозитория Terraform. Чтобы применить их к Kubernetes, нам сначала нужно включить kubectlпоставщика Terraform.

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. Установите компакт-диск Argo с Helm

Это последний шаг на стороне Terraform. Мы собираемся установить компакт-диск Argo, используя его диаграмму Helm. Также нам необходимо создать единый компакт-диск Argo, Applicationотвечающий за управление кластером. Это Applicationустановит оператор Kafka Strimzi и создаст другой компакт-диск Argo 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. По умолчанию Terraform проверяет наличие необходимых объектов CRD в Kubernetes. В этом случае требуется ApplicationCRD от argoproj.io/v1alpha1. К счастью, мы можем использовать параметр диаграммы Helm, позволяющий передать объявление дополнительных Applications. Для этого нам нужно установить пользовательский values.yamlфайл. Вот декларация Terraform для установки компакт-диска Argo:

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, нам нужно использовать server.additionalApplicationsпараметр диаграммы Helm, как показано. Вот весь argocd/application.yamlфайл. Для упрощения конфигурация, используемая Argo CD, находится в репозитории как конфигурация Terraform. Вы можете найти все необходимые файлы YAML в argocd/manifestsкаталоге.

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. Настройте кластер Kubernetes с помощью компакт-диска Argo.

Последние два шага управляются 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 Projectи Applicationнастроить Kafka. Вот наше Projectопределение:

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

Давайте kafkaпоместим ArgoCD Applicationво вновь созданный файл 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. Создайте кластер Kafka с помощью GitOps

Наконец, последняя часть нашего упражнения. Мы создадим и запустим 3-узловой кластер Kafka на Kind. Вот Kafkaопределение объекта, которое мы храним в Git. Мы устанавливаем 3 реплики для Kafka и Zookeeper (используется кластером Kafka). Этот манифест доступен в репозитории по пути 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: {}

Мы также определим одну тему Kafka внутри argocd/manifests/kafka/cluster.yamlманифеста.

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. Чтобы легко получить к нему доступ через локальный порт, давайте включим port-forward:

$ kubectl port-forward service/argocd-server 8443:443 -n argocd

Теперь вы можете отобразить веб-консоль Argo CD на https://localhost:8443. Имя пользователя по умолчанию admin. Пароль автоматически генерируется компакт-диском Argo. Вы можете найти его внутри Kubernetes Secret argocd-initial-admin-secret.

$ kubectl get secret argocd-initial-admin-secret -n argocd --template={{.data.password}} | base64 -D

Вот список наших компакт-дисков Argo Application. В конфигурации кластера включена опция автоматической синхронизации. Он устанавливает оператора Strimzi и создает kafkaприложение Argo CD. Я также мог бы включить автоматическую синхронизацию для kafkaApplication. Но только для демонстрационных целей я оставил там ручное одобрение. Итак, давайте запустим Kafka на нашем кластере. Для этого нажмите Syncкнопку на kafkaплитке.

terraform-kubernetes-argocd

Как только вы это сделаете, начнется установка Kafka. Наконец, у вас должен быть готов и запущен весь кластер. Каждый узел Kafka и Zookeeper работает на разных рабочих узлах Kubernetes:

Это все. Мы создали все с помощью одной команды Terraform и одного клика в веб-консоли Argo CD. Конечно, мы могли бы включить автоматическую синхронизацию для kafkaприложения, поэтому нам даже не нужно входить в веб-консоль Argo CD для окончательного эффекта.

Ссылка: 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

Houston  Sipes

Houston Sipes

1600992000

Did Google Open Sourcing Kubernetes Backfired?

Over the last few years, Kubernetes have become the de-facto standard for container orchestration and has also won the race against Docker for being the most loved platforms among developers. Released in 2014, Kubernetes has come a long way with currently being used across the entire cloudscape platforms. In fact, recent reports state that out of 109 tools to manage containers, 89% of them are leveraging Kubernetes versions.

Although inspired by Borg, Kubernetes, is an open-source project by Google, and has been donated to a vendor-neutral firm — The Cloud Native Computing Foundation. This could be attributed to Google’s vision of creating a platform that can be used by every firm of the world, including the large tech companies and can host multiple cloud platforms and data centres. The entire reason for handing over the control to CNCF is to develop the platform in the best interest of its users without vendor lock-in.

#opinions #google open source #google open source tools #google opening kubernetes #kubernetes #kubernetes platform #kubernetes tools #open source kubernetes backfired