kubernetes快速入門-資源清單及初識pod資源

k8s資源清單及初識pod資源

k8s資源對象

工做負載型資源(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

Pod資源配置格式

建立資源時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

自主式pod配置清單事例

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
相關文章
相關標籤/搜索