Hong  Nhung

Hong Nhung

1658817809

Cách Quản Lý Kubernetes Cluster Với Terraform & Argo CD

Trong bài viết này, bạn sẽ học cách tạo một cụm Kubernetes bằng Terraform và sau đó quản lý nó bằng Argo CD. Terraform rất hữu ích để tự động hóa cơ sở hạ tầng. Mặt khác, Argo CD giúp chúng tôi triển khai GitOps và phân phối liên tục cho các ứng dụng của chúng tôi. Có vẻ như chúng ta có thể kết hợp thành công cả hai công cụ này. Hãy xem xét cách họ có thể giúp chúng ta làm việc với Kubernetes theo kiểu GitOps.

Giới thiệu

Trước hết, tôi muốn xác định toàn bộ cụm và lưu trữ cấu hình của nó trong Git. Tôi không thể chỉ sử dụng Argo CD để đạt được nó, vì Argo CD phải chạy trên cụm Kubernetes hiện có. Đó là lý do tại sao tôi cần một công cụ có thể tạo một cụm và sau đó cài đặt Argo CD ở đó. Trong trường hợp đó, Terraform dường như là một lựa chọn tự nhiên. Mặt khác, tôi không muốn sử dụng Terraform để quản lý các ứng dụng chạy trên Kubernetes. Nó hoàn hảo cho hoạt động một lần như tạo một cụm, nhưng không hoàn hảo cho các tác vụ liên tục như phân phối ứng dụng và quản lý cấu hình.

Đây là danh sách những việc chúng tôi sẽ làm:

  1. Trong bước đầu tiên, chúng tôi sẽ tạo một cụm Kubernetes cục bộ bằng Terraform
  2. Sau đó, chúng tôi sẽ cài đặt OLM (Trình quản lý vòng đời của nhà điều hành) trên cụm. Chúng tôi cần nó để cài đặt Kafka với Strimzi (Bước 5)
  3. Chúng tôi sẽ sử dụng Terraform để cài đặt Argo CD từ biểu đồ Helm và tạo một CD Argo duy nhất Applicationchịu trách nhiệm về cấu hình toàn bộ cụm dựa trên Git
  4. Sau đó, Argo CD Applicationcài đặt Strimzi Operator, tạo Argo CD Projectdành riêng cho cài đặt Kafka và Argo CD Applicationchạy Kafka trên Kubernetes
  5. Cuối cùng, Ứng dụng Argo CD tự động tạo tất cả các đối tượng CRD cần thiết để chạy Kafka

Điều quan trọng nhất ở đây là mọi thứ sẽ xảy ra sau khi chạy terraform applylệnh. Terraform cài đặt Argo CD, sau đó Argo CD cài đặt Kafka, đây là ứng dụng mẫu của chúng tôi trong trường hợp đó. Hãy xem nó hoạt động như thế nào.

terraform-kubernetes-Arch

 

Mã nguồn

Nếu bạn muốn thử nó một mình, bạn luôn có thể xem qua mã nguồn của tôi. Để làm được điều đó, bạn cần sao chép  kho lưu trữ GitHub của tôi . Sau đó, bạn chỉ nên làm theo hướng dẫn của tôi. Hãy bắt đầu nào.

1. Tạo Kubernetes Cluster với Terraform

Để dễ dàng tạo một cụm Kubernetes, chúng ta sẽ sử dụng Kind . Có một nhà cung cấp Terraform dành riêng cho Kind có sẵn tại đây . Tất nhiên, bạn có thể chạy Kubernetes trên bất kỳ đám mây nào và bạn cũng sẽ tìm thấy các nhà cung cấp Terraform cho điều đó.

