kubectl apply
およびkubectl create
どちらも、Kubernetesクラスタ環境でリソースを作成するための2つの異なるアプローチです。
どちらもファイルまたはSTDINからリソースを作成します。
kubectlの適用と作成:リソースを作成するための2つのアプローチ
それでは、いくつかの詳細を見て、実装中にkubectlがどのように適用および作成されるかが互いにどのように異なるかを理解しましょう。
kubectl create:命令型管理
kubectl create
これが私たちが命令型管理と呼んでいるものです。このアプローチでは、Kubernetes APIに何を作成、置換、または削除するかを指示します。
簡単に言うと、create
まったく新しいオブジェクトを作成します(以前は存在しなかったか、削除されました)。
kubectl apply:宣言型管理
kubectl apply
は宣言型管理アプローチの一部であり、ライブオブジェクトに適用した可能性のある変更(つまり、scale
を使用) )は「維持」されます 「apply
しても オブジェクトに対するその他の変更。
簡単に言うと、apply
-必要なものを定義することにより、既存のオブジェクトに段階的な変更を加えます。
注: kubectl createとapplyの両方のアプローチは、JSONとYAMLのファイル形式を受け入れます。
kubectlcreateとapplyの違いを例で理解する
以下のYAMLファイルを使用してKubernetesポッドを作成します。
[email protected]:~/pod-create# cat mypod.yml
apiVersion: v1
kind: Pod
metadata:
name: create-vs-apply-demo
labels:
app: front-end
rel: dev
spec:
containers:
- name: httpd
image: docker.io/httpd
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
命令型の方法、つまりkubectl create
を使用してポッドを作成しましょう。 コマンド:
[email protected]:~/pod-create# kubectl create -f mypod.yml
pod/create-vs-apply-demo created
ポッドのステータスとラベルを一覧表示します:
[email protected]:~/pod-create# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
create-vs-apply-demo 1/1 Running 0 8s app=front-end,rel=dev
次に、YAMLファイルを編集して、追加のラベル(デモ:applyVscreate)を追加します。
[email protected]:~/pod-create# cat mypod.yml
apiVersion: v1
kind: Pod
metadata:
name: create-vs-apply-demo
labels:
app: front-end
rel: dev
demo: applyVscreate
spec:
containers:
- name: httpd
image: docker.io/httpd
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
次に、命令型アプローチを使用して変更を適用しましょう。
[email protected]:~/pod-create# kubectl create -f mypod.yml
Error from server (AlreadyExists): error when creating "mypod.yml": pods "create-vs-apply-demo" already exists
エラーがスローされ、リソースがすでに存在していることが示されます。
次に、宣言型アプローチを使用して同じ操作を実行しましょう。つまり、kubectl apply
コマンド。
[email protected]:~/pod-create# kubectl apply -f mypod.yml
pod/create-vs-apply-demo configured
そのため、今回はリソースが構成されました。加えられた変更を確認します。
[email protected]:~/pod-create# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
create-vs-apply-demo 1/1 Running 0 3m19s app=front-end,demo=applyVscreate,rel=dev
新しいラベルがポッドに適用されていることがわかります。
これで、2つのアプローチを明確に理解する必要があると思います。
Kubectlを作成または適用しますか?どちらを使用しますか?
これらの概念または方法論をどのように使用するかは、ユースケースによって異なります。どちらが良いか悪いかではありません。
バージョン管理が必要な場合 k8sオブジェクトの場合は、宣言型を使用することをお勧めします k8sオブジェクトのデータの精度を判断するのに役立つ方法(kubectl apply)。
また、トラブルシューティング、学習、またはインタラクティブな実験を目的としたリソースを作成したい場合 命令型を使用する アプローチ(kubectl create)。
まだ混乱していますか?コメントを残してください、そして私はあなたの疑問に答えようとします。
Rakesh Jain
DevOps Professional | RHCA |ジェンキンス| Git | Docker | Kubernetes | Ansible |プロメテウス| Grafana | AWSクラウド