kubernetes (k8s) yaml文件详解
1.kubernetes yaml文件详解
apiVersion: v1
kind: Deployment #资源类型:
metadata: #元数据
name: <deploy-name> #资源的名字,在同一个namespace中必须唯一
namespace: <ns-name> #命名空间,类似分组管理,同一个命名空间中的deployment名字是唯一的
labels: #设置标签
<key>: <value>
spec: #规格
replicas: 2 #pod副本个数
selector: #标签选择器
matchLabels: #通过标签选择器进行管理拥有该label的pod
<key>: <value>
revisionHistoryLimit: 5 #回滚历史版本的个数
progressDeadlineSeconds: 600 #可选参数;deployment 卡住执行出现错误时,等待deployment 进行的时间秒数,deployment controller会继续重试。设置该值必须大于.spec.minReadySeconds。
minReadySeconds: 0 #可选参数,默认为0(pod 在ready后就被认为可用),pod中容器没有crash 并被认为可用状态的最小秒数。
strategy: #更新的策略,默认为rollingUpdate , 可选Recreate 在创建新pod之前会杀掉所有已经存在的pod
rollingUpdate:
maxUnavailable: 25% #最大不可用比例,可绝对值,可比例
maxSurge: 25% #最大更新pod量,可绝对值,可比例,按上取整
rollbackTo: #可选参数,用来配置deploy回退的配置,设置该参数将触发回退操作,每次回退完成会清楚该值
revision: 0 #默认为0,用来指定回退到的revision,0意味着回退到历史中最老的revision
paused: false #可选参数 默认非paused,boolean值。用来指定暂停和恢复deploy,paused 和 非paused的唯一区别在于,paused后,所有对PodTemplateSpec的修改都不会触发新的rollout
template: #和pod template中一样
metadata:
name: <pod-name>
labels:
<key>: <value> #需要和sepc.selector.matchLabels 中的lable 匹配,否则rs 服务管理到该pod
spec:
containers:
- name:
image: #镜像地址
imagePullPolicy: Alway # Alway,IfNotPresent,Never
command:
args:
workingDir: #指定容器的工作目录
resources: #容器运行的资源申请和限制
requests: #申请
cpu:
memory:
limits: #最大限制
cpu:
memory:
ports: #容器应用运行暴露的port
- name:
containerPort: #容器端口
protocol:
env: #指定容器运行的环境变量
- name:
value:
volumeMounts: #挂载外部文件到容器
- name: <volume-name> # volume 的 name
mountPath: /home #挂载到容器中的指定路径
livenessProbe: #存活探针
httpGet: #http检测形式
path: </path> #路径
port: <containerPort> #容器端口
httpHeaders: #需要设置请求头时的设置
- name: <key>
value: <value>
initialDelaySeconds: 20 #开始探针检测的等待秒数,根据业务需求具体启动时间来设置,过长会造成应用长时间无法提供服务,过短会杀死掉没有启动完全的应用
#exec: 探针的exec形式
# command:
# - cmd 指令
# - args 参数
periodSeconds: 10 #执行探测的间隔
timeoutSeconds: 3 #探测超时的时间
successThreshold: 1 #默认为1,失败状态后的服务检测成功1次后就识别为成功
failureThreshold: 3 #连续检测3次,也就是总共9s(timeoutSeconds*failureThreshold),认为容器没有存活进行销毁容器,重启新容器操作
readinessProbe: #就绪探针
tcpSocket: #tcp端口探测模式,kubelet 执行检测工作
port: <containerPort> #需要探测容器端口
terminationMessagePath: /dev/terminatino-log
terminationMessagePolicy: File
securityContext: {} #容器上下文权限
lifecycle: #生命周期
postStart: #启动容器之前执行的操作
exec:
command:
preStop: #停止容器前执行的操作
exec:
command:
stdin: true #标准输入,是否开启
stdinOnce: true #stdin为true 后,可以有打开多个通道连接容器,当stdinOnce为true,只能有一个通道连接,并且关闭通道后,stdin也将关闭,直到容器重启
tty: true #是否开启交互窗口,加stdin 是docker -it 一样的功能
hostAliases: #追加pod 中/etc/hosts 文件内容
- ip: "10.1.2.3"
hostnames:
- "foo.remote"
- "bar.remote"
shareProcessNamespace: true #几乎不用参数,pod 中所有容器共享进程空间
nodeSelector: #node选择器,指定调度节点标签,用节点label 匹配
<key>: <value>
dnsPolicy: ClusterFirst #dns策略
restartPolicy: Always #Always,Never,Failure 重启策略,总是、永不、失败后重启
schedulerName: default-scheduler #默认调度策略
securityContext: {} #pod上下文权限
terminatinoGracePeriodSeconds: 30 #默认30 ,优雅关闭时间
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!