Cụm của chúng tôi bao gồm ba nút công nhân và một nút chính duy nhất. Chúng tôi cần ba nút vì cuối cùng, chúng tôi sẽ cài đặt một cụm Kafka chạy trong ba trường hợp. Mỗi người trong số họ sẽ được triển khai trên một nút khác nhau. main.tfĐây là tệp Terraform của chúng tôi cho bước đó. Chúng ta cần xác định phiên bản mới nhất của tehcyx/kindnhà cung cấp (chính là 0.0.12) trong required_providersphần này. Tên của cụm của chúng tôi là cluster1. Chúng tôi cũng sẽ bật wait_for_readytùy chọn để tiến hành các bước tiếp theo sau khi cụm đã sẵn sàng.

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"
    }
  }
}

Chỉ cần xác minh một cấu hình, bạn có thể chạy lệnh terraform initvà sau đó terraform plan. Sau đó, bạn có thể áp dụng cấu hình bằng cách sử dụng terraform apply, nhưng như bạn có thể nhớ rằng chúng tôi sẽ thực hiện điều đó sau khi tất cả cấu hình cuối cùng đã sẵn sàng để áp dụng mọi thứ trong một lệnh.

2. Cài đặt OLM trên Kubernetes

Như tôi đã đề cập trước đây, Trình quản lý vòng đời của nhà điều hành (OLM) là điều kiện tiên quyết để cài đặt nhà điều hành Strimzi Kafka. Bạn có thể tìm thấy bản phát hành mới nhất của OLM tại đây . Trên thực tế, nó phụ thuộc vào việc áp dụng hai biểu hiện YAML trên Kubernetes. Đầu tiên trong số chúng crds.yamlchứa các định nghĩa CRD. Cái thứ hai trong số chúng olm.yamlcung cấp tất cả các đối tượng Kubernetes cần thiết để cài đặt OLM. Hãy chỉ sao chép cả hai tệp này vào thư mục cục bộ bên trong kho lưu trữ Terraform của chúng tôi. Để áp dụng chúng cho Kubernetes, trước tiên chúng ta cần kích hoạt trình kubectlcung cấp Terraform.

terraform {
  ...

  required_providers {
    kubectl = {
      source  = "gavinbunney/kubectl"
      version = ">= 1.7.0"
    }
  }
}

Tại sao chúng tôi sử dụng kubectlnhà cung cấp thay vì nhà cung cấp Terraform Kubernetes chính thức? Nó crds.yamlchứa các CRD khá lớn vượt quá giới hạn kích thước. Chúng tôi có thể dễ dàng giải quyết vấn đề đó bằng cách cho phép áp dụng phía máy chủ trên kubectlnhà cung cấp. Trường hợp tiếp theo là có nhiều đối tượng Kubernetes được xác định bên trong cả hai tệp YAML. Nhà kubectlcung cấp hỗ trợ nó thông qua for_eachtham số.

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
}

Le's hãy xem xét trường hợp cuối cùng trong phần này. Trước khi áp dụng bất kỳ YAML nào, chúng tôi đang tạo một cụm Kubernetes mới trong bước trước. Do đó, chúng ta không thể sử dụng ngữ cảnh hiện có. May mắn thay, chúng ta có thể sử dụng các đối số đầu ra từ kubectlnhà cung cấp với địa chỉ Kubernetes và thông tin xác thực.

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. Cài đặt Argo CD với Helm

Đây là bước cuối cùng ở phía Terraform. Chúng tôi sẽ cài đặt Argo CD bằng biểu đồ Helm của nó. Chúng tôi cũng cần tạo một CD Argo duy nhất Applicationchịu trách nhiệm quản lý cụm. Thao tác này Applicationsẽ cài đặt toán tử Kafka Strimzi và tạo một đĩa CD Argo khác Applicationđược sử dụng, ví dụ như để chạy cụm Kafka. Trong bước đầu tiên, chúng ta cần làm điều tương tự như trước: xác định nhà cung cấp và đặt địa chỉ cụm Kubernetes. Đây là định nghĩa của chúng tôi trong 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}"
  }
}

Điều khó khăn ở đây là chúng ta cần tạo bản Applicationcài đặt Argo CD ngay sau khi cài đặt. Theo mặc định, Terraform xác minh xem có các đối tượng CRD bắt buộc trên Kubernetes hay không. Trong trường hợp đó, nó yêu cầu ApplicationCRD từ argoproj.io/v1alpha1. May mắn thay, chúng ta có thể sử dụng tham số biểu đồ Helm cho phép chúng ta chuyển khai báo các Applications bổ sung. Để làm điều đó, chúng tôi phải thiết lập một values.yamltệp tùy chỉnh. Đây là khai báo Terraform cho cài đặt Argo CD:

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")
  ]
}

Để tạo ban đầu Application, chúng ta cần sử dụng tham số biểu đồ Helm server.additionalApplicationsnhư hình minh họa. Đây là toàn bộ argocd/application.yamltệp. Để đơn giản hóa, cấu hình được Argo CD sử dụng nằm trong kho lưu trữ dưới dạng cấu hình Terraform. Bạn có thể tìm thấy tất cả các YAML được yêu cầu trong thư mục 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. Cấu hình Kubernetes cluster với Argo CD

Hai bước cuối cùng được quản lý bởi Argo CD. Chúng tôi đã hoàn tất thành công quá trình cài đặt cụm Kubernetes. Bây giờ, đã đến lúc cài đặt ứng dụng đầu tiên của chúng tôi ở đó. Ứng dụng ví dụ của chúng tôi là Kafka. Vì vậy, trước tiên chúng ta cần cài đặt toán tử Kafka Strimzi. Để làm điều đó, chúng ta chỉ cần xác định một Subscriptionđối tượng được quản lý bởi OLM đã được cài đặt trước đó. Định nghĩa có sẵn trong kho lưu trữ dưới dạng strimzi.yamltệp.

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

Chúng tôi có thể cấu hình rất nhiều khía cạnh liên quan đến toàn bộ cụm ở đây. Tuy nhiên, chúng ta chỉ cần tạo một CD Argo chuyên dụng ProjectApplicationcho cấu hình Kafka. Đây là Projectđịnh nghĩa của chúng tôi:

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

Hãy đặt kafkaArgoCD Applicationbên trong cái mới được tạo 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. Tạo Kafka Cluster bằng GitOps

Cuối cùng, phần cuối cùng của bài tập của chúng ta. Chúng tôi sẽ tạo và chạy một cụm Kafka 3 nút trên Kind. Đây là Kafkađịnh nghĩa đối tượng mà chúng tôi lưu trữ trong Git. Chúng tôi đang thiết lập 3 bản sao cho cả Kafka và Zookeeper (được sử dụng bởi cụm Kafka). Tệp kê khai này có sẵn trong kho lưu trữ theo đường dẫn argocd/manifests/kafka/cluster.yaml. Chúng tôi đang hiển thị cụm trên các cổng 9092(đồng bằng) và 9093(TLS). Cụm Kafka có bộ lưu trữ được gắn như PVC vào 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: {}

Chúng tôi cũng sẽ xác định một Chủ đề Kafka duy nhất bên trong argocd/manifests/kafka/cluster.yamltệp kê khai.

apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaTopic
metadata:
  name: my-topic
  labels:
    strimzi.io/cluster: my-cluster
spec:
  partitions: 10
  replicas: 3

Thực thi trên Kubernetes

Terraform

Chúng tôi đã chuẩn bị tất cả các script được yêu cầu. Hãy chuyển sang giai đoạn thực hiện. Nếu bạn vẫn chưa nhân bản kho lưu trữ Git thì đã đến lúc làm điều đó:

$ git clone https://github.com/piomin/sample-terraform-kubernetes-argocd.git
$ cd sample-terraform-kubernetes-argocd

Đầu tiên, hãy khởi tạo thư mục làm việc của chúng ta có chứa cấu hình Terraform:

