本地k8s(v1.12官網譯文)

該頁面介紹了如何在Kubernetes上本地部署Flink?。

入門

入門部分將指導您在Kubernetes上設置功能齊全的Flink集群。

介紹

Kubernetes是一種流行的容器編排系統,用于自動執行計算機應用程序的部署,擴展和管理。Flink的本地Kubernetes集成使您可以在正在運行的Kubernetes集群上直接部署Flink。此外,Flink能夠根據所需資源動態分配和取消分配TaskManager,因為它可以直接與Kubernetes通信。

準備

入門部分假定運行Kubernetes集群滿足以下要求:

Kubernetes> = 1.9。

KubeConfig,可以訪問列表,創建,刪除容器和服務,可以通過進行配置~/.kube/config。您可以通過運行來驗證權限kubectl auth can-i <list|create|edit|delete> pods。

啟用Kubernetes DNS。

default具有RBAC權限的服務帳戶可以創建,刪除Pod。

如果在設置Kubernetes集群時遇到問題,請看一下如何設置Kubernetes集群

在Kubernetes上啟動Flink Session

在運行Kubernetes集群并kubectl配置為指向它之后,您可以通過以下方式在會話模式下啟動Flink集群:

# (1) Start Kubernetes session

$ ./bin/kubernetes-session.sh-Dkubernetes.cluster-id=my-first-flink-cluster

# (2) Submit example job

$ ./bin/flink run\--targetkubernetes-session\-Dkubernetes.cluster-id=my-first-flink-cluster\./examples/streaming/TopSpeedWindowing.jar

# (3) Stop Kubernetes session by deleting cluster deployment

$ kubectl delete deployment/my-first-flink-cluster

注意使用Minikube時,需要調用minikube tunnel以便在Minikube上公開Flink的LoadBalancer服務

恭喜你!通過在Kubernetes上部署Flink,您已經成功運行了Flink應用程序。

部署方式

對于生產用途,我們建議在應用程序模式下部署Flink應用程序,因為這些模式為應用程序提供了更好的隔離。

應用模式

所述應用程序模式需要用戶代碼是捆綁在一起的?Flink鏡像一起,因為它在集群上運行用戶代碼的main()方法。應用程序模式可確保在終止應用程序后正確清理所有Flink組件。

Flink社區提供了一個基本的Docker映像,可用于捆綁用戶代碼:

FROM flink

RUN mkdir -p $FLINK_HOME/usrlib

COPY /path/of/my-flink-job.jar $FLINK_HOME/usrlib/my-flink-job.jar

在下創建并發布Docker映像后custom-image-name,您可以使用以下命令啟動應用程序集群:

$ ./bin/flink run-application \

--targetkubernetes-application \

-Dkubernetes.cluster-id=my-first-application-cluster \

-Dkubernetes.container.image=custom-image-name \

local:///opt/flink/usrlib/my-flink-job.jar

注意?local是“應用程序模式”中唯一受支持的方案。

該kubernetes.cluster-id選項指定集群名稱,并且必須是唯一的。如果您未指定此選項,則Flink將生成一個隨機名稱。

該kubernetes.container.image選項指定用于啟動Pod的image。

部署應用程序集群后,您可以與其進行交互:

# List running job on the cluster

$ ./bin/flink list --target kubernetes-application -Dkubernetes.cluster-id=my-first-application -cluster

# Cancel running job

$ ./bin/flink cancel --target kubernetes-application -Dkubernetes.cluster-id=my-first-application-cluster? <jobId>

您可以conf/flink-conf.yaml通過將鍵值對傳遞-Dkey=value給來覆蓋設置中的配置bin/flink。

Per-Job Cluster Mode

Kubernetes上的Flink不支持 Per-Job Cluster Mode。

會話模式

在此頁面頂部的《入門指南》中,您已經看到了會話集群的部署。

會話模式可以以兩種模式執行:

分離模式(默認):kubernetes-session.sh在Kubernetes上部署Flink集群,然后終止。

附加模式(-Dexecution.attached=true):kubernetes-session.sh保持活動狀態,并允許輸入命令來控制正在運行的Flink群集。例如,stop停止正在運行的會話群集。鍵入help以列出所有受支持的命令。

為了my-first-flink-cluster使用集群ID重新附加到正在運行的Session集群,請使用以下命令:

$ ./bin/kubernetes-session.sh\

-Dkubernetes.cluster-id=my-first-flink-cluster\

-Dexecution.attached=true

您可以conf/flink-conf.yaml通過將鍵值對傳遞-Dkey=value給來覆蓋設置中的配置bin/kubernetes-session.sh。

停止正在運行的會話群集

為了停止正在運行的具有群集ID的會話群集,my-first-flink-cluster您可以刪除Flink部署,也可以使用:

$ echo'stop' | ./bin/kubernetes-session.sh \

-Dkubernetes.cluster-id=my-first-flink-cluster \

-Dexecution.attached=true

在Kubernetes上的Flink參考

Configuring Flink on Kubernetes

配置頁面上列出了特定于Kubernetes的配置選項。

訪問Flink的Web UI

Flink的Web UI和REST端點可以通過kubernetes.rest-service.exposed.type配置選項以多種方式公開。

ClusterIP:在群集內部IP上公開服務。該服務僅在群集內可用。如果要訪問JobManager UI或將作業提交到現有會話,則需要啟動本地代理。然后,您可以localhost:8081用于將Flink作業提交到會話或查看儀表板。

$ kubectl port-forward service/ 8081

NodePort:在靜態端口(NodePort)上的每個節點的IP上公開服務。?<NodeIP>:<NodePort>可用于聯系JobManager服務。?NodeIP也可以用Kubernetes ApiServer地址代替。您可以在kube配置文件中找到其地址。

LoadBalancer:使用云提供商的負載平衡器在外部公開服務。由于云提供商和Kubernetes需要一些時間來準備負載均衡器,因此您可能會NodePort在客戶端日志中獲得JobManager Web界面。您可以kubectl get services/<cluster-id>-rest用來獲取EXTERNAL-IP并手動構建負載均衡器JobManager Web界面 http://<EXTERNAL-IP>:8081。

請參閱Kubernetes中有關發布服務的官方文檔以獲取更多信息。

Logging

Kubernetes集成向Pod公開conf/log4j-console.properties并conf/logback-console.xml作為ConfigMap。這些文件的更改將對新啟動的群集可見。

訪問日志

默認情況下,JobManager和TaskManager會將日志/opt/flink/log同時輸出到控制臺和每個窗格中。該STDOUT和STDERR輸出只會被重定向到控制臺。您可以通過訪問它們

$ kubectl logs

如果Pod正在運行,則還可以使用它kubectl exec -it <pod-name> bash來建立隧道并查看日志或調試過程。

訪問TaskManagers的日志

Flink將自動取消分配空閑的TaskManager,以免浪費資源。此行為可能使訪問相應pod的日志變得更加困難。您可以通過配置resourcemanager.taskmanager-timeout來增加釋放空閑的TaskManager之前的時間,以便您有更多的時間檢查日志文件。

動態更改日志級別

如果已將記錄器配置為自動檢測配置更改,則可以通過更改相應的ConfigMap(假設集群ID為my-first-flink-cluster)來動態調整日志級別:

$ kubectl edit cm flink-config-my-first-flink-cluster

使用插件

為了使用插件,您必須將它們復制到Flink JobManager / TaskManager pod的正確位置。您可以使用內置插件,而無需裝載卷或構建自定義Docker image。例如,使用以下命令為您的Flink會話群集啟用S3插件。

$ ./bin/kubernetes-session.sh

-Dcontainerized.master.env.ENABLE_BUILT_IN_PLUGINS=flink-s3-fs-hadoop-1.12.0.jar \

-Dcontainerized.taskmanager.env.ENABLE_BUILT_IN_PLUGINS=flink-s3-fs-hadoop-1.12.0.jar

