k8s-yaml詳解


一、YAML簡介及說明

YAML 是 "YAML Ain't a Markup Language"(YAML 不是一種標記語言)的遞歸縮寫。在開發的這種語言時,YAML 的意思其實是:"Yet Another Markup Language"(仍是一種標記語言)。

基本語法:

  • 大小寫敏感
  • 使用縮進表示層級關系
  • 縮進不允許使用tab,只允許空格
  • 縮進的空格數不重要,只要相同層級的元素左對齊即可
  • '#'表示注釋

數據類型:
YAML 支持以下幾種數據類型:

  • 對象:鍵值對的集合,又稱為映射(mapping)/ 哈希(hashes) / 字典(dictionary)
  • 數組:一組按次序排列的值,又稱為序列(sequence) / 列表(list)
  • 純量(scalars):單個的、不可再分的值

這里我們說一下對象映射以及數組

YAML 對象:

對象鍵值對使用冒號結構表示 key: value,冒號后面要加一個空格。
也可以使用 key:{key1: value1, key2: value2, ...}。

還可以使用縮進表示層級關系;

apiVersion: v1
kind: Pod
metadata:
  name: k8s01-prod
  labels:
    app: test

YAML 數組:

以 - 開頭的行表示構成一個數組:

- zhangsan 
- lisi
- wangwu

YAML 支持多維數組,可以使用行內表示:

{
key: [zhangsan, lisi, wngwu, ...]
}

數組的子項也可以是數組:

companies:
    -
        id: 1
        name: zhangsan
        price: 200W
    -
        id: 2
        name: lisi
        price: 500W

        id: 3
        name: wangwu
        price: 1000W

二、k8s下的YAML使用及說明

2.1 YAML創建Deployment

kubectl get nodes           # 查看nodes
kubectl get ns              # 查看命名空間
kubectl get pods            # 查看pods
kubectl creat n  s test1    # 創建新的命名空間test1
curl -L https://github.com/ahmetb/kubectx/releases/download/v0.9.1/kubens -o /bin/kubens
chmod +x /bin/kubens        # 安裝kubens 並給與權限
kubens test1                # 切換命名空間test1
kubectl get deploy          # 查看應用
kubectl create deployment test-yaml --image=nginx --dry.run=client -o yaml > test-yaml.yaml
                            # 創建名為test-yaml的deployment test-yaml.yaml
vim test-yaml.yaml          # 編輯yaml

YAML文件詳解

#test-yaml 
apiVersion: apps/v1                           # 指定api版本,此值必須在kubectl apiversion中 ,可通過kubectl api-versions命令查看所有的api版本  
kind: Deployment                              # 指定創建資源的角色/類型   
metadata:                                     # 資源的元數據/屬性   
  name: test-pod                              # 資源的名字,在同一個namespace中必須唯一   
  labels:                                     # 設定資源的標簽 
    k8s-app: nginx   
    version: v1   
    kubernetes.io/cluster-service: "true"   
  annotations:                                # 自定義注解列表   
    - name: String                            # 自定義注解名字   
spec:                                         # specification of the resource content 指定該資源的內容   
  restartPolicy: Always                       # 表明該容器一直運行,默認k8s的策略,在此容器退出后,會立即創建一個相同的容器   
  nodeSelector:                               # 節點選擇,先給主機打標簽kubectl label nodes kube-node1 zone=node1   
    zone: node1   
  containers:   
  - name: test-pod                            # 容器的名字   
    image: 10.133.133.10:12321/devops/nginx:latest # 容器使用的鏡像地址   
    imagePullPolicy: Never                    # 三個選擇Always、Never、IfNotPresent,每次啟動時檢查和更新(從registery)images的策略, 
                                              # Always,每次都檢查 
                                              # Never,每次都不檢查(不管本地是否有) 
                                              # IfNotPresent,如果本地有就不檢查,如果沒有就拉取 
    command: ['sh']                           # 啟動容器的運行命令,將覆蓋容器中的Entrypoint,對應Dockefile中的ENTRYPOINT   
    args: ["$(str)"]                          # 啟動容器的命令參數,對應Dockerfile中CMD參數   
    env:                                      # 指定容器中的環境變量   
    - name: str                               # 變量的名字   
      value: "/etc/run.sh"                    # 變量的值   
    resources:                                # 資源管理 
      requests:                               # 容器運行時,最低資源需求,也就是說最少需要多少資源容器才能正常運行   
        cpu: 0.5                              # CPU資源(核數),兩種方式,浮點數或者是整數+m,0.1=100m,最少值為0.001核(1m) 
        memory: 500Mi                         # 內存使用量   
      limits:                                 # 資源限制   
        cpu: 1  
        memory: 1000Mi   
    ports:   
    - containerPort: 30000                    # 容器開發對外的端口 
      name: httpd                             # 名稱 
      protocol: TCP    
    livenessProbe:                            # pod內容器健康檢查的設置 
      httpGet:                                # 通過httpget檢查健康,返回200-399之間,則認為容器正常   
        path: /                               # URI地址   
        port: 80   
                                              # host: 127.0.0.1 #主機地址   
        scheme: HTTP   
      initialDelaySeconds: 180                # 表明第一次檢測在容器啟動后多長時間后開始   
      timeoutSeconds: 5                       # 檢測的超時時間   
      periodSeconds: 15                       # 檢查間隔時間   
                                              # 也可以用這種方法   
                                              # exec: 執行命令的方法進行監測,如果其退出碼不為0,則認為容器正常   
                                              #   command:   
                                              #     - cat   
                                              #     - /tmp/health   
                                              # 也可以用這種方法   
                                              # tcpSocket: //通過tcpSocket檢查健康    
                                              #   port: number    
    lifecycle:                                # 生命周期管理   
      postStart:                              # 容器運行之前運行的任務   
        exec:   
          command:   
            - 'sh'   
            - 'yum upgrade -y'   
      preStop:#容器關閉之前運行的任務   
        exec:   
          command: ['service httpd stop']   
    volumeMounts:                             # 掛載持久存儲卷 
    - name: volume                            # 掛載設備的名字,與volumes[*].name 需要對應     
      mountPath: /data                        # 掛載到容器的某個路徑下   
      readOnly: True   
  volumes:                                    # 定義一組掛載設備   
  - name: volume                              # 定義一個掛載設備的名字   
                                              # meptyDir: {}   
    hostPath:   
      path: /opt                              # 掛載設備類型為hostPath,路徑為宿主機下的/opt,這里設備類型支持很多種 
                                              # nfs


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM