我使用Azure Kubernetes Service(AKS)和Confluent Platform的Helm Chart来运行应用程序

概要 – 总结

我参考了这篇文章,并试图通过使用Helm v3稍微理解了一下。我总结了在AKS上使用Confuent Platform的Helm Chart和ACR中的容器镜像(rabbitmq)来运行容器应用的步骤。

image.png

本文将按以下两个步骤逐一进行说明。本次将详细介绍第一步。
第一步:在AKS上构建Confluent Platform环境。
第二步:在AKS上运行容器应用程序。

本地环境

macOS Big Sur 11.3:苹果操作系统 Big Sur 的版本号是 11.3。
python 3.8.3:Python 编程语言的版本号是 3.8.3。
helm 3.6.3:Helm 软件的版本号是 3.6.3。

事前准备

    1. 参考此文,并搭建AKS和ACR,并确认了在AKS集群上运行的Node。

参考此文,将容器镜像推送到ACR。

确认此文中的“Helm准备”已完成。


创建(编辑)Helm Chart。

获取ACR登录服务器地址

$ az acr list --resource-group $ACR_RES_GROUP --query "[].{acrLoginServer:loginServer}" --output tsv
acr0ituru.azurecr.io

添加和确认存储库

image.png
$ helm repo add confluentinc https://confluentinc.github.io/cp-helm-charts/
"confluentinc" has been added to your repositories

$ helm repo add bitnami-azure https://marketplace.azurecr.io/helm/v1/repo
"bitnami-azure" has been added to your repositories

$ helm repo add bitnami https://charts.bitnami.com/bitnami
"bitnami" has been added to your repositories

$ helm repo update

Helm Chart搜索

搜索Confluent Inc.、RabbitMQ、InfluxDB和Grafana的各个图表。

$ helm search repo confluentinc

NAME                        CHART VERSION   APP VERSION DESCRIPTION                                       
confluentinc/cp-helm-charts 0.6.1           1.0         A Helm chart for Confluent Platform Community E...
stable/schema-registry-ui   0.4.4           v0.9.5      DEPRECATED - This is a web tool for the conflue...
$ helm search repo rabbitmq

NAME                                CHART VERSION   APP VERSION DESCRIPTION                                       
bitnami-azure/rabbitmq              8.20.2          3.8.21      Open source message broker software that implem...
bitnami/rabbitmq                    8.20.2          3.8.21      Open source message broker software that implem...
stable/prometheus-rabbitmq-exporter 0.5.6           v0.29.0     DEPRECATED Rabbitmq metrics exporter for promet...
stable/rabbitmq                     6.18.2          3.8.2       DEPRECATED Open source message broker software ...
stable/rabbitmq-ha                  1.47.1          3.8.7       DEPRECATED - Highly available RabbitMQ cluster,...
$ helm search repo influxdb

NAME                    CHART VERSION   APP VERSION DESCRIPTION                                       
bitnami-azure/influxdb  2.3.5           2.0.7       InfluxDB™ is an open source time-series d...
bitnami/influxdb        2.3.6           2.0.8       InfluxDB™ is an open source time-series d...
stable/influxdb         4.3.2           1.7.9       DEPRECATED Scalable datastore for metrics, even...
bitnami-azure/grafana   6.1.9           8.1.2       Grafana is an open source, feature rich metrics...
bitnami/grafana         6.1.9           8.1.2       Grafana is an open source, feature rich metrics...
stable/kapacitor        1.2.2           1.5.2       DEPRECATED InfluxDB's native data processing en...
$ helm search repo grafana

NAME                            CHART VERSION   APP VERSION DESCRIPTION                                       
bitnami-azure/grafana           6.1.9           8.1.2       Grafana is an open source, feature rich metrics...
bitnami-azure/grafana-operator  1.1.1           3.10.3      Kubernetes Operator based on the Operator SDK f...
bitnami/grafana                 6.1.9           8.1.2       Grafana is an open source, feature rich metrics...
bitnami/grafana-operator        1.1.1           3.10.3      Kubernetes Operator based on the Operator SDK f...
bitnami/grafana-tempo           0.2.2           1.0.1       Grafana Tempo is an open source, easy-to-use an...
stable/grafana                  5.5.7           7.1.1       DEPRECATED - The leading tool for querying and ...

