k 8 sメモ一(クベルネテツ資源配置基礎)

5197 ワード

KubergnetesシステムのAPI serverは、HTTP/HTTPSに基づいてクライアントの要求を受信し、応答し、リソースベースのRESTfulスタイルのプログラミングインターフェースを提供し、クラスタ内の様々なコンポーネントを標準的なRESTリソースに抽象化し、標準的なHTTP方法によってJSONをデータ順列化スキームにリソースの管理操作を行う。
1、クベルネテツの資源対象(資源タイプによる分類)
(1)作業負荷型資源
    作業負荷型リソースは、Podリソースオブジェクトがより良い容器化アプリケーションを実行できるように確保するために使用される。Podは作業負荷型資源の基礎資源であり、容器の運行を担当し、環境依存を解決する。
    Podリソースの動作は、動作負荷型のリソースPodコントローラによって管理される。アプリケーションはまた「状態」と「無状態」の2種類があります。したがって、Podリソースを管理するPodコントローラのリソースは以下の種類に分けられます。
    1)Replication Controller:無状態アプリケーションを管理するために使用され、前世代のコントローラです。各Podコピーがいずれの時点でも目標数を満たすことができるようにするために使用されます。
    2)Replica Set:無状態アプリケーション、次世代Replication Controllerコントローラを管理するために使用されます。セットに基づく選択をサポートします。
    3)Deployment:無状態の恒久化アプリケーションを管理するために、Replica Setの上に構築し、PodとReplica Setのために申明式の更新を提供するために使用します。
    4)SttefulSet:状態恒久化アプリケーションを管理し、各Podに固有の耐久性識別子を作成し、各Pod間の順序性を確保する。
    5)DaemenSet:各ノードがあるPodのコピーを実行していることを確認するために使用します。
    6)Job:運転完了後に終了するアプリケーションを管理するために使用します。
(2)、発見と負荷の均衡性資源
    発見および負荷の等化リソースは、同じ負荷を持つ各Podオブジェクトを負荷均衡で各要求にサービスするために使用され、各コンテナ化アプリケーションが互いに発見して作業協同を完了する必要がある。
(3)配置と記憶
         記憶型リソースは、再構成されたpodオブジェクトのための持続的データ記憶機構を提供することができる。configmapリソースは、環境変数または格納ボリュームとしてPodリソースのコンテナに構成を接続し、複数の同じ種類のPodによって参照を共有することができる。
(4)クラスタレベルのリソース
         クラスタタイプのリソースは、クラスタ自身の作業リマインダを管理するための構成インターフェースを提供する。クラスタリソースはクラスタ管理者だけで動作し、クラスタリソースの主要なタイプは以下の通りである。
    1)Namespace:クラスタオブジェクト名の作用範囲、すなわち名前空間、新規作成リソースデフォルトは「default」です。
    2)Node:kubenetesクラスタで動作するノード
    3)Role:名前空間レベルの規則による権限セットは、RoleBindingによって参照されます。
    4)CluusterRole:Cluusterクラスの規則で構成される権限セットは、RoleBindingとCluusterRole Bindingによって適用されます。
    5)RoleBinding:Roleの中の許可権限を1つまたは複数のユーザのグループに結び付け、1つの名前空間だけに作用することができる。
    6)CusterRoleBinding:CusterRoleで定義されている許可権限を1つまたは複数のユーザのセットに結び付ける。
(5)メタデータ型リソース
         メタデータ型リソースは、クラスタ内の他のリソースの挙動を設定するために使用される。
2、オブジェクトクラスのリソースフォーマットと配置
         Kubergnetesシステム上の大多数の資源は使用者が自分で創建したものです。リソースを作成するには、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のリソース構成リストを見ると、リソース構成リストには主に「appVersion」、「kind」、「meadata」、「spec」、「status」などの5つのフィールドと、これら5つのフィールドの下の各サブワードが含まれていることが分かります。
(1)アプリVersion
         アプリVersionは主にAPIのグループ及び関連バージョンを定義するために使用され、定義されたフォーマットはgroupname/versionである。
(2)kind
         Kindは主に資源の種類を定義するために用いられます。例えば、Namespace、Pod、Service、Deploymentなどです。
(3)metadata
         Metadataフィールドは、リソースを定義するメタデータに単一のフィールドを埋め込むオブジェクトの属性情報を記述するために使用され、これらのフィールドは、必要なフィールドとオプションフィールドの2つのカテゴリに大きく分けることができる。
         1)名前空間内の必須フィールド:
                   namespace:現在の名前空間を指定し、デフォルトはdefaultです。
                   name:現在のオブジェクト名を設定します。所属する名前空間の同じタイプの中で一意でなければなりません。
                   uid:現在のオブジェクトの一意の表示子
         2)一般的なオプションフィールド
                   labels:現在のオブジェクトを識別するタグ、キーデータは選択条件としてよく使われます。
                   annotation:選択条件として、labelsの補充として
                   resource Version:現在のオブジェクトの内部バージョン識別子
                   generation:現在のオブジェクトのターゲット状態を示すコード
                   creationTimestamp:現在のオブジェクトの作成日付のタイムスタンプ
                   deletionTimestamp:現在のオブジェクトの削除日付のタイムスタンプ
(4)specフィールド
         Specフィールドを使用して、所望のオブジェクトが持つべき状態を記述します。
(5)status
         Sttusフィールドは、システム上のオブジェクトの現在の状態を記録するために使用されますが、statusフィールドはアクティブなオブジェクトにのみ意味があります。リソース設定リストでstatusフィールドを定義する必要はありません。このフィールドはクベルネテツシステムで充填または更新されます。
 
         リソースの設定リストを作成する際に、metadataフィールドおよびspecフィールドの複数および複数の階層のネストフィールドのために、あるフィールドおよびネストフィールドの使い方を知るためには、「kubectl explin」コマンドを使用して参照してください。
#   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 
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