クバーネディスで実行するGoコンテナを作成


クーバーネス実習のためにGoを利用してコンテナを作ります.

Goって何?


これはグーグルが開発したプログラミング言語で、クバーネスとともに急速に成長したプログラミング言語です.

Goの使い方については、この記事で詳しく紹介されていなければ、後でGoを学ぶ機会があればまとめてみます.

Goインストール


右奮闘環境では、他のアプリケーションのようにapt installコマンドでインストールできます.
sudo apt install golang
Macでは、ホームブルーを使っても簡単にインストールできます.
brew install golang
窓口でも高朗の公式サイトからダウンロードできるそうです.

Goアプリケーション作成


hostnameを簡単に出力するアプリケーションを作成しました.以下に示します.
package main

import (
	"fmt"
	"github.com/julienschmidt/httprouter"
	"log"
	"net/http"
	"os"
)

func Index(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
	hostname, err := os.Hostname()
	if err == nil {
		fmt.Fprint(w, "Welcome! "+hostname+"\n")
	} else {
		fmt.Fprint(w, "Welcome! Error\n")
	}
}
func main() {
	router := httprouter.New()
	router.GET("/", Index)

	log.Fatal(http.ListenAndServe(":8080", router))
}
このアプリケーションを実行するには、リボンからhttpouterパッケージをダウンロードする必要がありますが、次のコマンドを実行することで入手できます.
go get github.com/julienschmidt/httprouter
次に、次のコマンドでアプリケーションを構築します.
go build main.go
アプリケーションを実行すると、8080ポートで正常に動作していることがわかります.

Dockerによるイメージ


Dockerを使用して画像化するにはdockerfileを作成する必要があります.
次のdockerfileは、作業中のディレクトリに作成できます.
FROM golang:1.11
WORKDIR /GolandProjects/awesomeProject
Copy main /GolandProjects/awesomeProject
CMD ["/GolandProjects/awesomeProject/main"]
その後docker buildコマンドで画像を生成します.
sudo docker build -t http_go .
この画像を使用してコンテナを実行します.
sudo docker run -d -p 8080:8080 --rm http_go
正常に動作していることを確認できます.

Dockerhubで画像をリフレッシュします
sudo docker login
sudo docker tag http_go therealslimadam/http_go
sudo docker push therealslimadam/http_go

GCPクーバー本体クラスタで動作


以前に作成したGCPのクバーネディスクラスタで作成したmainを接続します.goの実行
まずクラスタにgoをインストールします
sudo apt install golang
次はVimで作成したmainです.コピーしてgoを貼り付けます.
vim main.go
GCPも以前のように傘下でパッケージを受けています.
go get github.com/julienschmidt/httprouter
ローカルと同じmain.goのバージョンを構築します.
go build main.go
次のコマンドを実行して生成されたファイル
./main
GCP Shellには「Webプレビュー」というボタンがあり、8080ポートで実行されるプログラムを開くことができます.

http goというディレクトリを作成し、構築したファイルを移動し、dockerfileを実行します.
 mkdir http_go
 mv main ./http_go/
 cd http_go/
 vim dockerfile
ドッキングファイルは次のとおりです.
FROM golang:1.11
WORKDIR /usr/src/app
COPY main /usr/src/app
CMD ["/usr/src/app/main"]
イメージを作る
docker build -t http-go .
箱を開ける
docker run -d -p 8080:8080 --rm http-go
同様に、Webプレビューでは、コンテナが正常に動作していることがわかります.

私はハーブをドックでブッシュを作ります.
まずDocHubにログインし、画像のtagを変更します.
docker login
docker tag http-go therealslimadam/http-go
そしてプッシュ命令語でプッシュします.
docker push therealslimadam/http-go
通常、ドックハッブルに放出されたことを確認することができます.

ドッキングイメージを使用してGCPクラスタ上にPodを作成する


ドックの中心に配置された画像を用いてGCPクラスタにpodを作成する.
kubectl create deploy http-go --image=therealslimadam/http-go
クレーンを外にさらす
kubectl expose deployment http-go --type=LoadBalancer --port=80 --target-port=8080
pod数を制御するコピーセットは、次のコマンドで調整できます.
例として、3つのpodを3に設定して、導入します.
kubectl scale deployment http-go --replicas=3
反映が正常であることが確認できます.

サービスの外部IPで接続すれば、ロード・バランシングが正常であることも確認できます.