您好,登錄后才能下訂單哦!
這篇文章主要介紹了Flink Native Kubernetes有什么用,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
Flink Kubernetes與Flink Native Kubernetes是不同的概覽,先回顧一下Flink Kubernetes:
如下圖,從1.2版本到目前最新的1.10,Flink官方都給出了Kubernetes上部署和運行Flink的方案:
在kubernetes上有兩種方式運行flink:session cluster和job cluster,其中session cluster是一套服務可以提交多個任務,而job cluster則是一套服務只對應一個任務;
下圖是典型的session cluster部署操作,可見關鍵是準備好service、deployment等資源的yaml文件,再用kubectl命令創建:
先對比官方的1.9和1.10版本文檔,如下圖和紅框和藍框所示,可見Flink Native Kubernetes是1.10版本才有的新功能:
看看Native Kubernetes是如何運行的,如下圖,創建session cluster的命令來自Flink安裝包:
更有趣的是,提交任務的命令也來自Flink安裝包,就是我們平時提交任務用到<font color="blue">flink run</font>命令,如下圖:
結合官方給出的提交和部署流程圖就更清晰了:kubernetes上部署了Flink Master,由Flink Client來提交session cluster和job的請求:
至此,可以小結Flink Kubernetes和Flink Native Kubernetes的區別:
<font color="blue">Flink Kubernetes</font>自1.2版本首次出現,<font color="red">Flink Native Kubernetes</font>自1.10版本首次出現;
<font color="blue">Flink Kubernetes</font>是把JobManager和TaskManager等進程放入容器,在kubernetes管理和運行,這和我們把java應用做成docker鏡像再在kubernetes運行是一個道理,都是用kubectl在kubernetes上操作;
<font color="red">Flink Native Kubernetes</font>是在Flink安裝包中有個工具,此工具可以向kubernetes的Api Server發送請求,例如創建Flink Master,并且可以和Flink Master通訊,用于提交任務,我們只要用好Flink安裝包中的工具即可,無需在kubernetes上執行kubectl操作;
Flink Native Kubernetes只是Beta版,屬于實驗性質(官方原話:still experimental),<font color="red">請勿用于生產環境!</font>
只支持session cluster模式(一個常駐session執行多個任務),還不支持Job clusters模式(一個任務對應一個session)
盡管還沒有進入Release階段,但這種操作模式對不熟悉kubernetes的開發者來說還是很友好的,接下來通過實戰來體驗吧;
為了體驗Native Kubernetes,flink官方提出了下列前提條件:
kubernetes版本不低于<font color="blue">1.9</font>
kubernetes環境的DNS是正常的
KubeConfig文件,并且這個文件是有權對pod和service資源做增刪改查的(kubectl命令有權對pod和service做操作,也是因為它使用了對應的KubeConfig文件),這個文件一般在kubernetes環境上,全路徑:<font color="blue">~/.kube/config</font>
pod執行時候的身份是service account,這個service account已經通過RBAC賦予了pod的增加和刪除權限;
前面兩點需要您自己保證已達到要求,第三和第四點現在先不必關心,后面有詳細的步驟來完成;
本次實戰的環境如下圖所示,一套kubernetes環境(版本是1.15.3),另外還有一臺CentOS7電腦,上面已部署了flink-1.10(這里的部署是說把安裝包解壓,不啟動任何服務): 準備完畢,開始實戰了~
本次實戰是在kubernetes環境創建一個session cluster,然后提交任務到這個sessionc cluster運行,與官方教程不同的是本次實戰使用自定義namespace和service account,畢竟生產環境一般是不允許使用default作為namespace和service account的;
在CetnOS7電腦上操作時使用的是root賬號;
在kubernetes的節點上,確保有權執行kubectl命令對pod和service進行增刪改查,將文件<font color="blue">~/.kube/config</font>復制到CentOS7電腦的<font color="blue">~/.kube/</font>目錄下;
在kubernetes的節點上,執行以下命令創建名為<font color="blue">flink-session-cluster</font>的namespace:
kubectl create namespace flink-session-cluster
執行以下命令創建名為<font color="blue">flink</font>的serviceaccount:
kubectl create serviceaccount flink -n flink-session-cluster
執行以下命令做serviceaccount和角色的綁定:
kubectl create clusterrolebinding flink-role-binding-flink \ --clusterrole=edit \ --serviceaccount=flink-session-cluster:flink
SSH登錄部署了flink的CentOS7電腦,在flink目錄下執行以下命令,即可創建名為<font color="blue">session001</font>的session cluster,其中-Dkubernetes.namespace參數指定了namespace,另外還指定了一個TaskManager實例使用一個CPU資源、4G內存、內含6個slot:
./bin/kubernetes-session.sh \ -Dkubernetes.namespace=flink-session-cluster \ -Dkubernetes.jobmanager.service-account=flink \ -Dkubernetes.cluster-id=session001 \ -Dtaskmanager.memory.process.size=8192m \ -Dkubernetes.taskmanager.cpu=1 \ -Dtaskmanager.numberOfTaskSlots=4 \ -Dresourcemanager.taskmanager-timeout=3600000
如下圖,控制臺提示創建成功,并且紅框中提示了flink web UI的訪問地址是<font color="blue">http://192.168.50.135:31753</font>:
下載鏡像和啟動容器需要一定的時間,可以用<font color="blue">kubectl get</font>和<font color="blue">kubectl describe</font>命令觀察對應的deployment和pod的狀態:
9. pod啟動成功后訪問flink web,如下圖,此時還沒有創建TaskManager,因此Slot為零: 10. 回到CentOS7電腦,在flink目錄下執行以下命令,將官方自帶的<font color="blue">WindowJoin</font>任務提交到session cluster:
./bin/flink run -d \ -e kubernetes-session \ -Dkubernetes.namespace=flink-session-cluster \ -Dkubernetes.cluster-id=session001 \ examples/streaming/WindowJoin.jar
控制臺提示提交任務成功:
頁面上也會同步顯示增加了一個TaskManager,對應6個slot,已經用掉了一個:
再連續提交5次相同的任務,將此TaskManager的slot用光:
這時候再提交一次任務,按理來說應該增加一個TaskManager,可是頁面如下圖所示,TaskManager數量還是1,并沒有增加,并且紅框中顯示新增的任務并沒有正常運行起來:
15. 在kubernetes環境查看pod情況,如下圖紅框所示,有個新建的pod狀態是Pending,看來這就是第七個任務不能執行就是因為這個新建的pod無法正常工作導致的: 16. 再看看這個namespace的事件通知,如下圖紅框所示,名為session001-taskmanager-1-2的pod有一條通知信息:由于CPU資源不足導致pod創建失敗: 17. 窮到沒錢配置kubernetes環境,連一核CPU都湊不齊:
18. 一時半會兒也找不出多余的CPU資源,唯一能做的就是降低TaskManager的CPU要求,剛才配置的是一個TaskManager使用一核CPU,我打算降低一半,即0.5核,這樣就夠兩個TaskManager用了;
19. 您可能會疑惑:怎么會有0.5個CPU這樣的配置?這個和kubernetes的資源限制有關,kubernetes對pod的CPU限制粒度是千分之一個CPU,也是就是在kubernetes中,配置1000單位的CPU表示使用1核,我們配置0.5核,不過是配置了500單位而已(所以我還可以更窮....)
20. 接下來的操作是先停掉當前的session cluster,再重新創建一個,創建的時候參數-Dkubernetes.taskmanager.cpu的值從1改為0.5
21. 在CentOS7電腦上執行以下命令,將session cluster停掉,釋放所有資源:
echo 'stop' | \ ./bin/kubernetes-session.sh \ -Dkubernetes.namespace=flink-session-cluster \ -Dkubernetes.cluster-id=session001 \ -Dexecution.attached=true
控制臺提示操作成功:
稍等一分鐘左右,再去查看pod,發現已經全部不見了:
在CentOS7電腦的flink目錄下,執行以下命令,和之前相比,唯一變化就是-Dkubernetes.taskmanager.cpu參數的值:
./bin/kubernetes-session.sh \ -Dkubernetes.namespace=flink-session-cluster \ -Dkubernetes.jobmanager.service-account=flink \ -Dkubernetes.cluster-id=session001 \ -Dtaskmanager.memory.process.size=4096m \ -Dkubernetes.taskmanager.cpu=0.5 \ -Dtaskmanager.numberOfTaskSlots=6 \ -Dresourcemanager.taskmanager-timeout=3600000
從控制臺提示得到新的flink web UI端口值,再訪問網頁,發現啟動成功了:
像之前那樣提交任務,連續提交7個,這一次很順利,在提交了第七個任務后,新的TaskManager創建成功,7個任務都成功執行了:
用kubectl describe pod命令查看TaskManager的pod,如下圖紅框所示,可見該pod的CPU用量是500單位,符合之前的推測: 這里再提醒一下,降低CPU用量,意味著該pod中的進程獲取的CPU執行時間被降低,會導致任務執行變慢,所以這種方法不可取,正確的思路是確保硬件資源能滿足業務需求(像我這樣窮到一核CPU都湊不齊的情況還是不多的....)
如果已完成Flink Native Kubernetes體驗,想徹底清理掉前面的所有資源,請按照以下步驟操作:
在web頁面點擊Cancel Job停止正在運行的任務,如下圖紅框:
在CentOS7電腦上停止session cluster:
echo 'stop' | \ ./bin/kubernetes-session.sh \ -Dkubernetes.namespace=flink-session-cluster \ -Dkubernetes.cluster-id=session001 \ -Dexecution.attached=true
在kubernetes節點清理service、clusterrolebinding、serviceaccount、namespace:
kubectl delete service session001 -n flink-session-cluster kubectl delete clusterrolebinding flink-role-binding-flink kubectl delete serviceaccount flink -n flink-session-cluster kubectl delete namespace flink-session-cluster
所有cluster session相關的ConfigMap、Service、Deployment、Pod等資源,都通過kubernetes的ownerReferences配置與service關聯,因此一旦service被刪除,其他資源被被自動清理掉,無需處理;
感謝你能夠認真閱讀完這篇文章,希望小編分享的“Flink Native Kubernetes有什么用”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。