web-dev-qa-db-ja.com

Kubernetes Multi-Pod Deploymentを構成する方法

K8s Deploymentオブジェクトを使用してデプロイメントを管理することにより、アプリケーションクラスターをデプロイしたいと思います。ドキュメントは非常に混乱しています。私の基本的なレイアウトには、独立してスケーリングする以下のコンポーネントがあります。

  1. APIサーバー
  2. UIサーバー
  3. Redisキャッシュ
  4. タイマー/スケジュールされたタスクサーバー

技術的には、上記の4つすべてが個別にスケーリングされる個別のポッドに属します。

私の質問は:

  1. pod.ymlファイルを作成してからdeployment.ymlファイルで何らかの方法で参照する必要がありますか、または展開ファイルにポッド定義を埋め込むことはできますか?
  2. K8sのドキュメントは、specDeployment部分がone podの定義と同等であることを暗示しているようです。あれは正しいですか?マルチポッド展開を宣言的に説明したい場合はどうすればよいですか?複数のdeployment.ymlファイルが必要ですか?
36
Raj

Pagidsの答えには基本的なものがほとんどあります。シナリオ用に4つのDeploymentsを作成する必要があります。各展開は、ReplicaSetPODsのコレクションをスケジュールおよび監視する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を作成する必要があります(たとえば、データベースサービス用)。
36

Kubernetes APIリファレンスDeployment に使用すると、spec-> templateフィールドのタイプが PodTemplateSpec と関連するコメント(テンプレートは作成されるポッドを説明します。)それはあなたの質問に答えます。長い説明は、もちろん Deploymentユーザーガイド にあります。

質問に答えるには...

1)PodsDeploymentによって管理されており、Deploymentによってオンデマンドで作成されるため、個別に定義することは意味がありません。同じポッドタイプのレプリカがさらに存在する可能性があることに注意してください。

2)リスト内のアプリケーションごとに、1つのDeploymentを定義する必要があります。これは、レプリカ数の違いとアプリケーションのロールアウトに関しても意味があります。

3)あなたはそれを求めていませんが、関連しています-個別のDeploymentsとともに、各アプリケーションにも専用の が必要ですService 。他のユーザーがアクセスできるようにします。

12
pagid