前回まで
kubernetesでサーバーを立てられるか試してみる
Kubernetesでnginxを立てる
まずは、現状のnodesを確認します。これは前回までやった内容です。
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
gke-aura-blue-5bef3904-gf47 Ready <none> 2h v1.11.8-gke.6
いろんなサンプルをみてやったのですが、何かが足りなかったりで、うまく起動せず、苦労しました。
結果すごいシンプルになりました。
では、順番に実行していきます。
まず適当に作業フォルダを作ります。
その中で以下を作っていきます。
main.go
package main
import (
"time"
"net/http"
)
const layout = "2006-01-02 15:04:05"
func main() {
http.HandleFunc("/time", func(writer http.ResponseWriter, request *http.Request) {
l := request.URL.Query().Get("tz")
location, err := time.LoadLocation(l)
if err != nil {
panic(err)
}
writer.Write([]byte(time.Now().In(location).Format(layout)))
})
http.ListenAndServe(":8080", nil)
}
Dockerfile
FROM scratch
COPY clock /clock
ENV GOROOT /usr/local/go
ADD https://github.com/golang/go/raw/master/lib/time/zoneinfo.zip /usr/local/go/lib/time/zoneinfo.zip
ENTRYPOINT ["/clock"]
これを「clock」というバイナリーにマルチビルドします。
GOOS=linux GOARCH=amd64 go build -o clock main.go
Docker buildします
docker build -t gcr.io/<プロジェクトID>/hello ./
この段階でローカルから表示できるか確認します
docker run -p 8080:8080 clock
上記を立ち上げたままで、ローカルから確認します
curl localhost:8080/time
Docker buildした結果を、gcp側にあげます
gcloud docker -- push gcr.io/<プロジェクト名>/hello
deployment.yamlを作成する
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: hello
labels:
app: hello
spec:
replicas: 1
template:
metadata:
labels:
app: hello
spec:
containers:
- name: hello
image: gcr.io/<プロジェクト名>/hello:latest
imagePullPolicy: Always
ports:
- name: http-server
containerPort: 8080
service.yamlを作る
apiVersion: v1
kind: Service
metadata:
name: hello
labels:
app: hello
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: http-server
selector:
app: hello
順番に実行する
$kubectl create -f deployment.yaml
$kubectl create -f service.yaml
LoadBalancerに表示されたipでアクセスする
$kubectl describe service hello
LoadBalancer Ingress: xx.xx.xx
ブラウザからアクセスして、時間が表示されれば完了です。
http://LoadBalancerに表示されたip/time
便利なコマンド(おまけ)
//deploymentの削除
kubectl delete deployment <name>
//serviceの削除
kubectl delete service <name>
参考)
FROM scratchから始める軽量Docker image for Go - Qiita
【Linux】Docker / Kubernetes 入門 | FiS Project
Kubernetes Engine での Go Bookshelf の実行 | Go | Google Cloud
GCPのCloud Buildを使おう | CyberAgent Developers Blog
GKE を使って golang アプリケーションコンテナを稼働させる - at kaneshin
dockerの状態確認
Docker一括削除コマンドまとめ - Qiita