2つのサービスがあります。 1つは、MySQLコンテナー用のポッド(2つのレプリカ)を持つ別のバックエンドサービスに依存するWebアプリケーション用の2つのポッドレプリカを含みます。
Webアプリケーションは、バックエンドDBサービスによって設定された環境変数を使用します。私はすべてのjsonを同じディレクトリに入れました。
Kubectlが常にウェブアプリケーションサービスを開始する前にバックエンドポッドとサービスを作成(および実行)するように、依存関係を表現する方法はありますか?私はkubedeamを使用してクラスターを作成しました。
私は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 を使用することです。サーバーとデータベースのデプロイメント間で必要に応じて、依存関係オブジェクトを作成できます。完全なドキュメントについては、リポジトリを確認してください。
準備プローブまたはinitコンテナーを使用します ここ を参照してください