Flink on Native Kubernetes with Minio

Kubernetes :容器编排引擎
Flink:分布式流数据流引擎
minio:开源的对象存储服务器(类似阿里OSS),兼容亚马逊的S3协议 , 对Kubernetes能够友好的支持

1.MiniKube 环境准备

# curl -Lo minikube https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/v1.17.1/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/
minikube start --cpus=5 \
  --memory=10G  \
  --disk-size=40g \
  --vm-driver=virtualbox \
  --cache-images=true \
  --registry-mirror=https://82jqj6ii.mirror.aliyuncs.com

2.Minio部署

helm install minio minio \
    --repo https://helm.min.io \ 
    --values values-minio.yaml

values-minio.yaml

accessKey: admin
secretKey: password
defaultBucket:
  enabled: true
  name: vvp

resources:
  requests:
    memory: 256Mi
    cpu: 250m
  limits:
    memory: 256Mi
    cpu: 1000m

通过MiniKube查看我们的minio安装情况:

➜  ~ kga #查看集群资源
NAME                                         READY   STATUS    RESTARTS   AGE
pod/minio-69b7b8789b-v49lt                   1/1     Running   0          3h
NAME                                 TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)             AGE
service/kubernetes                   ClusterIP      10.96.0.1        <none>        443/TCP             46h
service/minio                        ClusterIP      10.110.43.169    <none>        9000/TCP            3h
NAME                                    READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/minio                   1/1     1            1           3h
➜  ~ kpf service/minio 3000:9000  #暴露服务端口9000到本地3000
Forwarding from 127.0.0.1:3000 -> 9000
Forwarding from [::1]:3000 -> 9000

访问: http://localhost:3000 , 账密: admin/password

3.Flink 集群启动及配置

3.1.配置Flink

# $FLINK_HOME/conf/flink-conf.yaml
# --------------自定义配置项-----------------
kubernetes.cluster-id: flink-session-cluster
kubernetes.namespace: default
#启用s3插件,以支持s3协议
containerized.master.env.ENABLE_BUILT_IN_PLUGINS: flink-s3-fs-presto-1.12.2.jar
containerized.taskmanager.env.ENABLE_BUILT_IN_PLUGINS: flink-s3-fs-presto-1.12.2.jar
s3.endpoint: http://minio:9000
s3.path.style.access: true
s3.access-key: admin
s3.secret-key: password
# state.backend: filesystem
# state.checkpoints.dir: s3://vvp/checkpoints/
# --------------------------------------------


3.2.启动Flink

cd $FLINK_HOME
./kubernetes-session.sh

3.3.查看集群资源

➜  ~ kga
NAME                                         READY   STATUS    RESTARTS   AGE
pod/flink-session-cluster-6f84d4cc9b-g4ctl   1/1     Running   0          29m
pod/minio-69b7b8789b-v49lt                   1/1     Running   0          3h6m

NAME                                 TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)             AGE
service/flink-session-cluster        ClusterIP      None             <none>        6123/TCP,6124/TCP   29m
service/flink-session-cluster-rest   LoadBalancer   10.100.159.121   <pending>     8081:30165/TCP      29m
service/kubernetes                   ClusterIP      10.96.0.1        <none>        443/TCP             46h
service/minio                        ClusterIP      10.110.43.169    <none>        9000/TCP            3h6m

NAME                                    READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/flink-session-cluster   1/1     1            1           29m
deployment.apps/minio                   1/1     1            1           3h6m

NAME                                               DESIRED   CURRENT   READY   AGE
replicaset.apps/flink-session-cluster-6f84d4cc9b   1         1         1       29m
replicaset.apps/minio-69b7b8789b                   1         1         1       3h6m
➜  ~

查看配置项

➜  ~ kgcm
NAME                                 DATA   AGE
flink-config-flink-session-cluster   3      34m
kube-root-ca.crt                     1      46h
minio                                1      3h11m
➜  ~ kgcm flink-config-flink-session-cluster -o yaml
apiVersion: v1
data:
  flink-conf.yaml: |
    blob.server.port: 6124
    taskmanager.memory.process.size: 1728m
    kubernetes.internal.jobmanager.entrypoint.class: org.apache.flink.kubernetes.entrypoint.KubernetesSessionClusterEntrypoint
    jobmanager.execution.failover-strategy: region
    jobmanager.rpc.address: flink-session-cluster.default
    containerized.master.env.ENABLE_BUILT_IN_PLUGINS: flink-s3-fs-presto-1.12.2.jar
    execution.target: kubernetes-session
    jobmanager.memory.process.size: 1600m
    kubernetes.cluster-id: flink-session-cluster
    jobmanager.rpc.port: 6123
    taskmanager.rpc.port: 6122
    s3.access-key: admin
    s3.secret-key: password
    s3.endpoint: http://minio:9000
    internal.cluster.execution-mode: NORMAL
    kubernetes.namespace: default
    parallelism.default: 1
    taskmanager.numberOfTaskSlots: 1
    containerized.taskmanager.env.ENABLE_BUILT_IN_PLUGINS: flink-s3-fs-presto-1.12.2.jar
    s3.path.style.access: true
  log4j-console.properties: |
    monitorInterval=30
      ...
    logger.netty.level = OFF
  logback-console.xml: |
    <configuration>
            ...
    </configuration>
kind: ConfigMap
metadata:
  labels:
    app: flink-session-cluster
    type: flink-native-kubernetes
  name: flink-config-flink-session-cluster
  namespace: default
  ownerReferences:
  - apiVersion: apps/v1
    blockOwnerDeletion: true
    controller: true
    kind: Deployment
    name: flink-session-cluster
➜  ~

4.配置Ingress暴露服务

4.1.启用拓展项

除了通过 kubectl port-forward ${SVC_NAME} ${host_port}:${target_port}方式以外,我们直接配置一个ingress来暴露我们的服务。

➜  ~ mk addons list
|-----------------------------|----------|--------------|
|         ADDON NAME          | PROFILE  |    STATUS    |
|-----------------------------|----------|--------------|
| ambassador                  | minikube | disabled     |
| csi-hostpath-driver         | minikube | disabled     |
| dashboard                   | minikube | disabled     |
| default-storageclass        | minikube | enabled ✅   |
| efk                         | minikube | disabled     |
| freshpod                    | minikube | disabled     |
| gcp-auth                    | minikube | disabled     |
| gvisor                      | minikube | disabled     |
| helm-tiller                 | minikube | disabled     |
| ingress                     | minikube | enabled ✅   |
| ingress-dns                 | minikube | disabled     |
| istio                       | minikube | disabled     |
| istio-provisioner           | minikube | disabled     |
| kubevirt                    | minikube | disabled     |
| logviewer                   | minikube | disabled     |
| metallb                     | minikube | disabled     |
| metrics-server              | minikube | disabled     |
| nvidia-driver-installer     | minikube | disabled     |
| nvidia-gpu-device-plugin    | minikube | disabled     |
| olm                         | minikube | disabled     |
| pod-security-policy         | minikube | disabled     |
| registry                    | minikube | disabled     |
| registry-aliases            | minikube | disabled     |
| registry-creds              | minikube | disabled     |
| storage-provisioner         | minikube | enabled ✅   |
| storage-provisioner-gluster | minikube | disabled     |
| volumesnapshots             | minikube | disabled     |
|-----------------------------|----------|--------------|
➜  ~ mk enable ingress # 因为我已经enable了,这边旧不再做一次enable

4.2.配置ingress

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress-svc
  namespace: default
spec:
  rules:
  - host: minio.cluster.io
    http:
      paths:
      - backend:
          serviceName: minio
          servicePort: 9000
        path: /
  - host: flink.cluster.io
    http:
      paths:
      - backend:
          serviceName: flink-session-cluster-rest
          servicePort: 8081
        path: /

查看ingress暴露的ip地址

➜  ~ kgi
NAME          CLASS    HOSTS                               ADDRESS          PORTS   AGE
ingress-svc   <none>   flink.cluster.io,minio.cluster.io   192.168.99.102   80      27h
➜  ~

4.3.配置本地hosts

# MiniKube
192.168.99.102 flink.cluster.io
192.168.99.102 minio.cluster.io

5.查看集成结果

5.1.访问minio

地址:http://minio.cluster.io/

账密:admin/password

添加: bucket/input/test.txt (用于下面执行flink-job)

5.2.访问flink

地址:http://flink.cluster.io/

5.3.提交作业

  1. 进入左边Submit New Job菜单项
  2. add new
  3. 选择本地jar包($FLINK_HOME/example/batch/WordCount.jar),提交上传
  4. 点击刚提交的作业,此时出现作业参数配置菜单
  5. Program Arguments项配置--input s3://input/input.txt --output s3://output/output.txt

参考文档

Flink官方文档.Deployment.ResourceProviders.NativeKubernetes
Flink官方文档.Deployment.文件系统.AmasonS3
Flink官方文档.Deployment.文件系统.Plugins
Flink官方文档.Deployment.命令行界面.Advanced CLI
Flink官方文档.Deployment.配置参数
Ververica官方文档.GettingStart.Setup
Minikube - Kubernetes本地实验环境(from阿里云开发者社区)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,080评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,422评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,630评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,554评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,662评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,856评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,014评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,752评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,212评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,541评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,687评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,347评论 4 331
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,973评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,777评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,006评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,406评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,576评论 2 349

推荐阅读更多精彩内容