簡單認識
k8s 集群中對資源管理和資源對象編排部署都可以通過聲明樣式( YAML)文件來解決, 也 就是可以把需要對資源對象操作編輯到YAML格式文件中,
一般使用 YAML 格式的文件來創建符合我們預期期望的 pod , 我們把這種文件叫做資源清單文件,
通過 kubectl 命令直接使用資源清單文件就可以實現對大量的資源對象進行編排部署,會玩SpringBoot的同志應該就是相當熟悉了
-
通過縮進表示層級關系
-
不能使用Tab進行縮進,只能使用空格
-
一般開開頭使用兩個空格
-
字符key后縮進一個空格 key: value
-
使用 --- 表示一個新的yaml文件的開始
YAML文件的組成部分
容器編排常用屬性
-
每個yaml必須存在的屬性
-
spec : [主要對象]
如何快速編寫一個YAMl文件
手寫是不可能手寫的,哪怕你叫一個常年玩k8s的大佬來寫,估計想寫出沒錯的文件都怕拉閘
所以一般會有兩種方式來書寫YAMl文件,反正都是用工具生成的導出來改改
-
使用kubectl create 命令生成yaml文件
這種適用於0准備,使用命令創建一個pod但是不運行,導出默認的yaml,我們再手動改造完成
-
kubectl get 導出yaml文件
這種適用於已經有相似資源已經部署完成,我們導出他的yaml,再手動改改完成
這個nginx部署室友問題的,但是也不影響我們我們想要看到數據
資源編排YAML詳解
apiVersion: v1 #指定api版本,此值必須在kubectl apiversion中 kind: Pod #指定創建資源的角色/類型 metadata: #資源的元數據/屬性 name: web04-pod #資源的名字,在同一個namespace中必須唯一 labels: #設定資源的標簽 k8s-app: apache 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: web04-pod #容器的名字 image: web:apache #容器使用的鏡像地址 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.1 #CPU資源(核數),兩種方式,浮點數或者是整數+m,0.1=100m,最少值為0.001核(1m) memory: 32Mi #內存使用量 limits: #資源限制最大范圍 cpu: 0.5 memory: 64Mi ports: - containerPort: 80 #容器開發對外的端口 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,這里設備類型支持很多種









