本文發表於一年多前。舊文章可能包含過時內容。請檢查頁面中的資訊自發布以來是否已變得不正確。
開始使用 Kubernetes(使用 Python)
所以,你知道你想在 Kubernetes 中執行你的應用程式,但不知道從何開始。或者你可能剛開始,但仍然不知道自己不知道什麼。在這篇部落格中,你將逐步瞭解如何容器化一個應用程式並使其在 Kubernetes 中執行。
本指南假設你是一名開發人員,或者至少熟悉命令列(最好是 Bash shell)。
我們將做些什麼
- 獲取程式碼並在本地執行應用程式
- 建立映象並在 Docker 中執行應用程式
- 建立部署並在 Kubernetes 中執行應用程式
先決條件
- 一個 Kubernetes 服務 - 在本教程中,我使用帶 Kubernetes 的 Docker Desktop,但你也可以使用其他服務。有關完整列表,請參閱入門。
- 已安裝Python 3.7
- 已安裝Git
容器化應用程式
在本節中,你將獲取一些原始碼,驗證它是否在本地執行,然後建立應用程式的 Docker 映象。所使用的示例應用程式是一個非常簡單的 Flask Web 應用程式;如果你想在本地測試它,你需要安裝 Python。否則,你可以跳到“建立 Dockerfile”部分。
獲取應用程式程式碼
使用 git 將儲存庫克隆到你的本地機器
git clone https://github.com/JasonHaley/hello-python.git
切換到應用程式目錄
cd hello-python/app
此目錄中只有兩個檔案。如果你檢視 main.py 檔案,你會看到應用程式打印出一條問候訊息。你可以在Flask 網站上了解更多關於 Flask 的資訊。
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello from Python!"
if __name__ == "__main__":
app.run(host='0.0.0.0')
requirements.txt 檔案包含 main.py 所需的包列表,並將由 pip 用於安裝 Flask 庫。
說明
當你開始編寫更高階的 Python 程式碼時,你會發現並不總是建議使用 `pip install`,你可能希望使用 `virtualenv`(或 `pyenv`)在虛擬環境中安裝依賴項。本地執行
使用以下命令手動執行安裝程式和應用程式
pip install -r requirements.txt
python main.py
這將啟動一個託管您應用程式的開發 Web 伺服器,您可以透過導航到 https://:5000 檢視。由於埠 5000 是開發伺服器的預設埠,因此我們無需指定它。
建立 Dockerfile
既然你已經驗證了原始碼可以工作,容器化應用程式的第一步是建立 Dockerfile。
在 hello-python/app 目錄中,建立一個名為 Dockerfile 的檔案,其中包含以下內容並儲存
FROM python:3.7
RUN mkdir /app
WORKDIR /app
ADD . /app/
RUN pip install -r requirements.txt
EXPOSE 5000
CMD ["python", "/app/main.py"]
此檔案是 Docker 用於構建映象的一組指令。對於這個簡單的應用程式,Docker 將會
- 從 Docker Hub 獲取官方 Python 基礎映象 3.7 版本。
- 在映象中,建立一個名為 app 的目錄。
- 將工作目錄設定為該新的 app 目錄。
- 將本地目錄的內容複製到映象中的新資料夾。
- 執行 pip 安裝程式(就像我們之前做的那樣),將所需元件拉入映象。
- 通知 Docker 容器監聽埠 5000。
- 配置容器啟動時使用的啟動命令。
建立一個映象
在命令列或 shell 中,在 hello-python/app 目錄中,使用以下命令構建映象
docker build -f Dockerfile -t hello-python:latest .
說明
在此示例中,我使用的是 :latest 標籤。如果您不熟悉它是什麼,您可能需要閱讀Docker:最新的困惑。這將執行上述七個步驟並建立映象。要驗證映象是否已建立,請執行以下命令
docker image ls

應用程式現在已容器化,這意味著它現在可以在 Docker 和 Kubernetes 中執行!
在 Docker 中執行
在跳入 Kubernetes 之前,讓我們驗證它在 Docker 中是否工作。執行以下命令,讓 Docker 在容器中執行應用程式並將其對映到埠 5001
docker run -p 5001:5000 hello-python
現在導航到 https://:5001,您應該會看到“Hello from Python!”訊息。
更多資訊
在 Kubernetes 中執行
你終於準備好讓應用程式在 Kubernetes 中運行了。因為你有一個 Web 應用程式,所以你將建立一個服務和一個部署。
首先驗證你的 kubectl 是否已配置。在命令列中,輸入以下內容
kubectl version
如果您沒有看到帶有客戶端和伺服器版本的回應,則需要安裝並配置它。
如果您在 Windows 或 Mac 上執行,請執行以下命令,確保它使用 Docker for Desktop 上下文
kubectl config use-context docker-for-desktop
現在你正在使用 Kubernetes!你可以透過輸入以下命令來檢視節點
kubectl get nodes
現在讓我們執行應用程式。建立一個名為 deployment.yaml 的檔案,並新增以下內容,然後儲存
apiVersion: v1
kind: Service
metadata:
name: hello-python-service
spec:
selector:
app: hello-python
ports:
- protocol: "TCP"
port: 6000
targetPort: 5000
type: LoadBalancer
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-python
spec:
selector:
matchLabels:
app: hello-python
replicas: 4
template:
metadata:
labels:
app: hello-python
spec:
containers:
- name: hello-python
image: hello-python:latest
imagePullPolicy: Never
ports:
- containerPort: 5000
這個 YAML 檔案是告訴 Kubernetes 你想執行什麼應用程式的指令。它告訴 Kubernetes 以下內容
- 你想要一個暴露埠 6000 的負載均衡服務
- 您需要執行四個 hello-python 容器例項
使用 kubectl 執行以下命令將 YAML 檔案傳送到 Kubernetes
kubectl apply -f deployment.yaml
如果執行以下命令,您可以看到 pod 正在執行
kubectl get pods

現在導航到 https://:6000,您應該會看到“Hello from Python!”訊息。
就是這樣!應用程式現在正在 Kubernetes 中執行!
更多資訊
總結
在此演練中,我們容器化了一個應用程式,並使其在 Docker 和 Kubernetes 中執行。這個簡單的應用程式只是冰山一角(以及您需要學習的內容)。
後續步驟
如果您剛剛開始,並且本教程對您有用,那麼以下資源應該是您進一步擴充套件 Kubernetes 知識的良好下一步
- 微服務、Docker 和 Kubernetes 簡介 - James Quigley 55 分鐘影片
- 這是一個很好的起點,因為它提供了比我在此處提供的更多資訊。
- 使用 Docker 和 Kubernetes 容器化您的應用程式 - Gabriel N Schenker 博士的免費電子書
- 這是我最喜歡的關於 Docker 和 Kubernetes 的書籍。
- Kubernetes 學習路徑:從零到英雄 50 天 - 在微軟網站上
- 這是一個 10 頁的 PDF 文件,其中包含大量影片(由 Brendan Burns 主講)、文件站點以及一個非常棒的 Azure Kubernetes Service 研討會的連結。
如何在 Docker Desktop 中啟用 Kubernetes
安裝 Docker Desktop 後,開啟“設定”

選擇左側的Kubernetes選單項,並驗證啟用 Kubernetes是否已選中。如果未選中,請選中它並單擊右下角的應用按鈕
