在Kubernetes上运行Golang

我要试着使用Kubernetes来部署服务器,之前还没有尝试过。我要试着在Kubernetes上部署Nginx。

首先,我们将确认当前的节点情况。这是我们之前进行过的内容。

$ kubectl get nodes
NAME                          STATUS    ROLES     AGE       VERSION
gke-aura-blue-5bef3904-gf47   Ready     <none>    2h        v1.11.8-gke.6

我尝试了各种样本,但总觉得缺了点什么,无法成功启动,遇到了很多困难。
结果变得非常简单。

我们将按顺序逐步执行。
首先创建一个随意的工作文件夹。
在其中,我们会创建以下内容。

主要.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可以被原汁原味地翻译为:”Docker文件”。

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构建

docker build -t gcr.io/<プロジェクトID>/hello ./

在这阶段,我们将确认是否可以从本地显示。

docker run -p 8080:8080 clock

我会保持上述状态,并从本地进行确认。

curl localhost:8080/time

将Docker构建的结果上传到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>

用于Go的轻量级Docker镜像,从scratch开始构建 – Qiita

【Linux】学习Docker/Kubernetes初级| FiS项目

在Google Cloud上,使用Kubernetes引擎来运行Go Bookshelf。

使用GCP的Cloud Build | CyberAgent开发者博客

使用 GKE 来运行 Golang 应用程序容器 – 来自 kaneshin 的讯息

Docker状态确认
整理Docker批量删除命令 – Qiita

广告
将在 10 秒后关闭
bannerAds