k8s yaml编写规范

yaml简介

yaml 是专门用来写配置文件的语言

yaml文件也是一种配置文件类型,后缀名是.yaml或.yml都可以

yaml语法规则

  • 大小写敏感
  • 使用缩进表示层级关系(不能用Tab,只能用空格)
  • 相同层级的元素左对齐
  • #号表示单行注释
  • 字符串可以不用引号标注
  • 数组(列表)是使用 – 开头的清单形式,- 后面必须加空格
  • 表示对象的 : 和表示数组(列表)的 – 后面都必须要有空格。可以使用 – 回车- 回车-回车 在一个文件里分隔多个 YAML 对象

Yaml语法实例

数组(列表)实例; 短横线加空格(- )
 

- linux

- name

- windows

Yaml 对象(字典)实例;用冒号加空格连接键和值(: )
 

Kubernetes:

linux: vim

name: 张三

windows: steam

Yaml 数组 对象结合(列表中的字典)实例;短横线加空格(- ),用冒号加空格连接键和值(: )
 

containers:

- image: mysql5.7.38

name: mysql

restart: always

ports:

- 6379:6379

volumes:

- /etc/localtime:/etc/localtime

Yaml格式说明与实例

格式说明

pod.yaml

 

# yaml格式的pod定义问件完整内容:

apiVersion: v1 #必选,版本号,例如v1

kind: Pod #必选,Pod

metadata: #必选,元数据

name: string #必选,Pod名称

namespace: string #必选,Pod所属的命名空间

labels: #自定义标签

- name: string #自定义标签名字

annotations: #自定义注释列表

- name: string

spec: #必选,Pod中容器的详细定义

containers: #必选,Pod中容器列表

- name: string #必选,容器名称

image: string #必选,容器的镜像名称

imagePullPolicy: [Always | Never | IfNotPresent] #获取镜像的策略 Alawys表示下载镜像 IfnotPresent表示优先使用本地镜像,否则下载镜像,Nerver表示仅使用本地镜像

command: [string] #容器的启动命令列表,如不指定,使用打包时使用的启动命令

args: [string] #容器的启动命令参数列表

workingDir: string #容器的工作目录

volumeMounts: #挂载到容器内部的存储卷配置

- name: string #引用pod定义的共享存储卷的名称,需用volumes[]部分定义的的卷名

mountPath: string #存储卷在容器内mount的绝对路径,应少于512字符

readOnly: boolean #是否为只读模式

ports: #需要暴露的端口库号列表

- name: string #端口号名称

containerPort: int #容器需要监听的端口号

hostPort: int #容器所在主机需要监听的端口号,默认与Container相同

protocol: string #端口协议,支持TCP和UDP,默认TCP

env: #容器运行前需设置的环境变量列表

- name: string #环境变量名称

value: string #环境变量的值

resources: #资源限制和请求的设置

limits: #资源限制的设置

cpu: string #Cpu的限制,单位为core数,将用于docker run --cpu-shares参数

memory: string #内存限制,单位可以为Mib/Gib,将用于docker run --memory参数

requests: #资源请求的设置

cpu: string #Cpu请求,容器启动的初始可用数量

memory: string #内存清楚,容器启动的初始可用数量

livenessProbe: #对Pod内个容器健康检查的设置,当探测无响应几次后将自动重启该容器,检查方法有exec、httpGet和tcpSocket,对一个容器只需设置其中一种

exec: #对Pod容器内检查方式设置为exec方式

command: [string] #exec方式需要制定的命令或脚本

httpGet: #对Pod内个容器健康检查方法设置为HttpGet,需要制定Path、port

path: string

port: number

host: string

scheme: string

HttpHeaders:

- name: string

value: string

tcpSocket: #对Pod内个容器健康检查方式设置为tcpSocket方式

port: number

initialDelaySeconds: 0 #容器启动完成后首次探测的时间,单位为秒

timeoutSeconds: 0 #对容器健康检查探测等待响应的超时时间,单位秒,默认1秒

periodSeconds: 0 #对容器监控检查的定期探测时间设置,单位秒,默认10秒一次

successThreshold: 0

failureThreshold: 0

securityContext:

privileged:false

restartPolicy: [Always | Never | OnFailure]#Pod的重启策略,Always表示一旦不管以何种方式终止运行,kubelet都将重启,OnFailure表示只有Pod以非0退出码退出

nodeSelector: obeject #设置NodeSelector表示将该Pod调度到包含这个label的node上,以key:value的格式指定将该Pod调度到包含这个label的node上,以key:value的格式指定