作为Helm Chart的元素拉取

我将拉取cp-helm-charts/rabbitmq/Influxdb/grafana的Helm Chart。

$ helm pull confluentinc/cp-helm-charts
$ tar zxf cp-helm-charts-0.6.1.tgz

$ helm pull bitnami-azure/rabbitmq
$ tar zxf rabbitmq-8.19.1.tgz

$ helm pull bitnami-azure/influxdb
$ tar zxf influxdb-2.3.4.tgz

$ helm pull bitnami-azure/grafana
$ tar zxf grafana-6.1.6.tgz

目录结构如下。

$ ls -l                     

drwxr-xr-x  12 hoge  staff    384  8 24 09:38 ./
drwxr-xr-x   7 hoge  staff    224  8 19 14:33 ../
drwxr-xr-x  17 hoge  staff    544  8 19 15:39 cp-helm-charts/
-rw-r--r--   1 hoge  staff  50496  8 19 15:32 cp-helm-charts-0.6.1.tgz
drwxr-xr-x   9 hoge  staff    288  8 19 14:15 grafana/
-rw-r--r--   1 hoge  staff  34570  8 19 14:14 grafana-6.1.6.tgz
drwxr-xr-x  10 hoge  staff    320  8 19 14:15 influxdb/
-rw-r--r--   1 hoge  staff  43726  8 19 14:13 influxdb-2.3.4.tgz
drwxr-xr-x  11 hoge  staff    352  8 19 13:52 rabbitmq/
-rw-r--r--   1 hoge  staff  47260  8 19 13:52 rabbitmq-8.19.1.tgz

编辑 values.yaml 文件

由于使用了在 ACR 注册的 rabbitmq 容器镜像,因此需要编辑镜像名称目录中的 values.yaml 文件中的以下部分。

Chartタグ項目値rabbitmqglobalimageRegistryacr0ituru.azurecr.io
imageregistryacr0ituru.azurecr.io
imagerepositoryrabbitmq
imagetag3.8.17

必须编辑Influxdb / grafana的每个镜像名称目录中的values.yaml文件。在容器启动后,需要添加所需的配置。

Chartタグ項目値influxdbglobalimageRegistry””
imagetag1.8.5
authenabledfalsegrafanaglobalimageRegistry””
imagetag8.0.6
adminpasswordadmin

对于 cp-helm-charts 的 values.yaml,将编辑以下部分(Confluent Platform 使用 6.0.0)。然而,仅使用 ACR 中注册的容器镜像来运行 Connector。另外,由于本次不使用 REST-Proxy,因此将其禁用。

Chartタグ項目値cp-helm-chartscp-zookeeperimageTag6.0.0
cp-kafkaimageTag6.0.0
cp-schema-registryimageTag6.0.0
cp-kafka-restenabledfalse
cp-kafka-connectimageacr0ituru.azurecr.io/cp-connect-base
cp-kafka-connectimageTag6.0.0
cp-ksql-serverimageTag6.0.0
cp-control-centerimageTag6.0.0

应用环境的部署

创建命名空间

$ kubectl create namespace akscp01

干跑

$ helm install cp600mq ./rabbitmq --namespace akscp01 --dry-run
$ helm install cp600db ./influxdb --namespace akscp01 --dry-run
$ helm install cp600gf ./grafana --namespace akscp01 --dry-run
$ helm install cp600 ./cp-helm-charts --namespace akscp01 --dry-run

部署

$ helm install cp600mq ./rabbitmq --namespace akscp01
$ helm install cp600db ./influxdb --namespace akscp01
$ helm install cp600gf ./grafana --namespace akscp01
$ helm install cp600 ./cp-helm-charts --namespace akscp01

等待一会儿,直到所有的Pod启动需要几分钟。

※ 我想要使用雨伞图/子图定义 RabbitMQ / InfluxDB / Grafana ,但我还没有足够的技能……(泪)

