在 Flink on Kubernetes 环境中,Job 部署方式分为Native Kubernetes和Kubernetes Operator2种,本文以Native Kubernetes appplication模式部署运行介绍。
一、环境准备,创建K8S账户以及授权
# 创建namespace
kubectl create ns flink
# 创建serviceaccount
kubectl create serviceaccount flink-service-account -n flink
# 用户授权
kubectl create clusterrolebinding flink-role-binding-flink --clusterrole=edit --serviceaccount=flink:flink-service-account
二、部署flink historyserver
1. flink-historyserver-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: flink-historyserver-configmapnamespace: flink
data:# file formatflink-conf.yaml: |execution.target: kubernetes-sessionrest.address: localhostrest.bind-address: localhostjobmanager.bind-host: localhostjobmanager.rpc.address: localhostjobmanager.rpc.port: 6123jobmanager.memory.process.size: 1600mjobmanager.execution.failover-strategy: regiontaskmanager.bind-host: localhosttaskmanager.host: localhosttaskmanager.memory.process.size: 1728mtaskmanager.numberOfTaskSlots: 1parallelism.default: 1state.backend: filesystemfs.allowed-fallback-filesystems: s3s3.endpoint: http://127.0.0.1:9680s3.access-key: sks3.secret-key: sks3.path.style.access: truestate.checkpoints.dir: s3://flink/flink-checkpoints# HistoryServerjobmanager.archive.fs.dir: s3://flink/completed-jobs/historyserver.web.address: 0.0.0.0historyserver.web.port: 8082historyserver.archive.fs.dir: s3://flink/completed-jobs/historyserver.archive.fs.refresh-interval: 10000historyserver.archive.clean-expired-jobs:falsehistoryserver.archive.retained-jobs:-1log4j.properties: |# Allows this configuration to be modified at runtime. The file will be checked every 30 seconds.monitorInterval=30# This affects logging for both user code and FlinkrootLogger.level = INFOrootLogger.appenderRef.file.ref = MainAppender# Uncomment this if you want to _only_ change Flink's logging#logger.flink.name = org.apache.flink#logger.flink.level = INFO# The following lines keep the log level of common libraries/connectors on# log level INFO. The root logger does not override this. You have to manually# change the log levels here.logger.akka.name = akkalogger.akka.level = INFOlogger.kafka.name= org.apache.kafkalogger.kafka.level = INFOlogger.hadoop.name = org.apache.hadooplogger.hadoop.level = INFOlogger.zookeeper.name = org.apache.zookeeperlogger.zookeeper.level = INFOlogger.shaded_zookeeper.name = org.apache.flink.shaded.zookeeper3logger.shaded_zookeeper.level = INFO# Log all infos in the given fileappender.main.name = MainAppenderappender.main.type = RollingFileappender.main.append = trueappender.main.fileName = ${sys:log.file}appender.main.filePattern = ${sys:log.file}.%iappender.main.layout.type = PatternLayoutappender.main.layout.pattern = %d{yyyy-MM-dd HH:mm:ss,SSS} %-5p %-60c %x - %m%nappender.main.policies.type = Policiesappender.main.policies.size.type = SizeBasedTriggeringPolicyappender.main.policies.size.size = 100MBappender.main.policies.startup.type = OnStartupTriggeringPolicyappender.main.strategy.type = DefaultRolloverStrategyappender.main.strategy.max = ${env:MAX_LOG_FILE_NUMBER:-10}# Suppress the irrelevant (wrong) warnings from the Netty channel handlerlogger.netty.name = org.jboss.netty.channel.DefaultChannelPipelinelogger.netty.level = OFFlog4j-console.properties: |# This affects logging for both user code and FlinkrootLogger.level = INFOrootLogger.appenderRef.console.ref = ConsoleAppenderrootLogger.appenderRef.rolling.ref = RollingFileAppender# Uncomment this if you want to _only_ change Flink's logging#logger.flink.name = org.apache.flink#logger.flink.level = INFO# The following lines keep the log level of common libraries/connectors on# log level INFO. The root logger does not override this. You have to manually# change the log levels here.logger.akka.name = akkalogger.akka.le