私は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
や再起動ポリシーなどのデプロイメントオプションはありません。データを永続化せず、再起動後も生き残ることができるポッドは何が良いのでしょうか。展開してもマルチコンテナポッドを作成できると思います。
PodとDeploymentはどちらもKubernetes APIの本格的なオブジェクトです。展開では、レプリカセットを使用してポッドの作成を管理します。要するに、Deploymentはテンプレートから取得した仕様でPodを作成するということです。プロダクションユースケースのためにPodを直接作成する必要が生じる可能性はほとんどありません。
Radekの答えはとても良いのですが、私は私の経験から焦点を当てたいのですが、 kind pod と一緒に object を使うことはほとんどないでしょう。実際には意味をなさない。
deployment object - または replication controller または replicaset - のような他のKubernetes APIオブジェクトが必要なため、 replicas (ポッド)生きている(それはkubernetesを使用するポイントの一種です)。
典型的なアプリケーションのために実際に使用するものは以下のとおりです。
デプロイメントオブジェクト (ここで、あなたはあなたのアプリケーションコンテナを指定します)他の仕様であなたのアプリケーションのコンテナをホストします。
サービスオブジェクト (これはグループ化オブジェクトのようなもので、特定のラベルを持つpods
のいわゆる仮想IP(クラスタIP)を与えます - そしてそれらのpods
は基本的にあなたがデプロイしたアプリコンテナです。以前の deployment object).
service オブジェクトを持つ必要があります。これは、デプロイメントオブジェクトからのpods
が削除されたり、スケールアップされたりスケールダウンされたりする可能性があるためです。
それで、あなたはそれらのpods
に安定したIPを与える service のようなオブジェクトが必要です。
pods
に関するコンテキストをいくつか提供したいだけなので、物事がどのように連携して機能しているかがわかります。
ほんの少し前に、私があなたの靴の中にいたのですね。
Kubernetesには、知っておくべき3つのオブジェクトタイプがあります。
ポッド:
配置:
そして私は他の答えに賛成し、Podsを忘れるだけでDeploymentを使います。どうして? 2番目の箇条書きの点を見てください。それは各ポッドの状態を監視し、必要に応じて更新します。
だから、このようなエラーメッセージに苦労する代わりに:
禁止されています:ポッドの更新は
spec.containers[*].image
以外のフィールドを変更しないかもしれません
そのため、Podをリファクタリングするか完全に再作成してDeploymentに展開し、必要な作業を実行します。 Deploymentを使用すると、必要な設定を変更できます。そのエラーメッセージが表示されるのを心配する必要はありません。
Podはコンテナインスタンスです。
それが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
Kubernetesでは、Podは展開可能な最小のユニットです。 Deployments、replica-sets、statefulsets、daemonsetsのようなkubernetesオブジェクトを作成するたびにpodが作成されます。
前述のように、デプロイメントはデプロイメントオブジェクトに記載されている望ましい状態に基づいてポッドを作成します。したがって、たとえば、アプリケーションの5つのレプリカが必要な場合は、デプロイメントマニフェストでreplicas: 5
を指定しました。現在、Deployment Controllerは、RBACポリシー、ネットワークポリシー、ラベル、アノテーション、ヘルスチェック、リソースクォータ、汚染/許容度などのすべてのメタデータを使用して、特定のアプリケーションの5つの同一レプリカを作成しますそれは作成します。
Podを作成したい場合がいくつかあります。たとえば、アプリケーションを永久に実行する必要がないテストサイドカーを実行している場合、複数のレプリカを必要としない場合などです。ケースポッドが適しています。たとえばhelm test
は、実行する特定のコマンドを持つコンテナを指定するポッド定義です。
ノードの障害やポッドの終了時にポッドの種類のオブジェクトは再スケジュール(または自己修復)されないため、ポッドを回避し、代わりにコンテナを管理するための配置を実装してください。
Deploymentは、望ましい数のPodが常に使用可能であることを確認するためにReplicaSetを定義し、RollingUpdateなどのPodを置き換えるための戦略を指定するため、一般的に推奨されます。
ポッドはコンテナとKuberntesの基本的なオブジェクトのコレクションです。ポッドのすべてのコンテナは同じノードにあります。
配備はKubernetesの一種のコントローラです。
Controllers use a Pod Template that you provide to create the Pods for which it is responsible.
配置によってReplicaSetが作成され、そのReplicaSetによって、requiredReplicasが常にCurrentReplicasと同じになることが確認されます。
利点: