歡迎光臨
每天分享高質量文章

在 Kubernetes 上執行一個 Python 應用程式 | Linux 中國

這個分步指導教程教你透過在 Kubernetes 上部署一個簡單的 Python 應用程式來學習部署的流程。
— Joannah Nanjekye


致謝
編譯自 | 
https://opensource.com/article/18/1/running-python-application-kubernetes
 
 作者 | Joannah Nanjekye
 譯者 | qhwdw ? 共計翻譯:133 篇 貢獻時間:259 天

這個分步指導教程教你透過在 Kubernetes 上部署一個簡單的 Python 應用程式來學習部署的流程。

Kubernetes 是一個具備部署、維護和可伸縮特性的開源平臺。它在提供可移植性、可擴充套件性以及自我修複能力的同時,簡化了容器化 Python 應用程式的管理。

不論你的 Python 應用程式是簡單還是複雜,Kubernetes 都可以幫你高效地部署和伸縮它們,在有限的資源範圍內滾動升級新特性。

在本文中,我將描述在 Kubernetes 上部署一個簡單的 Python 應用程式的過程,它包括:

◈ 建立 Python 容器映象
◈ 釋出容器映象到映象註冊中心
◈ 使用持久捲
◈ 在 Kubernetes 上部署 Python 應用程式

必需條件

你需要 Docker、kubectl 以及這個 原始碼[1]

Docker 是一個構建和承載已釋出的應用程式的開源平臺。可以參照 官方檔案[2] 去安裝 Docker。執行如下的命令去驗證你的系統上執行的 Docker:

  1. $ docker info

  2. Containers: 0

  3. Images: 289

  4. Storage Driver: aufs

  5.  Root Dir: /var/lib/docker/aufs

  6.  Dirs: 289

  7. Execution Driver: native-0.2

  8. Kernel Version: 3.16.0-4-amd64

  9. Operating System: Debian GNU/Linux 8 (jessie)

  10. WARNING: No memory limit support

  11. WARNING: No swap limit support

kubectl 是在 Kubernetes 叢集上執行命令的一個命令列介面。執行下麵的 shell 指令碼去安裝 kubectl

  1. curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl

部署到 Kubernetes 的應用要求必須是一個容器化的應用程式。我們來回顧一下 Python 應用程式的容器化過程。

一句話瞭解容器化

容器化是指將一個應用程式所需要的東西打包進一個自帶作業系統的容器中。這種完整機器虛擬化的好處是,一個應用程式能夠在任何機器上執行而無需考慮它的依賴項。

我們以 Roman Gaponov 的 文章[3] 為參考,來為我們的 Python 程式碼建立一個容器。

建立一個 Python 容器映象

為建立這些映象,我們將使用 Docker,它可以讓我們在一個隔離的 Linux 軟體容器中部署應用程式。Docker 可以使用來自一個 Dockerfile 中的指令來自動化構建映象。

這是我們的 Python 應用程式的 Dockerfile:

  1. FROM python:3.6

  2. MAINTAINER XenonStack

  3. # Creating Application Source Code Directory

  4. RUN mkdir -p /k8s_python_sample_code/src

  5. # Setting Home Directory for containers

  6. WORKDIR /k8s_python_sample_code/src

  7. # Installing python dependencies

  8. COPY requirements.txt /k8s_python_sample_code/src

  9. RUN pip install --no-cache-dir -r requirements.txt

  10. # Copying src code to Container

  11. COPY . /k8s_python_sample_code/src/app

  12. # Application Environment variables

  13. ENV APP_ENV development

  14. # Exposing Ports

  15. EXPOSE 5035

  16. # Setting Persistent data

  17. VOLUME ["/app-data"]

  18. # Running Python Application

  19. CMD ["python", "app.py"]

這個 Dockerfile 包含執行我們的示例 Python 程式碼的指令。它使用的開發環境是 Python 3.5。

構建一個 Python Docker 映象

現在,我們可以使用下麵的這個命令按照那些指令來構建 Docker 映象:

  1. docker build -t k8s_python_sample_code .

這個命令為我們的 Python 應用程式建立了一個 Docker 映象。

釋出容器映象

我們可以將我們的 Python 容器映象釋出到不同的私有/公共雲倉庫中,像 Docker Hub、AWS ECR、Google Container Registry 等等。本教程中我們將釋出到 Docker Hub。

在釋出映象之前,我們需要給它標記一個版本號:

  1. docker tag k8s_python_sample_code:latest k8s_python_sample_code:0.1

推送映象到一個雲倉庫

