yangxg před 3 roky
rodič
revize
b55df41f00
3 změnil soubory, kde provedl 203 přidání a 78 odebrání
  1. 1 1
      Dockerfile-kafka
  2. 109 0
      deploy-tmp-kafka-old.yaml
  3. 93 77
      deploy-tmp-kafka.yaml

+ 1 - 1
Dockerfile-kafka

@@ -1 +1 @@
-FROM hub.evbj.easou.com/qa/kubernetes-kafka:1.0-10.2.1
+FROM docker.io/bitnami/kafka:2.3.0-debian-9-r4

+ 109 - 0
deploy-tmp-kafka-old.yaml

@@ -0,0 +1,109 @@
+apiVersion: v1
+kind: Service
+metadata:
+  name: kafka-svc
+  namespace: [ENV]
+  labels:
+    app: kafka
+spec:
+  ports:
+    - port: 9093
+      name: server
+  clusterIP: None   #创建无头服务,如果需要对外暴露端口可自行创建service
+  selector:
+    app: kafka
+---
+apiVersion: policy/v1beta1
+kind: PodDisruptionBudget
+metadata:
+  name: kafka-pdb
+  namespace: [ENV]
+spec:
+  selector:
+    matchLabels:
+      app: kafka
+  minAvailable: 2
+---
+apiVersion: apps/v1
+kind: StatefulSet
+metadata:
+  name: kafka
+  namespace: [ENV]
+spec:
+  selector:
+    matchLabels:
+      app: kafka
+  serviceName: kafka-svc
+  replicas: 3
+  template:
+    metadata:
+      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
+      securityContext:
+        runAsUser: 1000
+        fsGroup: 1000
+  volumeClaimTemplates:
+    - metadata:
+        name: volume
+      spec:
+        accessModes: [ "ReadWriteOnce" ]
+        storageClassName: rbd
+        resources:
+          requests:
+            storage: 100Gi

+ 93 - 77
deploy-tmp-kafka.yaml

@@ -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