1658832360
В этой статье вы узнаете, как создать кластер Kubernetes с помощью Terraform, а затем управлять им с помощью компакт-диска Argo. Terraform очень полезен для автоматизации инфраструктуры. С другой стороны, Argo CD помогает нам внедрять GitOps и непрерывную доставку для наших приложений. Кажется, мы можем удачно совместить оба этих инструмента. Рассмотрим, как они могут нам помочь в работе с Kubernetes в стиле GitOps.
Прежде всего, я хотел бы определить весь кластер и сохранить его конфигурацию в Git. Я не могу использовать для этого только Argo CD, потому что Argo CD должен работать в существующем кластере Kubernetes. Вот почему мне нужен инструмент, способный создать кластер, а затем установить туда компакт-диск Argo. В этом случае Terraform кажется естественным выбором. С другой стороны, я не хочу использовать Terraform для управления приложениями, работающими в Kubernetes. Он идеально подходит для разовых действий, таких как создание кластера, но не для непрерывных задач, таких как доставка приложений и управление конфигурацией.
Вот список вещей, которые мы собираемся сделать:
Application
отвечающего за всю конфигурацию кластера на основе Git.Application
устанавливает Strimzi Operator, создает компакт-диск Argo, Project
предназначенный для установки Kafka, и компакт-диск Argo Application
, который запускает Kafka в Kubernetes.Самое главное здесь то, что все должно произойти после запуска terraform apply
команды. Terraform устанавливает компакт-диск Argo, а затем компакт-диск Argo устанавливает Kafka, которая является нашим примером приложения в этом сценарии. Давайте посмотрим, как это работает.
Если вы хотите попробовать это самостоятельно, вы всегда можете взглянуть на мой исходный код. Для этого вам нужно клонировать мой репозиторий GitHub . После этого вы должны просто следовать моим инструкциям. Давайте начнем.
Чтобы легко создать кластер 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
, но как вы, наверное, помните, мы сделаем это после того, как последняя вся конфигурация будет готова применить все одной командой.
Как я упоминал ранее, диспетчер жизненного цикла оператора (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}"
}
Это последний шаг на стороне 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. В этом случае требуется Application
CRD от argoproj.io/v1alpha1
. К счастью, мы можем использовать параметр диаграммы Helm, позволяющий передать объявление дополнительных Application
s. Для этого нам нужно установить пользовательский 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
Последние два шага управляются 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
Наконец, последняя часть нашего упражнения. Мы создадим и запустим 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
Мы уже подготовили все необходимые сценарии. Переходим к этапу выполнения. Если вы еще не клонировали репозиторий Git, самое время это сделать:
$ git clone https://github.com/piomin/sample-terraform-kubernetes-argocd.git
$ cd sample-terraform-kubernetes-argocd
Во-первых, давайте инициализируем наш рабочий каталог, содержащий конфигурацию Terraform:
$ terraform init
Как только мы это сделаем, мы можем просмотреть список действий, которые необходимо выполнить:
$ terraform plan
Вы должны получить довольно большой контент в качестве ответа. Вот последняя часть моего результата:
Если все в порядке и ошибок нет, можно переходить к следующему (последнему) шагу. Начнем процесс:
$ terraform apply
Все 24 объекта должны быть успешно применены. Вот последняя часть логов:
Теперь у вас должен быть готовый и работающий кластер. Отобразим список кластеров Kind:
$ kind get clusters
cluster-1
Наш кластер называется cluster-1
. Но имя контекста Kubernetes kind-cluster-1
:
Отобразим список приложений, развернутых на кластере Kind. У вас должны быть установлены по крайней мере Argo CD и OLM. Через некоторое время Argo CD применяет конфигурацию, хранящуюся в репозитории Git. Затем вы должны увидеть оператор Kafka Strimzi, установленный в operators
пространстве имен.
После этого мы можем перейти в веб-консоль Argo CD. Чтобы легко получить к нему доступ через локальный порт, давайте включим 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. Я также мог бы включить автоматическую синхронизацию для kafka
Application. Но только для демонстрационных целей я оставил там ручное одобрение. Итак, давайте запустим Kafka на нашем кластере. Для этого нажмите Sync
кнопку на kafka
плитке.
Как только вы это сделаете, начнется установка 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
1602964260
Last year, we provided a list of Kubernetes tools that proved so popular we have decided to curate another list of some useful additions for working with the platform—among which are many tools that we personally use here at Caylent. Check out the original tools list here in case you missed it.
According to a recent survey done by Stackrox, the dominance Kubernetes enjoys in the market continues to be reinforced, with 86% of respondents using it for container orchestration.
(State of Kubernetes and Container Security, 2020)
And as you can see below, more and more companies are jumping into containerization for their apps. If you’re among them, here are some tools to aid you going forward as Kubernetes continues its rapid growth.
(State of Kubernetes and Container Security, 2020)
#blog #tools #amazon elastic kubernetes service #application security #aws kms #botkube #caylent #cli #container monitoring #container orchestration tools #container security #containers #continuous delivery #continuous deployment #continuous integration #contour #developers #development #developments #draft #eksctl #firewall #gcp #github #harbor #helm #helm charts #helm-2to3 #helm-aws-secret-plugin #helm-docs #helm-operator-get-started #helm-secrets #iam #json #k-rail #k3s #k3sup #k8s #keel.sh #keycloak #kiali #kiam #klum #knative #krew #ksniff #kube #kube-prod-runtime #kube-ps1 #kube-scan #kube-state-metrics #kube2iam #kubeapps #kubebuilder #kubeconfig #kubectl #kubectl-aws-secrets #kubefwd #kubernetes #kubernetes command line tool #kubernetes configuration #kubernetes deployment #kubernetes in development #kubernetes in production #kubernetes ingress #kubernetes interfaces #kubernetes monitoring #kubernetes networking #kubernetes observability #kubernetes plugins #kubernetes secrets #kubernetes security #kubernetes security best practices #kubernetes security vendors #kubernetes service discovery #kubernetic #kubesec #kubeterminal #kubeval #kudo #kuma #microsoft azure key vault #mozilla sops #octant #octarine #open source #palo alto kubernetes security #permission-manager #pgp #rafay #rakess #rancher #rook #secrets operations #serverless function #service mesh #shell-operator #snyk #snyk container #sonobuoy #strongdm #tcpdump #tenkai #testing #tigera #tilt #vert.x #wireshark #yaml
1658832360
В этой статье вы узнаете, как создать кластер Kubernetes с помощью Terraform, а затем управлять им с помощью компакт-диска Argo. Terraform очень полезен для автоматизации инфраструктуры. С другой стороны, Argo CD помогает нам внедрять GitOps и непрерывную доставку для наших приложений. Кажется, мы можем удачно совместить оба этих инструмента. Рассмотрим, как они могут нам помочь в работе с Kubernetes в стиле GitOps.
Прежде всего, я хотел бы определить весь кластер и сохранить его конфигурацию в Git. Я не могу использовать для этого только Argo CD, потому что Argo CD должен работать в существующем кластере Kubernetes. Вот почему мне нужен инструмент, способный создать кластер, а затем установить туда компакт-диск Argo. В этом случае Terraform кажется естественным выбором. С другой стороны, я не хочу использовать Terraform для управления приложениями, работающими в Kubernetes. Он идеально подходит для разовых действий, таких как создание кластера, но не для непрерывных задач, таких как доставка приложений и управление конфигурацией.
Вот список вещей, которые мы собираемся сделать:
Application
отвечающего за всю конфигурацию кластера на основе Git.Application
устанавливает Strimzi Operator, создает компакт-диск Argo, Project
предназначенный для установки Kafka, и компакт-диск Argo Application
, который запускает Kafka в Kubernetes.Самое главное здесь то, что все должно произойти после запуска terraform apply
команды. Terraform устанавливает компакт-диск Argo, а затем компакт-диск Argo устанавливает Kafka, которая является нашим примером приложения в этом сценарии. Давайте посмотрим, как это работает.
Если вы хотите попробовать это самостоятельно, вы всегда можете взглянуть на мой исходный код. Для этого вам нужно клонировать мой репозиторий GitHub . После этого вы должны просто следовать моим инструкциям. Давайте начнем.
Чтобы легко создать кластер 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
, но как вы, наверное, помните, мы сделаем это после того, как последняя вся конфигурация будет готова применить все одной командой.
Как я упоминал ранее, диспетчер жизненного цикла оператора (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}"
}
Это последний шаг на стороне 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. В этом случае требуется Application
CRD от argoproj.io/v1alpha1
. К счастью, мы можем использовать параметр диаграммы Helm, позволяющий передать объявление дополнительных Application
s. Для этого нам нужно установить пользовательский 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
Последние два шага управляются 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
Наконец, последняя часть нашего упражнения. Мы создадим и запустим 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
Мы уже подготовили все необходимые сценарии. Переходим к этапу выполнения. Если вы еще не клонировали репозиторий Git, самое время это сделать:
$ git clone https://github.com/piomin/sample-terraform-kubernetes-argocd.git
$ cd sample-terraform-kubernetes-argocd
Во-первых, давайте инициализируем наш рабочий каталог, содержащий конфигурацию Terraform:
$ terraform init
Как только мы это сделаем, мы можем просмотреть список действий, которые необходимо выполнить:
$ terraform plan
Вы должны получить довольно большой контент в качестве ответа. Вот последняя часть моего результата:
Если все в порядке и ошибок нет, можно переходить к следующему (последнему) шагу. Начнем процесс:
$ terraform apply
Все 24 объекта должны быть успешно применены. Вот последняя часть логов:
Теперь у вас должен быть готовый и работающий кластер. Отобразим список кластеров Kind:
$ kind get clusters
cluster-1
Наш кластер называется cluster-1
. Но имя контекста Kubernetes kind-cluster-1
:
Отобразим список приложений, развернутых на кластере Kind. У вас должны быть установлены по крайней мере Argo CD и OLM. Через некоторое время Argo CD применяет конфигурацию, хранящуюся в репозитории Git. Затем вы должны увидеть оператор Kafka Strimzi, установленный в operators
пространстве имен.
После этого мы можем перейти в веб-консоль Argo CD. Чтобы легко получить к нему доступ через локальный порт, давайте включим 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. Я также мог бы включить автоматическую синхронизацию для kafka
Application. Но только для демонстрационных целей я оставил там ручное одобрение. Итак, давайте запустим Kafka на нашем кластере. Для этого нажмите Sync
кнопку на kafka
плитке.
Как только вы это сделаете, начнется установка 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
1601051854
Kubernetes is a highly popular container orchestration platform. Multi cloud is a strategy that leverages cloud resources from multiple vendors. Multi cloud strategies have become popular because they help prevent vendor lock-in and enable you to leverage a wide variety of cloud resources. However, multi cloud ecosystems are notoriously difficult to configure and maintain.
This article explains how you can leverage Kubernetes to reduce multi cloud complexities and improve stability, scalability, and velocity.
Maintaining standardized application deployments becomes more challenging as your number of applications and the technologies they are based on increase. As environments, operating systems, and dependencies differ, management and operations require more effort and extensive documentation.
In the past, teams tried to get around these difficulties by creating isolated projects in the data center. Each project, including its configurations and requirements were managed independently. This required accurately predicting performance and the number of users before deployment and taking down applications to update operating systems or applications. There were many chances for error.
Kubernetes can provide an alternative to the old method, enabling teams to deploy applications independent of the environment in containers. This eliminates the need to create resource partitions and enables teams to operate infrastructure as a unified whole.
In particular, Kubernetes makes it easier to deploy a multi cloud strategy since it enables you to abstract away service differences. With Kubernetes deployments you can work from a consistent platform and optimize services and applications according to your business needs.
The Compelling Attributes of Multi Cloud Kubernetes
Multi cloud Kubernetes can provide multiple benefits beyond a single cloud deployment. Below are some of the most notable advantages.
Stability
In addition to the built-in scalability, fault tolerance, and auto-healing features of Kubernetes, multi cloud deployments can provide service redundancy. For example, you can mirror applications or split microservices across vendors. This reduces the risk of a vendor-related outage and enables you to create failovers.
#kubernetes #multicloud-strategy #kubernetes-cluster #kubernetes-top-story #kubernetes-cluster-install #kubernetes-explained #kubernetes-infrastructure #cloud
1601305200
Recently, Microsoft announced the general availability of Bridge to Kubernetes, formerly known as Local Process with Kubernetes. It is an iterative development tool offered in Visual Studio and VS Code, which allows developers to write, test as well as debug microservice code on their development workstations while consuming dependencies and inheriting the existing configuration from a Kubernetes environment.
Nick Greenfield, Program Manager, Bridge to Kubernetes stated in an official blog post, “Bridge to Kubernetes is expanding support to any Kubernetes. Whether you’re connecting to your development cluster running in the cloud, or to your local Kubernetes cluster, Bridge to Kubernetes is available for your end-to-end debugging scenarios.”
Bridge to Kubernetes provides a number of compelling features. Some of them are mentioned below-
#news #bridge to kubernetes #developer tools #kubernetes #kubernetes platform #kubernetes tools #local process with kubernetes #microsoft
1600992000
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