k8s入门2-将程序发部到k8s

k8s已经安装完成了,接下来就想实际使用一下了。

先把思路整理成一张简单的图:

通过设计图,可以看出来,主要由两部分组成,1部分是文件,2部分的命令。通过这两部分就可以完成任务。

首先我先创建一个app.py文件。

这个就是实际需要执行的业务。这里是一个hello world的简单小程序。

复制代码
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, Kubernetes!'

@app.route('/health')
def health_check():
    return 'OK', 200

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

第2步为了使程序运行起来,需要配置python运行环境。通过requirements.txt文件来实现,文件内容如下:

复制代码
Flask==2.3.3

命令行安装一下环境

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

接下来,先在本地测试一下。python app.py

* Running on all addresses (0.0.0.0)

* Running on http://127.0.0.1:5000

* Running on http://192.168.33.74:5000

Press CTRL+C to quit

如果可以看到以上信息,则说明测试成功了。

接下来,我们创建docker镜像。

创建dockerfile.

复制代码
FROM python:3.10-slim

WORKDIR /app

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

COPY app.py .

EXPOSE 5000

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

创建镜像

docker build -t hello-k8s:latest .

复制代码
(TraeAI-4) D:\LEO\project\test3\k8s-test [1:0] $ docker build -t hello-k8s:latest .
[+] Building 0.3s (10/10) FINISHED                                                    docker:desktop-linux
 => [internal] load build definition from Dockerfile                                                  0.0s
 => => transferring dockerfile: 204B                                                                  0.0s 
 => [internal] load metadata for docker.io/library/python:3.10-slim                                   0.1s 
 => [internal] load .dockerignore                                                                     0.0s 
 => => transferring context: 2B                                                                       0.0s 
 => [1/5] FROM docker.io/library/python:3.10-slim@sha256:70f65c721aaddfb22b20ed6ec12606c59d9592493c5  0.0s 
 => => resolve docker.io/library/python:3.10-slim@sha256:70f65c721aaddfb22b20ed6ec12606c59d9592493c5  0.0s 
 => [internal] load build context                                                                     0.0s 
 => => transferring context: 85B                                                                      0.0s 
 => CACHED [2/5] WORKDIR /app                                                                         0.0s
 => CACHED [3/5] COPY requirements.txt .                                                              0.0s 
 => CACHED [4/5] RUN pip install --no-cache-dir -r requirements.txt                                   0.0s 
 => CACHED [5/5] COPY app.py .                                                                        0.0s 
 => exporting to image                                                                                0.1s 
 => => exporting layers                                                                               0.0s 
 => => exporting manifest sha256:14484ee5ad887573cfd12ac62cbf7eb5547ff03226021a1c4234d5e12b02f89b     0.0s 
 => => exporting config sha256:d69d28bf3d152a2e5b862be56583bac59c13ab81873688aa94be4c2403458c43       0.0s 
 => => exporting attestation manifest sha256:3752a877e2f72a934e2ab20ebba7f2c45da6956a44e5fbe16a3c035  0.0s 
 => => exporting manifest list sha256:1f6514df860bdc38626c9989bbacd3884019f056e3a70aeb84db30f89ad0b2  0.0s 
 => => naming to docker.io/library/hello-k8s:latest                                                   0.0s 
 => => unpacking to docker.io/library/hello-k8s:latest  

如果可以看到以上信息,则也说明镜像创建成功了。

最后启动k8s命令如下:

准备k8s用到的配置文件deployment.yaml

复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-k8s-deployment
  labels:
    app: hello-k8s
spec:
  replicas: 3
  selector:
    matchLabels:
      app: hello-k8s
  template:
    metadata:
      labels:
        app: hello-k8s
    spec:
      containers:
      - name: hello-k8s
        image: hello-k8s:latest
        ports:
        - containerPort: 5000
        livenessProbe:
          httpGet:
            path: /health
            port: 5000
          initialDelaySeconds: 5
          periodSeconds: 10
        readinessProbe:
          httpGet:
            path: /health
            port: 5000
          initialDelaySeconds: 5
          periodSeconds: 5
---
apiVersion: v1
kind: Service
metadata:
  name: hello-k8s-service
spec:
  type: NodePort
  selector:
    app: hello-k8s
  ports:
  - protocol: TCP
    port: 80
    targetPort: 5000
    nodePort: 30007

启动这个配置

kubectl apply -f deployment.yaml

复制代码
(TraeAI-4) D:\LEO\project\test3\k8s-test [0:0] $ kubectl apply -f deployment.yaml
deployment.apps/hello-k8s-deployment unchanged
service/hello-k8s-service unchanged

如果看到以上输出则说明已经成功了。

整体回顾一下

第一步准备要运行的程序,确保本地可以运行。

第二步创建docker镜像,这步需要准备dockerfile文件。

第三步部署到k8s上,这步需要development这个文件。

以上三部完成,就成功的在k8s上部署了一个自己开发的应用了。

相关推荐
java_logo35 分钟前
Docker 部署 go2rtc:轻松搭建摄像头多协议流媒体平台
运维·docker·容器·摄像头·rtsp·轩辕镜像·go2rtc
哈__2 小时前
KES-Operator正式发布:基于Kubernetes的数据库集群云原生全生命周期管理方案
数据库·云原生·kubernetes
nxb5562 小时前
云原生:kubernetes的service
微服务·云原生·容器·kubernetes
ZzzZZzzzZZZzzzz…2 小时前
K8s---组件
运维·云原生·容器·kubernetes·k8s·k8s组件
行业研究员2 小时前
云原生数据库推荐排行与选型
数据库·云原生·云原生库
陈皮糖..2 小时前
基于 Kubernetes 与 GitLab CI/CD 的云原生自动化交付平台
运维·ci/cd·云原生·架构·kubernetes·自动化·gitlab
gs801403 小时前
Docker Desktop 报 Wsl/CommandTimedOut、wsl -l -v 卡死、0x80080005 的完整排查与解决
运维·docker·容器
分布式存储与RustFS3 小时前
把 RustFS 当 ClickHouse 的 S3 存储盘:冷热分层落对象存储
云原生·开源·对象存储·分布式存储·s3·rustfs·性能基准
cui_hao_nan3 小时前
Kubernetes 核心概念总结
云原生·容器·kubernetes
芷栀夏3 小时前
开源菜谱工具 cook 实践:按食材筛选菜谱、随机推荐,并用 Docker 部署到本地
docker·容器·开源