9
8

More than 5 years have passed since last update.

kubernetesでgolangを動かす

Last updated at Posted at 2019-05-13

前回まで
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

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を作成する

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を作る

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

9
8
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8