關於網路那些事...

網路行銷,SEO,網路趨勢,教學文章,網頁設計,生活時事

Kubernetes (K8S) - Mac 本地執行練習上手 如何用 K8S 快速佈建一個 Go Server

| Comments

Kubernetes (K8S) - Mac 本地執行練習上手 如何用 K8S 快速佈建一個 Go Server

如何在 Mac 本地快速透過 K8S 啟用一個服務,這裡以一個簡易的 go server 為例子,一步步來說明如何啟動。

安裝 minikube

brew install minikube

啟動 minikube

# 啟動 minikube,啟動 k8s cluster

minikube start

# 查看 minikube 狀態

minikube status

查看目前 cluster 運行狀態

kubectl get all

查看pods狀態

kubectl get pods

準備 Images

先建立一個 Dockerfile

ARG GO_VERSION=1.12
FROM golang:${GO_VERSION}-alpine
WORKDIR /app
ADD . /app
RUN cd /app && go build
EXPOSE 8080
ENTRYPOINT ./app

建立一個 main.go

package main

import (
    "fmt"
    "log"
    "net/http"
)

func main() {
    http.HandleFunc("/ping", func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "Hello World")
    })
    log.Fatal(http.ListenAndServe(":8080", nil))
}

打包成 image

docker build . -t adon988/go-test

//重新打包方式
docker build --no-cache -t adon988/go-test .

查看 images

docker images

運行 container

docker run --rm -p 8080:8080 -d adon988/go-test

前往 http://localhost:8080/ping 若出現 Hello world ,就表示成功

將 images push 至 docker hub

先在 docker-hub 建立 repository ,名稱為 adon988/go-test

接著 push image 到 docker hub:

docker push adon988/go-test

準備 Yaml

Pod.yaml 幾本格式說明

# API 版本,需要依照 kind 的物件來決定 version 

apiVersion:
    v1, app/v1


# 建立的物件

kind:
    Pod, Service (v1)
    Deployment, ReplicaSet (apps/v1)

# 描述物件及標籤

metadata:
    name, labels..

# 物件要安裝哪些功能

spec:
    containers, name, image, selector..

舉例來說,建立一個 gotest-k8s.yaml

apiVersion: v1

kind: Service

metadata:

  name: go-app-service

spec:

  selector:

    app: go-test

  ports:

  - protocol: "TCP"

    port: 8080

    targetPort: 8080

  type: LoadBalancer


---

apiVersion: apps/v1

kind: Deployment

metadata:

  name: go-test

spec:

  selector:

    matchLabels:

      app: go-test

  replicas: 3

  template:

    metadata:

      labels:

        app: go-test

    spec:

      containers:

      - name: go-app

        image: adon988/go-test:latest

        imagePullPolicy: Always

        ports:

        - containerPort: 8080

啟動 k8s cluster

minikube start

執行部署

kubectl apply -f gotest-k8s.yaml

//---出現以下訊息表示建立成功
service/go-app-service created
deployment.apps/go-test created

(如果出現 Unable to connect to the server: dial tcp 192.168.99.100:8443: i/o timeout,原因是還沒有啟動 k8s cluster,執行 minikube start 即可)

查看pods狀態

 kubectl get pods
 
#---看到以下狀態表示已經運行成功

NAME                       READY   STATUS    RESTARTS   AGE
go-test-78f99bd6b7-nl2kb   1/1     Running   0          77s
go-test-78f99bd6b7-qwhrn   1/1     Running   0          77s
go-test-78f99bd6b7-ttqtk   1/1     Running   0          78s

取得 deployment 暴露出的 ip

minikube service go-app-service --url

//--例如,返回以下位置
http://192.168.99.100:32061

前往回傳的網址就可以看到 k8s 裡面的 go 回傳的內容

http://192.168.99.100:32061

(這裡還會遇到 ErrImageNeverPull 問題)

刪除運行的 K8s

刪除 k8s運行的項目

 kubectl delete -f gotest-k8s.yaml

聲明,近期發現有平台大量盜用文章內容,若您發現內文非來自關於網路那些事 [https://adon988.logdown.com](https://adon988.logdown.com) ,希望您與我聯繫 [https://www.facebook.com/ThinkingWebsite](https://www.facebook.com/ThinkingWebsite)
(本文章源自"關於網路那些事)

最後,如果你喜歡這篇文章,請幫忙點個讚



最新文章推薦

討論

comments powered by Disqus