基於k8s1.15搭建Flink集羣(一)

1. 前言

容器化部署是目前業界非常流行的一項技術,基於Docker鏡像運行能夠讓用戶更加方便地對應用進行管理和運維。隨着Docker容器編排工具Kubenetes近幾年逐漸流行起來,大多數企業也逐漸使用Kubernetes來管理集羣容器資源。Flink也在最近的版本中支持了Kubernetes部署模式,讓用戶能夠基於Kubernetes來構建Flink Session Cluster,也可以通過Docker鏡像的方式向Kubernetes集羣中提交獨立的Flink任務。

2. 實驗環境

Kubernetes集羣:
兩臺8G的虛擬機,CentOS 7.7版本, 關閉防火牆
對應軟件版本:

  • Kubernetes v1.15.0
  • calico 3.8.2
  • nginx-ingress 1.5.5
  • Docker 18.09.7

3. 集羣搭建

3.1 Yaml 配置

在Kubernetes上構建Flink Session Cluster,需要將Flink集羣中的組件對應的Docker鏡像分別在k8s集羣中啓動,其中包括JobManager、TaskManager、JobManagerServices三個鏡像服務,其中每個鏡像服務都可以從中央鏡像倉庫中獲取,用戶也可以構建本地的鏡像倉庫,針對每個組件所相應的Kubernetes的yaml配置如下:

3.1.1 JobManager Yaml 配置

主要提供運行JobManager組件鏡像的參數配置,包括JobManager自身的參數,例如RPC端口等配置信息:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
    name: flink-jobmanager
spec:
    replicas: 1
    template:
        metadata:
            labels:
                app: flink
                component: jobmanager
        spec:
            containers:
            - name: jobmanager
              image: flink:1.9
              args:
              - jobmanager
              ports:
              - containerPort: 6123
                name: rpc
              - containerPort: 6124
                name: blob
              - containerPort: 6125
                name: query
              - containerPort: 8081
                name: ui
              env:
              - name: JOB_MANAGER_RPC_ADDRESS
                value: flink-jobmanager

3.1.2 TaskManager Yaml 配置

主要提供運行TaskManager組件的參數配置,以及TaskManager自身的參數,例如RPC端口等配置信息:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
    name: flink-taskmanager
spec:
    replicas: 2
    template:
        metadata:
            labels:
                app: flink
                component: taskmanager
        spec:
            containers:
            - name: taskmanager
              image: flink:1.9
              args:
              - taskmanager
              ports:
              - containerPort: 6121
                name: data
              - containerPort: 6122
                name: rpc
              - containerPort: 6125
                name: query
              env:
              - name: JOB_MANAGER_RPC_ADDRESS
                value: flink-jobmanager

3.1.3 JobManagerServices 配置

主要爲Flink Session 集羣提供對外的RestApi和UI地址,使得用戶可以通過Flink UI 的方式訪問集羣並獲取任務和監控信息,配置文件如下:

apiVersion: v1
kind: Service
metadata:
    name: flink-jobmanager
spec:
    type: NodePort
    ports:
    - name: rpc
      port: 6123 
    - name: blob
      port: 6124
    - name: query
      port: 6125
    - name: ui
      port: 8081
      nodePort: 30001
    selector:
        app: flink
        component: jobmanager

3.2 啓動Flink Session Cluster

當各個組件服務配置文件定義完畢後,就可以通過使用以下Kubectl命令,創建Flink Session Cluster,集羣啓動完成後就可以通過JobManagerServices中配置的WebUI端口訪問 Flink Web 頁面。


kubectl create -f jobmanager-service.yaml

kubectl create -f jobmanager-deployment.yaml

kubectl create -f taskmanager-deployment.yaml

使用如下命令,查看pod:

kubectl get pods -o wide

在這裏插入圖片描述說明已經pod已經啓動完畢,查看Flink容器:
在這裏插入圖片描述然後訪問Flink 的 Web UI 界面:
在這裏插入圖片描述
說明啓動成功,並且可以添加Job在上面運行:
在這裏插入圖片描述

3.3 停止Flink Session Cluster

kubectl delete-f jobmanager-service.yaml

kubectl delete -f jobmanager-deployment.yaml

kubectl delete -f taskmanager-deployment.yaml

4. 坑

  1. 一定要指定flink鏡像的版本,否則默認的latest可能不是你需要的版本
  2. JOB_MANAGER_RPC_ADDRESS 的 value 要與 JobManagerServices的metadata.name 保持一致。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章