Local Recovery Enabled TaskManager StatefulSet
配置文件主要功能
这个配置文件用于部署启用本地恢复(Local Recovery)功能的 Flink TaskManager 的 Kubernetes StatefulSet。
- 定义了一个名为
flink-config
的 ConfigMap,用于存储 Flink 的配置信息。 - 在 ConfigMap 中设置了一些关键的配置项,如 JobManager 的 RPC 地址、TaskManager 的任务槽数量、Blob Server 端口等。
- 定义了一个名为
taskmanager-hl
的 Service,类型为 ClusterIP,并将其与 TaskManager 相关联。 - 定义了一个名为
flink-taskmanager
的 StatefulSet,指定了与之关联的 Service 名称、副本数和选择器。 - 在 Pod 模板中定义了一个名为
taskmanager
的容器,使用apache/flink:latest
镜像。 - 设置容器的安全上下文,将容器的用户 ID 设置为 9999,并将文件系统组 ID 设置为 9999。
- 在容器中设置了环境变量和启动参数,其中
-Dtaskmanager.resource-id=$(POD_NAME)
用于指定 TaskManager 的资源 ID。 - 将容器的两个端口映射到相应的容器端口:6122(RPC)和 6121(Metrics)。
- 配置了一个活跃探测(liveness probe),通过 TCP Socket 探测容器的 6122 端口,延迟 30 秒后开始探测,每 60 秒进行一次探测。
- 挂载名为
flink-config-volume
的卷到容器的/opt/flink/conf/
目录,该卷来自 ConfigMapflink-config
中的两个文件。 - 定义了一个名为
pv
的持久卷声明(PersistentVolumeClaim),用于挂载到容器的/pv
目录。
配置文件加上中文注释
apiVersion: v1
kind: ConfigMap
metadata:
name: flink-config # ConfigMap 的名称
labels:
app: flink
data:
flink-conf.yaml: |+ # Flink 的配置信息
jobmanager.rpc.address: flink-jobmanager
taskmanager.numberOfTaskSlots: 2
blob.server.port: 6124
jobmanager.rpc.port: 6123
taskmanager.rpc.port: 6122
state.backend.local-recovery: true # 启用本地恢复功能
process.taskmanager.working-dir: /pv # 设置 TaskManager 工作目录为 /pv
---
apiVersion: v1
kind: Service
metadata:
name: taskmanager-hl # Service 的名称
spec:
clusterIP: None # ClusterIP 类型,不分配 Cluster IP
selector:
app: flink
component: taskmanager # 选择标签为 app=flink 和 component=taskmanager 的 Pod
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: flink-taskmanager # StatefulSet 的名称
spec:
serviceName: taskmanager-hl # 关联的 Service 名称
replicas: 2 # 设置副本数为 2,启动两个 TaskManager 实例
selector:
matchLabels:
app: flink
component: taskmanager # 选择标签为 app=flink 和 component=taskmanager 的 Pod
template:
metadata:
labels:
app: flink
component: taskmanager # 在 Pod 模板中设置标签 app=flink 和 component=taskmanager
spec:
securityContext:
runAsUser: 9999 # 将容器的用户 ID 设置为 9999
fsGroup: 9999 # 将文件系统组 ID 设置为 9999
containers:
- name: taskmanager # 容器名称为 taskmanager
image: apache/flink:latest # 使用 apache/flink:latest 镜像
env:
- name: POD_NAME # 设置环境变量 POD_NAME,获取 Pod 的名称
valueFrom:
fieldRef:
fieldPath: metadata.name
args: ["taskmanager", "-Dtaskmanager.resource-id=$(POD_NAME)"] # 启动参数指定 TaskManager 的资源 ID
ports:
- containerPort: 6122 # 将容器的 6122 端口映射为 RPC 端口
name: rpc
- containerPort: 6121 # 将容器的 6121 端口映射为 Metrics 端口
name: metrics
livenessProbe: # 配置活跃探测
tcpSocket:
port: 6122 # 通过 TCP Socket 探测容器的 6122 端口
initialDelaySeconds: 30 # 延迟 30 秒后开始进行探测
periodSeconds: 60 # 每 60 秒进行一次探测
volumeMounts:
- name: flink-config-volume # 挂载名为 flink-config-volume 的卷到容器的 /opt/flink/conf/ 目录
mountPath: /opt/flink/conf/
- name: pv # 挂载名为 pv 的持久卷到容器的 /pv 目录
mountPath: /pv
volumes:
- name: flink-config-volume # 定义名为 flink-config-volume 的卷
configMap:
name: flink-config # 从 ConfigMap flink-config 中获取卷的内容
items:
- key: flink-conf.yaml
path: flink-conf.yaml
- key: log4j-console.properties
path: log4j-console.properties
volumeClaimTemplates: # 定义持久卷声明
- metadata:
name: pv # 持久卷声明的名称
spec:
accessModes: [ "ReadWriteOnce" ] # 访问模式为 ReadWriteOnce
resources:
requests:
storage: 50Gi # 请求 50Gi 的存储容量