多くの Java 開発者は Spring Framework を使用して Web サービスを迅速に作成していますが、ランタイムとクラウド プロバイダーが多数存在するため、本番環境で実行することが困難な場合があります。もちろん、AWS Elastic Beanstalk などのサービスを使用して、自動スケーリング、ダウンタイムなしのデプロイメント、インフラストラクチャの新しいバージョンのデプロイメントが不要などの機能を備え、稼働を継続することもできます。しかし、これらのサービスは、予算が少ない人にとっては多額の費用がかかり、サービス インフラストラクチャを制御できなくなります。 予算が限られていて、低コストで Elastic Beanstalk のすべてのメリットを実現したい場合は、オープンソースの Kubernetes を使用できます。 1. Dockerイメージを生成するKubernetes は、コンテナ化されたアプリケーションの展開、スケーリング、管理を自動化するコンテナ オーケストレーション プラットフォームです。 Kubernetes は次のように動作します。アプリケーションから Docker イメージを作成し、作成したイメージのインスタンスを 1 つ以上起動するように Kubernetes に「指示」します。 Kubernetes はこれらのインスタンスを利用可能なノードに自動的に割り当て、常に実行されるようにします。ノードに障害が発生した場合、またはアプリケーションを拡張する必要がある場合、Kubernetes はインスタンスを自動的に再割り当てし、アプリケーションが常に利用可能であることを保証します。したがって、最初のステップは、Spring Boot サービスからイメージを作成することです。 以下は Dockerfile の例です。 これと docker build プラグインを使用すると、gradle clean buildDocker (または maven docker プラグイン) を実行して、docker イメージをビルドできます。 gradle.properties または build.gradle でバージョン タグが設定されたイメージが作成されることに注意してください。 2. デプロイメントとポッドを作成する作成したイメージを Kubernetes に配置するには、レジストリにアップロードする必要があります。パブリック Docker レジストリにアップロードすることもできますが、その場合、イメージは誰でも利用できるようになります。私たちのサービスはプライベートなので、プライベートレジストリにアップロードする必要があります。幸いなことに、Gcloud はアカウント用のプライベート レジストリを提供します。 このようにして、最終的に Kubernetes クラスターにサービスを配置できます。 Gcloud を使用しているため、GKE を使用してクラスターを作成するのは非常に簡単です。このチュートリアルに従ってください。クラスターを作成し、それに接続するためのコマンド ラインを構成した後、アプリケーションのスケーラビリティを実現するために、デプロイメント (またはレプリケーション コントローラー) を作成する必要があります。初期設定として次の設定を使用します。 最後の手順で Kubernetes コマンドライン インターフェイス (kubectl) を構成したことを考慮すると、Kubernetes クラスターの新しいデプロイメントを作成し、 kubectl apply -f Deployment.yml を使用してこの構成を使用できます。しばらくすると、 kubectl get deployment spring-boot-deployment でデプロイメントのステータスを確認でき、 kubectl get pods spring-boot-app でポッドのステータスを確認できます。ポッドのログを確認する場合は、kubectl log コマンドを使用できます。 3. サービスを使用してポッドを公開するPod が実行されるようになったので、Pod を一般に公開するためのサービスを作成する必要があります。次の構成でサービスを作成します。 ご覧のとおり、サービス構成は非常にシンプルです。ただし、この構成は公開されていません。 gcloud はサービス用の実際のロードバランサと外部 IP を自動的に作成するため、サービス タイプを LoadBalancer に設定できます。実際にこの構成を使用しようとすると、TLS と HTTPS を正しく設定できず、サービスに HTTPS プロトコル経由でのみアクセスできるようにする必要があります。しかし、どうやってそれをするのでしょうか? 4. Ingressを使用したルーティング使用する Kubernetes Ingress を見つけることができます。これは新しい機能ですが、非常に効果的です。これは LoadBalancer タイプのサービスとほぼ同じですが、カスタム ルーティング ルールを設定できます。以下は Ingress 構成です。 ご覧のとおり、 kubernetes.io/ingress.allow-http: "false" を使用して、Ingress が HTTPS 接続のみを許可するように設定しています。ただし、このファイルには TLS 構成があることがわかります。まず、Ingress アクセス用の SSL 証明書データを含む Secret を作成する必要があります。これは以下の設定を使用して実行できます。 5. 秘密
すべての設定を適用した後、kubectl get ingress spring-boot-ingress コマンドを使用してアプリケーションの外部 IP を確認できます。 HTTPS 経由でアクセスすると、Spring Boot アプリケーションが Kubernetes クラスター上で実行されるようになりました。 重要! Kubernetes サービスは、デフォルトのポッド ポートとエンドポイント「/」に対してヘルス チェックを実行します。そのエンドポイントがマップされていないか保護されている場合は、livenessProbe および readinessProbe 構成を含める必要があります。 Kubernetes 環境に慣れるために、本番環境にデプロイする前に minikube を使用してこれらの設定をテストすることをお勧めします。 新しいバージョンをデプロイするには、kubectl set image deployment/spring-boot-deployment spring-boot-app=your-new-image を使用するか、kubectl edit deploy spring-boot-deployment で構成を編集します。 2 番目のコマンドを使用すると、イメージと Pod の数を同時に更新できます。アプリケーションをスケーリングするだけの場合は、kubectl scale deployment spring-boot-deployment --replicas=10 を実行するか、自動スケーリング構成を作成します。 デプロイメントを更新すると、Kubernetes のローリング アップデートが実行され、すべてが処理されるためダウンタイムは発生しません。そのため、ユーザーはただ座ってリラックスするだけで済みます。インフラストラクチャを GKE に変更すると、アプリケーションの健全性よりも開発に重点を置くことができます。 Kubernetes は、Jenkins、GitLab CI、BitBucket Pipelines などの CI ツールと組み合わせて使用すると非常に簡単です。 |
>>: すべての主要なクラウド プラットフォームは密接に接続されています。マルチクラウド環境の利点は何ですか?
「最後に、このタラ肝油を購入したすべてのバイヤーが私に約束してくれることを願っています。ジャックがロ...
起業家が独自に製品を作り、開発していくのはもちろん良いことですが、場合によっては「買収される」という...
11月29日、市場調査会社ResearchAndMarketsが発表した最新のレポートによると、ヘル...
興味関心に基づく電子商取引の概念が提案されてからしばらく経ちますが、Douyin は単純な短編ビデオ...
10年前、周元さんは上海のカナダ資本の会社でコードを書いていた。ほとんどの「プログラマー」と同様に、...
servercheap.net は、新しい KVM 仮想 VPS で、coresite のシカゴ デ...
[51CTO.comからのオリジナル記事] モノのインターネットのすべての応用シナリオの中で、産業用...
Baidu の最適化の 2 つの重要な方法は、コンテンツの更新と外部リンクの増加であることは誰もが知...
Megalayer は 8 月 31 日までの特別夏季プロモーションを開始しました。香港サーバーは3...
ルクセンブルクの企業 gcorelabs は、中国に近く、比較的高速なロシア極東にウラジオストク デ...
分散ストレージシステムは、全体的なアーキテクチャの観点からは似ていますが、実装が困難です。自社開発の...
春節は中国人にとって最も待ち望まれている重要な祭りです。平和と再会を象徴しています。このような伝統的...
最近、いくつかの企業のウェブサイトの SEO 戦略を研究しています。調査を行う前に、ウェブサイトの状...
Baidu 検索エンジンはしばらく前にアルゴリズムに大きな調整を加えました。その結果、一部のウェブマ...
編集者注: ユーザー インターフェイスの設計は、ユーザーを維持したいアプリケーションや Web サイ...