作成者はhttps://www.brightfunds.org/organizations/girls-who-code[Girls Who Code]を選択して、https://do.co/w4do-cta [Donationsのための書き込み]プログラムの一環として寄付を受け取りました.

前書き

Dockerはhttps://en.wikipedia.org/wiki/OS-level_virtualisation[containerization]ツールであり、実行に必要なすべてを保持するファイルシステムをアプリケーションに提供するために使用されます。ソフトウェアには一貫したランタイム環境があり、展開先に関係なく同じように動作します。 Kubernetesは、コンテナ化されたアプリケーションの展開、スケーリング、および管理を自動化するためのクラウドプラットフォームです。

Dockerを活用することにより、Dockerをサポートする任意のシステムにアプリケーションをデプロイできます。Dockerは常に意図したとおりに動作するという自信を持っています。 一方、Kubernetesを使用すると、クラスター内の複数のノードにアプリケーションを展開できます。 さらに、コンテナのいずれかがクラッシュした場合に新しいコンテナを起動するなどの重要なタスクを処理します。 これらのツールを組み合わせることで、アプリケーションのデプロイプロセスが合理化され、開発に集中できます。

このチュートリアルでは、https://golang.org/ [Go]で記述されたサンプルアプリケーションをビルドし、開発マシンでローカルに起動して実行します。 次に、アプリケーションをDockerでコンテナー化し、Kubernetesクラスターにデプロイし、アプリケーションへの公開エントリポイントとして機能するロードバランサーを作成します。

前提条件

このチュートリアルを始める前に、次のものが必要です。

  • アプリケーションをデプロイする開発サーバーまたはローカルマシン。 このガイドの手順はほとんどのオペレーティングシステムでほぼ機能しますが、このチュートリアルでは、https://www.digitalocean.comで説明されているように、sudo権限を持つ非ルートユーザーで構成されたUbuntu 18.04システムにアクセスできることを前提としています。 / community / tutorials / initial-server-setup-with-ubuntu-18-04 [Ubuntu 18.04の初期サーバー設定]チュートリアル。

  • 開発マシンにインストールされたコマンドラインツール「+ docker +」。 これをインストールするには、https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-18-04 [How Ubuntu 18.04にDockerをインストールして使用する]。

  • 開発マシンにインストールされている `+ kubectl +`コマンドラインツール。 これをインストールするには、https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl-on-linux [Kubernetesの公式ドキュメントからこのガイド]に従ってください。

  • DockerイメージをプッシュするDocker Hubの無料アカウント。 これを設定するには、https://hub.docker.com/ [Docker Hub Webサイト]にアクセスし、ページの右上にある[開始]ボタンをクリックして、登録手順に従います。

  • Kubernetesクラスター。 Kubernetesクイックスタートガイドに従って、https://www.digitalocean.com/products/kubernetes/ [DigitalOcean Kubernetes cluster]をプロビジョニングできます。 別のクラウドプロバイダーからクラスターをプロビジョニングする場合、このチュートリアルを完了することができます。 クラスターを調達する場合は、必ず構成ファイルをセットアップし、開発サーバーからクラスターに接続できることを確認してください。

手順1-GoでのサンプルWebアプリケーションの構築

この手順では、Goで記述されたサンプルアプリケーションをビルドします。 このアプリをDockerでコンテナ化すると、ポート「3000」でのサーバーのIPアドレスへのリクエストに応じて「+ My Awesome Go App +」を提供します。

サーバーのパッケージリストを最近更新していない場合は、更新して始めます。

sudo apt update

次に、実行してGoをインストールします。

sudo apt install golang

次に、ホームディレクトリにいることを確認し、すべてのプロジェクトファイルを含む新しいディレクトリを作成します。

cd && mkdir go-app

次に、この新しいディレクトリに移動します。

cd go-app/

`+ nano `または好みのテキストエディターを使用して、Goアプリケーションのコードを含む ` main.go +`という名前のファイルを作成します。

nano main.go

Goソースファイルの最初の行は常に、ファイルが属するコードバンドルを定義する + package +`ステートメントです。 このような実行可能ファイルの場合、 `+ package`ステートメントは + main`パッケージを指す必要があります:

go-app / main.go

それに続いて、アプリケーションに必要なすべてのライブラリをリストできる「+ import」ステートメントを追加します。 ここには、フォーマットされたテキストの入出力を処理する「+ fmt 」と、HTTPクライアントとサーバーの実装を提供する「 net / http +」が含まれます。

go-app / main.go

