欢迎来到这个博客系列的第四部分!到目前为止,我们有一个包含 TLS 加密的 Kafka 单节点群集,在上面我们配置了不同的身份验证模式 ( TLS
和 SASL SCRAM-SHA-512
),使用用户运算符定义了用户,使用 CLI 和 Go 客户端连接到群集,并查看了使用主题运算符管理 Kafka 主题是多么容易。到目前为止,我们的群集 ephemeral
使用持久性,在单节点群集的情况下,这意味着如果 Kafka 或 Zookeeper 节点 (s) 因任何原因 Pod
重新启动,我们将失去数据。
我们继续吧!在这部分中,我们将介绍:
- 如何配置 Strimzi 以添加群集的持久性。
- 浏览组件,如
PersistentVolume
和PersistentVolumeClaim
- 如何修改存储质量。
- 尝试扩展卡夫卡群集的存储大小。
该代码可在 GitHub – https://github.com/abhirockzz/kafka-kubernetes-strimzi/
我需要什么来完成本教程?
kubectl
– https://kubernetes.io/docs/tasks/tools/install-kubectl/
我使用Azure Kubernetes 服务 (AKS)来演示这些概念,但在很大程度上,它独立于 Kubernetes 提供程序。如果要使用 , AKS
只需要一个Microsoft Azure 帐户,如果您还没有该get for FREE帐户,可以免费获取该帐户。
我不会重复本系列本部分或后续部分中的一些常见部分(如安装/安装(Helm、Strimzi、Azure Kubernetes 服务)、Strimzi 概述),并要求您参考第一部分
添加持久性
我们将从创建持久群集开始。下面是规范的片段(您可以访问完整的 YAML
需要注意的关键事情: 您可以查看参考https://strimzi.io/docs/operators/master/using.html#type-PersistentClaimStorage-reference 要创建群集:
让我们看看在响应群集创建时会发生什么 Strimzi执行创建所需的 Kubernetes 资源以操作群集的所有繁重工作。我们在第1部分 ( 要检查
...和
请注意,磁盘大小与清单 (即) 中指定的一样。 如果我们想要查看数据本身,让我们首先检查
在
这告诉我们,卡夫卡数据存储在 有了这个信息,让我们来看看卡夫卡
如果您查看该 配置之
要查看内容,
您也可以对 Zookeeper 节点重复相同的操作 如前所述,在 AKS 的情况下,数据最终会存储在 Azure 托管磁盘中。磁盘的类型与
有关 中存储类 若要在 Azure 中查询磁盘, 可以使用 Azure CLI
您将看到节中定义的存储 此表提供了不同 Azure磁盘类型的比较
...和
您也可以对 Zookeeper 磁盘重复相同的错误 按照以下步骤确认群集是否正常工作。 创建生产者
0 - rm=真实 - 重新启动=从不- - bin / Kafka 控制台 - 生产者. Sh - 代理列表 $KAFKA _CLUSTER_NAME -卡夫卡引导: 9092 - 主题My - 主题 在另一个终端中,创建一个使用者
让我们来探讨如何解决几个需求,您将遇到: 回想一下,默认行为是 Strimzi 创建 在 Azure 中 下面是存储配置中的代码段,其中 请注意,您无法更新现有群集的存储类型。要尝试以下选择:
要确认,请检查
我们只配置了 Kafka 代理使用高级存储,因此 Zoo 管理员 Azure 磁盘允许您向其添加更多存储空间。对于 Kubernetes,它是定义是否受支持的存储类 - 对于 AKS,如果检查默认(或 Strimzi 使增加卡夫卡群集的存储非常容易 - 您只需要将 现在检查 PVC:x
阿皮版本 kafka.strimzi.io/v1beta1
元数据
命名 我的卡夫卡集群
规格
卡夫卡
版本 2.4.0
副本 1
存储
尺寸 2Gi
删除声明 真实
....
动物园管理员
副本 1
存储
类型 持久声明
删除声明 true
storage.type
persistent-claim
(与 ) ephemeral
在之前的例子中。storage.size
卡夫卡和动物园管理员节点 2Gi
是 1Gi
和分别。deleteClaim: true
表示在删除 PersistentVolumeClaim
/未部署群集时将删除相应的 s。
storage
https://strimzi.io/docs/operators/master/using.html#type-PersistentClaimStorage-referencex
斯特里姆齐 · 库伯内特斯魔法...
StatefulSet
和 ) 服务 Pods
等 LoadBalancer
部分涵盖了 ConfigMap
其中 Secret
大部分.在此博客中,我们将重点介绍持久性相关组件 PersistentVolume
-PersistentVolumeClaim
PersistentVolumeClaim
sx
名称 状态 卷容量 访问模式 存储类年龄
数据 - my - kafka - 群集 - 卡夫卡 - 0 绑定 pvc - b4ece32b - a46c - 4fbc - 9b58 - 9413e9c779 2gi Rwo 默认 94s
数据 - my - kafka - 群集 - 动物园守护者 - 0 绑定 pvc - d705fea9 - c443 - 461c - 8d18 - acf8e219eab0 1gi Rwo 默认 3m20s
PersistentVolume
Bound
s, 他们要x
名称容量访问模式 回收策略状态声明存储类 原因年龄
pvc - b4ece32b - a46c - 4fbc - 9b58 - 9413eee9c779 2gi Rwo 删除绑定 默认值 / 数据 - my - kafka - cluster - kafka - 0 默认 107s
pvc - d705fea9 - c443 - 461c - 8d18 - acf8e219eab0 1gi Rwo 删除绑定默认值 / 数据 - my - kafka - 群集 - 动物园守护者 - 0 默认 3m35s
2
和 1
卡夫卡和动物园管理员的吉布分别数据在哪里?
ConfigMap
存储 Kafka 服务器配置的数据库:x
获取配置图/$CLUSTER_NAME]-kafka - config - o yaml
server.config
部分中,您将找到这样的条目:x
##########
##########
日志.dirs=/var/lib/kafka/数据/kafka-log$[STRIMZI_BROKER_ID]
/var/lib/kafka/data/kafka-log${STRIMZI_BROKER_ID}
中。在这种情况下, STRIMZI_BROKER_ID
0
因为我们只有一个节点Pod
:x
获取吊舱/$CLUSTER_NAME]- kafka - 0 - o yaml
kafka
container
部分,您将注意到以下内容:volumes
一:x
卷
• 持久卷索赔
声明名称 数据 - my - kafka - 群集 - 卡夫卡 - 0
volume
命名 data
与 PVC data-my-kafka-cluster-kafka-0
关联,相应的 volumeMounts
使用此卷来确保 Kafka 数据存储在/var/lib/kafka/data
x
- 安装路径 /var/lib/kafka/数据
名称 数据
X
- 它是我的 - 卡夫卡集群 - 卡夫卡 - 0 - ls - lrt / var / lib / kafka / 数据 / 卡夫卡日志$[STRIMZI_BROKER_ID]
云呢?
default
AKS 群集中的存储类相同。在我的情况下,它是:x
azure 文件kubernetes.io/azure-file 58d
azure 文件高级 58d kubernetes.io/azure-file
默认(默认)kubernetes.io/azure-disk 2d18h
管理溢价 kubernetes.io/azure-disk2d18h
获取存储类的详细信息
获取- o yaml
default
的语义 AKS
PersistentVolume
请使用 kubectl get pv/<name of kafka pv> -o yaml
提取信息并获取 Azure 磁盘的 ID,即spec.azureDisk.diskURI
az disk show
命令x
-- ids <磁盘值>
sku
类型 StandardSSD_LRS
对应于
x
"sku": |
"层":"标准"
}
tags
属性突出显示 PV
和 PVC
关联x
"创建者":"库伯内特斯-azure-dd"
"kubernetes.io为 pv 名称创建的""pvc-b4ece32b-a46c-4fbc-9b58-9413e9c779",
"kubernetes.io为 pvc 创建名称""数据 - my - kafka - cluster - kafka - 0",
"kubernetes.io为 pvc 创建的命名空间""默认"
}
快速测试...
Pod
:x
导出KAFKA_CLUSTER_NAME=my - kafka 群集
-ti- 图像=斯特里姆齐/卡夫卡:最新-卡夫卡-2
Pod
:X
- - ---rm=true--restart=----bootstrap-server- - -- - - - - -- - - $KAFKA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ---kafka-bootstrap--topic--from-beginning
如果...
更改存储类型
PersistentVolumeClaim
引用存储 default
类的 。若要自定义此属性,只需在 规范 class
中(和 storage
spec.kafka
/或 )中包括 属性 spec.zookeeper
。managed-premium storage
,该类对应于高级 SSD:kubectl get sc/managed-premium -o yaml
class: managed-premium
添加了1px;"•存储 类型 持久声明
大小 2Gi
删除声明 真实
类 管理溢价
kubectl delete kafka/my-kafka-cluster
(等待一段时间)kubectl apply -f https://raw.githubusercontent.com/abhirockzz/kafka-kubernetes-strimzi/master/part-4/kafka-persistent-premium.yaml
库布特尔删除卡夫卡 / 我的卡夫卡集群
创建新群集
- f https://raw.githubusercontent.com/abhirockzz/kafka-kubernetes-strimzi/master/part-4/kafka-persistent-premium.yaml
PersistentVolumeClain
卡夫卡节点 - 请注意 STORAGECLASS
x
名称 状态 卷容量 访问模式 存储类 年龄
数据 - my - kafka - 群集 - 卡夫卡 - 0 绑定 pvc - 3f46d6ed - 9da5 - 4c49 - 87ef - 86684ab21cf8 2gi Rwo 管理高级 21s
Pod
将使用存储 StandardSSD
类型。调整存储大小(TL;DR - 尚未工作)
managed-premium
)存储类,您将注意到 属性 allowVolumeExpansion: true
,它确认您也可以在 Kubernetes PVC 的上下文中这样做。storage.size
字段更新到所需的值kubectl describe pvc data-my-kafka-cluster-kafka-0