$ terraform init

Sau khi thực hiện, chúng tôi có thể xem trước danh sách các hành động cần thực hiện:

$ terraform plan

Bạn sẽ nhận được một nội dung khá lớn dưới dạng phản hồi. Đây là phần cuối cùng trong kết quả của tôi:

Nếu mọi thứ đều ổn và không có lỗi, chúng tôi có thể tiến hành bước tiếp theo (cuối cùng). Hãy bắt đầu quá trình:

$ terraform apply

Tất cả 24 đối tượng sẽ được áp dụng thành công. Đây là phần cuối cùng của nhật ký:

Bây giờ, bạn nên chuẩn bị sẵn cụm của mình và đang chạy. Hãy hiển thị danh sách các cụm Kind:

$ kind get clusters
cluster-1

Tên của cụm của chúng tôi là cluster-1. Nhưng tên của ngữ cảnh Kubernetes là kind-cluster-1:

Hãy hiển thị danh sách các ứng dụng được triển khai trên cụm Kind. Bạn nên cài đặt ít nhất Argo CD và OLM. Sau một thời gian Argo CD áp dụng cấu hình được lưu trữ trong kho lưu trữ Git. Sau đó, bạn sẽ thấy toán tử Kafka Strimzi được cài đặt trong operatorskhông gian tên.

terraform-kubernetes-apps

Argo CD

Sau đó, chúng ta có thể vào bảng điều khiển web Argo CD. Để truy cập dễ dàng trên cổng cục bộ, hãy kích hoạt port-forward:

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

Bây giờ, bạn có thể hiển thị bảng điều khiển web Argo CD trên https://localhost:8443. Tên người dùng mặc định là admin. Mật khẩu được tạo tự động bởi Argo CD. Bạn có thể tìm thấy nó bên trong Kubernetes Secret argocd-initial-admin-secret.

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

Đây là danh sách các đĩa CD Argo của chúng tôi Application. Cấu hình cụm đã bật tùy chọn tự động đồng bộ hóa. Nó cài đặt nhà điều hành Strimzi và tạo kafkaỨng dụng Argo CD. Tôi cũng có thể bật tự động đồng bộ hóa cho kafkaỨng dụng. Nhưng chỉ với mục đích demo, tôi đã để ở đó một phê duyệt thủ công. Vì vậy, hãy chạy Kafka trên cụm của chúng tôi. Để làm điều đó, hãy nhấp vào Syncnút trên kafkaô.

terraform-kubernetes-argocd

Sau khi bạn thực hiện, quá trình cài đặt Kafka sẽ bắt đầu. Cuối cùng, bạn nên chuẩn bị toàn bộ cụm đã sẵn sàng và đang chạy. Mỗi nút Kafka và Zookeeper đang chạy trên nút công nhân Kubernetes khác nhau:

Đó là tất cả. Chúng tôi đã tạo mọi thứ bằng cách sử dụng một lệnh Terraform và một cú nhấp chuột trên bảng điều khiển web Argo CD. Tất nhiên, chúng tôi có thể bật tự động đồng bộ hóa cho kafkaứng dụng, vì vậy chúng tôi thậm chí không cần đăng nhập vào bảng điều khiển web Argo CD để có hiệu ứng cuối cùng.

Liên kết: https://piotrminkowski.com/2022/06/28/manage-kubernetes-cluster-with-terraform-and-argo-cd/

#terraform #kubernetes #argocd

What is GEEK

Buddha Community

Cách Quản Lý Kubernetes Cluster Với Terraform & Argo CD
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

Hong  Nhung

Hong Nhung

1658817809

Cách Quản Lý Kubernetes Cluster Với Terraform & Argo CD

