ドキュメントで私が理解したのは、
- kubectl create =クラスタに新しいk8sリソースを作成します
- kubectl replace =ライブクラスタ内のリソースを更新します
- kubectl apply = create + replaceを実行する場合(リファレンス)
私の質問は
- クラスターで同じタスクを実行するために3つの操作があるのはなぜですか?
- これらの操作のユースケースは何ですか?
- フードの下でお互いにどのように違うのですか?
ドキュメントで私が理解したのは、
私の質問は
回答:
これらは2つの異なるアプローチです。
kubectl create
命令型管理と呼ばれるものです。このアプローチでは、K8sクラスターの世界をどのように見せたいかではなく、作成、置換、または削除する対象をKubernetes APIに伝えます。
kubectl apply
は宣言的管理アプローチの一部であり、ライブオブジェクトに適用した可能性のある変更(つまり、を介してscale
)は、オブジェクトに他の変更を加えても「維持」さapply
れます。
命令型および宣言型の管理の詳細については、Kubernetes Object Managementのドキュメントをご覧ください。
kubectl create
とkubectl apply
同じ効果かどうかを持っています。
kubectl create
リソースが既に存在する場合、エラーがスローされます。 kubectl apply
しません。違いは、kubectl create
具体的には「これを作成する」kubectl apply
とありますが、「このように見せるために必要なことは何でも(作成、更新など)する」ということです。
CIスクリプトで実行する場合、リソースが既に存在する場合、createはエラーを発生させるため、命令コマンドで問題が発生します。
あなたができることは、命令コマンドの出力を(宣言的なパターンで)適用することです。--dry-run=true
と-o yaml
オプション:
kubectl create whatever --dry-run=true -o yaml | kubectl apply -f -
上記のコマンドは、リソースがすでに存在する場合はエラーを発生させません(必要に応じてリソースを更新します)。
これは、宣言パターンを使用できない場合(たとえば、docker-registryシークレットを作成する場合)に非常に役立ちます。
kubectl delete deployment nginx --ignore-not-found; kubectl create deployment nginx --image=nginx
私の理解から、より直接的な答えを与えるために:
apply
-既存のオブジェクトを段階的に変更します
create
-まったく新しいオブジェクトを作成します(以前は存在しなかった/削除されました)
これを、KubernetesのWebサイトによってリンクされたDigitalOceanの記事から取得します。
ここではcreateの代わりにapplyを使用して、将来的にIngress Controllerオブジェクトに変更を完全に上書きする代わりに増分的に適用できるようにします。
apply
のようなdocker-compose up -d
+の使用create
などをdocker-compose up -d --build
?
kubectl run
= kubectl create deployment
kubectl create -f your-object-config.yaml
kubectl delete -f your-object-config.yaml
kubectl replace -f your-object-config.yaml
kubectl diff -f configs/
kubectl apply -f configs/
kubectl createは、一度に1つのオブジェクト構成ファイルを処理できます。これは、必須管理とも呼ばれます
kubectl create -f filename | url
kubectl applyは、オブジェクト設定yamlファイルを含むディレクトリとそのサブディレクトリで機能します。これは宣言的管理とも呼ばれます。ディレクトリから複数のオブジェクト構成ファイルを取得できます。 kubectl apply -f directory /
詳細:
https //kubernetes.io/docs/tasks/manage-kubernetes-objects/declarative-config/
https://kubernetes.io/docs/tasks/manage-kubernetes-objects/imperative-config/