Kubernetes 教學 02 — 在 Minikube 上部屬 Python Flask 應用程式
Minikube、kubectl 終於派上用場囉
前情提要
在 前一篇 中我們弄懂了 K8S Cluster、Node、Pod 與 Container 的關係,並且在文章末段介紹了能夠與 kubectl -「能夠與 K8S 溝通的命令列工具」。這次我們用實際的操作,來認識容器化的實際過程,並把它部屬到本地的 Kubernetes 上面。
什麼是 Minikube ?
Minikube 是一個單節點的 Kubernetes Cluster,可以安裝在本機上,支援 Windows 與 Mac Minikube 只有一個 Node (節點)。
還記得 Node 是什麼嘛?來複習一下,Node 是一台實體機器,一個工作者 (worker)。上面可以搭載許多個 Pod,而 Pod 是 Kubernetes 的最小部屬單位。一個 Pod 由一個 Container 或是多個 Container 所組成。
看完之後應該還是覺得有點繞,不過沒關係,因為今天我們就要透過實作來了解 Pod 到底是什麼。
安裝 Minikube
首先安裝 Minikube,請到官方網頁下載安裝,Windows、Mac、Linux 都可以安裝。
Windows 需要先安裝 Chocolatey 套件管理工具,接著輸入指令
choco install minikube
即可完成安裝。而 Mac 則可以透過 homebrew 來完成安裝
brew install minikube
起步走,開始使用 Minikube 與 kubectl
安裝完 minikube 之後,第一步先啟動 Minikube,如果你是第一次啟動,Minikube 會幫你建立新的虛擬機器 (VM)。
minikube start
眼尖的你看到最後一行,啟動好 minikube 的同時,kubectl 也準備就緒了。來看看 minikube 的狀態。
minikube status
上一篇提到的 kubelet 與 api-server 已經成功跑起來。複習一下 api-server 是 Master 的元件,kubelet,則是 Node 上負責跟 Master 溝通的元件。因為 Minikube 只有單一個 Node,所以同時具備 Master 與 Node 的元件。
ref: https://kubernetes.io/docs/concepts/overview/components/
使用 kubectl 查看目前 Cluster 中的狀態
kubectl get all
裡面只有一個 kubernetes 的 service,因為我們的 Kubenetes Cluster 中還沒有安裝任何的東西。
建立一個 Python 的 Flask Web 應用程式
建立資料夾名稱為 flask_app
mkdir flask_app
建立一個子資料夾 app ,並在之中建立一個 app.py 檔案
1 |
|
建立 requirement.txt
# flask_app/app/requirement.txt
Flask
在本地端試跑,先安裝依賴的套件,目前只有一個就是 flask
1 |
|
接著執行看看
1 |
|
打開 0.0.0.0:5000 即可看到以下訊息
Hello from Python!
容器化 Flask Web 應用程式
建立一個 Dockerfiile,意思是用 Python 3.7 作為基本的容器,並把專案中的程式碼放進去。並在最後執行 python main.py。
1 |
|
製作 docker image,並給他一個名稱flask_app
1 |
|
可以成功 build,沒有問題
用 docker images 查看剛剛製作的 image
跑跑看剛剛製作好的 image
1 |
|
打開 http://0.0.0.0:5001/ 一樣會看到
Hello from Python!
到這邊我們已經製作完成 Docker image。接下來就要把它部屬到 Minikube 上。
部屬 Python Flask 應用程式到 Minikube 上
首先我們先來建立一個檔案 k8s.yaml
1 |
|
命令列輸入,即可將 flask_app 部屬至 minikube
1 |
|
部屬完的畫面
接著訪問
剛剛的 k8s.yaml 只有聲明 deployment 與 service 兩種物件,但卻產生了 3 個 pod,原因就在於,deployment 裡面聲明了需要 3 個 pod,所以會擴展出 3 個。
輸入以下指令查看暴露出來的 IP
1 |
|
訪問 http://192.168.64.8:30914 就可以看到 Kubernetes 上的 Flask 伺服器回傳的畫面。
Hello from Python!
剛剛我們撰寫 k8s.yaml 時,Service Type 使用的是 LoadBalancer,所以這可是具有負載均衡能力,並且擁有 3 個 Pod 作為支撐的服務。
是不是很神奇?今天我們做了三種 Hello from Python,分別是:
在本地端運行 Flask 伺服器
在單個 Docker 容器運行 Flask 伺服器
在 Kubernetes 中的 Cluster 運行 Flask 伺服器
一步一步的將應用程式,容器化,之後再用 K8S 打造成產品等級的服務。Kubernetes 就是這麼的有趣!
如果喜歡我寫的文章,歡迎追蹤 本人的帳號 @LukaTW 與 StarBugs Weekly 星巴哥技術週刊 🙂🙂🙂