簡單認(rèn)識(shí)
k8s 集群中對(duì)資源管理和資源對(duì)象編排部署都可以通過聲明樣式( YAML)文件來解決, 也 就是可以把需要對(duì)資源對(duì)象操作編輯到Y(jié)AML格式文件中荐绝,
一般使用 YAML 格式的文件來創(chuàng)建符合我們預(yù)期期望的 pod , 我們把這種文件叫做資源清單文件褪那,
通過 kubectl 命令直接使用資源清單文件就可以實(shí)現(xiàn)對(duì)大量的資源對(duì)象進(jìn)行編排部署,會(huì)玩SpringBoot的同志應(yīng)該就是相當(dāng)熟悉了
語法格式
通過縮進(jìn)表示層級(jí)關(guān)系
不能使用Tab進(jìn)行縮進(jìn),只能使用空格
一般開開頭使用兩個(gè)空格
字符key后縮進(jìn)一個(gè)空格 key: value
使用 --- 表示一個(gè)新的yaml文件的開始
YAML文件的組成部分
容器編排常用屬性
- 每個(gè)yaml必須存在的屬性
- spec : [主要對(duì)象]
如何快速編寫一個(gè)YAMl文件
- 手寫是不可能手寫的,哪怕你叫一個(gè)常年玩k8s的大佬來寫样勃,估計(jì)想寫出沒錯(cuò)的文件都怕拉閘
- 所以一般會(huì)有兩種方式來書寫YAMl文件,反正都是用工具生成的導(dǎo)出來改改
- 使用kubectl create 命令生成yaml文件
- 這種適用于0準(zhǔn)備性芬,使用命令創(chuàng)建一個(gè)pod但是不運(yùn)行彤灶,導(dǎo)出默認(rèn)的yaml,我們?cè)偈謩?dòng)改造完成
kubectl create deployment web --image=nginx -o yaml
- kubectl get 導(dǎo)出yaml文件
- 這種適用于已經(jīng)有相似資源已經(jīng)部署完成,我們導(dǎo)出他的yaml,再手動(dòng)改改完成
- 這個(gè)nginx部署室友問題的批旺,但是也不影響我們我們想要看到數(shù)據(jù)
kubectl get deploy web -o yaml
資源編排YAML詳解
apiVersion: v1 #指定api版本,此值必須在kubectl apiversion中
kind: Pod #指定創(chuàng)建資源的角色/類型
metadata: #資源的元數(shù)據(jù)/屬性
name: web04-pod #資源的名字诵姜,在同一個(gè)namespace中必須唯一
labels: #設(shè)定資源的標(biāo)簽
k8s-app: apache
version: v1
kubernetes.io/cluster-service: "true"
annotations: #自定義注解列表
- name: String #自定義注解名字
spec: #specification of the resource content 指定該資源的內(nèi)容
restartPolicy: Always #表明該容器一直運(yùn)行汽煮,默認(rèn)k8s的策略,在此容器退出后棚唆,會(huì)立即創(chuàng)建一個(gè)相同的容器
nodeSelector: #節(jié)點(diǎn)選擇暇赤,先給主機(jī)打標(biāo)簽kubectl label nodes kube-node1 zone=node1
zone: node1
containers:
- name: web04-pod #容器的名字
image: web:apache #容器使用的鏡像地址
imagePullPolicy: Never #三個(gè)選擇Always、Never宵凌、IfNotPresent鞋囊,每次啟動(dòng)時(shí)檢查和更新(從registery)images的策略,
# Always瞎惫,每次都檢查
# Never溜腐,每次都不檢查(不管本地是否有)
# IfNotPresent,如果本地有就不檢查瓜喇,如果沒有就拉取
command: ['sh'] #啟動(dòng)容器的運(yùn)行命令挺益,將覆蓋容器中的Entrypoint,對(duì)應(yīng)Dockefile中的ENTRYPOINT
args: ["$(str)"] #啟動(dòng)容器的命令參數(shù),對(duì)應(yīng)Dockerfile中CMD參數(shù)
env: #指定容器中的環(huán)境變量
- name: str #變量的名字
value: "/etc/run.sh" #變量的值
resources: #資源管理
requests: #容器運(yùn)行時(shí)乘寒,最低資源需求望众,也就是說最少需要多少資源容器才能正常運(yùn)行
cpu: 0.1 #CPU資源(核數(shù)),兩種方式,浮點(diǎn)數(shù)或者是整數(shù)+m烂翰,0.1=100m夯缺,最少值為0.001核(1m)
memory: 32Mi #內(nèi)存使用量
limits: #資源限制最大范圍
cpu: 0.5
memory: 64Mi
ports:
- containerPort: 80 #容器開發(fā)對(duì)外的端口
name: httpd #名稱
protocol: TCP
livenessProbe: #pod內(nèi)容器健康檢查的設(shè)置
httpGet: #通過httpget檢查健康,返回200-399之間甘耿,則認(rèn)為容器正常
path: / #URI地址
port: 80
#host: 127.0.0.1 #主機(jī)地址
scheme: HTTP
initialDelaySeconds: 180 #表明第一次檢測(cè)在容器啟動(dòng)后多長時(shí)間后開始
timeoutSeconds: 5 #檢測(cè)的超時(shí)時(shí)間
periodSeconds: 15 #檢查間隔時(shí)間
#也可以用這種方法
#exec: 執(zhí)行命令的方法進(jìn)行監(jiān)測(cè)踊兜,如果其退出碼不為0,則認(rèn)為容器正常
# command:
# - cat
# - /tmp/health
#也可以用這種方法
#tcpSocket: //通過tcpSocket檢查健康
# port: number
lifecycle: #生命周期管理
postStart: #容器運(yùn)行之前運(yùn)行的任務(wù)
exec:
command:
- 'sh'
- 'yum upgrade -y'
preStop:#容器關(guān)閉之前運(yùn)行的任務(wù)
exec:
command: ['service httpd stop']
volumeMounts: #數(shù)據(jù)卷掛載
- name: volume #掛載設(shè)備的名字棵里,與volumes[*].name 需要對(duì)應(yīng)
mountPath: /data #掛載到容器的某個(gè)路徑下
readOnly: True
volumes: #定義一組掛載設(shè)備
- name: volume #定義一個(gè)掛載設(shè)備的名字
#meptyDir: {}
hostPath:
path: /opt #掛載設(shè)備類型為hostPath润文,路徑為宿主機(jī)下的/opt,這里設(shè)備類型支持很多種