K8s Deploymentオブジェクトを使用してデプロイメントを管理することにより、アプリケーションクラスターをデプロイしたいと思います。ドキュメントは非常に混乱しています。私の基本的なレイアウトには、独立してスケーリングする以下のコンポーネントがあります。
技術的には、上記の4つすべてが個別にスケーリングされる個別のポッドに属します。
私の質問は:
pod.yml
ファイルを作成してからdeployment.yml
ファイルで何らかの方法で参照する必要がありますか、または展開ファイルにポッド定義を埋め込むことはできますか?spec
のDeployment
部分がone podの定義と同等であることを暗示しているようです。あれは正しいですか?マルチポッド展開を宣言的に説明したい場合はどうすればよいですか?複数のdeployment.ymlファイルが必要ですか?Pagidsの答えには基本的なものがほとんどあります。シナリオ用に4つのDeployments
を作成する必要があります。各展開は、ReplicaSet
のPODs
のコレクションをスケジュールおよび監視するDeployment
を作成します。
各Deployment
は、アクセスのために、その前にService
も必要とする可能性が高いでしょう。通常、Deployment
とそれに対応するService
を含む単一のyamlファイルを作成します。私が使用するnginx.yaml
の例を以下に示します。
apiVersion: v1
kind: Service
metadata:
annotations:
service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
name: nginx
labels:
app: nginx
spec:
type: NodePort
ports:
- port: 80
name: nginx
targetPort: 80
nodePort: 32756
selector:
app: nginx
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginxdeployment
spec:
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginxcontainer
image: nginx:latest
imagePullPolicy: Always
ports:
- containerPort: 80
明確にするための追加情報を次に示します。
POD
はスケーラブルなユニットではありません。 PODをスケジュールするDeployment
です。Deployment
は、単一の目的を一緒に満たすPODの単一グループを表すためのものです。Deployments
を連携させることができます。Deployment
で構成されている可能性のあるPODs
にアクセスするには、サービスを作成する必要があります。StatefulSet
を作成する必要があります(たとえば、データベースサービス用)。Kubernetes APIリファレンス を Deployment に使用すると、spec
-> template
フィールドのタイプが PodTemplateSpec
と関連するコメント(テンプレートは作成されるポッドを説明します。)それはあなたの質問に答えます。長い説明は、もちろん Deploymentユーザーガイド にあります。
質問に答えるには...
1)Pods
はDeployment
によって管理されており、Deploymentによってオンデマンドで作成されるため、個別に定義することは意味がありません。同じポッドタイプのレプリカがさらに存在する可能性があることに注意してください。
2)リスト内のアプリケーションごとに、1つのDeployment
を定義する必要があります。これは、レプリカ数の違いとアプリケーションのロールアウトに関しても意味があります。
3)あなたはそれを求めていませんが、関連しています-個別のDeployments
とともに、各アプリケーションにも専用の が必要ですService
。他のユーザーがアクセスできるようにします。