本文主要是介绍Debezium发布历史166,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
原文地址: https://debezium.io/blog/2023/10/19/Debezium-Operator-Takes-off-to-the-Clouds/
欢迎关注留言,我是收集整理小能手,工具翻译,仅供参考,笔芯笔芯.
Debezium Operator Takes off to the Clouds
October 19, 2023 by Čecháček Jakub
debezium features kubernetes operator debezium-server
用Debezum2.3,我们介绍了一个全新的Debezum操作员的预览,目的是提供德贝兹服务器无缝部署到库贝内特斯(K8S)集群。德贝齐安2.4.0.最后版本将为充分支持该组件迈出下一步。在这个版本中,我们很高兴地宣布,在操作枢纽中可以使用德贝兹姆操作符。 目录 用于库伯内特斯以及嵌入在开放转移和OKD分布中的社区操作员目录。操作员仍处于孵化阶段;然而,这一部分的充分支持正在迅速接近。
目标是
在本文中,我们将演示如何使用部署在库伯内特斯集群中的Debezum服务器,将更改从后格列格SQL数据库流到阿帕奇卡夫卡。我们还将展示我们新的K8S集成的一些功能。为了方便起见,本教程中使用的所有代码片段和库伯内特斯清单也可在我们的 GUUUB示例存储库 .
为环境做准备
在部署操作符并因此部署Debez服务器之前,我们需要一个部署到其中的环境。在本节中,我们将展示如何提供一个本地的库伯内特斯集群,运行后格拉格数据库和阿帕奇卡夫卡代理。请注意,数据库和/或卡夫卡经纪人不需要在库伯内特斯内部运行,我们只是为了这个演示而选择这样做。
管理当地的库伯内特斯集群
如果您已经有一个运行中的Kuberneter集群可用,则可以跳过这一部分;但是,请确保您拥有操作员安装所需的集群-管理权限。如果没有,继续读下去。
有多种工具可以运行本地K8S集群,例如: 小型的 , 仁慈的 ,或 多克尔台式电脑 .在本文中,我们将使用类创建一个本地单一节点集群。
先决条件
安置 kubectl 为你的站台分配。
安置 Kind 为你的站台分配。
一旦两者都有kubectl 和kind 安装,通过执行以下操作创建一个本地库伯内特斯集群:
kind create cluster --name debezium
我们现在可以将集群上下文配置为kubectl 并通过运行以下命令检查我们新的K8S环境的状态:
$ kubectl cluster-info --context kind-debezium
Kubernetes control plane is running at https://127.0.0.1:64815
CoreDNS is running at https://127.0.0.1:64815/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
作为集群部署的最后一步,我们将为所需的基础结构创建一个新的名称空间:
kubectl create namespace debezium
部署基础设施
在本节中,我们将准备所需的基础结构–后格拉基法数据库以及卡夫卡代理的实例。
数据库
让我们通过执行下面的命令来开始部署后GREGSQL数据库。
为了简单起见,我们正在使用一个短期卷挂载,这意味着在重新创建POD时,对数据库实例的任何修改都不会持续。
kubectl create -f https://raw.githubusercontent.com/debezium/debezium-examples/main/operator/tutorial-postgresql-kafka/infra/001_postgresql.yml -n debezium
把亚姆的文件输入到kubectl 载有若干库伯内特斯清单:
001_后列ql.Yml
apiVersion: v1
kind: Secret
metadata:
name: postgresql-credentials
type: opaque
data:
POSTGRES_DB: ZGViZXppdW0=
POSTGRES_USER: ZGViZXppdW0=
POSTGRES_PASSWORD: ZGViZXppdW0=
kind: Deployment
apiVersion: apps/v1
metadata:
name: postgresql
labels:
app: postgresql
spec:
replicas: 1
selector:
matchLabels:
app: postgresql
deployment: postgresql
template:
metadata:
labels:
app: postgresql
deployment: postgresql
spec:
containers:
- resources: {}
name: postgresql
envFrom:
- secretRef:
name: postgresql-credentials
ports:
- containerPort: 5432
protocol: TCP
imagePullPolicy: IfNotPresent
livenessProbe:
initialDelaySeconds: 30
tcpSocket:
port: 5432
timeoutSeconds: 1
readinessProbe:
exec:
command:
- “/bin/sh”
- “-i”
- “-c”
- “PGPASSWORD=${POSTGRES_PASSWORD} /usr/bin/psql -w -U ${POSTGRES_USER} -d ${POSTGRES_DB} -c ‘SELECT 1’”
initialDelaySeconds: 5
timeoutSeconds: 1
terminationMessagePolicy: File
terminationMessagePath: /dev/termination-log
image: quay.io/debezium/example-postgres:latest
restartPolicy: Always
terminationGracePeriodSeconds: 30
dnsPolicy: ClusterFirst
strategy:
type: Recreate
apiVersion: v1
kind: Service
metadata:
name: postgresql
spec:
selector:
app: postgresql
deployment: postgresql
ports:
- name: db
port: 5432
targetPort: 5432
提供数据库凭证的秘密。
数据库部署。
数据库服务。
这个秘密不仅作为环境变量附加到数据库POD中,还将在以后的连接器配置中用于引用这些凭证。
您可以通过运行:
$ kubectl get deployments -n debezium
NAME READY UP-TO-DATE AVAILABLE
postgresql 1/1 1 1
卡夫卡经纪人
为了部署卡夫卡经纪实例,我们将利用 罢工者 .
首先,我们将通过运行下面的命令来部署系统操作符。请注意namespace URL中的参数–它非常重要,因为它确保了在正确的名称空间中创建了Stermzi所需的库伯内特斯对象。
kubectl create -f https://strimzi.io/install/latest?namespace=debezium
一段时间后,你可以检查你的系统操作员是否在运行:
$ kubectl get deployments -n debezium
NAME READY UP-TO-DATE AVAILABLE
strimzi-cluster-operator 1/1 1 1
安装了系统操作符之后,我们可以部署卡夫卡代理的实例。
kubectl create -f https://raw.githubusercontent.com/debezium/debezium-examples/main/operator/tutorial-postgresql-kafka/infra/002_kafka-ephemeral.yml -n debezium
这个命令部署了一个最小的卡夫卡代理的工作配置,如在使用过的亚姆文件中所描述的那样。
002_kafka-ephemeral.yml
apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
name: dbz-kafka
spec:
kafka:
version: 3.4.0
replicas: 1
listeners:
- name: plain
port: 9092
type: internal
tls: false
- name: tls
port: 9093
type: internal
tls: true
config:
offsets.topic.replication.factor: 1
transaction.state.log.replication.factor: 1
transaction.state.log.min.isr: 1
default.replication.factor: 1
min.insync.replicas: 1
inter.broker.protocol.version: “3.4”
storage:
type: ephemeral
zookeeper:
replicas: 1
storage:
type: ephemeral
entityOperator:
topicOperator: {}
userOperator: {}
这个配置再次使用了一个短暂的存储器,并且只使用卡夫卡代理的一个副本–一个不适合生产的配置。
检查您的卡夫卡部署执行如下:
$ kubectl get pods -n debezium
NAME READY STATUS RESTARTS
dbz-kafka-entity-operator-844ffdcd54-cdq92 3/3 Running 0
dbz-kafka-kafka-0 1/1 Running 0
dbz-kafka-zookeeper-0 1/1 Running 0
部署除臭操作员
在库伯内特斯环境和我们所需的基础设施的支配下,我们现在可以进入到教程的主星–全新的DE贝泽斯操作员。目前有两种方法可以将操作符部署到库伯内特斯集群。您可以将一组库伯内特斯清单应用到您的集群(类似于我们对数据库和系统操作符所做的),也可以直接来自 运营枢纽 运营商目录。
从操作员目录中部署除臭操作员
在本节中,我们将使用 操作程序生命周期管理器 为操作员建立订阅服务 运营枢纽目录 .如前所述,德贝兹是 可用操作符 .
除其他事项外,使用olm还允许您配置操作员监视的名称空间的范围,从单一名称空间到整个集群。不过, 这种配置 已经超出了范围(双关语)!)。以下程序将把操作员安装到operators 命名空间–默认情况下,它是为全集群的操作人员设计的。
首先,我们需要通过运行以下的壳牌命令来安装olm本身–如果在集群中已经安装了olm,则跳过这个选项。
这是一个一次性的过程,任何生产K8S集群提供了对运营商目录的访问,都已经安装了OEM。
curl -L https://github.com/operator-framework/operator-lifecycle-manager/releases/download/v0.25.0/install.sh -o install.sh
chmod +x install.sh
./install.sh v0.25.0
一旦OEM在您的集群中启动并运行,您可以订阅Debez操作符。
kubectl create -f https://raw.githubusercontent.com/debezium/debezium-examples/main/operator/tutorial-postgresql-kafka/infra/010_debezium-subscription.yml
我们会再次研究subscription.yml 为了更好地了解我们刚刚做的事而归档。
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
name: debezium-operator-subscription
namespace: operators
spec:
installPlanApproval: Automatic
name: debezium-operator
source: operatorhubio-catalog
sourceNamespace: olm
startingCSV: debezium-operator.v2.4.0
…Subscription 对象指示olm从操作员目录中安装操作员。
操作员安装的目标名称空间。
安装操作员的名称。
操作员目录的名称。
包含操作符目录的名称空间。
您可以在 文件管理 .
现在,您应该已经准备好德贝兹姆操作员来管理德贝兹姆服务器在整个库伯内特斯集群中的部署。您可以检查操作员是否确实按照以下命令运行:
$ kubectl get deployments -n operators
NAME READY UP-TO-DATE AVAILABLE
debezium-operator 1/1 1 1
在上一节中,我们选择了通过直接将一组K8S清单应用到集群中来部署系统操作符。然而,在运营枢纽目录中也有一个运营商,因此也可以通过OEM安装。
使用原库伯内特斯清单部署德贝泽斯操作符
这个选项允许在任何库伯内特斯集群中部署德贝兹操作符,而不需要OEM。
以这种方式部署的德贝兹操作员将只限于管理德贝兹服务器实例 只在与操作符相同的名称空间中 .
要部署德贝兹操作符,我们需要执行下列命令:
kubectl create -f https://raw.githubusercontent.com/debezium/debezium-operator/2.4/k8/debeziumservers.debezium.io-v1.yml
kubectl create -f https://raw.githubusercontent.com/debezium/debezium-operator/2.4/k8/kubernetes.yml -n debezium
第一个命令安装 自定义资源定义 的资源,而第二次执行kubectl 部署操作员本身。
在部署了操作符之后,现在您可以移动到部署Debezum服务器实例,从您的数据库中开始流更改。
向K8S集群部署德贝齐斯服务器
用一种或另一种方式部署德贝佐斯操作符,我们现在可以自己部署德贝佐斯服务器了!
kubectl create -f https://raw.githubusercontent.com/debezium/debezium-examples/main/operator/tutorial-postgresql-kafka/infra/011_debezium-server-ephemeral.yml -n debezium
再次,让我们仔细看看我们刚刚部署的库伯内特斯清单。
011_debezium-server-ephemeral.yml
apiVersion: debezium.io/v1alpha1
kind: DebeziumServer
metadata:
name: my-debezium
spec:
image: quay.io/debezium/server:2.4.0.Final
quarkus:
config:
log.console.json: false
kubernetes-config.enabled: true
kubernetes-config.secrets: postgresql-credentials
sink:
type: kafka
config:
producer.bootstrap.servers: dbz-kafka-kafka-bootstrap:9092
producer.key.serializer: org.apache.kafka.common.serialization.StringSerializer
producer.value.serializer: org.apache.kafka.common.serialization.StringSerializer
source:
class: io.debezium.connector.postgresql.PostgresConnector
config:
offset.storage.file.filename: /debezium/data/offsets.dat
database.history: io.debezium.relational.history.FileDatabaseHistory
database.hostname: postgresql
database.port: 5432
database.user: ${POSTGRES_USER}
database.password: ${POSTGRES_PASSWORD}
database.dbname: ${POSTGRES_DB}
topic.prefix: inventory
schema.include.list: inventory
由德贝兹操作员监控的资源类型。
已部署的Debezum服务器实例的名称。
指定容器映像的可选属性.
德贝兹服务器使用的夸克斯配置。
卡夫卡水槽的配置。
后GREGSQL源连接器配置。
…spec 清单的一部分看起来很可能是任何人熟悉的,因为它是一个结构化程度更高的Debezum服务器属性配置的变体。在我们的情况下image 属性特别多余,因为它使用已安装操作符版本的默认映像。
夸克斯的一部分spec 提供可以访问先前部署的Debez服务器postgresql-credentials 含有我们数据库凭证的秘密。你能看到POSTGRES_USER 以及后来在配置中引用的其他变量。
更详细的描述DebeziumServer 自定义资源可在 吉特布 .
在帽子底下
德贝兹操作员将负责创建运行德贝兹服务器所需的一切。
用于运行Debezum服务器的服务帐户。
允许读取配置映射的角色绑定和在部署Debezum服务器的名称空间中的秘密。
包含Debezum服务器原始配置的配置映射。
部署本身。
验证部署
您可以通过以下命令检查部署的Debezum服务器实例是否在运行:
$ kubectl get deployments -n debezium
NAME READY UP-TO-DATE AVAILABLE
my-debezium 1/1 1 1
通过运行Debezum服务器,我们可以用以下命令验证它使用了数据库中的所有初始数据。
kubectl exec dbz-kafka-kafka-0 -n debezium – /opt/kafka/bin/kafka-console-consumer.sh
–bootstrap-server localhost:9092
–from-beginning
–property print.key=true
–topic inventory.inventory.orders
未来和我们的要求
就这样吧。在操作员获得充分支持之前,我们打算提供更详细的文档和能力,以进一步配置部署的各种东西,例如定制拉秘密,以支持存储在安全注册表中的定制Debezum服务器图像。
此外,亦有计划改善DebeziumServer 资源,提供以声明的方式组装德贝佐姆服务器定制分布的能力,甚至可能改进我们与KPETY的集成。我们还计划改进嵌入式引擎,并因此改进Debezum服务器,这将使我们有一天能够利用库伯内特斯的水平缩放功能。
你能帮我们!
我们想请我们的优秀的德贝齐斯社区测试操作员,让我们知道你喜欢什么和不喜欢什么以及你错过了什么特点。这样,我们可以根据您的需要来塑造这个组件,并且我们一起,我们将使Debezium更接近于提供云源性的CDC的能力。
这篇关于Debezium发布历史166的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!