GNU/Linux >> Linux の 問題 >  >> Linux

kubectl apply vs create:Kubernetesクラスター環境でリソースを作成するためにどちらを使用しますか?

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クラウド

Linux
  1. 最初のポッドをKubernetesクラスターにデプロイする方法

  2. [ガイド]aptとapt-getコマンド、そしてどちらを使用しますか?

  3. Condaを使用してさまざまなPythonバージョンの仮想環境を作成する

  1. サーバー用のDebianとUbuntu、どちらを選択するか

  2. `sudo`はどのパスを使用して「」を検索しますか?

  3. 一時的に使用するためのクリーンなシェル環境を作成するにはどうすればよいですか?

  1. Linuxファイルシステムの種類の説明、どちらを使用する必要があるか

  2. Linux –カレンダーに使用するアプリケーションはどれですか?

  3. なぜsudoを使用する必要があるのですか?