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

相关推荐
一点事4 小时前
docker:安装oracle 19c
docker·oracle·容器
安当加密5 小时前
Kubernetes Secret不安全?External Secrets Operator接入凭据管理服务实战,自动轮转零停机
安全·容器·kubernetes
用户1558319968146 小时前
文件同步冲突技术根因与解决方案:Last-Write-Wins、OT、CRDT对比
云原生
u0119608237 小时前
k8s-helm命令
linux·容器·kubernetes
qq_452396237 小时前
第四篇:《Docker 镜像:分层结构、拉取与推送》
运维·docker·容器
身如柳絮随风扬8 小时前
Docker 部署 Nginx:从入门到生产级配置实战
nginx·docker·容器
木雷坞8 小时前
dwz-server Docker 部署短链接服务:多域名、A/B 测试和统计配置
运维·docker·容器
亚空间仓鼠8 小时前
Docker容器化高可用架构部署方案(十六)
docker·容器·架构
qq_356408668 小时前
Kubernetes 部署 GitLab Runner 及 Java CI/CD 实践指南
java·kubernetes·gitlab