Trong bài viết này, bạn sẽ học cách tạo một cụm Kubernetes bằng Terraform và sau đó quản lý nó bằng Argo CD. Terraform rất hữu ích để tự động hóa cơ sở hạ tầng. Mặt khác, Argo CD giúp chúng tôi triển khai GitOps và phân phối liên tục cho các ứng dụng của chúng tôi. Có vẻ như chúng ta có thể kết hợp thành công cả hai công cụ này. Hãy xem xét cách họ có thể giúp chúng ta làm việc với Kubernetes theo kiểu GitOps.

Giới thiệu

Trước hết, tôi muốn xác định toàn bộ cụm và lưu trữ cấu hình của nó trong Git. Tôi không thể chỉ sử dụng Argo CD để đạt được nó, vì Argo CD phải chạy trên cụm Kubernetes hiện có. Đó là lý do tại sao tôi cần một công cụ có thể tạo một cụm và sau đó cài đặt Argo CD ở đó. Trong trường hợp đó, Terraform dường như là một lựa chọn tự nhiên. Mặt khác, tôi không muốn sử dụng Terraform để quản lý các ứng dụng chạy trên Kubernetes. Nó hoàn hảo cho hoạt động một lần như tạo một cụm, nhưng không hoàn hảo cho các tác vụ liên tục như phân phối ứng dụng và quản lý cấu hình.

Đây là danh sách những việc chúng tôi sẽ làm:

  1. Trong bước đầu tiên, chúng tôi sẽ tạo một cụm Kubernetes cục bộ bằng Terraform
  2. Sau đó, chúng tôi sẽ cài đặt OLM (Trình quản lý vòng đời của nhà điều hành) trên cụm. Chúng tôi cần nó để cài đặt Kafka với Strimzi (Bước 5)
  3. Chúng tôi sẽ sử dụng Terraform để cài đặt Argo CD từ biểu đồ Helm và tạo một CD Argo duy nhất Applicationchịu trách nhiệm về cấu hình toàn bộ cụm dựa trên Git
  4. Sau đó, Argo CD Applicationcài đặt Strimzi Operator, tạo Argo CD Projectdành riêng cho cài đặt Kafka và Argo CD Applicationchạy Kafka trên Kubernetes
  5. Cuối cùng, Ứng dụng Argo CD tự động tạo tất cả các đối tượng CRD cần thiết để chạy Kafka

Điều quan trọng nhất ở đây là mọi thứ sẽ xảy ra sau khi chạy terraform applylệnh. Terraform cài đặt Argo CD, sau đó Argo CD cài đặt Kafka, đây là ứng dụng mẫu của chúng tôi trong trường hợp đó. Hãy xem nó hoạt động như thế nào.

terraform-kubernetes-Arch

 

Mã nguồn

Nếu bạn muốn thử nó một mình, bạn luôn có thể xem qua mã nguồn của tôi. Để làm được điều đó, bạn cần sao chép  kho lưu trữ GitHub của tôi . Sau đó, bạn chỉ nên làm theo hướng dẫn của tôi. Hãy bắt đầu nào.

1. Tạo Kubernetes Cluster với Terraform

Để dễ dàng tạo một cụm Kubernetes, chúng ta sẽ sử dụng Kind . Có một nhà cung cấp Terraform dành riêng cho Kind có sẵn tại đây . Tất nhiên, bạn có thể chạy Kubernetes trên bất kỳ đám mây nào và bạn cũng sẽ tìm thấy các nhà cung cấp Terraform cho điều đó.

Cụm của chúng tôi bao gồm ba nút công nhân và một nút chính duy nhất. Chúng tôi cần ba nút vì cuối cùng, chúng tôi sẽ cài đặt một cụm Kafka chạy trong ba trường hợp. Mỗi người trong số họ sẽ được triển khai trên một nút khác nhau. main.tfĐây là tệp Terraform của chúng tôi cho bước đó. Chúng ta cần xác định phiên bản mới nhất của tehcyx/kindnhà cung cấp (chính là 0.0.12) trong required_providersphần này. Tên của cụm của chúng tôi là cluster1. Chúng tôi cũng sẽ bật wait_for_readytùy chọn để tiến hành các bước tiếp theo sau khi cụm đã sẵn sàng.

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"
    }
  }
}

