k8s查看pod的yaml文件_【大强哥-k8s从入门到放弃04】Yaml语法解析
依然小福利【Python-零基礎入門】2020感謝走進我的生命,Python!(已更新至206集)_嗶哩嗶哩 (゜-゜)つロ 干杯~-bilibili?www.bilibili.com
一、K8S名稱空間
嗯,名稱空間是個小插曲,yaml在下面
1、Yaml文件創建名稱空間
1.編寫Yaml文件# vim namespace.yml---apiVersion:v1kind:Namespacemetadata:name:ns-monitorlabels:name:ns-monitoruid:88882. 創建資源# kubectl apply -f namespace.ymlnamespace/ns-monitor created3. 查看資源# kubectl get namespaceNAME STATUS AGEdefault Active 67dkube-public Active 67dkube-system Active 67dns-monitor Active 14s
2、命令行方式創建名稱空間
# kubectl create ns testns
二、Yaml語法解析
1、YAML介紹除了某些強制性的命令,如:kubectl run或者expose等,會隱式創建rc或者svc,k8s還允許通過配置文件的方式來創建這些操作對象。
通常,使用配置文件的方式會比直接使用命令行更可取,因為這些文件可以進行版本控制,而且文件的變化和內容也可以進行審核,當使用及其復雜的配置來提供一個穩健、可靠和易維護的系統時,這些點就顯得非常重要。
在聲明定義配置文件的時候,所有的配置文件都存儲在YAML或者JSON格式的文件中并且遵循k8s的資源配置方式。
kubectl可以創建、更新、刪除和獲得API操作對象,當前apiVersion、kind和name會組成一個API Path以供kubectl來調用。
YAML是專門用來寫配置文件的語言,非常簡潔和強大,使用比json更方便。它實質上是一種通用的數據串行化格式。kubernetes中用來定義YAML文件創建Pod和創建Deployment等資源。
2、使用YAML做K8s資源定義的好處便捷性: 不必添加大量的參數到命令行中執行命令
可維護性: YAML文件可以通過源頭控制,跟蹤每次操作
靈活性: YAML可以創建比命令行更加復雜的結構
3、YAML語法規則大小寫敏感
使用縮進表示層級關系
縮進時不允許使用Tab鍵,只允許使用空格
縮進的空格數不重要,只要相同層級的元素左側對齊即可
#表示注釋,從這個字符一直到行尾,都會被解析器忽略
在同一個yaml配置文家內可以同時定義多個資源
4、yaml結構類型
在 k8s 中,只需要知道兩種結構類型:Lists
Maps
4.1、YAML Maps
Map指的是字典,即一個Key:Value 的鍵值對信息。
例如:
---apiVersion:v1kind:Pod"---"
為可選的分隔符 ,當需要在一個文件中定義多個結構的時候需要使用。上述內容表示有兩個鍵apiVersion和kind,分別對應的值為v1和Pod。
Maps的value既能夠對應字符串也能夠對應一個Maps
例如:
---apiVersion:v1kind:Podmetadata:name:kube100-sitelabels:app:web
注:上述的YAML文件中,metadata這個KEY對應的值為一個Maps,而嵌套的labels這個KEY的值又是一個Map。實際使用中可視情況進行多層嵌套。
YAML處理器根據行縮進來知道內容之間的關聯。上述例子中,使用兩個空格作為縮進,但空格的數據量并不重要,只是至少要求一個空格并且所有縮進保持一致的空格數 。例如,name和labels是相同縮進級別,因此YAML處理器知道他們屬于同一map;它知道app是lables的值因為app的縮進更大。
4.2、YAML Lists
List即列表,就是數組。例:
args:- beijing- shanghai- shenzhen- guangzhou
可以指定任何數量的項在列表中,每個項的定義以連字符(-)開頭,并且與父元素之間存在縮進。
在JSON格式中,表示如下:
{
"args": ["beijing", "shanghai", "shenzhen", "guangzhou"]
}
當然Lists的子項也可以是Maps,Maps的子項也可以是List,例如:
---apiVersion:v1kind:Podmetadata:name:kube100-sitelabels:app:webspec:containers:- name:front-endimage:nginxports:- containerPort:80- name:flaskapp-demoimage:jcdemo/flaskappports:8080
如上述文件所示,定義一個containers的List對象,每個子項都由name、image、ports組成,每個ports都有一個KEY為containerPort的Map組成,轉成JSON格式文件:
{
"apiVersion": "v1",
"kind": "Pod",
"metadata": {
"name": "kube100-site",
"labels": {
"app": "web"
},
},
"spec": {
"containers": [{
"name": "front-end",
"image": "nginx",
"ports": [{
"containerPort": "80"
}]
}, {
"name": "flaskapp-demo",
"image": "jcdemo/flaskapp",
"ports": [{
"containerPort": "5000"
}]
}]
}
}
k8s的pod中運行容器,一個包含簡單的Hello World容器的pod可以通過YAML文件這樣來定義:
apiVersion:v1kind:Pod deployment servicemetadata:name:hello-worldspec:restartPolicy:Nevercontainers:- name:helloimage:"ubuntu:14.04"command:["/bin/echo","hello","world"]
創建的pod名為metadata.name的值:hello-world,該名稱必須是唯一的。
spec的內容為該pod中,各個容器的聲明restartPolicy:Never 表示啟動后運行一次就終止這個pod。
containers[0].name 為容器的名字。
containers[0].image 為該啟動該容器的鏡像。
containers[0].command 相當于Dockerfile中定義的Entrypoint,可以通過下面的方式來聲明cmd的參數:
command: ["/bin/echo"]
args: ["hello","world"]
總結
以上是生活随笔為你收集整理的k8s查看pod的yaml文件_【大强哥-k8s从入门到放弃04】Yaml语法解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: fossid安装教程_如何在一个 U 盘
- 下一篇: centos运行jar包需要的环境_Ce