在k8s上搭建kfk-zk集群(2)

2023-11-05 00:38
文章标签 云原生 集群 搭建 k8s zk kfk

本文主要是介绍在k8s上搭建kfk-zk集群(2),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在k8s上搭建kfk-zk集群(2)

这篇接zk的部署方式,整体结构是一样的,包括StorageClass、PV、HeadlessService、StatefulSet,不同的是kfk本身的配置,k8s官方没有k8s的部署教程,我在网上找到一个在k8s上部署kfk的帖子,借用其kfk的模版。

StorageClass我们已经创建,直接使用local-class。

root@hw1:~/zk# kubectl get storageclass
NAME          PROVISIONER                    AGE
local-class   kubernetes.io/no-provisioner   18h

上次仅仅创建了三个PVs,不够用,这里我们为kfk也创建三个PVs,kubectl create -f pv-kfk.yaml

kind: PersistentVolume
apiVersion: v1
metadata:name: datadir-kfk-1labels:type: local
spec:storageClassName: local-classcapacity:storage: 5GiaccessModes:- ReadWriteOncehostPath:path: "/mnt/data11"
---
kind: PersistentVolume
apiVersion: v1
metadata:name: datadir-kfk-2labels:type: local
spec:storageClassName: local-classcapacity:storage: 5GiaccessModes:- ReadWriteOncehostPath:path: "/mnt/data22"
---
kind: PersistentVolume
apiVersion: v1
metadata:name: datadir-kfk-3labels:type: local
spec:storageClassName: local-classcapacity:storage: 5GiaccessModes:- ReadWriteOncehostPath:path: "/mnt/data33"

kfk模板借用Kafka on Kubernetes Deploy a highly available Kafka cluster on Kubernetes.中kfk部分,修改kfk的spec.volumeClaimTemplates.spec.storageClassName为之前的local-class,以及kfk连接zk的参数 KAFKA_ZOOKEEPER_CONNECT为zk-cs:2181。
kubectl create -f kfk.yaml