Chỉ cần xác minh một cấu hình, bạn có thể chạy lệnh terraform initvà sau đó terraform plan. Sau đó, bạn có thể áp dụng cấu hình bằng cách sử dụng terraform apply, nhưng như bạn có thể nhớ rằng chúng tôi sẽ thực hiện điều đó sau khi tất cả cấu hình cuối cùng đã sẵn sàng để áp dụng mọi thứ trong một lệnh.

2. Cài đặt OLM trên Kubernetes

Như tôi đã đề cập trước đây, Trình quản lý vòng đời của nhà điều hành (OLM) là điều kiện tiên quyết để cài đặt nhà điều hành Strimzi Kafka. Bạn có thể tìm thấy bản phát hành mới nhất của OLM tại đây . Trên thực tế, nó phụ thuộc vào việc áp dụng hai biểu hiện YAML trên Kubernetes. Đầu tiên trong số chúng crds.yamlchứa các định nghĩa CRD. Cái thứ hai trong số chúng olm.yamlcung cấp tất cả các đối tượng Kubernetes cần thiết để cài đặt OLM. Hãy chỉ sao chép cả hai tệp này vào thư mục cục bộ bên trong kho lưu trữ Terraform của chúng tôi. Để áp dụng chúng cho Kubernetes, trước tiên chúng ta cần kích hoạt trình kubectlcung cấp Terraform.

terraform {
  ...

  required_providers {
    kubectl = {
      source  = "gavinbunney/kubectl"
      version = ">= 1.7.0"
    }
  }
}

Tại sao chúng tôi sử dụng kubectlnhà cung cấp thay vì nhà cung cấp Terraform Kubernetes chính thức? Nó crds.yamlchứa các CRD khá lớn vượt quá giới hạn kích thước. Chúng tôi có thể dễ dàng giải quyết vấn đề đó bằng cách cho phép áp dụng phía máy chủ trên kubectlnhà cung cấp. Trường hợp tiếp theo là có nhiều đối tượng Kubernetes được xác định bên trong cả hai tệp YAML. Nhà kubectlcung cấp hỗ trợ nó thông qua for_eachtham số.

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
}

Le's hãy xem xét trường hợp cuối cùng trong phần này. Trước khi áp dụng bất kỳ YAML nào, chúng tôi đang tạo một cụm Kubernetes mới trong bước trước. Do đó, chúng ta không thể sử dụng ngữ cảnh hiện có. May mắn thay, chúng ta có thể sử dụng các đối số đầu ra từ kubectlnhà cung cấp với địa chỉ Kubernetes và thông tin xác thực.

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. Cài đặt Argo CD với Helm

Đây là bước cuối cùng ở phía Terraform. Chúng tôi sẽ cài đặt Argo CD bằng biểu đồ Helm của nó. Chúng tôi cũng cần tạo một CD Argo duy nhất Applicationchịu trách nhiệm quản lý cụm. Thao tác này Applicationsẽ cài đặt toán tử Kafka Strimzi và tạo một đĩa CD Argo khác Applicationđược sử dụng, ví dụ như để chạy cụm Kafka. Trong bước đầu tiên, chúng ta cần làm điều tương tự như trước: xác định nhà cung cấp và đặt địa chỉ cụm Kubernetes. Đây là định nghĩa của chúng tôi trong 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}"
  }
}

Điều khó khăn ở đây là chúng ta cần tạo bản Applicationcài đặt Argo CD ngay sau khi cài đặt. Theo mặc định, Terraform xác minh xem có các đối tượng CRD bắt buộc trên Kubernetes hay không. Trong trường hợp đó, nó yêu cầu ApplicationCRD từ argoproj.io/v1alpha1. May mắn thay, chúng ta có thể sử dụng tham số biểu đồ Helm cho phép chúng ta chuyển khai báo các Applications bổ sung. Để làm điều đó, chúng tôi phải thiết lập một values.yamltệp tùy chỉnh. Đây là khai báo Terraform cho cài đặt Argo CD:

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")
  ]
}

