工做負載型資源(workload):Pod, ReplicaSet, Deployment, StatefulSet, DaemonSet, Job, Cronjob,...node
服務發現及負載均衡資源: Service, Ingress, ...nginx
配置與存儲相關資源: 存儲卷(Volume),CSI(容器存儲接口);ConfigMap,Secret, DownwardAPIapi
集羣級資源:NameSpace, Node, Role, ClusterRole, RoleBinding, ClusterRoleBinding數組
元數據型資源: HPA, PodTemplate, LimitRangeapp
建立資源時apiserver僅接收JSON格式的資源定義,kubectl run
這種方式運行一個資源,這種方式kubectl會自動把各個參數轉換爲JSON格式,而在對k8s資源進行管理時直接使用JSON格式的數據不太讓人容易維護和理解,因此使用yaml格式的方式來編寫,yaml能無損的轉換爲JSON格式。負載均衡
要想獲取一個已有資源的yaml格式文件,只須要在獲取資源信息時加上-o yaml
選項便可,如運維
# 獲取一個pod資源的yaml格式的信息 k8s@node01:~$ kubectl get pod myapp-dep-c988cf69-2dps2 -o yaml # 獲取一個node資源的yaml格式的信息 k8s@node01:~$ kubectl get node node01 -o yaml
大部分資源配置清單字段frontend
apiVersion: group/version
表示使用apiServer的版本ide
apiVersion的版本分了許多組,每一個組又有多個版本並存,若是省略"group",表示是核心組。`kubectl api-versions`可獲取當前apiserver有哪些分組以及版本。
kind: <String>
資源類別spa
metadata: <Object>
元數據
object通常有如下對象: name: 名稱 namespace: 名稱空間 labels: 標籤 annotations: 註解 selfLink: 資源的自引用地址,格式爲: /api/GROUP/VERSION/namespaces/NAMESPACE/TYPE/NAME,如:「selfLink: /api/v1/namespaces/default/pods/myapp-dep-c988cf69-2dps2」
spec: <Object>
定義用戶對資源指望的目標狀態
status: <Object>
資源的當前狀態,該字段由k8s集羣動態維護,用戶不可定義該字段,對用戶只讀
資源配置清單中所用到的字段衆多,能實現對資源的各類定義,幫助的獲取對運維人員尤爲重要,好在kubectl命令爲咱們提供了對各類資源定義時的幫助信息。
# 獲取用戶能定義哪些資源類型 k8s@node01:~$ kubectl api-resources # 使用explain選項查看指定類型資源的定義幫助信息 k8s@node01:~$ kubectl explain --help # 查看pods資源的幫助 k8s@node01:~$ kubectl explain pods # 查看pods下spec字段的幫助,若是還有下一級,依此類推 k8s@node01:~$ kubectl explain pods.spec
k8s@node01:~/my_manifests$ pwd /home/k8s/my_manifests k8s@node01:~/my_manifests$ cat pods-demo.yaml apiVersion: v1 kind: Pod metadata: name: pod-demo namespace: default labels: app: myapp tier: frontend spec: containers: - name: app image: ikubernetes/myapp:v1 imagePullPolicy: IfNotPresent - name: bbox image: busybox:latest imagePullPolicy: IfNotPresent command: - "/bin/sh" - "-c" - "sleep 3600"
yaml語法說明:
使用縮進表示層級關係,縮進的空格數不重要,只要相同層級的元素左對齊便可。若是是對象(Object),也叫映射(mapping)/哈希(hash)/字典(dictionary)。
對象鍵值對使用冒號結構表示 key: value,冒號後面要加一個空格,key的值是一個對象,則使用 key:{key1: value1, key2: value2, ...},也能夠使用縮進表示
key: child-key: value child-key2: value2
以 - 開頭的行表示構成一個數組
- A - B
事例中
labels: app: myapp tier: frontend 能夠改寫爲 labels: {app: myapp, tier: frontend} ########### containers: - name: app image: ikubernetes/myapp:v1 imagePullPolicy: IfNotPresent - name: bbox image: busybox:latest imagePullPolicy: IfNotPresent command: - "/bin/sh" - "-c" - "sleep 3600" 可改寫爲 containers: [{name: app, image: ikubernetes/myapp:v1, imagePullPolicy: IfNotPresent}, {name: bbox, image: busybox:latest, command: ["/bin/sh", "-c", "sleep 3600"]}]
但實際中縮寫yaml文件都保持yaml的風格,不太會使用{}
和[]
。
應用yaml文件
k8s@node01:~/my_manifests$ kubectl create -f pods-demo.yaml # 根據資源清單建立相應資源 pod/pod-demo created k8s@node01:~$ kubectl get pods NAME READY STATUS RESTARTS AGE myapp-dep-c988cf69-2dps2 1/1 Running 0 3h13m myapp-dep-c988cf69-hjm8j 1/1 Running 0 3h14m myapp-dep-c988cf69-j56hp 1/1 Running 0 3h13m mynginx-deployment-646959f957-jqq67 1/1 Running 0 3h13m pod-demo 2/2 Running 0 84s k8s@node01:~/my_manifests$ kubectl delete -f pods-demo.yaml # 根據資源清單刪除相應的資源 pod/pod-demo created