Kubernetes 部署发布镜像(cubefile:0.4.0)

目录

实验:部署发布镜像(cubefile:0.4.0)

需求分析:

1、部署Kubenetes环境:

2、撰写 cubefile-deployment.yaml 文件

代码解释:

遇到的问题:

问题解决 :

3、撰写 cubefile-service.yaml 文件

代码解释:

遇到的问题:

4、最后测验

查看端口和进程:​编辑

浏览器访问:​编辑


实验:部署发布镜像(cubefile:0.4.0)

需求分析:

部署一个关于cubefile镜像的deployment

其中包含了2个副本,1CPU,2G内存,并创建暴露一个host port 的service服务

固定端口为8088:31326

1、部署Kubenetes环境:

参考:Kubernetes的介绍(组件、Pod)和 安装使用_Claylpf的博客-CSDN博客

2、撰写 cubefile-deployment.yaml 文件

(base) root@sd-cluster-04:~# cat cubefile-deployment.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: cubefile-deployment
  namespace: cubechat
spec:
  replicas: 2  
  selector:
    matchLabels:
      app: cubefile
  template:
    metadata:
      labels:
        app: cubefile
    spec:
      containers:
      - name: cubefile
        image: cubefile:0.4.0
        resources:
          requests:
            cpu: "1"
            memory: "2Gi"
        command: ["poetry", "run", "python"]
        args: ["cubefile/main.py"]    
(base) root@sd-cluster-04:~# 

代码解释:

apiVersion: apps/v1  # 使用的Kubernetes API版本
kind: Deployment  # 定义一个Deployment对象

metadata:  # 元数据,包含Deployment的名称和所在的命名空间
  name: cubefile-deployment  # Deployment的名称
  namespace: cubechat  # 部署所在的命名空间

spec:  # 指定Deployment的规范
  replicas: 2  # 指定要创建的Pod副本数,这里是2,表示要创建两个相同的Pod副本

  selector:  # 指定用于选择要管理的Pod的标签选择器
    matchLabels:  # 使用标签选择器匹配Pod
      app: cubefile  # 标签选择器,选择具有标签"app: cubefile"的Pod

  template:  # 指定要创建的Pod的模板
    metadata:  # 模板的元数据,包括Pod的标签
      labels:  # 定义Pod的标签,用于与Deployment中的标签选择器匹配
        app: cubefile  # Pod的标签,与Deployment中的标签选择器匹配

    spec:  # 指定Pod的规范
      containers:  # 定义Pod中的容器
      - name: cubefile  # 容器的名称
        image: cubefile:0.4.0  # 指定要使用的Docker镜像(自定义镜像)
        resources:  # 定义容器的资源请求和限制
          requests:  # 定义资源请求
            cpu: "1"  # 请求1个CPU单位
            memory: "2Gi"  # 请求2GB内存
        command: ["poetry", "run", "python"]  # 容器启动时执行的命令
        args: ["cubefile/main.py"]  # 启动命令的参数

遇到的问题:

其中比较重要的部分是我使用了 command: ["poetry", "run", "python"] (容器启动时执行的命令)
和args: ["cubefile/main.py"]  (启动命令的参数),目的是用于代替镜像中错误的运行命令

在部署过程中遇到的错误:

其实就是找不到/app/cuebfile/main.py文件

但是我进入镜像中,发现目录是:

所以是镜像中的运行地址输入错误了

Kubernetes 部署发布镜像(cubefile:0.4.0)_第1张图片

问题解决 :

可以更改错误的方式有两种,一种是修改Dockerfile文件,重新打包镜像,但是问题是,如果这个镜像是别人上传到镜像库中的,你无法修改镜像,那应该怎么办呢,那么你就应该想到使用Kubernetes里面的命令来解决了。

所以我使用了 command和args命令的组合,替代了错误的CMD命令,从而实现镜像正常的部署。

3、撰写 cubefile-service.yaml 文件

(base) root@sd-cluster-04:~# cat cubefile-service.yaml 
apiVersion: v1
kind: Service
metadata:
  name: cubefile-service
  namespace: cubechat  
  labels:
    app: cubefile
spec:
  type: NodePort
  selector:
    app: cubefile
  ports:
    - protocol: TCP
      port: 8088
      targetPort: 8088
      nodePort: 31326
(base) root@sd-cluster-04:~# 

代码解释:

apiVersion: v1  # 使用的Kubernetes API版本
kind: Service  # 定义一个Service对象

metadata:  # 元数据,包含Service的名称和所在的命名空间
  name: cubefile-service  # Service的名称
  namespace: cubechat  # Service所在的命名空间

  labels:  # 定义Service的标签,用于与其他资源关联
    app: cubefile  # Service的标签,用于与与之匹配的Pod关联

spec:  # 指定Service的规范
  type: NodePort  # 指定Service的类型为NodePort,这将使Service通过Node上的端口暴露服务

  selector:  # 指定用于选择要关联的Pod的标签选择器
    app: cubefile  # 标签选择器,选择具有标签"app: cubefile"的Pod

  ports:  # 指定Service要监听的端口配置
    - protocol: TCP  # 指定协议为TCP
      port: 8088  # Service监听的端口
      targetPort: 8088  # Service路由到的Pod的端口
      nodePort: 31326  # NodePort,用于暴露Service的端口到每个Node上的指定端口

遇到的问题:

其中遇到了一个问题,就是在定义port: 8088(Service监听的端口)和targetPort: 8088(Service路由到的Pod的端口)的时候,必须是我们Pod内容器打开的端口,如nginx默认打开80,Mysql默认打开3306,redis默认打开6379,必须要确定容器或者程序打开的端口,否则就会访问不到,最后通过nodePort固定端口即可。

4、最后测验

查看端口和进程:

浏览器访问:Kubernetes 部署发布镜像(cubefile:0.4.0)_第2张图片

你可能感兴趣的:(kubernetes,容器,云原生)