目錄
一、K8S支持的文件格式
1、yaml和json的主要區(qū)別
2、YAML語言格式
二、YAML
1、查看 API 資源版本標(biāo)簽
2、編寫資源配置清單
2.1 編寫 nginx-test.yaml 資源配置清單
2.2 創(chuàng)建資源對象
2.3 查看創(chuàng)建的pod資源
3、創(chuàng)建service服務(wù)對外提供訪問并測試
3.1 編寫nginx-svc-test.yaml文件
3.2 創(chuàng)建資源對象
3.3 訪問測試
三、詳解K8S中的Port
四、試運(yùn)行生成 yaml 模板后創(chuàng)建實例
1、–dry-run:試運(yùn)行
2、查看生成yaml格式
3、查看生成json格式
4、使用 yaml 格式導(dǎo)出生成模板
5、使用 yaml 模板創(chuàng)建實例
6、將現(xiàn)有資源生成 yaml 模板導(dǎo)出并保存為文件
7、查看字段幫助信息
五、總結(jié)
一、K8S支持的文件格式
kubernetes支持YAML和JSON文件格式管理資源對象。
JSON格式:主要用于api接口之間消息的傳遞
YAML格式:用于配置和管理,YAML是一種簡潔的非標(biāo)記性語言,內(nèi)容格式人性化,較
易讀
1、yaml和json的主要區(qū)別
- YAML 使用空格縮進(jìn),這是 Python 開發(fā)人員熟悉的領(lǐng)域。
- JavaScript 開發(fā)人員喜歡 JSON,因為它是 JavaScript 的一個子集,可以直接在
- JavaScript中解釋和編寫,同時使用簡寫方式聲明 JSON,在使用沒有空格的典型變量名時,不需要鍵中的雙引號。
- 有很多解析器在 YAML 和 JSON 的所有語言中都能很好地工作。
- 在許多情況下,YAML 的空白格式可以更容易查看,因為格式化需要更人性化的方法。
如果您的編輯器中沒有空格可見或縮進(jìn)線指示符,那么 YAML 的空白雖然更緊湊,更容易查看,但可能難以手動編輯。 - JSON 的序列化和反序列化要快得多,因為要檢查的功能明顯少于 YAML,這使得更小更輕的代碼能夠處理 JSON。
- 一個常見的誤解是 YAML 需要較少的標(biāo)點符號并且比 JSON更緊湊,但這完全是錯誤的??崭袷遣豢梢姷?,所以看起來字符較少,但是如果你計算實際的空格是必要的,以便正確解釋 YAML以及正確的縮進(jìn),你會發(fā)現(xiàn) YAML 實際上需要比 JSON 更多的字符。JSON不使用空格來表示層次結(jié)構(gòu)或分組,并且可以通過刪除不必要的空格來輕松展平,以實現(xiàn)更緊湊的傳輸。
?
2、YAML語言格式
- 大小寫敏感
- 使用縮進(jìn)表示層級關(guān)系
- 不支持 Tab 鍵制表符縮進(jìn),只使用空格縮進(jìn)
- 縮進(jìn)的空格數(shù)目不重要,只要相同層級的元素左側(cè)對齊即可,通常開頭縮進(jìn)兩個空格
- 符號字符后縮進(jìn)一個空格,如冒號,逗號,短橫杠(-)等
- — 表示 YAML 格式,一個文件的開始,用于分隔文件
- # 表示注釋
二、YAML
1、查看 API 資源版本標(biāo)簽
kubectl api-versions
2、編寫資源配置清單
2.1 編寫 nginx-test.yaml 資源配置清單
vim nginx-test.yaml
#指定api版本標(biāo)簽
apiVersion: apps/v1
#定義資源的類型/角色,deployment為副本控制器
#此處資源類型可以是Deployment、Job、Ingress、Service等
kind: Deployment
#定義資源的元數(shù)據(jù)信息,比如資源的名稱、namespace、標(biāo)簽等信息
metadata:
#定義資源的名稱,在同一個namespace空間中必須是唯一的
name: nginx-deployment
labels:
app: nginx
#定義deployment資源需要的參數(shù)屬性,諸如是否在容器失敗時重新啟動容器的屬性
spec:
#定義副本數(shù)量
replicas: 3
#定義標(biāo)簽選擇器
selector:
#定義匹配標(biāo)簽
matchLabels:
#需與后面的.spec.template.metadata.labels定義的標(biāo)簽保持一致
app: nginx
#定義業(yè)務(wù)模板,如果有多個副本,所有副本的屬性會按照模板的相關(guān)配置進(jìn)行匹配
template:
metadata:
#定義Pod副本將使用的標(biāo)簽,需與前面的.spec.selector.matchLabels定義的標(biāo)簽保持一致
labels:
app: nginx
spec:
#定義容器屬性
containers:
#定義一個容器名,一個-name:定義一個容器
- name: nginx
#定義容器使用的鏡像以及版本
image: nginx:1.15.4
ports:
#定義容器對外的端口
- containerPort: 80
#------------------------------------------------------------------#
#無注釋
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.15.4
ports:
- containerPort: 80
2.2 創(chuàng)建資源對象
kubectl create -f nginx-test.yaml --validate=false
2.3 查看創(chuàng)建的pod資源
kubectl get pods -o wide
3、創(chuàng)建service服務(wù)對外提供訪問并測試
3.1 編寫nginx-svc-test.yaml文件
[root@master ~]# vim nginx-svc-test.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-svc
labels:
app: nginx
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
selector:
#此處定義的selector要與deployment所定義的selector相同
#service依靠標(biāo)簽選擇器來檢索提供服務(wù)的nodes
app: nginx
3.2 創(chuàng)建資源對象
kubectl create -f nginx-svc-test.yaml
kubectl get svc
3.3 訪問測試
訪問nginx-test的ip
curl 10.96.28.172:80
curl 192.168.160.40:32139
??
三、詳解K8S中的Port
port
- port 是 k8s 集群內(nèi)部訪問 service 的端口,即通過 clusterIP:port 可以從 Pod 所在的Node上訪問到service nodePort
nodePort
- 是外部訪問 k8s 集群中 service 的端口,通過 nodeIP:nodePort 可以從外部訪問到service
targetPort
- targetPort 是 Pod 的端口,從 port 或 nodePort 來的流量經(jīng)過 kube-proxy反向代理負(fù)載均衡轉(zhuǎn)發(fā)到后端 Pod 的 targetPort 上,最后進(jìn)入容器
containerPort
- containerPort 是 Pod 內(nèi)部容器的端口,targetPort 映射到 containerPort
四、試運(yùn)行生成 yaml 模板后創(chuàng)建實例
1、–dry-run:試運(yùn)行
–dry-run:表示試運(yùn)行,不真正執(zhí)行命令(測試命令是否正確),即并不會真的創(chuàng)建出 pod 和 deployment 實例,去掉該參數(shù)后即可真正執(zhí)行命令。
kubectl create deployment dryrun-test --image=nginx --port=80 --replicas=3 --dry-run
#打印相應(yīng)的 API 對象而不執(zhí)行創(chuàng)建
2、查看生成yaml格式
使用 --dry-run 試運(yùn)行可不觸發(fā)生成命令,然后通過 -o yaml 可實現(xiàn)對其 yaml 資源配置清單的查看
kubectl run dryrun-test --image=nginx --port=80 --replicas=3 --dry-run -o yaml
3、查看生成json格式
可通過 -o json 查看該命令產(chǎn)生的 json 配置清單
kubectl run dryrun-test --image=nginx --port=80 --replicas=3 --dry-run -o json
4、使用 yaml 格式導(dǎo)出生成模板
kubectl create deployment dryrun-test --image=nginx --port=80 --replicas=3 --dry-run=client -o yaml > dryrun-test.yaml
5、使用 yaml 模板創(chuàng)建實例
kubectl apply -f dryrun-test.yaml
kubectl get pod,deploy
6、將現(xiàn)有資源生成 yaml 模板導(dǎo)出并保存為文件
kubectl get deploy/dryrun-test -o yaml
kubectl get deploy/dryrun-test -o yaml > export-test.yaml
7、查看字段幫助信息
explain 可一層層的查看相關(guān)資源對象的幫助信息
kubectl explain deployments.spec.template.spec.containers
五、總結(jié)
沒有相關(guān)資源,使用 run 命令 --dry-run 選項
kubectl run dryrun-test --image=nginx --port=80 --replicas=3 --dry-run -o yaml > dryrun-test.yaml
已有相關(guān)資源,使用 get 命令 --export 選項
kubectl get deploy dryrun-test --export -o yaml > export-test.yaml
寫yaml太累怎么辦?
用 --dry-run 命令生成文章來源:http://www.zghlxwxcb.cn/news/detail-652219.html
kubectl run my-deploy --image=nginx --dry-run=client -o yaml > my-deploy.yaml
用get命令導(dǎo)出文章來源地址http://www.zghlxwxcb.cn/news/detail-652219.html
kubectl get svc nginx-service -o yaml > my-svc.yaml
或
kubectl edit svc nginx-service ?#復(fù)制配置,再粘貼到新文件
到了這里,關(guān)于K8S---yaml文件詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!