apiVersion: v1
kind: Service
metadata:name: kafka
spec:ports:- name: brokerport: 9092protocol: TCPtargetPort: kafkaselector:app: kafkasessionAffinity: Nonetype: ClusterIP
---
apiVersion: v1
kind: Service
metadata:name: kafka-headless
spec:clusterIP: Noneports:- name: brokerport: 9092protocol: TCPtargetPort: 9092selector:app: kafkasessionAffinity: Nonetype: ClusterIP
---
apiVersion: apps/v1
kind: StatefulSet
metadata:labels:app: kafkaname: kafka
spec:podManagementPolicy: OrderedReadyreplicas: 3revisionHistoryLimit: 1selector:matchLabels:app: kafkaserviceName: kafka-headlesstemplate:metadata:labels:app: kafkaspec:containers:- command:- sh- -exc- |unset KAFKA_PORT && \export KAFKA_BROKER_ID=${HOSTNAME##*-} && \export KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://${POD_IP}:9092 && \exec /etc/confluent/docker/runenv:- name: POD_IPvalueFrom:fieldRef:apiVersion: v1fieldPath: status.podIP- name: KAFKA_HEAP_OPTSvalue: -Xmx1G -Xms1G- name: KAFKA_ZOOKEEPER_CONNECTvalue: zk-cs:2181- name: KAFKA_LOG_DIRSvalue: /opt/kafka/data/logs- name: KAFKA_OFFSETS_TOPIC_REPLICATION_FACTORvalue: "3"- name: KAFKA_JMX_PORTvalue: "5555"image: confluentinc/cp-kafka:4.1.2-2imagePullPolicy: IfNotPresentlivenessProbe:exec:command:- sh- -ec- /usr/bin/jps | /bin/grep -q SupportedKafkafailureThreshold: 3initialDelaySeconds: 30periodSeconds: 10successThreshold: 1timeoutSeconds: 5name: kafka-brokerports:- containerPort: 9092name: kafkaprotocol: TCPreadinessProbe:failureThreshold: 3initialDelaySeconds: 30periodSeconds: 10successThreshold: 1tcpSocket:port: kafkatimeoutSeconds: 5resources: {}terminationMessagePath: /dev/termination-logterminationMessagePolicy: FilevolumeMounts:- mountPath: /opt/kafka/dataname: datadirdnsPolicy: ClusterFirstrestartPolicy: AlwaysschedulerName: default-schedulersecurityContext: {}terminationGracePeriodSeconds: 60updateStrategy:type: OnDeletevolumeClaimTemplates:- metadata:name: datadirspec:accessModes:- ReadWriteOncestorageClassName: "local-class"resources:requests:storage: 1Gi

查看部署情况

root@hw1:~/zk# kubectl get pods
NAME                READY   STATUS    RESTARTS   AGE
busybox             1/1     Running   20         20h
kafka-0             1/1     Running   9          18h
kafka-1             1/1     Running   0          18h
kafka-2             1/1     Running   0          18h
zk-0                1/1     Running   0          18h
zk-1                1/1     Running   0          18h
zk-2                1/1     Running   0          18h
root@hw1:~/zk# kubectl get pvc
NAME              STATUS   VOLUME          CAPACITY   ACCESS MODES   STORAGECLASS   AGE
datadir-kafka-0   Bound    datadir-kfk-1   5Gi        RWO            local-class    18h
datadir-kafka-1   Bound    datadir-kfk-2   5Gi        RWO            local-class    18h
datadir-kafka-2   Bound    datadir-kfk-3   5Gi        RWO            local-class    18h
datadir-zk-0      Bound    datadir1        5Gi        RWO            local-class    18h
datadir-zk-1      Bound    datadir2        5Gi        RWO            local-class    18h
datadir-zk-2      Bound    datadir3        5Gi        RWO            local-class    18h
root@hw1:~/zk# kubectl get pv
NAME            CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                     STORAGECLASS   REASON   AGE
datadir-kfk-1   5Gi        RWO            Retain           Bound    default/datadir-kafka-0   local-class             18h
datadir-kfk-2   5Gi        RWO            Retain           Bound    default/datadir-kafka-1   local-class             18h
datadir-kfk-3   5Gi        RWO            Retain           Bound    default/datadir-kafka-2   local-class             18h
datadir1        5Gi        RWO            Retain           Bound    default/datadir-zk-0      local-class             18h
datadir2        5Gi        RWO            Retain           Bound    default/datadir-zk-1      local-class             18h
datadir3        5Gi        RWO            Retain           Bound    default/datadir-zk-2      local-class             18h
root@hw1:~/zk# 

接着,测试kfk是否连接上zk,能够正常的生产消费,同样借用上述老哥的kfk-test-pod,kubectl create -f pod-test.yaml

apiVersion: v1
kind: Pod
metadata:name: kafka-test-client
spec:containers:- command:- sh- -c- exec tail -f /dev/nullimage: confluentinc/cp-kafka:4.1.2-2imagePullPolicy: IfNotPresentname: kafkaresources: {}terminationMessagePath: /dev/termination-logterminationMessagePolicy: File

查看topic,并创建test topic。

root@hw1:~/zk# kubectl exec  kafka-test-client -- /usr/bin/kafka-topics --zookeeper zk-cs:2181 --list
__confluent.support.metrics
root@hw1:~/zk# kubectl exec  kafka-test-client -- /usr/bin/kafka-topics --zookeeper zk-cs:2181 --topic test --create --partitions 1 --replication-factor 1
Created topic "test".

启动在topic=test的生产者进程,并写入hello world消息。

root@hw1:~# kubectl exec -it kafka-test-client --  /usr/bin/kafka-console-producer  --broker-list kafka:9092 --topic test
>hello
>world
>

启动消费者,查看topic=test上的消息。

root@hw1:~#  kubectl exec  kafka-test-client -- /usr/bin/kafka-console-consumer  --bootstrap-server kafka:9092 --topic test --from-beginninghello
world

至此,zk/kfk都已经部署完成。

参考资料:

  1. StatefulSets
  2. Storage Classes
  3. Kafka on Kubernetes Deploy a highly available Kafka cluster on Kubernetes.
  4. 也欢迎去我的github page访问,获取笔记及k8s模板

接下来,我们要利用zk/kfk集群,部署fabric with kafka consensus。

这篇关于在k8s上搭建kfk-zk集群(2)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/346247

相关文章

服务器集群同步时间手记

1.时间服务器配置(必须root用户) (1)检查ntp是否安装 [root@node1 桌面]# rpm -qa|grep ntpntp-4.2.6p5-10.el6.centos.x86_64fontpackages-filesystem-1.41-1.1.el6.noarchntpdate-4.2.6p5-10.el6.centos.x86_64 (2)修改ntp配置文件 [r

HDFS—集群扩容及缩容

白名单:表示在白名单的主机IP地址可以,用来存储数据。 配置白名单步骤如下: 1)在NameNode节点的/opt/module/hadoop-3.1.4/etc/hadoop目录下分别创建whitelist 和blacklist文件 (1)创建白名单 [lytfly@hadoop102 hadoop]$ vim whitelist 在whitelist中添加如下主机名称,假如集群正常工作的节

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

搭建Kafka+zookeeper集群调度

前言 硬件环境 172.18.0.5        kafkazk1        Kafka+zookeeper                Kafka Broker集群 172.18.0.6        kafkazk2        Kafka+zookeeper                Kafka Broker集群 172.18.0.7        kafkazk3

90、k8s之secret+configMap

一、secret配置管理 配置管理: 加密配置:保存密码,token,其他敏感信息的k8s资源 应用配置:我们需要定制化的给应用进行配置,我们需要把定制好的配置文件同步到pod当中容器 1.1、加密配置: secret: [root@master01 ~]# kubectl get secrets ##查看加密配置[root@master01 ~]# kubectl get se

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

pico2 开发环境搭建-基于ubuntu

pico2 开发环境搭建-基于ubuntu 安装编译工具链下载sdk 和example编译example 安装编译工具链 sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi libstdc++-arm-none-eabi-newlib 注意cmake的版本,需要在3.17 以上 下载sdk 和ex

【Kubernetes】K8s 的安全框架和用户认证

K8s 的安全框架和用户认证 1.Kubernetes 的安全框架1.1 认证:Authentication1.2 鉴权:Authorization1.3 准入控制:Admission Control 2.Kubernetes 的用户认证2.1 Kubernetes 的用户认证方式2.2 配置 Kubernetes 集群使用密码认证 Kubernetes 作为一个分布式的虚拟

一种改进的red5集群方案的应用、基于Red5服务器集群负载均衡调度算法研究

转自: 一种改进的red5集群方案的应用: http://wenku.baidu.com/link?url=jYQ1wNwHVBqJ-5XCYq0PRligp6Y5q6BYXyISUsF56My8DP8dc9CZ4pZvpPz1abxJn8fojMrL0IyfmMHStpvkotqC1RWlRMGnzVL1X4IPOa_  基于Red5服务器集群负载均衡调度算法研究 http://ww