既存のサービスに LoadBalancer を追加する

既存のサービスに LoadBalancer を追加する

このゲストブックのチュートリアルに従う

最後のほうでは、サービスの作成方法LoadBalancerや割り当て方法については簡単に触れています。NodePortsこのドキュメントさまざまなタイプとその機能については説明していますが、サービスに適用する方法については詳しく説明されていません。実行中のサービスを更新し、ロード バランサーを作成して指定されたポートに接続する方法はありますか?

Amazon Web Services を使用してクラスターをホストすると、サービスの作成に最適なロードバランサーがサポートされますが、サービスを変更する方法がわかりません。

編集:

これを試すとエラーが発生しました:

$ kubectl expose service frontend --port=80 --type=LoadBalancer
サーバーからのエラー: サービス「frontend」は既に存在します

答え1

かなりわかりにくいですが、どうやらkubectl expose新しいサービスを作成することしかできず、既存のサービスを更新できないようです。既存のサービスで実行する場合は、--name発生していた競合を回避するために、新しいサービスの希望する名前を指定するフラグを渡す必要があるとのことです。

kubectl patchサービスをその場で更新するには、または のいずれかを使用できるはずです。おそらく最適なアプローチではありませんが、私は個人的に、 を実行し、必要に応じて svc.yaml を更新し (この場合は となるように)、 を実行するkubectl updateという方法でこの種の処理を実行する傾向があります。kubectl get svc svc-name -o yaml > svc.yamltype: LoadBalancerkubectl update -f svc.yaml

答え2

これがあなたのケースに適しているかどうかはわかりませんが、より根本的で簡単な方法は、サービスを削除することです(ただし、デプロイメントは削除しません)。

kubectl delete service 'service-name'

デプロイメントを LoadBalancer として再公開します。

kubectl expose deployment/'deployment-name' --type="LoadBalancer"

答え3

次のいずれかを実行できます。

  • 対話的にkubectl edit <SERVICE_NAME>エディタでタイプを「LoadBalancer」に変更します。
  • 一つのコマンドでkubectl patch <SERVICE_NAME> -p '{"spec":{"type":"LoadBalancer"}}'

関連情報