目录
一、引言
Kafka是由LinkedIn公司采用Scala语言开发的一个多分区、多副本的分布式消息系统,可以架设在k8s平台上基于ZooKeeper协调,达到高吞吐、持久化、水平扩展、支持流数据处理等多种特性,因而被广泛使用在互联网大数据和金融等领域。并且越来越多的开源分布式处理系统如Cloudera、Storm、Spark、Flink等都支持与Kafka集成。
Kafka的消息持久化功能和多副本机制,有效地降低了数据丢失的风险,因此也可以作为长期的数据存储系统来使用。那么如何为部署在k8s中的kafka数据上保险,进一步加强数据保护,挽救数据于黑客攻击、恶意篡改等事件,本文使用基于velero的商业化产品YS1000(免费版)带大家一窥究竟。
二、实验环境
Kubernetes版本
kubectl get nodes
NAME STATUS ROLES AGE VERSION
remote-master Ready master 84d v1.18.9
worker-2 Ready <none> 84d v1.18.9
使用helm安装YS1000免费版,详见
https://github.com/jibutech/helm-charts/blob/main/README.md
使用手册详见https://github.com/jibutech/docs/blob/main/user_guide/%E9%93%B6%E6%95%B0%E5%A4%9A%E4%BA%91%E6%95%B0%E6%8D%AE%E7%AE%A1%E5%AE%B62.0%E7%89%88%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E%E4%B9%A6.md
安装完成后查看YS1000版本
helm list -A
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
qiming-operator-1637891889 qiming-migration 1 2021-11-26 09:58:10.840736168 +0800 CST deployed qiming-operator-2.1.0 2.1.0
三、部署zookeeper
本文中我们将使用statefulset在kafka-test的namespace中创建2副本的zookeeper和kafka。
第一步,使用kubectl创建kafka-test
kubectl create namespace kafka-test
第二步,在kafka-test中部署zookeeper
kubectl create namespace kafka-test
zookeeper-deployment.yaml 内容供参考,具体参数如namespace,replicas和storageClassName等根据需要修改
---
apiVersion: v1
kind: Service
metadata:
name: zk-svc
labels:
app: zk-svc
spec:
ports:
- port: 2888
name: server
- port: 3888
name: leader-election
clusterIP: None
selector:
app: zk
---
apiVersion: v1
kind: ConfigMap
metadata:
name: zk-cm
data:
jvm.heap: "1G"
tick: "2000"
init: "10"
sync: "5"
client.cnxns: "60"
snap.retain: "3"
purge.interval: "0"
---
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
name: zk-pdb
spec:
selector:
matchLabels:
app: zk
minAvailable: 2
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: zk
spec:
serviceName: zk-svc
replicas: 2
selector:
matchLabels:
app: zk
template:
metadata:
labels:
app: zk
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: "app"
operator: In
values:
- zk
topologyKey: "kubernetes.io/hostname"
containers:
- name: k8szk
imagePullPolicy: IfNotPresent
image: registry.cn-hangzhou.aliyuncs.com/