Kubernetesオブジェクトで「意図の記録」をする
Kubernetesオブジェクトは、Kubernetes上で永続的なエンティティ1です。Kubernetesはこれらのエンティティを使い、クラスターの状態を表現します。
下記のような内容が表現できます:
- どのようなコンテナ化されたアプリケーションが稼働しているか(またそれらはどのノード上で動いているか)
- それらのアプリケーションから利用可能なリソース
- アプリケーションがどのように振る舞うかのポリシー、例えば再起動、アップグレード、耐障害性ポリシーなど
一度オブジェクトを作成すると、Kubernetesは常にそのオブジェクトが存在し続けるように動きます。
Kubernetes APIを使用したKubernetesオブジェクトの操作
Kubernetesオブジェクトを操作する場合、作成、変更、または削除に関わらずKubernetes APIを使う必要があります。
kubectlコマンドラインインターフェース
kubectlコマンドラインインターフェースを使った場合、このCLIが処理に必要なKubernetes API命令を、あなたに代わり発行します。
あなたのプログラムからクライアントライブラリを利用し、直接Kubernetes APIを利用することも可能です。
オブジェクト spec とオブジェクト status
ほとんどのKubernetesオブジェクトは、オブジェクトの設定を管理する2つの入れ子になったオブジェクトのフィールドを持っています。
spec
specには、望ましい状態としてオブジェクトに持たせたい特徴を記述する必要があります。
status
オブジェクトの 現在の状態を示し、その情報はKubernetesシステムとそのコンポーネントにより提供、更新されます。Kubernetesコントロールプレーンは、あなたから指定された望ましい状態と現在の状態が一致するよう常にかつ積極的に管理をします。
Kubernetesオブジェクトを記述方法
apiVersion: v1 # どのバージョンのKubernetesAPIを利用してオブジェクトを作成するか
kind: Pod # どの種類のオブジェクトを作成するか、今回はpod
metadata: # オブジェクトを一意に特定するための情報、文字列のname、UID、また任意のnamespaceが該当する
name: my-first-pod # 今回だとpodの名前、一意である必要がある。
labels:
component: nginx # ラベル
spec: # オブジェクトの望ましい状態
containers:
- name: nginx # コンテナの名前
image: nginx:latest # 実行するdocker image
必須フィールド
フィールド名 | 概要 |
---|---|
apiVersion | どのバージョンのKubernetesAPIを利用してオブジェクトを作成するか |
kind | どの種類のオブジェクトを作成するか |
metadata | オブジェクトを一意に特定するための情報、文字列のname、UID、また任意のnamespaceが該当する |
spec | オブジェクトの望ましい状態 |
Kubernetesでオブジェクトを作成する場合、オブジェクトの基本的な情報(例えば名前)と共に、望ましい状態を記述したオブジェクトのspecを渡さなければいけません。
KubernetesAPIを利用しオブジェクトを作成する場合(直接APIを呼ぶか、kubectlを利用するかに関わらず)、APIリクエストはそれらの情報をJSON形式でリクエストのBody部に含んでいなければなりません。
specの正確なフォーマットは、Kubernetesオブジェクトごとに異なり、オブジェクトごとに特有な入れ子のフィールドを持っています。Kubernetes API リファレンスが、Kubernetesで作成できる全てのオブジェクトに関するspecのフォーマットを探すのに役立ちます。 例えば、Podオブジェクトに関するspecのフォーマットはPodSpec v1 coreを、またDeploymentオブジェクトに関するspecのフォーマットはDeploymentSpec v1 appsをご確認ください。
参考文献
Kubernetesオブジェクトを理解する | Kubernetes
-
エンティティとは、実体、存在、実在(物)、本質、本体などの意味を持つ英単語。ITの分野では、何らかの標識や識別名、所在情報によって指し示される、独立した一意の対象物をエンティティということが多い。類義語には「インスタンス」(instance)、「オブジェクト」(object)などがある。 ↩