imagePullSecrets: #Pull镜像时使用的secret名称,以key:secretkey格式指定

- name: string

hostNetwork:false #是否使用主机网络模式,默认为false,如果设置为true,表示使用宿主机网络

volumes: #在该pod上定义共享存储卷列表

- name: string #共享存储卷名称(volumes类型有很多种)

emptyDir: {} #类型为emtyDir的存储卷,与Pod同生命周期的一个临时目录。为空值

hostPath: string #类型为hostPath的存储卷,表示挂载Pod所在宿主机的目录

path: string #Pod所在宿主机的目录,将被用于同期中mount的目录

secret: #类型为secret的存储卷,挂载集群与定义的secre对象到容器内部

scretname: string

items:

- key: string

path: string

configMap: #类型为configMap的存储卷,挂载预定义的configMap对象到容器内部

name: string

items:

- key: string

deployment.yaml

 

apiVersion: extensions/v1beta1 #接口版本

kind: Deployment #接口类型

metadata:

name: cango-demo #Deployment名称

namespace: cango-prd #命名空间

labels:

app: cango-demo #标签

spec:

replicas: 3

strategy:

rollingUpdate: #由于replicas为3,则整个升级,pod个数在2-4个之间

maxSurge: 1 #滚动升级时会先启动1个pod

maxUnavailable: 1 #滚动升级时允许的最大Unavailable的pod个数

template:

metadata:

labels:

app: cango-demo #模板名称必填

sepc: #定义容器模板,该模板可以包含多个容器

containers:

- name: cango-demo #镜像名称

image: swr.cn-east-2.myhuaweicloud.com/cango-prd/cango-demo:0.0.1-SNAPSHOT #镜像地址

command: [ "/bin/sh","-c","cat /etc/config/path/to/special-key" ] #启动命令

args: #启动参数

- '-storage.local.retention=$(STORAGE_RETENTION)'

- '-storage.local.memory-chunks=$(STORAGE_MEMORY_CHUNKS)'

- '-config.file=/etc/prometheus/prometheus.yml'

- '-alertmanager.url=http://alertmanager:9093/alertmanager'

- '-web.external-url=$(EXTERNAL_URL)'

#如果command和args均没有写,那么用Docker默认的配置。

#如果command写了,但args没有写,那么Docker默认的配置会被忽略而且仅仅执行.yaml文件的command(不带任何参数的)。

#如果command没写,但args写了,那么Docker默认配置的ENTRYPOINT的命令行会被执行,但是调用的参数是.yaml中的args。

#如果如果command和args都写了,那么Docker默认的配置被忽略,使用.yaml的配置。

imagePullPolicy: IfNotPresent #如果不存在则拉取

livenessProbe: #表示container是否处于live状态。如果LivenessProbe失败,LivenessProbe将会通知kubelet对应的container不健康了。随后kubelet将kill掉

httpGet:

path: /health #如果没有心跳检测接口就为/

port: 8080

scheme: HTTP

initialDelaySeconds: 60 #启动后延时多久开始运行检测

timeoutSeconds: 5

successThreshold: 1

failureThreshold: 5

readinessProbe:

httpGet:

path: /health #如果没有心跳检测接口就为/

port: 8080

scheme: HTTP

initialDelaySeconds: 30 ##启动后延时多久开始运行检测

timeoutSeconds: 5

successThreshold: 1

failureThreshold: 5

resources: ##CPU内存限制

requests:

cpu: 2

memory: 2048Mi

limits:

cpu: 2

memory: 2048Mi

env: ##通过环境变量的方式,直接传递pod=自定义Linux OS环境变量

- name: LOCAL_KEY #本地Key

value: value

- name: CONFIG_MAP_KEY #局策略可使用configMap的配置Key,

valueFrom:

configMapKeyRef:

name: special-config #configmap中找到name为special-config

key: special.type #找到name为special-config里data下的key

ports:

- name: http

containerPort: 8080 #对service暴露端口

volumeMounts: #挂载volumes中定义的磁盘

- name: log-cache

mount: /tmp/log

- name: sdb #普通用法,该卷跟随容器销毁,挂载一个目录

mountPath: /data/media

- name: nfs-client-root #直接挂载硬方法,如挂载下面的nfs目录到/mnt/nfs

mountPath: /mnt/nfs

- name: example-volume-config #高级用法第1种,将ConfigMap的log-script,backup-script分别挂载到/etc/config目录下的一个相对路径path/to/...下

mountPath: /etc/config

- name: rbd-pvc #高级用法第2种,挂载PVC(PresistentVolumeClaim)

#使用volume将ConfigMap作为文件或目录直接挂载,其中每一个key-value键值对都会生成一个文件,key为文件名,value为内容

volumes: # 定义磁盘给上面volumeMounts挂载

- name: log-cache

emptyDir: {}

- name: sdb #挂载宿主机上面的目录

hostPath:

path: /any/path/it/will/be/replaced

- name: example-volume-config # 供ConfigMap文件内容到指定路径使用

configMap:

name: example-volume-config #ConfigMap中名称

items:

- key: log-script #ConfigMap中的Key

path: path/to/log-script #指定目录下的一个相对路径path/to/log-script

- key: backup-script #ConfigMap中的Key

path: path/to/backup-script #指定目录下的一个相对路径path/to/backup-script

- name: nfs-client-root #供挂载NFS存储类型

nfs:

server: 10.42.0.55 #NFS服务器地址

path: /opt/public #showmount -e 看一下路径

- name: rbd-pvc #挂载PVC磁盘

persistentVolumeClaim:

claimName: rbd-pvc1 #挂载已经申请的pvc磁盘

services.yaml

 

apiVersion: v1

kind: Service

matadata: #元数据

name: string #service的名称

namespace: string #命名空间

labels: #自定义标签属性列表

- name: string

annotations: #自定义注解属性列表

- name: string

spec: #详细描述

selector: [] #label selector配置,将选择具有label标签的Pod作为管理

#范围

type: string #service的类型,指定service的访问方式,默认为

#clusterIp

clusterIP: string #虚拟服务地址

sessionAffinity: string #是否支持session

ports: #service需要暴露的端?列表

- name: string #端口名称

protocol: string #端口协议,支持TCP和UDP,默认TCP

port: int #服务监听的端口号

targetPort: int #需要转发到后端Pod的端口号

nodePort: int #当type = NodePort时,指定映射到物理机的端口号

status: #当spce.type=LoadBalancer时,设置外部负载均衡器的地址

loadBalancer: #外部负载均衡器

ingress: #外部负载均衡器

ip: string #外部负载均衡器的Ip地址值

hostname: string #外部负载均衡器的主机名

job.yaml

 

apiVersion: batch/v1

kind: Job

metadata:

name: job-demo

spec:

template:

metadata:

name: job-demo

spec:

restartPolicy: Never #Job的RestartPolicy仅支持Never和OnFailure两种,不支持Always,我们知道Job就相当于来执行一个批处理任务,执行完就结束了

containers:

- name: counter

image: busybox

command:

- "bin/sh"

- "-c"

- "for i in 9 8 7 6 5 4 3 2 1; do echo $i; done

Cronjob.yaml

CronJob其实就是在Job的基础上加上了时间调度,我们可以:在给定的时间点运行一个任务,也可以周期性地在给定时间点运行。这个实际上和我们Linux中的crontab就非常类似了。

一个CronJob对象其实就对应中crontab文件中的任务,它根据配置的时间格式周期性地运行一个Job,格式和crontab也是一样的。

 

#crontab的格式如下:

#分时日月周要运行的命令第1列分钟0~59 第2列时0~23)第3列日1~31 第4列月1~12 第5列周0~7(0和7表示星期天)第6列要运行的命令

apiVersion: batch/v2alpha1

kind: CronJob

metadata:

name: cronjob-demo

spec:

schedule: "*/1 * * * *"

jobTemplate:

spec:

template:

spec:

restartPolicy: OnFailure

containers:

- name: hello

image: busybox

args:

- "bin/sh"

- "-c"

- "for i in 9 8 7 6 5 4 3 2 1; do echo $i; done"

我们这里的Kind是CronJob了,要注意的是.spec.schedule字段是必须填写的,用来指定任务运行的周期,格式就和crontab一样,另外一个字段是.spec.jobTemplate, 用来指定需要运行的任务,格式当然和Job是一致的。

还有一些值得我们关注的字段.spec.successfulJobsHistoryLimit和.spec.failedJobsHistoryLimit,表示历史限制,是可选的字段。它们指定了可以保留多少完成和失败的Job,默认没有限制,所有成功和失败的Job都会被保留。

然后,当运行一个Cron Job时,Job可以很快就堆积很多,所以一般推荐设置这两个字段的值。如果设置限制的值为 0,那么相关类型的Job完成后将不会被保留。

实例

cs.yaml

 

apiVersion: v1 #API版本号,用于迭代我们的更新版本

kind: Pod #资源对象的类型,有pod,Node,Job,Service

