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上部署了一个自己开发的应用了。

相关推荐
阿里云云原生2 小时前
将内核专家经验封装进 Agent:SysOM 巡检 Skill 开源,赋能你的运维自动化闭环
云原生
自律懒人3 小时前
AI应用从原型到上线的最后一公里——灵光闪应用一键部署深度实测,30+免费API + Serverless零配置发布
人工智能·云原生·开源·serverless
程序喵大人4 小时前
【C++进阶】STL容器与迭代器 - 05 map 和 set 为什么按键保持有序
开发语言·c++·容器·迭代器·stl
风曦Kisaki5 小时前
Kubernetes(K8s)笔记Day03: Pod命名空间,标签,Pod 的调度,污点与容忍度,Pod 常见状态和重启策略,Pod 生命周期
linux·运维·笔记·docker·云原生·容器·kubernetes
张忠琳5 小时前
【NVIDIA】NVIDIA k8s-device-plugin v0.19.3 资源管理器模块深度分析之三
云原生·容器·架构·kubernetes·nvidia
Chengbei117 小时前
云安全漏洞挖掘SKILL、一站式云漏洞挖掘工具,支持S3爆破、IMDS探测、K8s检测与AK/SK权限利用
前端·人工智能·网络安全·云原生·容器·kubernetes·系统安全
Ai拆代码的曹操8 小时前
K8s 调度器 predicate 阶段揭秘:为什么你的 Pod 总是堆在同一台机器
后端·容器
Ai拆代码的曹操8 小时前
手摸手排查:Pod CrashLoopBackOff 日志丢失问题,3 层兜底方案
后端·容器
瞬间&永恒~9 小时前
【MySQL】练习5-1:配置慢查询日志
linux·运维·云原生
张忠琳9 小时前
【NVIDIA】k8s-device-plugin v0.19.3 — CDI / MIG / vGPU 模块超深度代码分析之五
云原生·容器·架构·kubernetes·nvidia