k8s筆記一(kubernetes資源配置基礎)

    Kubernetes系統的API server基於HTTP/HTTPS接收並響應客戶端的請求,並提供了基於資源的RESTful風格的編程接口並將集羣中的各種組件都抽象成標準的REST資源,並通過標準的HTTP方法以JSON爲數據序列化方案進行資源的管理操作。

1、kubernetes的資源對象(依據資源類型分類)

(1)工作負載型資源

    工作負載型資源用於確保Pod資源對象能夠更好的運行容器化應用。Pod是工作負載型資源中的基礎資源,負責運行容器,併爲其解決環境依賴。

    Pod資源的運行是由工作負載型的資源Pod控制器來管理的;應用程序又有”有狀態”和“無狀態”兩種,所以,管理Pod資源的Pod控制器資源又分以下幾種:

    1)ReplicationController:用來管理無狀態應用,爲上一代控制器;用於確保每個Pod副本在任意一時刻都能滿足目標數量。

    2)ReplicaSet:用來管理無狀態應用,新一代ReplicationController控制器;支持基於集合的選擇器

    3)Deployment:用於管理無狀態的持久化應用,建立在ReplicaSet之上,用於爲Pod和ReplicaSet提供申明式更新。

    4)StatefulSet:管理有狀態持久化應用,會爲每個Pod創建一個獨有的持久性標識符,並會確保各Pod之間的順序性。

    5)DaemonSet:用於確保每個節點都運行了某Pod的一個副本。

    6)Job:用於管理運行完成後即可終止的應用。

(2)、發現和負載均衡性資源

    發現和負載均衡性資源用於讓具有同一種負載的各Pod對象以負載均衡的方式服務於各請求,並讓各種容器化應用彼此之間需要彼此發現以完成工作協同。

(3)配置與存儲

         存儲型資源能夠爲重構的pod對象提供持久化數據存儲機制;configmap資源能夠以環境變量或存儲卷的方式將配置接入到Pod資源的容器中,並且可被多個同類的的Pod共享引用。

(4)集羣級資源

         集羣類型的資源爲管理集羣本身的工作提醒提供了配置接口;集羣資源僅供集羣管理員操作,集羣資源主要類型有:

    1)Namespace:集羣對象名稱的作用範圍,即名稱空間,新創建資源默認屬於“default”

    2)Node:kubernetes集羣工作的節點

    3)Role:名稱空間級別的由規則組成的權限集合,可被RoleBinding引用

    4)ClusterRole:Cluster級別的由規則組成的權限集合,可被RoleBinding和ClusterRole Binding應用

    5)RoleBinding:將Role中的許可權限綁定在一個或一組用戶至上隸屬於且僅能作用於一個名稱空間。

    6)ClusterRoleBinding:將ClusterRole中定義的許可權限綁定在一個或一組用戶至上。

(5)元數據型資源

         元數據型資源用於配置集羣內部其他資源的行爲。

2、對象類資源格式以及配置

         Kubernetes系統上的大多數資源都是由使用者自己創建的;在創建資源時,需要用戶以YAML(創建資源時API server會將yaml格式的資源配置清單轉化爲json格式)或者json序列化的方式定義資源的配置清單。

# 查看名稱空間kube-system的資源配置清單
[root@master01 ~]# kubectl get namespace kube-system -o yaml
apiVersion: v1
kind: Namespace
metadata:
  creationTimestamp: "2019-01-07T08:21:37Z"
  name: kube-system
  resourceVersion: "35"
  selfLink: /api/v1/namespaces/kube-system
  uid: 40350bba-1255-11e9-9f5c-000c298d15e0
spec:
  finalizers:
  - kubernetes
status:
  phase: Active
# 查看service的資源配置清單
[root@master01 ~]# kubectl get svc nginx-svc -o yaml
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: "2019-01-07T09:04:37Z"
  labels:
    run: nginx-deploy
. . . . . .
spec:
  clusterIP: 10.96.249.26
  externalTrafficPolicy: Cluster
  ports:
  - nodePort: 30003
    port: 80
  selector:
    run: nginx-deploy
status:
  loadBalancer: {}

         通過查看系統默認的名稱空間以及創建的service的資源配置清單可以發現資源配置清單中主要包括”apiVersion”、”kind”、”meadata”、”spec”、”status”等五個字段以及這五個字段下的各個子字段。

(1)apiVersion

         apiVersion主要用於定義API的羣組以及相關的版本,定義的格式爲groupname/version

(2)kind

         Kind主要用於定義資源的類型,如Namespace、Pod、Service、Deployment

(3)metadata

         Metadata字段用於描述對象的屬性信息,其內嵌單個字段用於定義資源的元數據,這些字段大體可分爲必要字段和可選字段兩大類:

         1)名稱空間內的必選字段:

                   namespace:指定當前隸屬的名稱空間,默認爲default

                   name:設定當前對象名稱,在其所屬的名稱空間的同一類型中必須唯一

                   uid:當前對象的唯一表示符

         2)常用的可選字段

                   labels:標識當前對象的標籤,鍵值數據,常被用作挑選條件

                   annotation:作爲挑選條件,作爲labels的補充

                   resourceVersion:當前對象的內部版本標識符

                   generation:用於表示當前對象目標狀態的代碼

                   creationTimestamp:當前對象創建日期的時間戳

                   deletionTimestamp:當前對象刪除日期的時間戳

(4)spec字段

         Spec字段用來描述所期望的對象應該具有的狀態

(5)status

         Status字段用來記錄對象在系統上的當前狀態,而status字段僅對活動對象有意義;在資源配置清單中不需要定義status字段,此字段是由kubernetes系統填充或更新。

 

         在創建資源的配置清單時,由於metadata字段及spec字段中多個及多層次的嵌套字段,要想了解某個某個字段及嵌套字段的用法可使用”kubectl explain ”命令查看。

# 查看pod資源的定義
[root@master01 ~]# kubectl explain pod
KIND:     Pod
VERSION:  v1

DESCRIPTION:
     Pod is a collection of containers that can run on a host. This resource is
     created by clients and scheduled onto hosts.
# 查看pod資源中metadata字段下的namespace字段的用法
[root@master01 ~]# kubectl explain pod.metadata.namespace
KIND:     Pod
VERSION:  v1
FIELD:    namespace <string>
DESCRIPTION:
     Namespace defines the space within each name must be unique. An empty
     namespace is equivalent to the "default" namespace, but "default" is the
     canonical representation. Not all objects are required tobe scoped to a
     namespace - the value of this field for those objects will be empty. Must
     be a DNS_LABEL. Cannot be updated. More info:
     http://kubernetes.io/docs/user-guide/namespaces

 

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