這篇文章已超過一年。較舊的文章可能包含過時的內容。請檢查頁面中的資訊自發布以來是否已變得不正確。

Kubernetes 入門指南 (使用 Python)

所以,您知道您想在 Kubernetes 中運行您的應用程式,但不知道從哪裡開始。或者也許您已經開始入門,但仍然不知道您不知道什麼。在本網誌中,您將逐步了解如何容器化應用程式並使其在 Kubernetes 中運行。

本逐步指南假設您是開發人員,或者至少熟悉命令列(最好是 bash shell)。

我們將會做什麼

  1. 取得程式碼並在本機運行應用程式
  2. 建立映像檔並在 Docker 中運行應用程式
  3. 建立部署並在 Kubernetes 中運行應用程式

先決條件

容器化應用程式

在本節中,您將取得一些原始程式碼,驗證它在本機運行,然後建立應用程式的 Docker 映像檔。使用的範例應用程式是一個非常簡單的 Flask Web 應用程式;如果您想在本機測試它,您需要安裝 Python。否則,您可以跳到「建立 Dockerfile」章節。

取得應用程式程式碼

使用 git 將儲存庫複製到您的本機電腦

git clone https://github.com/JasonHaley/hello-python.git

變更到 app 目錄

cd hello-python/app

此目錄中只有兩個檔案。如果您查看 main.py 檔案,您會看到應用程式印出一個 Hello 訊息。您可以在 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 庫。

在本機運行

使用以下命令手動運行安裝程式和應用程式

pip install -r requirements.txt
python main.py

這將啟動一個託管您的應用程式的開發 Web 伺服器,您可以透過瀏覽至 http://localhost:5000 來查看。因為 port 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 將會

  1. 從 Docker Hub 取得適用於 3.7 版本的官方 Python 基礎映像檔
  2. 在映像檔中,建立一個名為 app 的目錄。
  3. 將工作目錄設定為新的 app 目錄。
  4. 將本機目錄的內容複製到映像檔中的新資料夾中。
  5. 運行 pip 安裝程式(就像我們之前做的那樣)以將需求拉取到映像檔中。
  6. 告知 Docker 容器監聽端口 5000。
  7. 配置容器啟動時使用的啟動命令。

建立映像檔

在您的命令列或 shell 中,於 hello-python/app 目錄中,使用以下命令建構映像檔

docker build -f Dockerfile -t hello-python:latest .

這將執行上面列出的七個步驟並建立映像檔。要驗證映像檔是否已建立,請運行以下命令

docker image ls
Docker image listing

應用程式現在已容器化,這表示它現在可以在 Docker 和 Kubernetes 中運行!

在 Docker 中運行

在跳入 Kubernetes 之前,讓我們先驗證它在 Docker 中是否可以運作。運行以下命令,讓 Docker 在容器中運行應用程式並將其映射到端口 5001

docker run -p 5001:5000 hello-python

現在瀏覽至 http://localhost: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
Pod listing

現在瀏覽至 http://localhost:6000,您應該會看到「Hello from Python!」訊息。

就是這樣!應用程式現在正在 Kubernetes 中運行!

更多資訊

摘要

在本逐步指南中,我們容器化了一個應用程式,並使其在 Docker 和 Kubernetes 中運行。這個簡單的應用程式僅觸及了可能性的表面(以及您需要學習的內容)。

下一步

如果您剛開始入門,並且本逐步指南對您很有用,那麼以下資源應該是您進一步擴展 Kubernetes 知識的良好下一步

如何在 Docker Desktop 中啟用 Kubernetes

安裝 Docker Desktop 後,開啟「設定」

Docker settings menu

在左側選取 Kubernetes 選單項目,並驗證是否已勾選 啟用 Kubernetes。如果沒有,請勾選它並點擊右下角的 套用 按鈕

Kubernetes tab