package main

次に、2つの引数をとる `+ homePage `関数を定義します: ` http.ResponseWriter `と ` http.Request `へのポインター。 Goでは、「 ResponseWriter」インターフェースを使用してHTTPレスポンスを作成しますが、「+ http.Request」は着信リクエストを表すオブジェクトです。 したがって、このブロックは着信HTTP要求を読み取り、応答を作成します。

go-app / main.go

. . .

import (
 "fmt"
 "net/http"
)

この後、 `+ setupRoutes `関数を追加して、着信リクエストを目的のHTTPハンドラー関数にマッピングします。 この「 setupRoutes 」関数の本体で、新しく定義された「 homePage 」関数に「 / 」ルートのマッピングを追加します。 これにより、不明なエンドポイントへのリクエストに対しても ` My Awesome Go App +`メッセージを印刷するようにアプリケーションに指示します。

go-app / main.go

. . .

func homePage(w http.ResponseWriter, r *http.Request) {
 fmt.Fprintf(w, "My Awesome Go App")
}

そして最後に、次の `+ main `関数を追加します。 これにより、アプリケーションが開始されたことを示す文字列が出力されます。 次に、ポート ` 3000 `でGoアプリケーションをリッスンして提供する前に、 ` setupRoutes +`関数を呼び出します。

go-app / main.go

. . .

func setupRoutes() {
 http.HandleFunc("/", homePage)
}

これらの行を追加すると、最終的なファイルは次のようになります。

go-app / main.go

package main

import (
 "fmt"
 "net/http"
)

func homePage(w http.ResponseWriter, r *http.Request) {
 fmt.Fprintf(w, "My Awesome Go App")
}

func setupRoutes() {
 http.HandleFunc("/", homePage)
}

func main() {
 fmt.Println("Go Web App Started on Port 3000")
 setupRoutes()
 http.ListenAndServe(":3000", nil)
}

このファイルを保存して閉じます。 + nano +`を使用してこのファイルを作成した場合は、 `+ CTRL + X ++ Y +、次に `+ ENTER +`を押して作成します。

次に、次の「+ go run 」コマンドを使用してアプリケーションを実行します。 これにより、 ` main.go +`ファイルのコードがコンパイルされ、開発マシンでローカルに実行されます。

go run main.go
OutputGo Web App Started on Port 3000

この出力は、アプリケーションが期待どおりに動作していることを確認します。 ただし、無期限に実行されるため、 `+ CTRL + C +`を押して閉じます。

このガイド全体で、このサンプルアプリケーションを使用してDockerおよびKubernetesを実験します。 そのために、Dockerでアプリケーションをコンテナー化する方法を学ぶために読み続けてください。

ステップ2-GoアプリケーションのDockerizing

現在の状態では、作成したGoアプリケーションは開発サーバーでのみ実行されています。 この手順では、Dockerでコンテナ化することにより、この新しいアプリケーションを移植可能にします。 これにより、Dockerコンテナをサポートする任意のマシンで実行できます。 Dockerイメージを構築し、それをDocker Hubの中央パブリックリポジトリにプッシュします。 このようにして、Kubernetesクラスターはイメージを引き戻し、クラスター内のコンテナーとして展開できます。

アプリケーションをコンテナ化するための最初のステップは、https://docs.docker.com/search/?q = dockerfile [Dockerfile]という特別なスクリプトを作成することです。 Dockerfileには通常、ベースイメージに対して特定のアクションを自動的に実行したり、新しいイメージを作成したりするために、順番に実行される命令と引数のリストが含まれています。

`+ Dockerfile +`という名前の新しいファイルを作成します。

nano Dockerfile

ファイルの上部で、Goアプリに必要なベースイメージを指定します。

go-app / Dockerfile

次に、コンテナ内に、アプリケーションのソースファイルを保持する `+ app +`ディレクトリを作成します。

go-app / Dockerfile

FROM golang:1.12.0-alpine3.9

その下に、次の行を追加して、 `+ root `ディレクトリ内のすべてを ` app +`ディレクトリにコピーします。

go-app / Dockerfile

FROM golang:1.12.0-alpine3.9
RUN mkdir /app

次に、作業ディレクトリを「+ app +」に変更する次の行を追加します。これは、このDockerfile内の次のすべてのコマンドがその場所から実行されることを意味します。

go-app / Dockerfile

FROM golang:1.12.0-alpine3.9
RUN mkdir /app
ADD . /app