自定義Docker image

如果要使用自定義Docker映像,則可以通過configuration選項指定它kubernetes.container.image。Flink社區提供了豐富的Flink Docker?image,可以作為一個很好的起點。查看如何自定義Flink的Docker映像,以了解如何啟用插件,添加依賴項和其他選項。

使用秘密

Kubernetes Secrets是一個包含少量敏感數據(例如密碼,令牌或密鑰)的對象。否則,此類信息可能會放在pod specification或image中。Kubernetes上的Flink可以通過兩種方式使用Secrets:

將Secrets用作Pod中的文件;

使用Secrets作為環境變量;

將Secrets?用作Pod中的文件

以下命令會將密鑰安裝在啟動的容器中mysecret的路徑下/path/to/secret:

$ ./bin/kubernetes-session.sh -Dkubernetes.secrets=mysecret:/path/to/secret

mysecret然后可以找到秘密文件的用戶名和密碼,并將它們存儲在/path/to/secret/username和中/path/to/secret/password。有關更多詳細信息,請參見Kubernetes官方文檔

使用Secrets?作為環境變量

以下命令將mysecret在啟動的pod中將密鑰作為環境變量公開:

$ ./bin/kubernetes-session.sh-Dkubernetes.env.secretKeyRef= \

env:SECRET_USERNAME,secret:mysecret,key:username; \

env:SECRET_PASSWORD,secret:mysecret,key:password

env變量SECRET_USERNAME包含用戶名,而env變量SECRET_PASSWORD包含secret的密碼mysecret。有關更多詳細信息,請參見Kubernetes官方文檔

Kubernetes的高可用性

為了在Kubernetes上實現高可用性,您可以使用現有的高可用性服務

手動資源清理

Flink使用Kubernetes OwnerReference來清理所有集群組件。所有flink創建的資源,其中包括ConfigMap,Service,和Pod,有OwnerReference設定為deployment/<cluster-id>。刪除部署后,所有相關資源將自動刪除。

$ kubectl delete deployment/<cluster-id>

支持的Kubernetes版本

當前,>= 1.9支持所有Kubernetes版本。

命名空間

Kubernetes中的命名空間通過資源配額在多個用戶之間劃分集群資源。Kubernetes上的Flink可以使用名稱空間來啟動Flink集群。可以通過kubernetes.namespace配置名稱空間。

RBAC

基于角色的訪問控制(RBAC)是一種基于企業內各個用戶的角色來調節對計算資源或網絡資源的訪問的方法。用戶可以配置JobManager用來訪問Kubernetes集群中的Kubernetes API服務器的RBAC角色和服務帳戶。

每個名稱空間都有一個默認服務帳戶。但是,default服務帳戶可能無權在Kubernetes集群中創建或刪除Pod。用戶可能需要更新default服務帳戶的權限或指定綁定了正確角色的另一個服務帳戶。

$ kubectl create clusterrolebinding flink-role-binding-default--clusterrole=edit--serviceaccount=default:default

如果您不想使用default服務帳戶,請使用以下命令創建新的flink-service-account服務帳戶并設置角色綁定。然后使用config選項-Dkubernetes.service-account=flink-service-account使JobManager窗格使用flink-service-account服務帳戶創建/刪除TaskManager窗格和領導者ConfigMap。同樣,這將允許TaskManager監視領導者ConfigMap,以檢索JobManager和ResourceManager的地址。

$ kubectl create serviceaccount flink-service-account

$ kubectl create clusterrolebinding flink-role-binding-flink--clusterrole=edit--serviceaccount=default:flink-service-account

請參閱有關RBAC授權的Kubernetes官方文檔以獲取更多信息。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,923評論 6 535
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,740評論 3 420
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,856評論 0 380
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,175評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,931評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,321評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,383評論 3 443
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,533評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,082評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,891評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,067評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,618評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,319評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,732評論 0 27
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,987評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,794評論 3 394
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,076評論 2 375

推薦閱讀更多精彩內容