|
@@ -1,109 +1,125 @@
|
|
|
+#部署 Service Headless,用于Kafka间相互通信
|
|
|
apiVersion: v1
|
|
|
kind: Service
|
|
|
metadata:
|
|
|
- name: kafka-svc
|
|
|
- namespace: [ENV]
|
|
|
+ name: kafka-headless
|
|
|
labels:
|
|
|
app: kafka
|
|
|
spec:
|
|
|
+ type: ClusterIP
|
|
|
+ clusterIP: None
|
|
|
ports:
|
|
|
- - port: 9093
|
|
|
- name: server
|
|
|
- clusterIP: None #创建无头服务,如果需要对外暴露端口可自行创建service
|
|
|
+ - name: kafka
|
|
|
+ port: 9093
|
|
|
+ targetPort: kafka
|
|
|
selector:
|
|
|
app: kafka
|
|
|
---
|
|
|
-apiVersion: policy/v1beta1
|
|
|
-kind: PodDisruptionBudget
|
|
|
+#部署 Service,用于外部访问 Kafka
|
|
|
+apiVersion: v1
|
|
|
+kind: Service
|
|
|
metadata:
|
|
|
- name: kafka-pdb
|
|
|
- namespace: [ENV]
|
|
|
+ name: kafka
|
|
|
+ labels:
|
|
|
+ app: kafka
|
|
|
spec:
|
|
|
+ type: ClusterIP
|
|
|
+ ports:
|
|
|
+ - name: kafka
|
|
|
+ port: 9093
|
|
|
+ targetPort: kafka
|
|
|
selector:
|
|
|
- matchLabels:
|
|
|
- app: kafka
|
|
|
- minAvailable: 2
|
|
|
+ app: kafka
|
|
|
---
|
|
|
apiVersion: apps/v1
|
|
|
kind: StatefulSet
|
|
|
metadata:
|
|
|
- name: kafka
|
|
|
- namespace: [ENV]
|
|
|
+ name: "kafka"
|
|
|
+ labels:
|
|
|
+ app: kafka
|
|
|
spec:
|
|
|
selector:
|
|
|
matchLabels:
|
|
|
app: kafka
|
|
|
- serviceName: kafka-svc
|
|
|
+ serviceName: kafka-headless
|
|
|
+ podManagementPolicy: "Parallel"
|
|
|
replicas: 3
|
|
|
+ updateStrategy:
|
|
|
+ type: "RollingUpdate"
|
|
|
template:
|
|
|
metadata:
|
|
|
+ name: "kafka"
|
|
|
labels:
|
|
|
app: kafka
|
|
|
- spec:
|
|
|
- affinity:
|
|
|
- podAntiAffinity:
|
|
|
- requiredDuringSchedulingIgnoredDuringExecution:
|
|
|
- - labelSelector:
|
|
|
- matchExpressions:
|
|
|
- - key: "app"
|
|
|
- operator: In
|
|
|
- values:
|
|
|
- - kafka
|
|
|
- topologyKey: "kubernetes.io/hostname"
|
|
|
- podAffinity:
|
|
|
- preferredDuringSchedulingIgnoredDuringExecution:
|
|
|
- - weight: 1
|
|
|
- podAffinityTerm:
|
|
|
- labelSelector:
|
|
|
- matchExpressions:
|
|
|
- - key: "app"
|
|
|
- operator: In
|
|
|
- values:
|
|
|
- - zk
|
|
|
- topologyKey: "kubernetes.io/hostname"
|
|
|
- terminationGracePeriodSeconds: 300
|
|
|
- containers:
|
|
|
- - name: k8skafka
|
|
|
- imagePullPolicy: Always
|
|
|
- image: hub.evbj.easou.com/qa/kubernetes-kafka:1.0-10.2.1 #可自行去阿里云拉去对应镜像
|
|
|
- resources:
|
|
|
- requests:
|
|
|
- memory: "1Gi"
|
|
|
- cpu: "1000m"
|
|
|
- limits:
|
|
|
- memory: "1Gi"
|
|
|
- cpu: "1000m"
|
|
|
- ports:
|
|
|
- - containerPort: 9093
|
|
|
- name: server
|
|
|
- command:
|
|
|
- - sh
|
|
|
- - -c
|
|
|
- - "exec kafka-server-start.sh /opt/kafka/config/server.properties --override broker.id=${HOSTNAME##*-} \
|
|
|
- --override listeners=PLAINTEXT://:9093 \
|
|
|
- --override zookeeper.connect=zk-cs.[ENV].svc.cluster.local:2181 \ #这里配置了与zookeeper进行连接,非常重要。格式为:pod名.zookeeper的service名.名称空间.svc.cluster.local:2181
|
|
|
- --override log.dir=/var/lib/kafka "
|
|
|
- env:
|
|
|
- - name: KAFKA_HEAP_OPTS
|
|
|
- value: "-Xmx512M -Xms512M"
|
|
|
- - name: KAFKA_OPTS
|
|
|
- value: "-Dlogging.level=INFO"
|
|
|
- volumeMounts:
|
|
|
- - name: volume
|
|
|
- mountPath: /data/kafka
|
|
|
- readinessProbe:
|
|
|
- tcpSocket:
|
|
|
- port: 9093
|
|
|
- timeoutSeconds: 2
|
|
|
+ spec:
|
|
|
securityContext:
|
|
|
- runAsUser: 1000
|
|
|
- fsGroup: 1000
|
|
|
+ fsGroup: 1001
|
|
|
+ runAsUser: 1001
|
|
|
+ containers:
|
|
|
+ - name: kafka
|
|
|
+ image: "docker.io/bitnami/kafka:2.3.0-debian-9-r4"
|
|
|
+ imagePullPolicy: "IfNotPresent"
|
|
|
+ resources:
|
|
|
+ limits:
|
|
|
+ cpu: 500m
|
|
|
+ memory: 512Mi
|
|
|
+ requests:
|
|
|
+ cpu: 250m
|
|
|
+ memory: 256Mi
|
|
|
+ env:
|
|
|
+ - name: MY_POD_IP
|
|
|
+ valueFrom:
|
|
|
+ fieldRef:
|
|
|
+ fieldPath: status.podIP
|
|
|
+ - name: MY_POD_NAME
|
|
|
+ valueFrom:
|
|
|
+ fieldRef:
|
|
|
+ fieldPath: metadata.name
|
|
|
+ - name: KAFKA_CFG_ZOOKEEPER_CONNECT
|
|
|
+ value: "zk-cs.[ENV].svc.cluster.local:2181" #Zookeeper Service 名称
|
|
|
+ - name: KAFKA_PORT_NUMBER
|
|
|
+ value: "9093"
|
|
|
+ - name: KAFKA_CFG_LISTENERS
|
|
|
+ value: "PLAINTEXT://:$(KAFKA_PORT_NUMBER)"
|
|
|
+ - name: KAFKA_CFG_ADVERTISED_LISTENERS
|
|
|
+ value: 'PLAINTEXT://$(MY_POD_NAME).kafka-headless:$(KAFKA_PORT_NUMBER)'
|
|
|
+ - name: ALLOW_PLAINTEXT_LISTENER
|
|
|
+ value: "yes"
|
|
|
+ - name: KAFKA_HEAP_OPTS
|
|
|
+ value: "-Xmx512m -Xms512m"
|
|
|
+ - name: KAFKA_CFG_LOGS_DIRS
|
|
|
+ value: /data/kafka/data
|
|
|
+ - name: JMX_PORT
|
|
|
+ value: "9988"
|
|
|
+ ports:
|
|
|
+ - name: kafka
|
|
|
+ containerPort: 9093
|
|
|
+ livenessProbe:
|
|
|
+ tcpSocket:
|
|
|
+ port: kafka
|
|
|
+ initialDelaySeconds: 10
|
|
|
+ periodSeconds: 10
|
|
|
+ timeoutSeconds: 5
|
|
|
+ successThreshold: 1
|
|
|
+ failureThreshold: 2
|
|
|
+ readinessProbe:
|
|
|
+ tcpSocket:
|
|
|
+ port: kafka
|
|
|
+ initialDelaySeconds: 5
|
|
|
+ periodSeconds: 10
|
|
|
+ timeoutSeconds: 5
|
|
|
+ successThreshold: 1
|
|
|
+ failureThreshold: 6
|
|
|
+ volumeMounts:
|
|
|
+ - name: data
|
|
|
+ mountPath: /data/kafka
|
|
|
volumeClaimTemplates:
|
|
|
- metadata:
|
|
|
- name: volume
|
|
|
+ name: data
|
|
|
spec:
|
|
|
- accessModes: [ "ReadWriteOnce" ]
|
|
|
- storageClassName: rbd
|
|
|
+ storageClassName: rbd #指定为上面创建的 storageclass
|
|
|
+ accessModes:
|
|
|
+ - "ReadWriteOnce"
|
|
|
resources:
|
|
|
requests:
|
|
|
- storage: 100Gi
|
|
|
+ storage: 100Gi
|