前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >开始在Kubernetes运行Python应用程序

开始在Kubernetes运行Python应用程序

作者头像
CNCF
发布2019-12-04 16:15:18
3.1K0
发布2019-12-04 16:15:18
举报
文章被收录于专栏:CNCFCNCF

作者:Jason Haley(独立顾问)

你知道你想要在Kubernetes中运行应用程序,但不知道从哪里开始。或者你刚刚开始,但不知道自己不知道什么。在本博客中,你将了解如何封装应用程序,并使其在Kubernetes运行。

此演练假定你是一名开发者,或者至少熟悉命令行(最好是bash shell)。

我们将会做的

  • 获取代码并在本地运行应用程序
  • 创建一个镜像并在Docker中运行应用程序
  • 创建deployment并在Kubernetes中运行应用程序

先决条件

  • Kubernetes环境 — 在本演练中,我使用Docker Desktop和Kubernetes,但是你可以使用其它环境。有关完整的环境清单,请参见Getting Started。
  • Python 3.7
  • Git https://www.docker.com/products/kubernetes https://kubernetes.io/docs/setup/

容器化应用程序

在本节中,你将获取一些源代码,验证它在本地运行,然后创建应用程序的Docker镜像。所使用的示例应用程序是一个非常简单的Flask web应用程序;如果要在本地测试它,需要安装Python。否则,你可以跳到“创建Dockerfile”部分。

获取应用程序代码

使用git将存储库克隆到本地机器:

代码语言:javascript
复制
git clone https://github.com/JasonHaley/hello-python.git

切换到app目录:

代码语言:javascript
复制
cd hello-python/app

这个目录中只有两个文件。如果你查看main.py文件,你将看到应用程序打印出一条hello消息。你可以在Flask网站了解更多关Flask的。

https://palletsprojects.com/p/flask/

代码语言:javascript
复制
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)在虚拟环境中安装依赖项。

本地运行

使用以下命令手动运行安装程序和应用程序:

代码语言:javascript
复制
pip install -r requirements.txt
python main.py

这将启动承载应用程序的开发web服务器,你可以通过导航到http://localhost:5000查看该应用程序。因为端口5000是开发服务器的默认端口,所以我们不需要指定它。

创建Dockerfile

现在你已经验证了源代码的工作原理,那么容器化应用程序的第一步就是创建Dockerfile。

在hello-python/app目录下,创建一个名为Dockerfile的文件,包含以下内容并保存:

代码语言:javascript
复制
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目录下,使用以下命令构建镜像:

代码语言:javascript
复制
docker build -f Dockerfile -t hello-python:latest .

注意:我在本例中使用的是:latest标记,如果你不熟悉它是什么,你可以阅读Docker: the latest Confusion。

https://container-solutions.com/docker-latest-confusion/

这将执行上面列出的七个步骤并创建镜像。要验证镜像是否已创建,请运行以下命令:

代码语言:javascript
复制
docker image ls

应用程序现在已经被容器化,这意味着它现在可以在Docker和Kubernetes中运行!

在Docker运行

在跳转到Kubernetes之前,让我们验证一下它在Docker中能否工作。运行以下命令让Docker在容器中运行应用程序并将其映射到端口5001:

代码语言:javascript
复制
docker run -p 5001:5000 hello-python

现在导航到http://localhost:5001,你应该会看到“Hello from Python!”消息。

在Kubernetes运行

你终于可以在Kubernetes中运行应用程序了。因为你有一个web应用程序,所以你将创建一个服务(service)和一个部署(deployment)。

首先验证你的kubectl配置好了。在命令行输入以下内容:

代码语言:javascript
复制
kubectl version

如果没有看到客户机和服务器版本的响应,则需要安装和配置它。

https://kubernetes.io/docs/tasks/tools/install-kubectl/

如果你在Windows或Mac上运行,请确保它在使用Docker for Desktop环境,方法如下:

代码语言:javascript
复制
kubectl config use-context docker-for-desktop

现在你在使用Kubernetes!你可以通过键入以下观看节点:

代码语言:javascript
复制
kubectl get nodes

现在让它运行应用程序。创建一个名为deployment.yaml的文件,添加以下内容,然后保存:

代码语言:javascript
复制
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:
  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:

代码语言:javascript
复制
kubectl apply -f deployment.yaml

如果执行以下命令,你可以看到pod正在运行:

代码语言:javascript
复制
kubectl get pods

现在导航到http://localhost:6000,你应该会看到“Hello from Python!”消息。

就是这样!该应用程序现在运行在Kubernetes!

更多信息

  • Get started with Docker https://docs.docker.com/get-started/
  • Best practices for writing Dockerfiles https://docs.docker.com/develop/develop-images/dockerfile_best-practices/
  • Docker Cheat Sheet https://www.docker.com/sites/default/files/Docker_CheatSheet_08.09.2016_0.pdf

总结

在这个演练中,我们容器化了一个应用程序,并让它在Docker和Kubernetes中运行。这个简单的应用程序只触及了更多可能性的皮毛(以及你需要学习的内容)。

下一步

如果你只是刚刚开始,并且这个演练对你很有用,那么下面的资源应该是你进一步扩展Kubernetes知识的好方法:

  • 微服务、Docker和Kubernetes介绍 - James Quigley的55分钟视频
    • 这是一个很好的开始,因为它提供了比我在这里所能提供的更多的信息。 https://www.youtube.com/watch?v=1xo-0gCVhTU
  • 使用Docker和Kubernetes容器化你的应用程序 - Gabriel N Schenker博士的免费电子书
    • 这是我最喜欢关于Docker和Kubernetes的书。 https://github.com/PacktPublishing/Containerize-your-Apps-with-Docker-and-Kubernetes
  • Kubernetes学习之路:50天与Kubernetes从零到英雄 - 在微软的网站
    • 这是一个10页的pdf,有大量的视频链接(与Brendan Burns)、文档站点,以及Azure Kubernetes服务的一个非常好的研讨会。 https://aka.ms/LearnKubernetes

如何在Docker桌面启用Kubernetes

安装好Docker桌面后,打开设置:

选择左边的Kubernetes菜单项,并验证是否选中了Enable Kubernetes。如果不是,选中它,点击右下角的Apply按钮:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CNCF 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档