前面介紹了 k8s 的一些基礎知識,今天來跟大家示範一下,如果要實際部署一個 application 的實際範例。
先來 golang 的 sample code
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))
}
這是一個簡單 http server
再來撰寫一個 Dockerfile
製作 image
FROM golang:1.11.2-alpine
WORKDIR /helloworld
ADD . /helloworld
RUN cd /helloworld && go build
EXPOSE 8080
ENTRYPOINT ./helloworld
接下 build image
docker build -t {yourname}/helloworld .
docker run --rm -p 8080:8080 -d {yourname}/helloworld
可以先做測試看看
$ curl http://127.0.0.1:8080/ping
Hello World%
再來我們要把 image 推到 publid register ,這邊選 dockerhub
docker push {yourname}/helloworld
接下來我們撰寫 Deployment & service
apiVersion: apps/v1
kind: Deployment
metadata:
name: first-hellworld-deployment
labels:
app: first-helloworld
spec:
replicas: 3
selector:
matchLabels:
app: first-helloworld
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
minReadySeconds: 5
template:
metadata:
labels:
app: first-helloworld
spec:
containers:
- name: first-helloworld
#如果上面沒有自己嘗試,這邊可以用我已經上傳好的 smaple image 直接使用
image: syhlion/helloworld
ports:
- containerPort: 8080
---
kind: Service
apiVersion: v1
metadata:
name: first-helloworld
spec:
type: ClusterIP
selector:
app: first-helloworld
ports:
- protocol: TCP
port: 8080
targetPort: 8080
後面你可以透過 port-foward 測試看看 curl 是不是正常嚕
$ kubectl --kubeconfig ~/.kube/k3s.yaml port-forward svc/first-helloworld 8080:8080
再夠過 curl 就完成測試嚕
$ curl http://127.0.0.1:8080/ping
Hello World%
上述所有的 sample code,我有另外上傳的我的 github 上,有興趣的可以自行 clone 回來使用。
這樣我們終於完成了ㄧ個簡單 k8s 簡易介紹,明天我們來介紹,當服務一堆時,又有因應 dev、qa、prod,我們要怎麼管理這些 yaml 檔。