|NO.Z.00123|——————————|CloudNative|——|KuberNetes&基础标签.V06|——|kubernetes.v06|yaml文件详解|
一、yaml概述:yaml文件详解
### --- 查看pod.yaml配置文件
[root@k8s-master01 ~]# vim pod.yaml
apiVersion: v1 # 必选,API的版本号
kind: Pod # 必选,类型Pod;开头是apiVersion和kind:若是写yaml文件,这两个是必不可少的;因为需要kind参数来区分你写入的是什么东西;apiVersion:来区分是属于哪个apiVersion下面的,
metadata: # 必选,元数据//metadata:元数据,符合1035标准的,不能有大括号,不能有特殊字符,比如感叹号,带些字母,不能是数字开头的,-横线是支持的
name: nginx # 必选,符合RFC 1035规范的Pod名称
namespace: default # 可选,Pod所在的命名空间,不指定默认为default,可以使用-n 指定namespace
labels: # 可选,标签选择器,一般用于过滤和区分Pod
app: nginx
role: frontend # 可以写多个
annotations: # 可选,注释列表,可以写多个;添加注释信息。和annotations和labels的区别是什么,annotations是没有严格的格式,可以自己定义去写,而labels有严格的格式,
app: nginx
spec: # 必选,用于定义容器的详细信息;正式的声明这个Pod里面的配置。
initContainers: # 初始化容器,在容器启动之前执行的一些初始化操作;启动在containers启动之前先执行的操作,比如创建文件夹用户,设置内核参数等可以使用它来操作。
- command: # 一个横线相当于代表一个资源。相当于一个集合或者切片。
- sh
- -c
- echo "I am InitContainer for init some configuration"
image: busybox
imagePullPolicy: IfNotPresent
name: init-container
containers: # 必选,容器列表;containers里面可以有多个容器,容器的名称都不一样。而且需要符合1035标准。
- name: nginx # 必选,符合RFC 1035规范的容器名称
image: nginx:latest # 必选,容器所用的镜像的地址;没有添加URL,说明是docker官方的镜像,一般都是我们自己的镜像。
imagePullPolicy: Always # 可选,镜像拉取策略;拉取策略分类:IfNotPresent:如果宿主机有这个镜像,那就不要再拉取了。Always:总是为拉取,无论宿主机上有没有镜像,它都会拉取。Never:不管是否存在,都不拉去。一般最常用的是IfNotPresent和Always。
command: # 可选,容器启动执行的命令;相当于:ENTRYPOINT,argument——>cmd //若是没有,使nginx前台启动,容器里面的进程必须有一个前台进程。在做镜像的时候,可以打到容器里面,若是容器里面没有写,这个位置必须写。
- nginx
- -g
- "daemon off;"
workingDir: /usr/share/nginx/html # 可选,容器的工作目录;一般登入到容器后登入的目录是哪个目录,此环境下是定位到根目录下。可以配置也可以不配置。
volumeMounts: # 可选,存储卷配置,可以配置多个;比如PV或者LVS。
- name: webroot # 存储卷名称
mountPath: /usr/share/nginx/html # 挂载目录
readOnly: true # 只读
ports: # 可选,容器需要暴露的端口号列表;可以配置多个,以斜线切分。
- name: http # 端口名称
containerPort: 80 # 端口号
protocol: TCP # 端口协议,默认TCP;支持的协议。
env: # 可选,环境变量配置列表
- name: TZ # 变量名
value: Asia/Shanghai # 变量的值 //定位时区
- name: LANG
value: en_US.utf8 # 定位语言的。
resources: # 可选,资源限制和资源请求限制;资源请求。
limits: # 最大限制设置
cpu: 1000m
memory: 1024Mi
requests: # 启动所需的资源
cpu: 100m
memory: 512Mi
~~~ # 健康检查:
~~~ 怎么去判断我的容器时启动OK的,而且是正在接受流量的。
~~~ startuProbe是比较新的,1.16版本之后才引出来的概念
// startupProbe: # 可选,检测容器内进程是否完成启动。注意三种检查方式同时只能使用一种。
// httpGet: # httpGet检测方式,生产环境建议使用httpGet实现接口级健康检查,健康检查由应用程序提供。
// path: /api/successStart # 检查路径
// port: 80
readinessProbe: # 可选,健康检查。注意三种检查方式同时只能使用一种。
httpGet: # httpGet检测方式,生产环境建议使用httpGet实现接口级健康检查,健康检查由应用程序提供。
path: / # 检查路径
port: 80 # 监控端口
livenessProbe: # 可选,健康检查
//exec: # 执行容器命令检测方式
//command:
//- cat
//- /health
//httpGet: # httpGet检测方式
// path: /_health # 检查路径
// port: 8080
// httpHeaders: # 检查的请求头
// - name: end-user
// value: Jason
tcpSocket: # 端口检测方式
port: 80
initialDelaySeconds: 60 # 初始化时间
timeoutSeconds: 2 # 超时时间
periodSeconds: 5 # 检测间隔
successThreshold: 1 # 检查成功为2次表示就绪
failureThreshold: 2 # 检测失败1次表示未就绪
lifecycle: # 生命周期
postStart: # 容器创建完成后执行的指令, 可以是exec httpGet TCPSocket
exec:
command:
- sh
- -c
- 'mkdir /data/ '
preStop:
httpGet:
path: /
port: 80
// exec:
// command:
// - sh
// - -c
// - sleep 9
restartPolicy: Always # 可选,默认为Always //重启的策略;默认是Always,容器故障或者没有启动成功,那就自动重启该容器。Onfailure:容器以不为0的状态码终止,自动重启该容器。Never:无论何种状态,都不会重启。
//nodeSelector: # 可选,指定Node节点;假设我们集群有50个节点,某个容器必须部署在某一个节点上,可以使用nodSelector来控台它部署到指定node节点上。
### --- 可以查看容器的标签
~~~ 1和CPU就相当于1000M
[root@k8s-master01 ~]# kubectl get node --show-labels
NAME STATUS ROLES AGE VERSION LABELS
k8s-master01 Ready <none> 5d20h v1.20.0 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-master01,kubernetes.io/os=linux,node.kubernetes.io/node=
k8s-master02 Ready <none> 5d20h v1.20.0 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-master02,kubernetes.io/os=linux,node.kubernetes.io/node=
// region: subnet7
imagePullSecrets: # 可选,拉取镜像使用的secret,可以配置多个;一般公司业务镜像是在我们私有仓库中的,私有仓库不可能是公开的,需要配置账号密码,就是通过imagePullSecrets来配置的。
- name: default-dockercfg-86258
hostNetwork: false # 可选,是否为主机模式,如是,会占用主机端口;启用ingress就是通过hostNetwork来启动的,它是会占用宿主机的端口的。
volumes: # 共享存储卷列表;存储卷配置。
- name: webroot # 名称,与上述对应
emptyDir: {} # 挂载目录
//hostPath: # 挂载本机目录
// path: /etc/hosts
二、yaml实验示例
### --- yaml文件实验示例
~~~ 查看pod.yaml配置参数说明
[root@k8s-master01 ~]# vim pod.yaml
apiVersion: v1 # 必选,API的版本号
kind: Pod # 必选,类型Pod
metadata: # 必选,元数据
name: nginx # 必选,符合RFC 1035规范的Pod名称
#mespace: default # 可选,Pod所在的命名空间,不指定默认为default,可以使用-n 指定namespace
labels: # 可选,标签选择器,一般用于过滤和区分Pod
app: nginx
role: frontend # 可以写多个
annotations: # 可选,注释列表,可以写多个
app: nginx
spec: # 必选,用于定义容器的详细信息
# initContainers: # 初始化容器,在容器启动之前执行的一些初始化操作
# - command:
# - sh
# - -c
# - echo "I am InitContainer for init some configuration"
# image: busybox
# imagePullPolicy: IfNotPresent
# name: init-container
containers: # 必选,容器列表
- name: nginx # 必选,符合RFC 1035规范的容器名称
image: nginx:1.15.2 # 必选,容器所用的镜像的地址
imagePullPolicy: IfNotPresent # 可选,镜像拉取策略, IfNotPresent: 如果宿主机有这个镜像,那就不需要拉取了. Always: 总是拉取, Never: 不管是否存储都不拉去
command: # 可选,容器启动执行的命令 ENTRYPOINT, arg --> cmd
- nginx
- -g
- "daemon off;"
workingDir: /usr/share/nginx/html # 可选,容器的工作目录
# volumeMounts: # 可选,存储卷配置,可以配置多个
# - name: webroot # 存储卷名称
# mountPath: /usr/share/nginx/html # 挂载目录
# readOnly: true # 只读
ports: # 可选,容器需要暴露的端口号列表
- name: http # 端口名称
containerPort: 80 # 端口号
protocol: TCP # 端口协议,默认TCP
env: # 可选,环境变量配置列表
- name: TZ # 变量名
value: Asia/Shanghai # 变量的值
- name: LANG
value: en_US.utf8
# resources: # 可选,资源限制和资源请求限制
# limits: # 最大限制设置
# cpu: 1000m
# memory: 1024Mi
# requests: # 启动所需的资源
# cpu: 100m
# memory: 512Mi
# startupProbe: # 可选,检测容器内进程是否完成启动。注意三种检查方式同时只能使用一种。
# httpGet: # httpGet检测方式,生产环境建议使用httpGet实现接口级健康检查,健康检查由应用程序提供。
# path: /api/successStart # 检查路径
# port: 80
# readinessProbe: # 可选,健康检查。注意三种检查方式同时只能使用一种。
# httpGet: # httpGet检测方式,生产环境建议使用httpGet实现接口级健康检查,健康检查由应用程序提供。
# path: / # 检查路径
# port: 80 # 监控端口
# livenessProbe: # 可选,健康检查
#exec: # 执行容器命令检测方式
#command:
#- cat
#- /health
#httpGet: # httpGet检测方式
# path: /_health # 检查路径
# port: 8080
# httpHeaders: # 检查的请求头
# - name: end-user
# value: Jason
# tcpSocket: # 端口检测方式
# port: 80
# initialDelaySeconds: 60 # 初始化时间
# timeoutSeconds: 2 # 超时时间
# periodSeconds: 5 # 检测间隔
# successThreshold: 1 # 检查成功为2次表示就绪
# failureThreshold: 2 # 检测失败1次表示未就绪
# lifecycle:
# postStart: # 容器创建完成后执行的指令, 可以是exec httpGet TCPSocket
# exec:
# command:
# - sh
# - -c
# - 'mkdir /data/ '
# preStop:
# httpGet:
# path: /
# port: 80
# exec:
# command:
# - sh
# - -c
# - sleep 9
restartPolicy: Always # 可选,默认为Always,容器故障或者没有启动成功,那就自动该容器,Onfailure: 容器以不为0的状态终止,自动重启该容器, Never:无论何种状态,都不会重启
#nodeSelector: # 可选,指定Node节点
# region: subnet7
# imagePullSecrets: # 可选,拉取镜像使用的secret,可以配置多个
# - name: default-dockercfg-86258
# hostNetwork: false # 可选,是否为主机模式,如是,会占用主机端口
# volumes: # 共享存储卷列表
# - name: webroot # 名称,与上述对应
# emptyDir: {} # 挂载目录
# #hostPath: # 挂载本机目录
# # path: /etc/hosts
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了