显示已安装的图表

$ helm list -n akscp01

NAME    NAMESPACE   REVISION    UPDATED                                 STATUS      CHART                   APP VERSION
cp600   akscp01     1           2021-08-25 00:24:20.279592 +0900 JST    deployed    cp-helm-charts-0.6.1    1.0        
cp600db akscp01     1           2021-08-24 23:54:35.304915 +0900 JST    deployed    influxdb-2.3.4          1.8.5      
cp600gf akscp01     1           2021-08-25 00:14:28.04076 +0900 JST     deployed    grafana-6.1.6           8.0.6      
cp600mq akscp01     1           2021-08-25 00:21:44.218668 +0900 JST    deployed    rabbitmq-8.19.1         3.8.17     

确认Pod的状态

$ kubectl get pod -n akscp01

NAME                                       READY   STATUS    RESTARTS   AGE
cp600-cp-control-center-5b55c5676f-tn5w9   1/1     Running   3          3m46s
cp600-cp-kafka-0                           2/2     Running   1          3m46s
cp600-cp-kafka-1                           2/2     Running   0          3m8s
cp600-cp-kafka-2                           2/2     Running   0          2m46s
cp600-cp-kafka-connect-764c9bd6cd-n84qw    2/2     Running   3          3m46s
cp600-cp-ksql-server-5948c75b8b-dnfcm      2/2     Running   4          3m46s
cp600-cp-schema-registry-5d79b8c57-r4r5p   2/2     Running   3          3m46s
cp600-cp-zookeeper-0                       2/2     Running   0          3m46s
cp600-cp-zookeeper-1                       2/2     Running   0          3m8s
cp600-cp-zookeeper-2                       2/2     Running   0          2m32s
cp600db-influxdb-5ff9b5cfbc-zkvjb          1/1     Running   0          33m
cp600gf-grafana-59cff8f44b-rwlwx           1/1     Running   0          13m
cp600mq-rabbitmq-0                         1/1     Running   0          6m22s

确认其他资源

$ kubectl get deployment -n akscp01

NAME                       READY   UP-TO-DATE   AVAILABLE   AGE
cp600-cp-control-center    1/1     1            1           4m23s
cp600-cp-kafka-connect     1/1     1            1           4m23s
cp600-cp-ksql-server       1/1     1            1           4m23s
cp600-cp-schema-registry   1/1     1            1           4m23s
cp600db-influxdb           1/1     1            1           34m
cp600gf-grafana            1/1     1            1           14m
$ kubectl get service -n akscp01

NAME                          TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                                 AGE
cp600-cp-control-center       ClusterIP   10.0.58.233    <none>        9021/TCP                                4m42s
cp600-cp-kafka                ClusterIP   10.0.53.78     <none>        9092/TCP,5556/TCP                       4m42s
cp600-cp-kafka-connect        ClusterIP   10.0.140.5     <none>        8083/TCP,5556/TCP                       4m42s
cp600-cp-kafka-headless       ClusterIP   None           <none>        9092/TCP                                4m42s
cp600-cp-ksql-server          ClusterIP   10.0.103.176   <none>        8088/TCP,5556/TCP                       4m42s
cp600-cp-schema-registry      ClusterIP   10.0.85.39     <none>        8081/TCP,5556/TCP                       4m42s
cp600-cp-zookeeper            ClusterIP   10.0.111.229   <none>        2181/TCP,5556/TCP                       4m42s
cp600-cp-zookeeper-headless   ClusterIP   None           <none>        2888/TCP,3888/TCP                       4m42s
cp600db-influxdb              ClusterIP   10.0.104.94    <none>        8086/TCP,8088/TCP                       34m
cp600gf-grafana               ClusterIP   10.0.185.234   <none>        3000/TCP                                14m
cp600mq-rabbitmq              ClusterIP   10.0.14.56     <none>        5672/TCP,4369/TCP,25672/TCP,15672/TCP   7m19s
cp600mq-rabbitmq-headless     ClusterIP   None           <none>        4369/TCP,5672/TCP,25672/TCP,15672/TCP   7m19s
$ kubectl get configmap -n akscp01

