【k8s學習筆記】理解kubernetes對象


Kubernetes對象

在Kubernetes中,對象是持久化到etcd中的實體,使用這些對象的狀態來表示集群的狀態。

創建對象本質上是告知k8s系統期望工作負載是什么樣子的,稱為期望狀態(Desired State)。

操作k8s對象本身就是通過Kubernetes API操作etcd中對象的狀態。

對象規格與狀態(Object Spec and Status)

絕大多數k8s的對象都包含兩部分,分別為 期望狀態(Spec)實際狀態(Status),Spec 是用戶設置的期望狀態;而Status由k8s系統提供,由k8s系統設置。

當Spec 與 Status 不一致時,控制平面會啟動新的 Pod 以匹配期望狀態。

以一個簡單的 nginx-deployment舉例(暫不關心內容):

apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2 # tells deployment to run 2 pods matching the template
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

通過kubectl diff -f nginx-deployment,我們可以看到spec與status處於平級關系:

kubectl diff 命令不是真的去應用配置文件,而是展示應用后會如何,后續有時間介紹kubectl的常用命令

用yaml描述Kubernetes對象

當需要創建k8s對象時,必須提供對象的期望狀態,包含此對象的基本信息(如,名稱等)。這些描述信息要被Kubernetes API接收,都需要轉換成 JSON的請求體。一般而言,對於kubectl使用的是yaml格式的文件,kubectl 會將其轉換為JSON發送到 Kubernetes API

還用剛才的文件nginx-deployment.yaml進行舉例,以展示Kubernetes Deployment的必要字段:

apiVersion: apps/v1         #創建此對象使用的Kubernetes API版本
kind: Deployment            #對象類型
metadata:                   #唯一標識對象,常包含name、UID和可選的namespace
  name: nginx-deployment    #對象名稱唯一標識
spec:                       #期望狀態
  selector:                 #label選擇器
    matchLabels:
      app: nginx            #匹配的標簽
  replicas: 2               #副本數,告知k8s集群要創建幾個當前對象的pod
  template:                 #根據此模板創建Pod副本
    metadata:
      labels:
        app: nginx          #Pod副本的標簽,可用於Service匹配
    spec:
      containers:           #Pod內容器定義部分
      - name: nginx         #容器名稱
        image: nginx:1.14.2 #docker鏡像
        ports: 
        - containerPort: 80 #容器內占用的端口號
        

通過kubectl 創建Deployment類型對象到集群

kubectl apply -f nginx-deployment.yaml

每個描述k8s對象的yaml文件,都需要設置四個字段:

  • apiVersion:創建此對象使用的Kubernetes API版本
  • kind:創建對象類型
  • metadata:對象唯一標識設置
  • spec:期望狀態

更多關於配置spec,可以參考官方文檔相關類型的部分


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM