web-dev-qa-db-ja.com

kubernetesを使用してサービスの依存関係を作成する方法

2つのサービスがあります。 1つは、MySQLコンテナー用のポッド(2つのレプリカ)を持つ別のバックエンドサービスに依存するWebアプリケーション用の2つのポッドレプリカを含みます。

Webアプリケーションは、バックエンドDBサービスによって設定された環境変数を使用します。私はすべてのjsonを同じディレクトリに入れました。

Kubectlが常にウェブアプリケーションサービスを開始する前にバックエンドポッドとサービスを作成(および実行)するように、依存関係を表現する方法はありますか?私はkubedeamを使用してクラスターを作成しました。

8
Gaurav Kumar

私は2つの解決策を提案できます:

最初に、MySQLが起動して実行されるまで待機するinitコンテナをWebサーバーに接続します。展開は次のようになります。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web
spec:
  selector:
    matchLabels:
      app: web
  replicas: 2
  template:
    metadata:
      labels:
        app: web
    spec:
      initContainers:
      - name: init-wait
        image: Alpine
        command: ["sh", "-c", "for i in $(seq 1 300); do nc -zvw1 mysql 3306 && exit 0 || sleep 3; done; exit 1"]
      containers:
      - name: web
        image: web-server
        ports:
        - containerPort: 80
          protocol: TCP

Netcatを使用してTCPポート3306のmysqlサービスへの接続を3秒ごとに開始しようとします。接続に成功すると、init-containerが終了し、Webサーバーが正常に起動します。

2番目のオプションは Mirantis AppController を使用することです。サーバーとデータベースのデプロイメント間で必要に応じて、依存関係オブジェクトを作成できます。完全なドキュメントについては、リポジトリを確認してください。

3
Ignacio Millán

準備プローブまたはinitコンテナーを使用します ここ を参照してください

0
Kun Li