Goアプリのバイナリ実行可能ファイルをコンパイルする `+ go build -o main +`コマンドを実行するようにDockerに指示する行を追加します。

go-app / Dockerfile

FROM golang:1.12.0-alpine3.9
RUN mkdir /app
ADD . /app
WORKDIR /app

次に、バイナリ実行可能ファイルを実行する最終行を追加します。

go-app / Dockerfile

FROM golang:1.12.0-alpine3.9
RUN mkdir /app
ADD . /app
WORKDIR /app
RUN go build -o main .

これらの行を追加した後、ファイルを保存して閉じます。

プロジェクトのルートにこの `+ Dockerfile `があるので、次の ` docker build `コマンドを使用して、それに基づいてDockerイメージを作成できます。 このコマンドには、値「 go-web-app 」を渡すと、Dockerイメージに「 go-web-app 」と_tag_という名前を付ける「 -t +」フラグが含まれます。

最後に渡す引数はパスです: 。 これは、現在の作業ディレクトリのコンテンツからDockerイメージを構築することを指定します。 また、必ず++をDocker Hubユーザー名に更新してください:

docker build -t /go-web-app .

このビルドコマンドは、 `+ Dockerfile +`のすべての行を読み取り、それらを順番に実行してからキャッシュします。これにより、将来のビルドをより高速に実行できます。

Output. . .
Successfully built
Successfully tagged go-web-app:latest

このコマンドの構築が完了すると、次のように `+ docker images +`コマンドを実行すると画像が表示されます。

docker images
OutputREPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
/go-web-app   latest                      3 seconds ago       355MB

次に、次のコマンドを使用して、作成したイメージに基づいてコンテナを作成および起動します。 このコマンドには、コンテナがインタラクティブモードで実行されることを指定する + -it +`フラグが含まれています。 また、Goアプリケーションが開発マシンで実行されているポート(ポート `+ 3000 +)をDockerコンテナのポート `+ 3000 `にマップする ` -p +`フラグもあります。

docker run -it -p 3000:3000 /go-web-app
OutputGo Web App Started on Port 3000

そのポートで他に何も実行されていない場合は、ブラウザを開いて次のURLに移動することにより、アプリケーションの動作を確認できます。

http://:3000

image:https://assets.digitalocean.com/articles/resilient_go_kubernetes/resilient_screenshot_1.png [コンテナ化されたGoアプリ]

ブラウザでアプリケーションが期待通りに動作することを確認した後、ターミナルで `+ CTRL + C +`を押して停止します。

コンテナ化されたアプリケーションをKubernetesクラスターにデプロイする場合、一元化された場所からイメージをプルできる必要があります。 そのために、新しく作成したイメージをDocker Hubイメージリポジトリにプッシュできます。

次のコマンドを実行して、ターミナルからDocker Hubにログインします。

docker login

これにより、Docker Hubのユーザー名とパスワードの入力が求められます。 それらを正しく入力すると、コマンドの出力に「+ Login Succeeded +」が表示されます。

ログインした後、次のように `+ docker push +`コマンドを使用して新しいイメージをDocker Hubにプッシュします。

docker push /go-web-app

このコマンドが正常に完了すると、Docker Hubアカウントを開き、そこにDockerイメージを表示できます。

イメージを中央の場所にプッシュしたので、Kubernetesクラスターに展開する準備が整いました。 ただし、最初に、 `+ kubectl +`コマンドを実行するのがずっと面倒にならないようにする簡単なプロセスを説明します。

ステップ3-`+ kubectl +`の使いやすさを向上させる

この時点で、機能するGoアプリケーションを作成し、Dockerでコンテナー化しています。 ただし、アプリケーションはまだ公開されていません。 これを解決するには、 `+ kubectl `コマンドラインツールを使用して、新しいDockerイメージをKubernetesクラスターにデプロイします。 ただし、これを行う前に、Kubernetes構成ファイルに小さな変更を加えて、 ` kubectl +`コマンドの実行の労力を軽減します。

