0


Flink 配置3:kubernetes(K8S) 部署 Flink 集群环境

Flink 部署笔记:

  • Ubuntu 环境下部署 Flink 集群环境
  • Docker 部署 Flink 集群环境
  • kubernetes(K8S) 部署 Flink 集群环境

1. Flink ConfigMap

  • 编辑flink-configuration-configmap.yaml:
  1. apiVersion: v1
  2. kind: ConfigMap
  3. metadata:
  4. name: flink-config
  5. labels:
  6. app: flink
  7. data:
  8. flink-conf.yaml: |+
  9. jobmanager.rpc.address: flink-jobmanager
  10. taskmanager.numberOfTaskSlots: 1
  11. blob.server.port: 6124
  12. jobmanager.rpc.port: 6123
  13. taskmanager.rpc.port: 6122
  14. jobmanager.heap.size: 1024m
  15. taskmanager.memory.process.size: 1024m
  16. log4j.properties: |+
  17. log4j.rootLogger=INFO, file
  18. log4j.logger.akka=INFO
  19. log4j.logger.org.apache.kafka=INFO
  20. log4j.logger.org.apache.hadoop=INFO
  21. log4j.logger.org.apache.zookeeper=INFO
  22. log4j.appender.file=org.apache.log4j.FileAppender
  23. log4j.appender.file.file=${log.file}
  24. log4j.appender.file.layout=org.apache.log4j.PatternLayout
  25. log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p %-60c %x - %m%n
  26. log4j.logger.org.apache.flink.shaded.akka.org.jboss.netty.channel.DefaultChannelPipeline=ERROR, file
  • 创建Flink Conf ConfigMap:
  1. kubectl create -f flink-configuration-configmap.yaml
  • 查看已创建的configmap:
  1. kubectl get configmap

2. JobManager Service

  • 编辑jobmanager-service.yaml:
  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4. name: flink-jobmanager
  5. spec:
  6. type: ClusterIP
  7. ports:
  8. - name: rpc
  9. port: 6123
  10. - name: blob
  11. port: 6124
  12. - name: ui
  13. port: 8081
  14. selector:
  15. app: flink
  16. component: jobmanager
  • 创建Flink jobmanager-service:
  1. kubectl create -f jobmanager-service.yaml

3. JobManager Deployment

  • 编辑jobmanager-deployment.yaml:
  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: flink-jobmanager
  5. spec:
  6. replicas: 1
  7. selector:
  8. matchLabels:
  9. app: flink
  10. component: jobmanager
  11. template:
  12. metadata:
  13. labels:
  14. app: flink
  15. component: jobmanager
  16. spec:
  17. containers:
  18. - name: jobmanager
  19. image: flink:1.17.1-scala_2.12-java8
  20. workingDir: /opt/flink
  21. command: ["/bin/bash", "-c", "$FLINK_HOME/bin/jobmanager.sh start;\
  22. while :;
  23. do
  24. if [[ -f $(find log -name '*jobmanager*.log' -print -quit) ]];
  25. then tail -f -n +1 log/*jobmanager*.log;
  26. fi;
  27. done"]
  28. ports:
  29. - containerPort: 6123
  30. name: rpc
  31. - containerPort: 6124
  32. name: blob
  33. - containerPort: 8081
  34. name: ui
  35. livenessProbe:
  36. tcpSocket:
  37. port: 6123
  38. initialDelaySeconds: 30
  39. periodSeconds: 60
  40. volumeMounts:
  41. - name: flink-config-volume
  42. mountPath: /opt/flink/conf
  43. securityContext:
  44. runAsUser: 9999 # refers to user _flink_ from official flink image, change if necessary
  45. volumes:
  46. - name: flink-config-volume
  47. configMap:
  48. name: flink-config
  49. items:
  50. - key: flink-conf.yaml
  51. path: flink-conf.yaml
  52. - key: log4j.properties
  53. path: log4j.properties
  • 创建Flink jobmanager-deployment:
  1. kubectl create -f jobmanager-deployment.yaml

4. TaskManager Deployment

  • 编辑taskmanager-deployment.yaml:
  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: flink-taskmanager
  5. spec:
  6. replicas: 2
  7. selector:
  8. matchLabels:
  9. app: flink
  10. component: taskmanager
  11. template:
  12. metadata:
  13. labels:
  14. app: flink
  15. component: taskmanager
  16. spec:
  17. containers:
  18. - name: taskmanager
  19. image: flink:1.17.1-scala_2.12-java8
  20. workingDir: /opt/flink
  21. command: ["/bin/bash", "-c", "$FLINK_HOME/bin/taskmanager.sh start; \
  22. while :;
  23. do
  24. if [[ -f $(find log -name '*taskmanager*.log' -print -quit) ]];
  25. then tail -f -n +1 log/*taskmanager*.log;
  26. fi;
  27. done"]
  28. ports:
  29. - containerPort: 6122
  30. name: rpc
  31. livenessProbe:
  32. tcpSocket:
  33. port: 6122
  34. initialDelaySeconds: 30
  35. periodSeconds: 60
  36. volumeMounts:
  37. - name: flink-config-volume
  38. mountPath: /opt/flink/conf/
  39. securityContext:
  40. runAsUser: 9999 # refers to user _flink_ from official flink image, change if necessary
  41. volumes:
  42. - name: flink-config-volume
  43. configMap:
  44. name: flink-config
  45. items:
  46. - key: flink-conf.yaml
  47. path: flink-conf.yaml
  48. - key: log4j.properties
  49. path: log4j.properties
  • 创建Flink taskmanager-deployment:
  1. kubectl create -f taskmanager-deployment.yaml

5. 访问Flink UI

5.1 方法一

5.2 方法二

  • 编辑jobmanager-rest-service.yaml:
  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4. name: flink-jobmanager-rest
  5. spec:
  6. type: NodePort
  7. ports:
  8. - name: rest
  9. port: 8081 #Cluster IP 上监听的端口
  10. targetPort: 8081 #Pod监听的端口
  11. nodePort: 30081 #k8s节点上监听的端口
  12. selector:
  13. app: flink
  14. component: jobmanager
  • 创建 jobmanager-rest-service:
  1. kubectl create -f jobmanager-rest-service.yaml
  • 通过kubectl get svc 查看对外端口:
  1. kubectl get svc
  • 访问查到的端口。

6. 停止集群

  1. kubectl delete -f jobmanager-rest-service.yaml
  2. kubectl delete -f jobmanager-service.yaml
  3. kubectl delete -f jobmanager-deployment.yaml
  4. kubectl delete -f taskmanager-deployment.yaml
  5. kubectl delete -f flink-configuration-configmap.yaml
标签: kubernetes flink 容器

本文转载自: https://blog.csdn.net/White_Ink_/article/details/134808697
版权归原作者 北_鱼 所有, 如有侵权,请联系我们删除。

“Flink 配置3:kubernetes(K8S) 部署 Flink 集群环境”的评论:

还没有评论