[DAY8]k8s必学的设定档-yaml (上)

YAML(/ˈjæməl/,尾音类似camel骆驼)是一个可读性高,用来表达资料序列化的格式。YAML参考了其他多种语言,包括:C语言、Python、Perl,并从XML、电子邮件的数据格式(RFC 2822)中获得灵感。Clark Evans在2001年首次发表了这种语言[1],另外Ingy döt Net与Oren Ben-Kiki也是这语言的共同设计者[2]。目前已经有数种程序语言或手稿语言支援(或者说解析)这种语言。
YAML是"YAML Ain't a Markup Language"(YAML不是一种标记语言)的递回缩写。在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种标记语言)[3],但为了强调这种语言以数据做为中心,而不是以标记语言为重点,而用反向缩略语重新命名。

资料来源wiki

YAML简介

语法规则:

  • 大小写敏感
  • 使用缩排进行阶层,如果编辑器有支援yaml的话(vs code有yaml套件可以用),按tab会进行缩排,看到部份文章有提到不要使用table,也是是因为编辑器没有yaml套件支援的关系吧?如果没对齐也会自行检查错误。
  • #为注解符号

YAML Maps与List

  • maps:key-value的组合
  • list:就阵列../images/emoticon/emoticon06.gif

就用k0s里面部署的yaml来进行举例

maps

apiVersion: apps/v1 # key值叫apiVersion,value是apps/v1
kind: Deployment

maps的value也可以是一个maps

metadata: # 这边就是阶层式的宣告,metadata底下有个叫name的key-value设定值,基本上是使用2个空白进行同阶的处理,大原则就是一致的缩排空白数量
  name: k0s-nginx

list

如果在yaml中有array的资料想要使用,可以使用-进行资料分隔,
list的value也可以是maps,maps的value也可以是list,视自己的需求来决定yaml怎麽组成

spec:
      containers:
      - command
        - name: nginx
          image: nginx:latest
          ports:
          - containerPort: 80
      - args: # 同args : [proxy,sidecar]
        - proxy
        - sidecar 

k8s yaml说明

  • apiVersion : 简单说就是版本号,目前是v1版,但是这个版本还是会根据k8s的版本迭代。
  • kind : 要建立的资源类型,有Pod、Deployment、Job、Ingress、Service,主要还是以Deployment为主要讲解类型。
  • metadata : pod的meta资讯
    • name (string)
    • generateName (string)
    • namespace (string)
    • labels (map[string]string)
    • annotations (map[string]string)
      资料来源ObjectMeta
  • spec : k8s的参数,有container、name、image、command、args、workingDir、ports、env、resource、volumeMounts、livenessProbe、readinessProbe、livecycle、terminationMessagePath、imagePullPolicy、securityContext、stdin、stdinOnce、tty..等等。

以下为一个简单的nginx Deployment yaml档

apiVersion: apps/v1 # 版本v1
kind: Deployment
metadata:
  name: k0s-nginx
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 1 
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80


<<:  Day08 Kibana - Query DSL 查询语法介绍

>>:  Day 01 Flask 是什麽

番外篇 - NestJs - Guard

NestJs - Guard 验证分为两种,登入权限验证以及角色验证 举例说明:我们将 API 分为...

110/02 - 只有 StartActivityForResult 可以用吗?

前一天讲到合约(Contracts)和启动器(Launcher)取代StartActivityFor...

Day 15 放射线背景

放射线背景 教学原文参考:放射线背景 这篇文章会介绍使用 GIMP 的渐层填色,搭配滤镜的「小小星球...

零信任的特徵

零信任 零信任是一种用於访问控制的网络安全范例,具有以数据为中心,细粒度,动态且具有可见性的特徵。 ...

Day 29. 手机萤幕截图安全性问题,小心被看光光

今天来讲讲手机app截图安全性问题 IOS 截图是系统层级因此安全问题不大,但还是需要适时提醒使用...