このドキュメントは The Kubectl Book の翻訳です。翻訳の GitHub リポジトリはこちら。
- Apply はリソース構成上で
kubectl apply
を実行することによってクラスタ内のリソースを作成・更新する - Apply は、オペレーションの順序や、ユーザーが定義した状態とクラスタが定義した状態をマージするといった複雑性を管理する
Apply
動機
Apply は Kubernetes クラスタをローカルのファイルで定義された状態に一致させるよう更新するコマンドです。
kubectl apply
- 完全な宣言性 - 作成や更新を指示する必要はなく、ファイルを管理するだけです
- ユーザーが所有する状態 (たとえば Service
selector
) をクラスタが所有する状態 (たとえば ServiceclusterIp
) にマージします
定義
- リソース (Resource): クラスタ内のオブジェクト - たとえば Deployment、Service など
- リソース構成 (Resource Config): リソースの望ましい状態を宣言したファイル - たとえば deployment.yaml。リソースはこれらのファイルと Apply を使って作成・更新される
kubectl apply
はローカルまたはリモートのファイルを通じてリソースを作成・更新します。これは生のリソース構成でもできますが、 kustomization.yaml
を使うこともできます。
使い方
Apply はリソース構成ファイルに対して、あるいは -f
オプションでディレクトリを指定して直接実行することもできますが、お勧めは -k
オプションを使って kustomization.yaml
に対して Apply を実行することです。kustomization.yaml
を使うと多くのリソースを横断した設定 (たとえば名前空間) を定義できます。
# kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
# list of Resource Config to be Applied
resources:
- deployment.yaml
# namespace to deploy all Resources to
namespace: default
# labels added to all Resources
commonLabels:
app: example
env: test
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
labels:
component: nginx
tier: frontend
spec:
selector:
matchLabels:
component: nginx
tier: frontend
template:
metadata:
labels:
component: nginx
tier: frontend
spec:
containers:
- name: nginx
image: nginx:1.15.4
Apply コマンドは kustomization.yaml
ファイルを含むディレクトリに -k
オプションで実行するか、または生のリソース構成ファイルに対して -f
オプションで実行します。
# Apply the Resource Config
kubectl apply -k .
# View the Resources
kubectl get -k .
一つのリソース構成ファイルを \n---\n
で分割すると、複数のリソースを宣言できます。
CRUD 操作
リソースの作成
リソース構成に宣言されているがまだ存在しないリソースは、Apply 実行時に作成されます。
リソースの更新
リソース構成に宣言されていて、すでに存在するリソースは、Apply 実行時に更新されることがあります。
追加のフィールド
リソース構成に追加されたフィールドはリソースに追加されます。
更新されたフィールド
ローカルのリソース構成に指定されたフィールドの値がリソース内の値と異なる場合、リソース構成を稼働中のリソースにマージすることによって更新されます。詳細は merging を確認してください。
削除されたフィールド
前回の Apply 実行時にリソース構成に存在したが削除されたフィールドは、リソースから削除され、デフォルト値に戻されます。
管理されていないフィールド
リソース構成に指定されていないがリソースにセットされているフィールドは、修正されずにそのまま残されます。
リソースの削除
リソースの宣言的な削除は、まだ利用に適した形では存在しません。現在開発中です。
時には、リソース構成が変更されたら自動的に変更を Apply するのが便利な場合もあります。
たとえば Apply を定期的に実行するために UNIX の watch
コマンドを使います。watch -n 60 kubectl apply -k https://github.com/myorg/myrepo
リソース作成の順序
あるリソースタイプが、先に作成される他のリソースタイプに依存することがあります。たとえば、名前空間上のリソース、Role 上の RoleBinding、CRD 上の CustomResource などです。
kustomization.yaml
を使うと、Apply は上記のような依存関係をもつリソースが正しい順序で作成されるように、リソースタイプによってリソースを並び替えます。