metadata: #资源元数据,标记对象,方便管理

name: hll-pod #给pod起名称

labels: #给pod打标签,方便找

env: demo #注入容器内的环境变量

owner: feifei

spec: #资源规格,pod内容器相关信息

replicas: 1 #副本数量

selector: #标签选择器

matchLabels:

app: web

template: #pod模板

metadata: #pod元数据

labels: #给pod打标签,方便找

app: web

spec: #pod规格

containers: #容器配置

- image: nll:v1 #运行容器镜像

name: nll #容器名称

ports: #端口号

- containerPort: 80 #容器端口号

- 8090:8221 #容器内服务映射端口

volumes: #容器持久化

- /etc/localtime:/etc/localtime #容器内服务映射路径

restart: always #重启容器直接重启服务

k8s yaml文件创建和删除

 

kubectl apply -f cs.yml

kubectl delete -f cs.yml

docker-compose文件创建

 

docker-compose -f cs.yaml up -d

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/56156.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多态(二)

1.多态的原理 虚函数表 class Base { public:virtual void Func1(){cout << "Func1()" << endl;} private:int _b 1; };b对象是8bytes&#xff0c;除了_b成员&#xff0c;还多一个__vfptr放在对象的前面(注意有些 平台可能会放到对象的最后面&#xf…

