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

開始使用 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

切換到應用程式目錄

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 庫。

本地執行

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

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 將會

  1. 從 Docker Hub 獲取官方 Python 基礎映象 3.7 版本。
  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

現在導航到 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
Pod listing

現在導航到 https://:6000,您應該會看到“Hello from Python!”訊息。

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

更多資訊

總結

在此演練中,我們容器化了一個應用程式,並使其在 Docker 和 Kubernetes 中執行。這個簡單的應用程式只是冰山一角(以及您需要學習的內容)。

後續步驟

如果您剛剛開始,並且本教程對您有用,那麼以下資源應該是您進一步擴充套件 Kubernetes 知識的良好下一步

如何在 Docker Desktop 中啟用 Kubernetes

安裝 Docker Desktop 後,開啟“設定”

Docker settings menu

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

Kubernetes tab