Kubernetesオブジェクトは、YAMLやJSONで書かれたオブジェクト設定ファイルとkubectlコマンドラインツールを使用して作成、更新、削除できます。
このドキュメントでは、設定ファイルを使用したオブジェクトの定義と管理の方法を説明します。
kubectlをインストールしてください。
Kubernetesクラスターが必要、かつそのクラスターと通信するためにkubectlコマンドラインツールが設定されている必要があります。 このチュートリアルは、コントロールプレーンのホストとして動作していない少なくとも2つのノードを持つクラスターで実行することをおすすめします。 まだクラスターがない場合、minikubeを使って作成するか、 以下のいずれかのKubernetesプレイグラウンドも使用できます:
バージョンを確認するには次のコマンドを実行してください: kubectl version.
kubectlツールは3種類のオブジェクト管理をサポートしています:
オブジェクト管理の各手法におけるメリットとデメリットについては、Kubernetesオブジェクトの管理を参照してください。
kubectl create -fを使用して、設定ファイルからオブジェクトを作成できます。
詳細については、Kubernetes APIリファレンスを参照してください。
kubectl create -f <filename|url>replaceコマンドを使用してオブジェクトを更新すると、設定ファイルに指定されていないspecの記述はすべて破棄されます。
そのため、LoadBalancerタイプのServiceのように、externalIPsフィールドが設定ファイルとは無関係にクラスターによって管理されているような、specの一部がクラスター側で管理されているオブジェクトにはreplaceを使用すべきではありません。
replaceによるフィールドの削除を防ぐには、独立して管理されているフィールドを設定ファイルへコピーしておく必要があります。kubectl replace -fを使用すると、設定ファイルの内容に従って稼働中のオブジェクトを更新できます。
kubectl replace -f <filename|url>kubectl delete -fを使用して、設定ファイルに記述されたオブジェクトを削除できます。
kubectl delete -f <filename|url>設定ファイルのmetadataセクションでnameフィールドではなくgenerateNameフィールドが指定されている場合、kubectl delete -f <filename|url>でオブジェクトを削除することはできません。
オブジェクトを削除するには、別のフラグを使用する必要があります。
例えば:
kubectl delete <type> <name>
kubectl delete <type> -l <label>
kubectl get -fを使用して、設定ファイルに記述されているオブジェクトの情報を確認できます。
kubectl get -f <filename|url> -o yaml-o yamlフラグを指定すると、完全なオブジェクト設定が出力されます。
利用可能なオプションの一覧を確認するには、kubectl get -hを使用してください。
create、replace、およびdeleteコマンドは、各オブジェクトの設定が設定ファイル内に完全に定義・記録されている場合には問題なく動作します。
しかし、稼働中のオブジェクトに対して加えられた変更が設定ファイルに統合されていない場合、次回replaceを実行したタイミングでそれらの変更は失われます。
これは、HorizontalPodAutoscalerなどのコントローラーが、稼働中のオブジェクトに直接変更を加えた場合などに発生します。
以下はその一例です。
replace)します。
このとき、ステップ2で別の変更元によって加えられた変更は失われます。同一オブジェクトに対する複数の書き込み元をサポートする必要がある場合は、kubectl applyを使用してオブジェクトを管理できます。
オブジェクト設定ファイルのURLがある場合、kubectl create --editを使用すると、オブジェクトが作成される前に設定を変更できます。
これは、読者が内容を変更する可能性がある設定ファイルを対象としたチュートリアルやタスクで特に便利です。
kubectl create -f <url> --edit
命令型コマンドから命令型オブジェクト設定へ移行するには、いくつか手動での手順が必要です。
稼働中のオブジェクトをローカルのオブジェクト設定ファイルにエクスポートします:
kubectl get <kind>/<name> -o yaml > <kind>_<name>.yaml
オブジェクト設定ファイルからstatusフィールドを手動で削除します。
以降のオブジェクト管理には、replaceのみを使用します。
kubectl replace -f <kind>_<name>.yaml
推奨されるアプローチは、単一の不変なPodTemplateラベルを定義することです。 このラベルはコントローラーセレクター専用とし、他の意味を持たせないようにします。
ラベルの例:
selector:
matchLabels:
controller-selector: "apps/v1/deployment/nginx"
template:
metadata:
labels:
controller-selector: "apps/v1/deployment/nginx"