微信小程序启动不起来,报错凡是以~/包名/*.js路径的文件,都找不到,试过网上一切方法,最终居然这么解决的,【避坑】命运的齿轮开始转动

app.json "resolveAlias": {"~/*": "/*"},文件代码也没有问题&#xff0c;网上的方法试过来了&#xff0c;大模型AI也问过遍&#xff0c;熬夜到凌晨2点半&#xff0c;最不可思议的是居然是因为微信开发者工具版本的问题&#xff0c;我真的是笑死…

量化之一:均值回归策略

文章目录 均值回归策略理论基础数学公式 关键指标简单移动平均线&#xff08;SMA&#xff09;标准差Z-Score 交易信号实际应用优缺点分析优点缺点 结论 实践backtrader参数&#xff1a;正常情况&#xff1a;异常情况&#xff1a; 均值回归策略 均值回归&#xff08;Mean Rever…

JAVA-数据结构-排序

1.直接插入排序 1.原理&#xff1a;和玩扑克牌一样&#xff0c;从左边第二个牌开始&#xff0c;选中这个&#xff0c;和前面的所有牌比较&#xff0c;插在合适的位置 public static void insertsort(int[] arr){//直接插入排序for (int i 1; i < arr.length; i) {//此循环…

1 机器学习之引言

傍晚小街路面上沁出微雨后的湿润&#xff0c;和煦的细风吹来&#xff0c;抬头看看天边的晚霞&#xff0c;嗯&#xff0c;明天又是一个好天气。走到水果摊旁&#xff0c;挑了个根蒂蜷缩、敲起来声音浊响的青绿西瓜&#xff0c;一边满心期待着皮薄肉厚瓤甜的爽落感&#xff0c;一…

STM32 GPIO

GPIO&#xff08;通用输入输出口&#xff0c;General Purpose Input Output&#xff09;接口的功能是让嵌入式处理器能够通过软件灵活地读出或控制单个物理引脚上的高、低电平&#xff0c;实现内核和外部系统之间的信息交换。 GPIO是嵌入式处理器使用最多的外设&#xff0c;能够…

React和Vue区别,以及注意事项

目录 一、语法和框架特性的差异 二、开发习惯和注意事项 三、特别注意事项 一、语法和框架特性的差异 模板语法&#xff1a; Vue使用了类似于传统HTML的模板语法&#xff0c;通过双大括号{{ }}进行插值&#xff0c;而React则使用了JSX语法。在Vue中&#xff0c;你可以直接在…

甲虫身体图像分割系统源码&数据集分享

甲虫身体图像分割系统源码&#xff06;数据集分享 [yolov8-seg-EfficientRepBiPAN&#xff06;yolov8-seg-C2f-FocusedLinearAttention等50全套改进创新点发刊_一键训练教程_Web前端展示] 1.研究背景与意义 项目参考ILSVRC ImageNet Large Scale Visual Recognition Challen…

SQL Server 计算两个时间相差

在 SQL Server 中&#xff0c;计算两个时间字符串之间的差值 首先将这些字符串转换成日期/时间类型&#xff08;如 datetime 或 datetime2&#xff09;然后使用日期函数来计算它们之间的差异。 1、计算两个时间字符串之间的差值 案例&#xff1a;计算 starttime 和 endtime …

android——activity之间数据共享(单例等)

一、使用 Intent 传递数据&#xff08;适用于简单数据传递&#xff0c;且在 Activity 启动时&#xff09; 二、使用静态变量&#xff08;简单但有风险&#xff09; 原理 在一个类中定义静态变量&#xff0c;例如一个 Application 类或者一个专门用于存储共享数据的工具类。两个…

毕设开源 大数据电影数据分析与可视化系统(源码+论文)

文章目录 0 前言1 项目运行效果2 设计概要3 最后 0 前言 &#x1f525;这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往达不到毕业答辩的要求&#xff0c;这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师…

简单粗暴理解GNN、GCN、GAT

GNN 思想&#xff1a;近朱者赤近墨者黑 GNN的流程&#xff1a; 聚合&#xff08;把邻居的信息贴到自己身上来&#xff0c;作为它自己特征的补足&#xff09;更新循环&#xff08;为什么要多次&#xff1f;看以下例子&#xff09; GNN能干嘛&#xff1f; 1.结点分类&#xf…

【多线程】多线程(12):多线程环境下使用哈希表

【多线程环境下使用哈希表&#xff08;重点掌握&#xff09;】 可以使用类&#xff1a;“ConcurrentHashMap” ★ConcurrentHashMap对比HashMap和Hashtable的优化点 1.优化了锁的粒度【最核心】 //Hashtable的加锁&#xff0c;就是直接给put&#xff0c;get等方法加上synch…

STM32的时钟复位控制单元(RCU/RCC)技术介绍

在嵌入式系统开发中&#xff0c;时钟管理和复位控制是确保微控制器稳定运行的关键因素。时钟复位控制单元&#xff08;Reset and Clock Control, RCU/RCC&#xff09; 是 STM32 系列微控制器中的一个重要外设&#xff0c;负责管理系统的时钟源、分频器、外设时钟以及复位功能。…

【网络协议】TCP协议常用机制——延迟应答、捎带应答、面向字节流、异常处理,保姆级详解,建议收藏

&#x1f490;个人主页&#xff1a;初晴~ &#x1f4da;相关专栏&#xff1a;计算机网络那些事 前几篇文章&#xff0c;博主带大家梳理了一下TCP协议的几个核心机制&#xff0c;比如保证可靠性的 确认应答、超时重传 机制&#xff0c;和提高传输效率的 滑动窗口及其相关优化机…

构建可以ssh连接的容器镜像

构建可以ssh连接的容器镜像 构建可以通过ssh进行连接容器镜像&#xff0c;实现远程登录容器的目的。 ubuntu ssh容器镜像 你可以使用以下Dockerfile来构建一个可以SSH的容器镜像&#xff1a; FROM ubuntu:20.04MAINTAINER lldhsds# 配置apt国内源 COPY sources.list /etc/a…

云原生开发 - 工具镜像(简约版)

在微服务和云原生环境中&#xff0c;容器化的目标之一是尽可能保持镜像小型化以提高启动速度和减少安全风险。然而&#xff0c;在实际操作中&#xff0c;有时候需要临时引入一些工具来进行调试、监控或问题排查。Kubernetes提供了临时容器&#xff08;ephemeral containers&…

MyBatis-Plus 的核心插件及其使用介绍

MyBatis-Plus 是基于 MyBatis 的增强工具&#xff0c;为简化 MyBatis 的开发提供了诸多功能扩展。它的目标是减少重复代码、提高开发效率&#xff0c;提供了 CRUD&#xff08;Create, Read, Update, Delete&#xff09;操作的简化方法以及多种实用插件。以下是 MyBatis-Plus 的…

QT学习笔记4.5(文件、参数文件)

QT学习笔记4.5&#xff08;文件、参数文件&#xff09; 1.保存配置参数 1.使用QSettings保存到注册表&#xff0c;ini文件 2.文件存储&#xff1a;使用 QFile 和其他类将参数保存到文本文件、二进制文件、XMLWENJIAN、JSON 文件等。 文本文件&#xff1a;以简单的键值对格式…

Qt实现Halcon窗口显示当前图片坐标

一、前言 Halcon加载图片的窗口&#xff0c;不仅能放大和缩小图片&#xff0c;还可以按住Ctrl键显示鼠标下的灰度值&#xff0c;这种方式很方便我们分析缺陷的灰度和对比度。 二、实现方式 ① 创建显示坐标和灰度的widget窗口 下图的是widget部件&#xff0c;使用了4个label控…