如果使用一個 Docker 註冊中心而不是 Docker Hub 去儲存映象,那麼你需要在你本地的 Docker 守護程式和 Kubernetes Docker 守護程式上新增一個容器註冊中心。對於不同的雲註冊中心,你可以在它上面找到相關資訊。我們在示例中使用的是 Docker Hub。

執行下麵的 Docker 命令去推送映象:

  1. docker push k8s_python_sample_code

使用 CephFS 持久捲

Kubernetes 支援許多的持久儲存提供商,包括 AWS EBS、CephFS、GlusterFS、Azure Disk、NFS 等等。我在示例中使用 CephFS 做為 Kubernetes 的持久捲。

為使用 CephFS 儲存 Kubernetes 的容器資料,我們將建立兩個檔案:

persistent-volume.yml :

  1. apiVersion: v1

  2. kind: PersistentVolume

  3. metadata:

  4.  name: app-disk1

  5.  namespace: k8s_python_sample_code

  6. spec:

  7.  capacity:

  8.  storage: 50Gi

  9.  accessModes:

  10.  - ReadWriteMany

  11.  cephfs:

  12.  monitors:

  13.    - "172.17.0.1:6789"

  14.  user: admin

  15.  secretRef:

  16.    name: ceph-secret

  17.  readOnly: false

persistent_volume_claim.yaml

  1. apiVersion: v1

  2. kind: PersistentVolumeClaim

  3. metadata:

  4.  name: appclaim1

  5.  namespace: k8s_python_sample_code

  6. spec:

  7.  accessModes:

  8.  - ReadWriteMany

  9.  resources:

  10.  requests:

  11.    storage: 10Gi

現在,我們將使用 kubectl 去新增持久捲並宣告到 Kubernetes 叢集中:

  1. $ kubectl create -f persistent-volume.yml

  2. $ kubectl create -f persistent-volume-claim.yml

現在,我們準備去部署 Kubernetes。

在 Kubernetes 上部署應用程式

為管理部署應用程式到 Kubernetes 上的最後一步,我們將建立兩個重要檔案:一個服務檔案和一個部署檔案。

使用下列的內容建立服務檔案,並將它命名為 k8s_python_sample_code.service.yml

  1. apiVersion: v1

  2. kind: Service

  3. metadata:

  4.  labels:

  5.  k8s-app: k8s_python_sample_code

  6.  name: k8s_python_sample_code

  7.  namespace: k8s_python_sample_code

  8. spec:

  9.  type: NodePort

  10.  ports:

  11.  - port: 5035

  12.  selector:

  13.  k8s-app: k8s_python_sample_code

使用下列的內容建立部署檔案並將它命名為 k8s_python_sample_code.deployment.yml

  1. apiVersion: extensions/v1beta1

  2. kind: Deployment

  3. metadata:

  4.   name: k8s_python_sample_code

  5.   namespace: k8s_python_sample_code

  6. spec:

  7.   replicas: 1

  8.   template:

  9.   metadata:

  10.     labels:

  11.     k8s-app: k8s_python_sample_code

  12.   spec:

  13.     containers:

  14.     - name: k8s_python_sample_code

  15.       image: k8s_python_sample_code:0.1

  16.       imagePullPolicy: "IfNotPresent"

  17.       ports:

  18.       - containerPort: 5035

  19.       volumeMounts:

  20.         - mountPath: /app-data

  21.           name: k8s_python_sample_code

  22.      volumes: 

  23.          - name: <name of application>

  24.            persistentVolumeClaim:

  25.              claimName: appclaim1

最後,我們使用 kubectl 將應用程式部署到 Kubernetes:

  1. $ kubectl create -f k8s_python_sample_code.deployment.yml $ kubectl create -f k8s_python_sample_code.service.yml

現在,你的應用程式已經成功部署到 Kubernetes。

你可以透過檢查執行的服務來驗證你的應用程式是否在執行:

  1. kubectl get services

或許 Kubernetes 可以解決未來你部署應用程式的各種麻煩!

想學習更多關於 Python 的知識?Nanjekye 的書,和平共處的 Python 2 和 3[4] 提供了完整的方法,讓你寫的程式碼在 Python 2 和 3 上完美執行,包括如何轉換已有的 Python 2 程式碼為能夠可靠執行在 Python 2 和 3 上的程式碼的詳細示例。

關於作者

Joannah Nanjekye - Straight Outta 256,只要結果不問原因,充滿激情的飛行員,喜歡用程式碼說話。關於我的更多資訊[5]


via: https://opensource.com/article/18/1/running-python-application-kubernetes

作者:Joannah Nanjekye [5] 譯者:qhwdw 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

贊(0)

分享創造快樂

© 2024 知識星球   網站地圖