溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

yaml是什么?

發(fā)布時(shí)間:2020-05-23 14:04:13 來(lái)源:億速云 閱讀:443 作者:鴿子 欄目:系統(tǒng)運(yùn)維

YAML 是一種簡(jiǎn)潔的非標(biāo)記語(yǔ)言。
語(yǔ)法格式:
? 縮進(jìn)表示層級(jí)關(guān)系
? 不支持制表符“tab”縮進(jìn),使用空格縮進(jìn)
? 通常開(kāi)頭縮進(jìn) 2 個(gè)空格
? 字符后縮進(jìn) 1 個(gè)空格,如冒號(hào)、逗號(hào)等
?
“---” 表示YAML格式,一個(gè)文件的開(kāi)始
? “#”注釋
yaml是什么?

k8s yaml

# yaml格式的pod定義文件完整內(nèi)容:
apiVersion: v1       #必選,版本號(hào),例如v1
kind: Pod       #必選,Pod
metadata:       #必選,元數(shù)據(jù)
  name: string       #必選,Pod名稱(chēng)
  namespace: string    #必選,Pod所屬的命名空間
  labels:      #自定義標(biāo)簽
    - name: string     #自定義標(biāo)簽名字
  annotations:       #自定義注釋列表
    - name: string
spec:         #必選,Pod中容器的詳細(xì)定義
  containers:      #必選,Pod中容器列表
  - name: string     #必選,容器名稱(chēng)
    image: string    #必選,容器的鏡像名稱(chēng)
    imagePullPolicy: [Always | Never | IfNotPresent] #獲取鏡像的策略 Alawys表示下載鏡像 IfnotPresent表示優(yōu)先使用本地鏡像,否則下載鏡像,Nerver表示僅使用本地鏡像
    command: [string]    #容器的啟動(dòng)命令列表,如不指定,使用打包時(shí)使用的啟動(dòng)命令
    args: [string]     #容器的啟動(dòng)命令參數(shù)列表
    workingDir: string     #容器的工作目錄
    volumeMounts:    #掛載到容器內(nèi)部的存儲(chǔ)卷配置
    - name: string     #引用pod定義的共享存儲(chǔ)卷的名稱(chēng),需用volumes[]部分定義的的卷名
      mountPath: string    #存儲(chǔ)卷在容器內(nèi)mount的絕對(duì)路徑,應(yīng)少于512字符
      readOnly: boolean    #是否為只讀模式
    ports:       #需要暴露的端口庫(kù)號(hào)列表
    - name: string     #端口號(hào)名稱(chēng)
      containerPort: int   #容器需要監(jiān)聽(tīng)的端口號(hào)
      hostPort: int    #容器所在主機(jī)需要監(jiān)聽(tīng)的端口號(hào),默認(rèn)與Container相同
      protocol: string     #端口協(xié)議,支持TCP和UDP,默認(rèn)TCP
    env:       #容器運(yùn)行前需設(shè)置的環(huán)境變量列表
    - name: string     #環(huán)境變量名稱(chēng)
      value: string    #環(huán)境變量的值
    resources:       #資源限制和請(qǐng)求的設(shè)置
      limits:      #資源限制的設(shè)置
        cpu: string    #Cpu的限制,單位為core數(shù),將用于docker run --cpu-shares參數(shù)
        memory: string     #內(nèi)存限制,單位可以為Mib/Gib,將用于docker run --memory參數(shù)
      requests:      #資源請(qǐng)求的設(shè)置
        cpu: string    #Cpu請(qǐng)求,容器啟動(dòng)的初始可用數(shù)量
        memory: string     #內(nèi)存清楚,容器啟動(dòng)的初始可用數(shù)量
    livenessProbe:     #對(duì)Pod內(nèi)個(gè)容器健康檢查的設(shè)置,當(dāng)探測(cè)無(wú)響應(yīng)幾次后將自動(dòng)重啟該容器,檢查方法有exec、httpGet和tcpSocket,對(duì)一個(gè)容器只需設(shè)置其中一種方法即可
      exec:      #對(duì)Pod容器內(nèi)檢查方式設(shè)置為exec方式
        command: [string]  #exec方式需要制定的命令或腳本
      httpGet:       #對(duì)Pod內(nèi)個(gè)容器健康檢查方法設(shè)置為HttpGet,需要制定Path、port
        path: string
        port: number
        host: string
        scheme: string
        HttpHeaders:
        - name: string
          value: string
      tcpSocket:     #對(duì)Pod內(nèi)個(gè)容器健康檢查方式設(shè)置為tcpSocket方式
         port: number
       initialDelaySeconds: 0  #容器啟動(dòng)完成后首次探測(cè)的時(shí)間,單位為秒
       timeoutSeconds: 0   #對(duì)容器健康檢查探測(cè)等待響應(yīng)的超時(shí)時(shí)間,單位秒,默認(rèn)1秒
       periodSeconds: 0    #對(duì)容器監(jiān)控檢查的定期探測(cè)時(shí)間設(shè)置,單位秒,默認(rèn)10秒一次
       successThreshold: 0
       failureThreshold: 0
       securityContext:
         privileged:false
    restartPolicy: [Always | Never | OnFailure]#Pod的重啟策略,Always表示一旦不管以何種方式終止運(yùn)行,kubelet都將重啟,OnFailure表示只有Pod以非0退出碼退出才重啟,Nerver表示不再重啟該P(yáng)od
    nodeSelector: obeject  #設(shè)置NodeSelector表示將該P(yáng)od調(diào)度到包含這個(gè)label的node上,以key:value的格式指定
    imagePullSecrets:    #Pull鏡像時(shí)使用的secret名稱(chēng),以key:secretkey格式指定
    - name: string
    hostNetwork:false      #是否使用主機(jī)網(wǎng)絡(luò)模式,默認(rèn)為false,如果設(shè)置為true,表示使用宿主機(jī)網(wǎng)絡(luò)
    volumes:       #在該pod上定義共享存儲(chǔ)卷列表
    - name: string     #共享存儲(chǔ)卷名稱(chēng) (volumes類(lèi)型有很多種)
      emptyDir: {}     #類(lèi)型為emtyDir的存儲(chǔ)卷,與Pod同生命周期的一個(gè)臨時(shí)目錄。為空值
      hostPath: string     #類(lèi)型為hostPath的存儲(chǔ)卷,表示掛載Pod所在宿主機(jī)的目錄
        path: string     #Pod所在宿主機(jī)的目錄,將被用于同期中mount的目錄
      secret:      #類(lèi)型為secret的存儲(chǔ)卷,掛載集群與定義的secre對(duì)象到容器內(nèi)部
        scretname: string  
        items:     
        - key: string
          path: string
      configMap:     #類(lèi)型為configMap的存儲(chǔ)卷,掛載預(yù)定義的configMap對(duì)象到容器內(nèi)部
        name: string
        items:
        - key: string
          path: string

