isula+k8s实践记录2——使用yaml文件创建pod
先生成一个yaml文件,然后在这个文件的基础上进行修改,生成yaml的命令是:
kubectl run webserver --image=nginx:1.21 -o yaml --dry-run=client
[root@isula01 ~]# kubectl run webserver --image=nginx:1.21 -o yaml --dry-run=client
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: webserver
name: webserver
spec:
containers:
- image: nginx:1.21
name: webserver
resources: {}
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}
yaml文件中需要包含的内容:
1 pod的名称
2 pod所属的namespace
3 容器的名称和标签
4 容器的注解
5 容器使用的镜像
6 容器的资源限制
7 容器需要向外暴露的端口
8 容器拉取镜像的策略
9 容器启动时需要执行的指令
10 容器的重启策略
11 容器的dns配置
12 容器的环境变量
13 容器需要挂载的持久存储
14 容器的网络
15 如何初始化容器
16 容器的健康
17 pod中运行多个容器
#####这里是gvk,相当于k8s为各个对象提供的API,用来定位对象资源,使用命令“kubectl api-resource”查询
apiVersion: v1
kind: Pod
metadata:
name: busybox #####pod的名称
namespace: test #####pod所在的命名空间
spec: volumes: #####将本地文件挂载给容器
- name: test #####要挂载卷的名称,这个名称要和后面的volumeMounts中的名字对应,k8s就是根据这个名字来识别要挂载的路径或者文件
hostPath: #####挂载的方式,常用的有hostPath和emptyDir,hostPath是指将宿主上的某个路径挂载给容器,emptyDir是指在宿主机上随机生成一个目录,共pod中容器产生和消费数据,这个路径随着容器消失也会消失
path: /data #####要挂载的路径
dnsPolicy: Default #####容器的DNS策略,常用的有两种,一种是Default,表示使用宿主机的DNS服务器,一种是ClusterFirst,表示使用k8s集群内的coredns。第二种是默认
restartPolicy: Never #####容器的重启策略,一共有三种,分别是Never、OnFailure、Always
containers: #####容器相关的配置
- image: busybox #####容器所使用的的景象
name: busybox #####容器的名称 resources: #####资源限制
requests: #####最低保障 cpu: 0.1 memory: 31Mi limits: #####资源限制 cpu: 0.1 memory: 31Mi
readOnly: false
command: #####容器启动后所执行的命令,除了command,还可以有args,表示传递给容器镜像endpoint的参数
- /bin/sh
- -c
- "sleep 3600"
startupProbe:
#######容器探活机制,一共有三种探活机制,分别是startProbe、livenessProbe和readinessProbe。其中startProbe是启动阶段的探活,也就是说用来检测容器是否成功启动了,使用这种探针的时候我们基本上可以预判到失败,当探测中指定的任务成功后,表示容器成功启动,这个任务也就终止了,如果超过探测的次数,它会讲容器杀掉。第二个是livenessProbe,是运行阶段的探活,也就是检测容器是否还在成功运行,这种探针所执行的任务是可以预判到成功的,如果失败,表示容器运行不正常了,然后将容器杀掉。最后一种是readinessProbe,它和livenessProbe一样,也是运行阶段的探活,但是它发现容器不正常时,只是将容器的状态改为未就绪。
tcpSocket: #####探活的类型,常见有三种,分别是tcpSocket(基于端口)、exec(基于命令)和httpGet(基于http)
port:80
initialDelaySeconds:容器启动后要等待多少秒后存活
perriodSeconds:执行探测的时间间隔,默认是10秒,最小值是1秒
timeoutSecond:探测超时后等待多少秒,相当于是执行一次探活任务,系统等待对方回应的时间,超出这个时间,则认为任务失败,默认值是1,最小值是1
successThreshold:探测连续多少次成功,则认为pod启动成功
failureThreshold:探测联系多少次失败,则认为pod启动失败
imagePullPolicy: Always #####容器镜像的拉取策略,有三种,分别是Always、IfNotPresent、Never,为了保证容器启动时使用的最新镜像,在生产中,建议使用Always volumeMounts:
- name: test #####和上面的名称对应
mountPath: /usr/share/nginx/html #########要挂载到容器的路径
readOnly: false #####权限
env: #####容器的环境变量
- name: BAIDU
value: www.baidu.com
- name: nginx #####第二个容器的相关配置,注意:和容器相关的配置以“—”,在yaml语法中,如果有该符号,表示顺序有前后关系,放在这里表示必须先启动第一个容器,才能启动第二个容器
image: nginx
ports: #####容器端口相关的配置
- name: http #####容器开放端口的名称
protocol: TCP #####端口使用的协议
containerPort: 80 #####容器要开放的端口
hostPort: 80 #####映射到主机上的端口