web-dev-qa-db-ja.com

ポッドとデプロイの違いは何ですか?

私はtype:deploymentを使ってポッドを作成してきましたが、いくつかのドキュメントではtype:podを使っています、より具体的には マルチコンテナポッドのドキュメント

apiVersion: v1
kind: Pod
metadata:
  name: ""
  labels:
    name: ""
  namespace: ""
  annotations: []
  generateName: ""
spec:
  ? "// See 'The spec schema' for details."
  : ~

しかし、ポッドを作成するには、 デプロイメントタイプ を使用できます。

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: ""
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: ""
    spec:
      containers:
        etc

私はPodのドキュメントが言うことに気づいた:

Createコマンドを使用してポッドを直接作成することも、Deploymentを介してポッドを作成することもできます。ポッドを作成するには配置を使用することを強くお勧めします。失敗したポッドを監視し、指定された数を維持するために必要に応じて新しいポッドを起動します。 Deploymentにあなたのポッドを監視させたくない場合(例えば、あなたのポッドが再起動しても生き残らないような非永続的なデータを書いている、あるいはあなたのポッドが非常に短命であることを意図している) createコマンド.

注意:ポッドを作成するにはデプロイメントを使用することをお勧めします。展開を作成したくない場合にのみ、以下の手順を使用してください。

しかし、これはkind:podが何に適しているのかという疑問を引き起こします。展開内のポッドをなんらかの形で参照できますか。道が見えなかった。ポッドで得られるものは、追加のメタデータですが、replicaや再起動ポリシーなどのデプロイメントオプションはありません。データを永続化せず、再起動後も生き残ることができるポッドは何が良いのでしょうか。展開してもマルチコンテナポッドを作成できると思います。

142
Bjorn Tipling

PodとDeploymentはどちらもKubernetes APIの本格的なオブジェクトです。展開では、レプリカセットを使用してポッドの作成を管理します。要するに、Deploymentはテンプレートから取得した仕様でPodを作成するということです。プロダクションユースケースのためにPodを直接作成する必要が生じる可能性はほとんどありません。

Radekの答えはとても良いのですが、私は私の経験から焦点を当てたいのですが、 kind pod と一緒に object を使うことはほとんどないでしょう。実際には意味をなさない。

deployment object - または replication controller または replicaset - のような他のKubernetes APIオブジェクトが必要なため、 replicas (ポッド)生きている(それはkubernetesを使用するポイントの一種です)。

典型的なアプリケーションのために実際に使用するものは以下のとおりです。

  1. デプロイメントオブジェクト (ここで、あなたはあなたのアプリケーションコンテナを指定します)他の仕様であなたのアプリケーションのコンテナをホストします。

  2. サービスオブジェクト (これはグループ化オブジェクトのようなもので、特定のラベルを持つpodsのいわゆる仮想IP(クラスタIP)を与えます - そしてそれらのpodsは基本的にあなたがデプロイしたアプリコンテナです。以前の deployment object).

service オブジェクトを持つ必要があります。これは、デプロイメントオブジェクトからのpodsが削除されたり、スケールアップされたりスケールダウンされたりする可能性があるためです。

それで、あなたはそれらのpodsに安定したIPを与える service のようなオブジェクトが必要です。

podsに関するコンテキストをいくつか提供したいだけなので、物事がどのように連携して機能しているかがわかります。

ほんの少し前に、私があなたの靴の中にいたのですね。

152

Kubernetesには、知っておくべき3つのオブジェクトタイプがあります。

  • ポッド - 1つ以上の密接に関連したコンテナーを実行します
  • サービス - Kubernetesクラスタでネットワークを設定します
  • 配置 - 同一のポッドのセットを維持し、それらが正しい設定を持ち、正しい数のポッドが存在するようにします。

ポッド:

  • 単一セットのコンテナーを実行します
  • 一回限りの開発目的に適しています
  • 生産で直接使用されることはめったにありません

配置:

  • 同一のポッドのセットを実行します
  • 各ポッドの状態を監視し、必要に応じて更新します
  • 開発者向け
  • 生産に良い

そして私は他の答えに賛成し、Podsを忘れるだけでDeploymentを使います。どうして? 2番目の箇条書きの点を見てください。それは各ポッドの状態を監視し、必要に応じて更新します。

だから、このようなエラーメッセージに苦労する代わりに:

禁止されています:ポッドの更新はspec.containers[*].image以外のフィールドを変更しないかもしれません

そのため、Podをリファクタリングするか完全に再作成してDeploymentに展開し、必要な作業を実行します。 Deploymentを使用すると、必要な設定を変更できます。そのエラーメッセージが表示されるのを心配する必要はありません。

15
Daniel

Podはコンテナインスタンスです。

enter image description here

それがreplicas: 3の出力です

1つのdeploymentがたくさんの実行中のインスタンス(レプリカ)を持つことができると考えてください。

//deployment.yaml
apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: Tomcat-deployment222
spec:
  selector:
    matchLabels:
      app: Tomcat
  replicas: 3
  template:
    metadata:
      labels:
        app: Tomcat
    spec:
      containers:
      - name: Tomcat
        image: Tomcat:9.0
        ports:
        - containerPort: 8080
3
serkan

Kubernetesでは、Podは展開可能な最小のユニットです。 Deployments、replica-sets、statefulsets、daemonsetsのようなkubernetesオブジェクトを作成するたびにpodが作成されます。

前述のように、デプロイメントはデプロイメントオブジェクトに記載されている望ましい状態に基づいてポッドを作成します。したがって、たとえば、アプリケーションの5つのレプリカが必要な場合は、デプロイメントマニフェストでreplicas: 5を指定しました。現在、Deployment Controllerは、RBACポリシー、ネットワークポリシー、ラベル、アノテーション、ヘルスチェック、リソースクォータ、汚染/許容度などのすべてのメタデータを使用して、特定のアプリケーションの5つの同一レプリカを作成しますそれは作成します。

Podを作成したい場合がいくつかあります。たとえば、アプリケーションを永久に実行する必要がないテストサイドカーを実行している場合、複数のレプリカを必要としない場合などです。ケースポッドが適しています。たとえばhelm testは、実行する特定のコマンドを持つコンテナを指定するポッド定義です。

1
Balkrishna

ノードの障害やポッドの終了時にポッドの種類のオブジェクトは再スケジュール(または自己修復)されないため、ポッドを回避し、代わりにコンテナを管理するための配置を実装してください。

Deploymentは、望ましい数のPodが常に使用可能であることを確認するためにReplicaSetを定義し、RollingUpdateなどのPodを置き換えるための戦略を指定するため、一般的に推奨されます。

1
maelga

ポッドはコンテナとKuberntesの基本的なオブジェクトのコレクションです。ポッドのすべてのコンテナは同じノードにあります。

  • 生産には適していません
  • ローリングアップデートなし

配備はKubernetesの一種のコントローラです。

Controllers use a Pod Template that you provide to create the Pods for which it is responsible.

配置によってReplicaSetが作成され、そのReplicaSetによって、requiredReplicasが常にCurrentReplicasと同じになることが確認されます。

利点:

  • デプロイメントを使用して変更をロールアウトおよびロールバックできます
  • 各ポッドの状態を監視します
  • 生産に最適
  • ローリングアップデートをサポート
0
Nikhil Kumar