Để tạo ban đầu Application, chúng ta cần sử dụng tham số biểu đồ Helm server.additionalApplicationsnhư hình minh họa. Đây là toàn bộ argocd/application.yamltệp. Để đơn giản hóa, cấu hình được Argo CD sử dụng nằm trong kho lưu trữ dưới dạng cấu hình Terraform. Bạn có thể tìm thấy tất cả các YAML được yêu cầu trong thư mục 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. Cấu hình Kubernetes cluster với Argo CD

Hai bước cuối cùng được quản lý bởi Argo CD. Chúng tôi đã hoàn tất thành công quá trình cài đặt cụm Kubernetes. Bây giờ, đã đến lúc cài đặt ứng dụng đầu tiên của chúng tôi ở đó. Ứng dụng ví dụ của chúng tôi là Kafka. Vì vậy, trước tiên chúng ta cần cài đặt toán tử Kafka Strimzi. Để làm điều đó, chúng ta chỉ cần xác định một Subscriptionđối tượng được quản lý bởi OLM đã được cài đặt trước đó. Định nghĩa có sẵn trong kho lưu trữ dưới dạng strimzi.yamltệp.

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

Chúng tôi có thể cấu hình rất nhiều khía cạnh liên quan đến toàn bộ cụm ở đây. Tuy nhiên, chúng ta chỉ cần tạo một CD Argo chuyên dụng ProjectApplicationcho cấu hình Kafka. Đây là Projectđịnh nghĩa của chúng tôi:

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

Hãy đặt kafkaArgoCD Applicationbên trong cái mới được tạo 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. Tạo Kafka Cluster bằng GitOps

Cuối cùng, phần cuối cùng của bài tập của chúng ta. Chúng tôi sẽ tạo và chạy một cụm Kafka 3 nút trên Kind. Đây là Kafkađịnh nghĩa đối tượng mà chúng tôi lưu trữ trong Git. Chúng tôi đang thiết lập 3 bản sao cho cả Kafka và Zookeeper (được sử dụng bởi cụm Kafka). Tệp kê khai này có sẵn trong kho lưu trữ theo đường dẫn argocd/manifests/kafka/cluster.yaml. Chúng tôi đang hiển thị cụm trên các cổng 9092(đồng bằng) và 9093(TLS). Cụm Kafka có bộ lưu trữ được gắn như PVC vào 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: {}

Chúng tôi cũng sẽ xác định một Chủ đề Kafka duy nhất bên trong argocd/manifests/kafka/cluster.yamltệp kê khai.

apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaTopic
metadata:
  name: my-topic
  labels:
    strimzi.io/cluster: my-cluster
spec:
  partitions: 10
  replicas: 3

Thực thi trên Kubernetes

Terraform

Chúng tôi đã chuẩn bị tất cả các script được yêu cầu. Hãy chuyển sang giai đoạn thực hiện. Nếu bạn vẫn chưa nhân bản kho lưu trữ Git thì đã đến lúc làm điều đó:

$ git clone https://github.com/piomin/sample-terraform-kubernetes-argocd.git
$ cd sample-terraform-kubernetes-argocd

Đầu tiên, hãy khởi tạo thư mục làm việc của chúng ta có chứa cấu hình Terraform:

$ terraform init

Sau khi thực hiện, chúng tôi có thể xem trước danh sách các hành động cần thực hiện:

$ terraform plan

Bạn sẽ nhận được một nội dung khá lớn dưới dạng phản hồi. Đây là phần cuối cùng trong kết quả của tôi:

