一、制作docker镜像
参考往期文章:
采用docker部署含有qt界面的Python项目教程_docker pyqt6-CSDN博客
docker部署含深度学习模型的python项目(gpu加速)_docker 部署python项目使用宿主机的显卡-CSDN博客
二、构建pod
1、编写自己的deployment.yaml文件
deployment.yaml文件参数主要分为四大部分:
- apiVersion: 表示版本
- kind: 表示资源
- metadata: 表示元信息
- spec: 资源规范字段
详细参数说明:
必要参数:
参数名称 | 数据类型 | 注释 |
version | string | 指kubernetes api的版本,基本都是v1,所以默认v1就可以,也可以通过kubectl api-version命令查询到 |
kind | string | 指yaml文件定义的资源类型,比如pod,Deployment等 |
metadata | object | 元数据对象 |
metadata.name | string | 元数据对象的名字,自己定义,比如当你构建Pod的时候,这里就是你自定义Pod的名称 |
metadata.namespace | string | 元数据对象的命名空间,可以自定义,如果不自定义则默认default为命名空间 |
spec | object | 详细定义对象,它的参数主要针对容器,镜像进行一些指定和说明 |
spec.containers[] | list | 容器列表定义,自定义容器信息 |
spec.containers[].name | string | 自定义容器的名字 |
spec.containers[].image | string | 指定要用到的镜像名称,注意这里不可以随意自定义,要保证你的镜像可以通过docker拉取到 |
主要参数:
参数名称 | 数据类型 | 注释 | |
spec.containers[].name | string | 容器名称 | |
spec.containers[].image | string | 指定要用到的镜像名称,注意这里不可以随意自定义,要保证你的镜像可以通过docker拉取到 | |
spec.containers[].imagePullPolicy | string | 定义拉取镜像策略,有三种选择,Always,Never,IfNotPresent | |
spec.containers[].command[] | list | 指定容器启动命令,因为是数组可以指定多个,不指定则使用镜像打包时使用的启动命令。 | |
spec.containers[].args[] | list |
| |
spec.containers[].workingDir | string | 指定容器的工作目录,进入容器时默认所在的目录 | |
spec.containers[].volumeMounts[] | list | 指定容器内部的存储卷配置 | |
spec.containers[].volumeMounts[].name | String | 容器挂载的存储卷的名字 | |
spec.containers[].volumeMounts[].mountPath | string | 容器挂载的存储卷的路径 | |
spec.containers[].volumeMounts[].readOnly | string | 存储卷路径的读写模式,值为true或false,默认为true | |
spec.containers[].ports[] | list | 指定容器需要用到的端口列表 | |
spec.containers[].ports[].name | string | 自定义端口名称 | |
spec.containers[].ports[].containerPort | string | 指定要监听的端口号 | |
spec.containers[].ports[].hostPort | string | 指定容器所在主机需要监听的端口号,默认跟上面containerPort相同,注意设置了hostPort同一台主机无法启动该容器的相同副本(因为主机的端口号不能相同,这样会冲突)所以一般不设置这个参数 | |
spec.containers[].ports[].protocol | string | 指定通信协议,有 TCP和UDP两种选择,默认为TCP | |
spec.containers[].env[] | list | 指定容器运行前需设置的环境变量列表 | |
spec.containers[].env[].name | string | 环境名称 | |
spec.containers[].env[].value | string | 环境变量值 | |
spec.containers[].resources | object | 设置容器的资源限制范围 | |
spec.containers[].resources.limits | object | 设置容器的资源上线 | |
spec.containers[].resources.requests | object | 指定设置容器运行时资源的运行下限 | |
spec.containers[].resources.limits.cpu | string | 指定CPU的限制,单位为core数,1000为一个核心 | |
spec.containers[].resources.limits.memory | string | 指定运行内存限制,例如:100Mi(100兆) | |
spec.containers[].resources.requests.cpu | string | 指定CPU的限制,单位为core数,1000为一个核心 | |
spec.containers[].resources.requests.memory | string | 指定运行内存限制,例如:100Mi(100兆) |
其他属性:
参数名称 | 数据类型 | 注释 |
spec.restartPolicy | string | 定义Pod的重启策略,可选值为Always、OnFailure和Never默认值为Always。 |
spec.nodeSelector | object | 指定Node节点去运行pod,格式为key:value |
spec.imagePullSecrets | object | 定义pull镜像时使用secret名称,以name:secretkey格式指定 |
spec.hostNetwork | bool | 定义是否使用主机网络模式,默认值为false。设置true表示使用宿主机网络,不使用docker0网桥,同时设置了true将无法在同一台宿主机上启动第二个副本 |
deployment.yaml模板
apiVersion: v1
kind: Pod
metadata:
name: deployment-pod3
labels:
type: app
version: 1.0.0
namespace: 'default'spec:
containers:
- name: deployment-pod1
image: nextcloud
imagePullPolicy: IfNotPresent
ports:
- name: http
containerPort: 80
protocol: TCP
env:
- name: JVM_OPTS
value: '-Xms128m -Xmx128m'
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 200m
memory: 256Mi
restartPolicy: OnFailure
2、创建并分配Pod
sudo kubectl create -f deployment.yaml
三、查看Pod状态
sudo kubectl get pod #查看Pod运行状态
sudo kubectl get pod -owide #查看pod详细信息
sudo kuebctl describe pod <pod名> #查看pod创建的详细信息,以及事件