NAME                                          DATA   AGE
cp600-cp-kafka-connect-jmx-configmap          1      5m1s
cp600-cp-kafka-jmx-configmap                  1      5m1s
cp600-cp-ksql-server-jmx-configmap            1      5m1s
cp600-cp-ksql-server-ksql-queries-configmap   1      5m1s
cp600-cp-schema-registry-jmx-configmap        1      5m1s
cp600-cp-zookeeper-jmx-configmap              1      5m1s
cp600gf-grafana-envvars                       10     14m
cp600mq-rabbitmq-config                       1      7m38s
kube-root-ca.crt                              1      35m

预备设置的步骤

Kafka客户端Pod

为了配置 Kafka 主题,我们将准备一个客户端容器。我们将使用 cp-helm-charts/examples 中预先准备好的 kafka-client.yaml 文件,并进行以下更改。

apiVersion: v1
kind: Pod
metadata:
  name: kafka-client
spec:
  containers:
  - name: kafka-client
    image: confluentinc/cp-kafka:6.0.0
    command:
      - sh
      - -c
      - "exec tail -f /dev/null"

我将启动这个 Pod。

$ kubectl apply -f cp-helm-charts/examples/kafka-client.yaml -n akscp01

ksql-client的Pod

为了进行 ksql 的配置,我们需要准备一个客户端容器。将 cp-helm-charts/examples 中预先准备好的 ksql-demo.yaml 复制为 ksql-client.yaml,并进行以下修改。

apiVersion: v1
kind: Pod
metadata:
  name: ksql-client
spec:
  containers:
  - name: ksql-client
    image: confluentinc/cp-ksqldb-cli:6.0.0
    command:
      - sh
      - -c
      - "exec tail -f /dev/null"

我会启动这个Pod。

$ kubectl apply -f cp-helm-charts/examples/ksql-client.yaml -n akscp01

AKS Pod 的状态

完成以上步骤后,Pod 的状态如下:

$ kubectl get pod -n akscp01

NAME                                       READY   STATUS    RESTARTS   AGE
cp600-cp-control-center-5b55c5676f-tn5w9   1/1     Running   3          8m45s
cp600-cp-kafka-0                           2/2     Running   1          8m45s
cp600-cp-kafka-1                           2/2     Running   0          8m7s
cp600-cp-kafka-2                           2/2     Running   0          7m45s
cp600-cp-kafka-connect-764c9bd6cd-n84qw    2/2     Running   3          8m45s
cp600-cp-ksql-server-5948c75b8b-dnfcm      2/2     Running   4          8m45s
cp600-cp-schema-registry-5d79b8c57-r4r5p   2/2     Running   3          8m45s
cp600-cp-zookeeper-0                       2/2     Running   0          8m45s
cp600-cp-zookeeper-1                       2/2     Running   0          8m7s
cp600-cp-zookeeper-2                       2/2     Running   0          7m31s
cp600db-influxdb-5ff9b5cfbc-zkvjb          1/1     Running   0          38m
cp600gf-grafana-59cff8f44b-rwlwx           1/1     Running   0          18m
cp600mq-rabbitmq-0                         1/1     Running   0          11m
kafka-client                               1/1     Running   0          24s
ksql-client                                1/1     Running   0          8s

现在,为容器应用程序设置所需的环境已经准备好了。下一步将在此环境中运行应用程序进行测试。


Pod的卸载方法(示例)

$ helm delete cp600 -n akscp01
release "cp600" uninstalled

命名空间的删除方法 de

$ kubectl delete namespace akscp01
namespace "akscp01" deleted

本课题的步骤信息

第一步:在AKS上構建Confluent Platform環境
第二步:在AKS上運行容器應用程式

请提供一些相关的信息。
请提供一些参考资料。
请给我一些可以参考的情报。

感谢您提供的信息。我已经参考了这些信息。推荐使用Helm v3。Helm已成为实际上的Kubernetes部署工具的标准工具。

广告
将在 10 秒后关闭
bannerAds