Nếu mọi thứ đều ổn và không có lỗi, chúng tôi có thể tiến hành bước tiếp theo (cuối cùng). Hãy bắt đầu quá trình:

$ terraform apply

Tất cả 24 đối tượng sẽ được áp dụng thành công. Đây là phần cuối cùng của nhật ký:

Bây giờ, bạn nên chuẩn bị sẵn cụm của mình và đang chạy. Hãy hiển thị danh sách các cụm Kind:

$ kind get clusters
cluster-1

Tên của cụm của chúng tôi là cluster-1. Nhưng tên của ngữ cảnh Kubernetes là kind-cluster-1:

Hãy hiển thị danh sách các ứng dụng được triển khai trên cụm Kind. Bạn nên cài đặt ít nhất Argo CD và OLM. Sau một thời gian Argo CD áp dụng cấu hình được lưu trữ trong kho lưu trữ Git. Sau đó, bạn sẽ thấy toán tử Kafka Strimzi được cài đặt trong operatorskhông gian tên.

terraform-kubernetes-apps

Argo CD

Sau đó, chúng ta có thể vào bảng điều khiển web Argo CD. Để truy cập dễ dàng trên cổng cục bộ, hãy kích hoạt port-forward:

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

Bây giờ, bạn có thể hiển thị bảng điều khiển web Argo CD trên https://localhost:8443. Tên người dùng mặc định là admin. Mật khẩu được tạo tự động bởi Argo CD. Bạn có thể tìm thấy nó bên trong Kubernetes Secret argocd-initial-admin-secret.

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

Đây là danh sách các đĩa CD Argo của chúng tôi Application. Cấu hình cụm đã bật tùy chọn tự động đồng bộ hóa. Nó cài đặt nhà điều hành Strimzi và tạo kafkaỨng dụng Argo CD. Tôi cũng có thể bật tự động đồng bộ hóa cho kafkaỨng dụng. Nhưng chỉ với mục đích demo, tôi đã để ở đó một phê duyệt thủ công. Vì vậy, hãy chạy Kafka trên cụm của chúng tôi. Để làm điều đó, hãy nhấp vào Syncnút trên kafkaô.

terraform-kubernetes-argocd

Sau khi bạn thực hiện, quá trình cài đặt Kafka sẽ bắt đầu. Cuối cùng, bạn nên chuẩn bị toàn bộ cụm đã sẵn sàng và đang chạy. Mỗi nút Kafka và Zookeeper đang chạy trên nút công nhân Kubernetes khác nhau:

Đó là tất cả. Chúng tôi đã tạo mọi thứ bằng cách sử dụng một lệnh Terraform và một cú nhấp chuột trên bảng điều khiển web Argo CD. Tất nhiên, chúng tôi có thể bật tự động đồng bộ hóa cho kafkaứng dụng, vì vậy chúng tôi thậm chí không cần đăng nhập vào bảng điều khiển web Argo CD để có hiệu ứng cuối cùng.

Liên kết: 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

Jerod  Durgan

Jerod Durgan

1622450760

Use Terraform to Create and Manage a HA AKS Kubernetes Cluster in Azure

Learn how to use Terraform to manage a highly-available Azure AKS Kubernetes cluster with Azure AD integration and Calico network policies enabled.

What is Azure Kubernetes Service (AKS)

Azure Kubernetes Service (AKS) is a managed Kubernetes offering in Azure which lets you quickly deploy a production ready Kubernetes cluster. It allows customers to focus on application development and deployment, rather than the nitty gritties of Kubernetes cluster management. The cluster control plane is deployed and managed by Microsoft while the node and node pools where the applications are deployed, are handled by the customer.

The AKS cluster deployment can be fully automated using Terraform. Terraform enables you to safely and predictably create, change, and improve infrastructure. It also supports advanced AKS configurations, such as availability zones, Azure AD integration, and network policies for Kubernetes.

#kubernetes #kubernetes cluster #terraform #azure #aks

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