k8s資源對象以及yaml配置清單

k8s有五種工作負載資源控制器:

1. Pod:自主式Pod,不受控制器控制,失敗了,不會被自動修復。

2. ReplicaSet:支持擴縮容、自動恢復達到期望的副本數、標籤選擇器。幫用戶管理無狀態的服務。

3. Deployment:工作在ReplicaSet之上,還支持滾動更新、聲明式定義(動態修改配置),pod數量可以大於node數量,無狀態,關注羣體穩定。

4. StatefulSet:有狀態pod,關注個體穩定。

5. DaemonSet:用於確保集羣中的每一個節點(或者只在部分節點)只運行一個pod,如系統級的後臺用戶,logstash等。

6. Job:執行完任務就退出,不需要一直運行;如果任務沒有完成就crash還是會恢復,直到任務完成。

服務發現及服務均衡資源: Service, Ingress

配置與存儲: Volume, CSI, configMap(配置), Secret(存儲敏感信息)

大部分資源配置清單都由五個關鍵字組成

apiVersion :   表示屬於哪一個羣組及其版本,如果沒有指定羣組(apiVersion: v1)怎表面是core羣組(基本組件羣組)

                   kubectl api-versions這個命令可以顯示出當前支持的apiVersioin示例

kind:     資源類別,用來標記你打算創建一個怎麼樣的資源,Pod, ReplicaSet, Deployment..Service, Ingress...

metadata: 元數據

        name:

        namespace:

        labels: 每一個資源的標籤

       annotations: 資源註解

       uid: 唯一標誌

       每個資源的引用路徑: /api/GROUP/VERSION/namespace/NAMESPACE/TYPE/NAME, 可以用curl去獲取

spec:   用戶預期達到的目標狀態描述   

status:當前狀態,此狀態會無限與spec靠近, 此字段k8s維護,用戶只能讀取,不能修改。

以上每一個關鍵字都可以通過 kubectl explain xx來獲取詳細信息,如 kubectl explain pod  

當我想知道pod的metadata怎麼定義時,可以 kubectl explain pod.metada , 想知道spec下面的container怎麼定義時: kubectl explain pod.spec.containers

第一個yaml資源配置清單

vim first-demo.yaml

apiVersion: v1
kind: Pod      #Pod類型
metadata:
  name: pod-demo
  namespace: default
  labels:      #這個通過kubectl explain pods.metadata.labels得知它是<map[string]string>類型的,則需要寫成如下,也可以寫成

                  #{app:myapp, tier: frontend}
    app: myapp
    tier: frontend

spec: #kubectl explain pods.spec輸出中可以看到 containers 後面有一個containers   <[]Object> -required- 說明containers是必             

#須 有的, <[]Object> 說明它是一個列表的則需要以如下方式定義,- 開頭

   containers: ## kubectl explain pods.spec.containers可以

   - name: myapp

      image: ikubernetes/myapp:v1

  - name: busybox

     image: busybox:latest

     command:  #["/bin/sh", "-c", "sleep 3600"], 因爲 command      <[]string>又是列表類型的,所以它有兩種定義方式

     - "/bin/sh"

     - "-c"

    - "echo ${date} >> /usr/share/nginx/html/index.html; sleep 5"

寫好,保存退出。

[root@master manifests]# pwd
/root/manifests
[root@master manifests]# ls
pod-demo.yaml
然後: 

[root@master manifests]# kubectl create -f pod-demo.yaml   #根據資源配置清單生成pod
pod/pod-demo created
[root@master manifests]# kubectl get pods  #查看pod狀態
NAME       READY   STATUS    RESTARTS   AGE
pod-demo   2/2     Running   0          19s
[root@master manifests]# kubectl get pods
NAME       READY   STATUS    RESTARTS   AGE
pod-demo   1/2     Running   1          32s
[root@master manifests]#

查看生成後的pod描述:詳細顯示了pod的信息, describe pods,這裏先指定pods類型,再指定名稱

[root@master manifests]# kubectl describe pods pod-demo
。。。

使用 kubectl logs pod-demo myapp,可查看pod內部容器日誌

 kubectl delete pods pod-demo 可以刪除pod, 也可以通過yaml文件刪除:  kubectl delete -f pod-demo.yaml

kubectl get pods -w 可以監控pod狀態

kubectl exec -it pod-demo -c myapp -- /bin/sh 可以進入到容器裏面

注意: 同一個pod中運行多個container時,它們的文件系統也是隔離的,除非我們讓它們掛載到同一個數據卷中。

 

標籤:

許多資源支持內嵌字段定義其使用的標籤選擇器:

   matchLabels: 直接給定鍵值

   matchExpressions: 基於給定的表達式來定義使用標籤選擇器,{key:"KEY", operator:"OPERATOR",values:[V1, V2...]}

      操作符:In,NotIn: values字段的值必須爲非空列表;

                    Exists, NotExists: values字段的值必須爲空列表

nodeSelector <map[string]string>

    節點標籤選擇器

nodeName <string>

annotations: 與label不同的地方在於, 它不能用於挑選資源對象,僅用於爲對象提供“元數據”。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章