示例部署:
deployment yml(一個(gè)redis的deployment配置文件)

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: redis-deployment
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: default.Deployment.redis_server
    spec:
      containers:
      - name: redis
        image: redis:latest
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 6379
      volumes:
        - name: data
          emptyDir: {}

service yaml

kind: Service
apiVersion: v1
metadata:
  name: redis
spec:
  type: NodePort
  ports:
  - protocol: TCP
    port: 6379
    targetPort: 6379
    nodePort: 30379
    name: test
  selector:
    app: default.Deployment.redis_server        

secret yml

apiVersion: v1
kind: Secret
metadata:
  name: mysecret
data:
  username: xxx
  password: yyy

# 敏感數(shù)據(jù)必須是base64編碼后的結(jié)果,如上面的username和password
# 創(chuàng)建secret用 kubectl apply -f xxx.yml命令

pod讀取secret yml

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: mypod
    image: busybox
    args:
      - /bin/sh
      - -c
      - sleep 10; touch /tmp/healthy; sleep 30000
    volumeMounts:
    - name: foo
      mountPath: "/etc/foo"
      readOnly: true
  volumes:
  - name: foo
    secret:
      secretName: mysecret
# k8s會(huì)在 /etc/foo 下創(chuàng)建文件,每個(gè)數(shù)據(jù)創(chuàng)建一個(gè)文件,文件名是數(shù)據(jù)的key
# 即 會(huì)存在 username 和 password兩個(gè)文件,內(nèi)容就是其內(nèi)容的明文存儲(chǔ)
# volume方式支持動(dòng)態(tài)更新

pod也可以使用環(huán)境變量方式讀取secret數(shù)據(jù),但不支持動(dòng)態(tài)更新

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: mypod
    image: busybox
    args:
      - /bin/sh
      - -c
      - sleep 10; touch /tmp/healthy; sleep 30000
    env:
      - name: SECRET_USERNAME
        valueFrom:
          secretKeyRef:
            name: mysecret
            key: username
      - name: SECRET_PASSWORD
        valueFrom:
          secretKeyRef:
            name: mysecret
            key: password

configMap yml
和secret大致相似

piVersion: v1
kind: ConfigMap
metadata:
  name: myconfigMap
data:
  config1: xxx
  config2: yyy
    #調(diào)用方式和secret相似,對(duì)應(yīng)類(lèi)型換成configMap就OK了

另外還可以通過(guò)模版生成
? 用run命令生成
kubectl run --image=nginx my-deploy -o yaml --dry-run > my-deploy.yaml
? 用get命令導(dǎo)出
kubectl get my-deploy/nginx -o=yaml --export > my-deploy.yaml
? Pod容器的字段拼寫(xiě)忘記了
kubectl explain pods.spec.containers

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI