https://opensource.com/article/18/1/running-python-application-kubernetes
作者 | Joannah Nanjekye
譯者 | qhwdw ? 共計翻譯:133 篇 貢獻時間:259 天
這個分步指導教程教你透過在 Kubernetes 上部署一個簡單的 Python 應用程式來學習部署的流程。
Kubernetes 是一個具備部署、維護和可伸縮特性的開源平臺。它在提供可移植性、可擴充套件性以及自我修複能力的同時,簡化了容器化 Python 應用程式的管理。
不論你的 Python 應用程式是簡單還是複雜,Kubernetes 都可以幫你高效地部署和伸縮它們,在有限的資源範圍內滾動升級新特性。
在本文中,我將描述在 Kubernetes 上部署一個簡單的 Python 應用程式的過程,它包括:
必需條件
你需要 Docker、kubectl
以及這個 原始碼[1]。
Docker 是一個構建和承載已釋出的應用程式的開源平臺。可以參照 官方檔案[2] 去安裝 Docker。執行如下的命令去驗證你的系統上執行的 Docker:
$ docker info
Containers: 0
Images: 289
Storage Driver: aufs
Root Dir: /var/lib/docker/aufs
Dirs: 289
Execution Driver: native-0.2
Kernel Version: 3.16.0-4-amd64
Operating System: Debian GNU/Linux 8 (jessie)
WARNING: No memory limit support
WARNING: No swap limit support
kubectl
是在 Kubernetes 叢集上執行命令的一個命令列介面。執行下麵的 shell 指令碼去安裝 kubectl
:
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:
FROM python:3.6
MAINTAINER XenonStack
# Creating Application Source Code Directory
RUN mkdir -p /k8s_python_sample_code/src
# Setting Home Directory for containers
WORKDIR /k8s_python_sample_code/src
# Installing python dependencies
COPY requirements.txt /k8s_python_sample_code/src
RUN pip install --no-cache-dir -r requirements.txt
# Copying src code to Container
COPY . /k8s_python_sample_code/src/app
# Application Environment variables
ENV APP_ENV development
# Exposing Ports
EXPOSE 5035
# Setting Persistent data
VOLUME ["/app-data"]
# Running Python Application
CMD ["python", "app.py"]
這個 Dockerfile 包含執行我們的示例 Python 程式碼的指令。它使用的開發環境是 Python 3.5。
構建一個 Python Docker 映象
現在,我們可以使用下麵的這個命令按照那些指令來構建 Docker 映象:
docker build -t k8s_python_sample_code .
這個命令為我們的 Python 應用程式建立了一個 Docker 映象。
釋出容器映象
我們可以將我們的 Python 容器映象釋出到不同的私有/公共雲倉庫中,像 Docker Hub、AWS ECR、Google Container Registry 等等。本教程中我們將釋出到 Docker Hub。
在釋出映象之前,我們需要給它標記一個版本號:
docker tag k8s_python_sample_code:latest k8s_python_sample_code:0.1
推送映象到一個雲倉庫
如果使用一個 Docker 註冊中心而不是 Docker Hub 去儲存映象,那麼你需要在你本地的 Docker 守護程式和 Kubernetes Docker 守護程式上新增一個容器註冊中心。對於不同的雲註冊中心,你可以在它上面找到相關資訊。我們在示例中使用的是 Docker Hub。
執行下麵的 Docker 命令去推送映象:
docker push k8s_python_sample_code
使用 CephFS 持久捲
Kubernetes 支援許多的持久儲存提供商,包括 AWS EBS、CephFS、GlusterFS、Azure Disk、NFS 等等。我在示例中使用 CephFS 做為 Kubernetes 的持久捲。
為使用 CephFS 儲存 Kubernetes 的容器資料,我們將建立兩個檔案:
persistent-volume.yml
:
apiVersion: v1
kind: PersistentVolume
metadata:
name: app-disk1
namespace: k8s_python_sample_code
spec:
capacity:
storage: 50Gi
accessModes:
- ReadWriteMany
cephfs:
monitors:
- "172.17.0.1:6789"
user: admin
secretRef:
name: ceph-secret
readOnly: false
persistent_volume_claim.yaml
:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: appclaim1
namespace: k8s_python_sample_code
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Gi
現在,我們將使用 kubectl
去新增持久捲並宣告到 Kubernetes 叢集中:
$ kubectl create -f persistent-volume.yml
$ kubectl create -f persistent-volume-claim.yml
現在,我們準備去部署 Kubernetes。
在 Kubernetes 上部署應用程式
為管理部署應用程式到 Kubernetes 上的最後一步,我們將建立兩個重要檔案:一個服務檔案和一個部署檔案。
使用下列的內容建立服務檔案,並將它命名為 k8s_python_sample_code.service.yml
:
apiVersion: v1
kind: Service
metadata:
labels:
k8s-app: k8s_python_sample_code
name: k8s_python_sample_code
namespace: k8s_python_sample_code
spec:
type: NodePort
ports:
- port: 5035
selector:
k8s-app: k8s_python_sample_code
使用下列的內容建立部署檔案並將它命名為 k8s_python_sample_code.deployment.yml
:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: k8s_python_sample_code
namespace: k8s_python_sample_code
spec:
replicas: 1
template:
metadata:
labels:
k8s-app: k8s_python_sample_code
spec:
containers:
- name: k8s_python_sample_code
image: k8s_python_sample_code:0.1
imagePullPolicy: "IfNotPresent"
ports:
- containerPort: 5035
volumeMounts:
- mountPath: /app-data
name: k8s_python_sample_code
volumes:
- name: <name of application>
persistentVolumeClaim:
claimName: appclaim1
最後,我們使用 kubectl
將應用程式部署到 Kubernetes:
$ kubectl create -f k8s_python_sample_code.deployment.yml $ kubectl create -f k8s_python_sample_code.service.yml
現在,你的應用程式已經成功部署到 Kubernetes。
你可以透過檢查執行的服務來驗證你的應用程式是否在執行:
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中國 榮譽推出