デフォルトでは、 `+ kubectl `コマンドラインツールを使用してコマンドを実行する場合、 `-kubeconfig `フラグを使用してクラスター設定ファイルのパスを指定する必要があります。 ただし、設定ファイルの名前が「 config 」で、「〜/ .kube 」という名前のディレクトリに保存されている場合、「 kubectl +」は設定ファイルを探す場所を認識し、「 +-kubeconfig + `フラグが指す。

そのために、まだ行っていない場合は、「+〜/ .kube +」という新しいディレクトリを作成します。

mkdir ~/.kube

次に、クラスタ設定ファイルをこのディレクトリに移動し、プロセスで名前を「+ config +」に変更します。

mv .yaml ~/.kube/config

今後、コマンドがデフォルトの場所にあるのでそれを見つけることができるので、 `+ kubectl `を実行するときにクラスターの設定ファイルの場所を指定する必要はありません。 次の「 get nodes +」コマンドを実行して、この動作をテストします。

kubectl get nodes

これにより、Kubernetesクラスター内にあるすべての_nodes_が表示されます。 Kubernetesのコンテキストでは、ノードは1つ以上のポッドを展開できるサーバーまたはワーカーマシンです。

OutputNAME                                        STATUS    ROLES     AGE       VERSION
k8s-1-13-5-do-0-nyc1-1554148094743-1-7lfd   Ready     <none>    1m        v1.13.5
k8s-1-13-5-do-0-nyc1-1554148094743-1-7lfi   Ready     <none>    1m        v1.13.5
k8s-1-13-5-do-0-nyc1-1554148094743-1-7lfv   Ready     <none>    1m        v1.13.5

これで、アプリケーションをKubernetesクラスターにデプロイしてデプロイする準備が整いました。 これを行うには、2つのKubernetesオブジェクトを作成します。1つはクラスター内のいくつかのポッドにアプリケーションをデプロイし、もう1つはアプリケーションにアクセスポイントを提供するロードバランサーを作成します。

手順4-展開の作成

RESTful resourcesはKubernetesシステム内のすべての永続エンティティを構成し、このコンテキストでは一般的に_Kubernetesオブジェクト_と呼ばれます。 KubernetesオブジェクトをKubernetesに送信する作業指示と考えると便利です。必要なリソースとその動作方法をリストすると、Kubernetesはクラスター内に存在することを確認するために絶えず動作します。

deployment_として知られるKubernetesオブジェクトの一種は、同一の区別できないポッドのセットです。 Kubernetesでは、https://kubernetes.io/docs/concepts/workloads/pods/pod/ [_pod]は、同じ共有ネットワークを介して通信し、同じ共有ストレージとやり取りできる1つ以上のコンテナーのグループです。 。 デプロイメントは、一度に親アプリケーションの複数のレプリカを実行し、失敗したインスタンスを自動的に置き換えます。これにより、アプリケーションが常にユーザー要求に対応できるようになります。

この手順では、展開用にKubernetesオブジェクト記述ファイル(別名_manifest_)を作成します。 このマニフェストには、Goアプリをクラスターにデプロイするために必要なすべての構成の詳細が含まれます。

プロジェクトのルートディレクトリにデプロイメントマニフェストを作成することから始めます: + go-app / +。 このような小さなプロジェクトの場合、それらをルートディレクトリに保持することで、複雑さが最小限に抑えられます。 ただし、大規模なプロジェクトでは、すべてを整理しておくために、マニフェストを別のサブディレクトリに保存することが有益な場合があります。

`+ deployment.yml +`という新しいファイルを作成します:

nano deployment.yml

Kubernetes APIの異なるバージョンには異なるオブジェクト定義が含まれているため、このファイルの先頭で、このオブジェクトの作成に使用している `+ apiVersion `を定義する必要があります。 このチュートリアルでは、デプロイメントを作成するために必要なKubernetesのコアオブジェクト定義の多くが含まれているため、 ` apps / v1 `グループを使用します。 作成しているKubernetesオブジェクトの「 kind 」を説明するフィールドを「 apiVersion 」の下に追加します。 この場合、 ` Deployment +`を作成しています:

go-app / deployment.yml

次に、デプロイメントの `+ metadata `を定義します。 オブジェクトの一意の「 name 」などの情報が含まれているため、すべてのKubernetesオブジェクトには「 metadata 」フィールドが必要です。 この ` name +`は、異なるデプロイメントを互いに区別し、人間が読める名前を使用してそれらを識別することができるため便利です。

go-app / deployment.yml

---
apiVersion: apps/v1
kind: Deployment

次に、 `+ deployment.yml `の ` spec `ブロックを構築します。 ` spec `フィールドはすべてのKubernetesオブジェクトの要件ですが、その正確な形式はオブジェクトのタイプごとに異なります。 展開の場合、実行する_replicas_の数などの情報を含めることができます。 Kubernetesでは、レプリカはクラスターで実行するポッドの数です。 ここでは、 ` replicas `の数を ` 5 +`に設定します。

go-app / deployment.yml

. . .
metadata:
   name: go-web-app

次に、 `+ spec `ブロックの下にネストされた ` selector +`ブロックを作成します。 これは、ポッドの_ラベルセレクター_として機能します。 Kubernetesはラベルセレクターを使用して、展開が管理する必要があるポッドを見つける方法を定義します。

この「+ selector」ブロック内で、「+ matchLabels」を定義し、「+ name」ラベルを追加します。 基本的に、 `+ matchLabels `フィールドはKubernetesにデプロイメントが適用されるポッドを伝えます。 この例では、デプロイメントは ` go-web-app +`という名前のポッドに適用されます:

go-app / deployment.yml

. . .
spec:
 replicas: 5

この後、 `+ template `ブロックを追加します。 すべてのデプロイメントは、 ` template `ブロックで指定されたラベルを使用して一連のポッドを作成します。 このブロックの最初のサブフィールドは ` metadata `で、このデプロイメントのすべてのポッドに適用される ` labels `が含まれています。 これらのラベルは、Kubernetesオブジェクトの属性を識別するために使用されるキー/値のペアです。 後でサービスを定義するときに、この「 name 」ラベルを持つすべてのポッドをそのサービスの下にグループ化することを指定できます。 この「 name」ラベルを「+ go-web-app」に設定します。

go-app / deployment.yml

. . .
spec:
 replicas: 5
 selector:
   matchLabels:
     name: go-web-app

この `+ template `ブロックの2番目の部分は ` spec `ブロックです。 これは、デプロイメント全体ではなく、 ` template `ブロックによって作成されたポッドにのみ適用されるため、以前に追加した ` spec +`ブロックとは異なります。

この `+ spec `ブロック内で、 ` containers `フィールドを追加し、もう一度 ` name `属性を定義します。 この「 name 」フィールドは、この特定のデプロイメントによって作成されたコンテナの名前を定義します。 その下で、プルダウンしてデプロイする「 image 」を定義します。 必ず `+`を独自のDocker Hubユーザー名に変更してください:

go-app / deployment.yml

. . .
 template:
   metadata:
     labels:
       name: go-web-app



       sammy

それに続いて、 `+ IfNotPresent `に設定された ` imagePullPolicy `フィールドを追加します。これにより、デプロイメントをまだ行っていない場合にのみイメージをプルするように指示します。 そして最後に、 ` ports `ブロックを追加します。 そこで、Goアプリケーションがリッスンするポート番号と一致する「 containerPort 」を定義します。 この場合、ポート番号は「+3000」です。

go-app / deployment.yml

. . .
   spec:
     containers:
     - name: application
       image: /go-web-app

`+ deployment.yml +`のフルバージョンは次のようになります。

go-app / deployment.yml

---
apiVersion: apps/v1
kind: Deployment
metadata:
 name: go-web-app
spec:
 replicas: 5
 selector:
   matchLabels:
     name: go-web-app
 template:
   metadata:
     labels:
       name: go-web-app
   spec:
     containers:
     - name: application
       image: /go-web-app
       imagePullPolicy: IfNotPresent
       ports:
         - containerPort: 3000

ファイルを保存して閉じます。

次に、次のコマンドを使用して新しい展開を適用します。

kubectl apply -f deployment.yml

次のステップでは、新しい展開に存在するポッドへのアクセス方法を管理する別の種類のKubernetesオブジェクトを作成します。 このサービスはロードバランサーを作成します。ロードバランサーは単一のIPアドレスを公開し、このIPアドレスへの要求は展開内のレプリカに配布されます。 このサービスは、ポート転送ルールも処理するため、HTTP経由でアプリケーションにアクセスできます。

ステップ5-サービスの作成

Kubernetesの展開が成功したので、アプリケーションを外部に公開する準備が整いました。 これを行うには、別の種類のKubernetesオブジェクトを定義する必要があります:service。 このサービスは、クラスターのすべてのノードで同じポートを公開します。 ノードは、そのポートの着信トラフィックをアプリケーションを実行しているポッドに転送します。

`+ service.yml +`という新しいファイルを作成します:

nano service.yml

`+ apiVersion `と ` kind `フィールドを ` deployment.yml `ファイルと同様の方法で定義して、このファイルを始めます。 今回は、 ` apiVersion `フィールドをサービスで一般的に使用されるKubernetes APIである ` v1 +`にポイントします。

go-app / service.yml

次に、 + deployment.yaml`で行ったように、サービスの名前を + metadata`ブロックに追加します。 これは何でも好きですが、明確にするために「+ go-web-service +」と呼びます。

go-app / service.yml

---
apiVersion: v1
kind: Service

次に、 `+ spec `ブロックを作成します。 この「 spec 」ブロックはデプロイメントに含まれるブロックとは異なり、このサービスの「 type 」、ポート転送設定、および「 selector +」が含まれます。

このサービスの「+ type」を定義するフィールドを追加し、「+ Load Balancer」に設定します。 これにより、アプリケーションのメインエントリポイントとして機能するロードバランサーが自動的にプロビジョニングされます。

go-app / service.yml

---
apiVersion: v1
kind: Service
metadata:
 name: go-web-service

次に、アプリへのアクセス方法を定義する「+ ports +」ブロックを追加します。 このブロック内にネストされ、次のフィールドを追加します。

  • + name +、 `+ http`を指す

  • + port +、ポート `+ 80 +`を指す

  • + targetPort +、ポート `+ 3000 +`を指す

これにより、ポート「80」で着信HTTPリクエストが取得され、「+ 3000+」の「+ targetPort 」に転送されます。 この「 targetPort +」は、Goアプリケーションが実行されているポートと同じです。

go-app / service.yml

---
apiVersion: v1
kind: Service
metadata:
 name: go-web-service
spec:
 type: LoadBalancer

最後に、 + deployment.yaml`ファイルで行ったように + selector`ブロックを追加します。 この「+ selector」ブロックは、「+ go-web-app」という名前のデプロイされたポッドをこのサービスにマッピングするため、重要です。

go-app / service.yml

---
apiVersion: v1
kind: Service
metadata:
 name: go-web-service
spec:
 type: LoadBalancer
 ports:
 - name: http
   port: 80
   targetPort: 3000

これらの行を追加したら、ファイルを保存して閉じます。 その後、次のように `+ kubectl apply +`コマンドをもう一度使用して、このサービスをKubernetesクラスターに適用します。

kubectl apply -f service.yml

このコマンドは、新しいKubernetesサービスを適用し、ロードバランサーを作成します。 このロードバランサーは、クラスター内で実行されているアプリケーションへの公開エントリポイントとして機能します。

アプリケーションを表示するには、新しいロードバランサーのIPアドレスが必要です。 次のコマンドを実行して見つけてください。

kubectl get services
OutputNAME             TYPE           CLUSTER-IP       EXTERNAL-IP       PORT(S)        AGE
go-web-service   LoadBalancer   10.245.107.189      80:30533/TCP   10m
kubernetes       ClusterIP      10.245.0.1       <none>            443/TCP        3h4m

複数のサービスを実行している場合もありますが、「+ go-web-service 」というラベルの付いたサービスを見つけてください。 「 EXTERNAL-IP 」列を見つけて、「 go-web-service 」に関連付けられているIPアドレスをコピーします。 この出力例では、このIPアドレスは「+」です。 次に、IPアドレスをブラウザーのURLバーに貼り付けて、Kubernetesクラスターで実行されているアプリケーションを表示します。

ロードバランサーはポート「80」でリクエストを受け取り、クラスター内で実行されているポッドのいずれかに転送します。

image:https://assets.digitalocean.com/articles/resilient_go_kubernetes/resilient_screenshot_2.png [Goアプリの作業中!]

これで、ロードバランサーと組み合わせたKubernetesサービスを作成し、アプリケーションへの単一の安定したエントリポイントを提供しました。

結論

このチュートリアルでは、Goアプリケーションを構築し、Dockerでコンテナー化し、Kubernetesクラスターに展開しました。 次に、このアプリケーションに復元力のあるエントリポイントを提供するロードバランサーを作成し、クラスター内のノードの1つに障害が発生した場合でも高可用性を維持するようにしました。 このチュートリアルを使用して、独自のGoアプリケーションをKubernetesクラスターにデプロイするか、ステップ1で作成したサンプルアプリケーションを使用して、他のKubernetesおよびDockerの概念を引き続き学習できます。

今後、https://www.digitalocean.com/community/tutorials/how-to-point-to-digitalocean-nameservers-from-common-domain-registrars [ロードバランサーのIPアドレスをロードバランサーのIPではなく、人間が読めるWebアドレスを介してアプリケーションにアクセスできるようにします。 さらに、次のKubernetesチュートリアルが興味のある場合があります。

最後に、Goの詳細については、https://www.digitalocean.com/community/tutorial_series/how-to-code-in-go [How To Code in]でシリーズをご覧になることをお勧めします行く]。