kubernetes學習筆記(二)——部署服務


前面一篇文章部署好了minikube環境,這次學習下怎麼部署app到kubernetes環境當中去。參考的是官網的教程,稍微做了一點改動,爲了進一步熟悉go和docker,這裏我把教程中的js換成了go,其他學習的朋友可以改成Python,java等其他語言,進行學習。

(1)創建app

這裏寫了一個簡單的hello kubernetes的簡單server.go。

package main

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

func hello(w http.ResponseWriter,r *http.Request)  {
   io.WriteString(w,"hello, kubetnetes!\n")
}

func main() {
   http.HandleFunc("/hello",hello)
   err := http.ListenAndServe(":8080",nil)
   if err != nil {
      log.Panic(err)
   }
}

編譯之後可以運行起來。

[root@localhost src]# go build -o server server.go 
[root@localhost src]# ./server 

新開一個窗口進行curl,可以看到輸出了hello, kubetnetes!

[root@localhost ~]# curl 192.168.42.131:8080/hello
hello, kubetnetes!

(2)創建app的docker鏡像

1、編寫Dockerfile
比較簡單,基於golang的官方鏡像開始製作,將編譯出來的server二進制複製到bin目錄,然後執行二進制啓動server。(此處記得將docker源換成國內的,要不然會非常慢。參考:教程

[root@localhost src]# cat Dockerfile 
FROM golang:1.10
EXPOSE 8080
COPY server /usr/local/bin/
CMD server
[root@localhost src]# 

2、打包鏡像
注意要將Dockerfile和編譯出來的server二進制放在同一個目錄

[root@localhost src]# ls
Dockerfile  server  server.go
[root@localhost src]# docker build -t server:v1 .
Sending build context to Docker daemon 6.153 MB
Step 1/4 : FROM golang:1.10
Trying to pull repository docker.io/library/golang ... 
1.10: Pulling from docker.io/library/golang
05d1a5232b46: Pull complete 
5cee356eda6b: Pull complete 
89d3385f0fd3: Pull complete 
80ae6b477848: Pull complete 
94ebfeaaddf3: Pull complete 
e132030a369d: Pull complete 
c67c5750c788: Pull complete 
Digest: sha256:a325153f1f1e2edb76a76ad789aff172b89dd6178e8f74d39ef87c04d87d1961
Status: Downloaded newer image for docker.io/golang:1.10
 ---> a4afc24299ee
Step 2/4 : EXPOSE 8080
 ---> Running in ac21ed38b066
 ---> a28f84e7be93
Removing intermediate container ac21ed38b066
Step 3/4 : COPY server /usr/local/bin/
 ---> e6050a624a06
Removing intermediate container 248ded7f9ac9
Step 4/4 : CMD server
 ---> Running in a465911d277d
 ---> e205f52f0ec8
Removing intermediate container a465911d277d
Successfully built e205f52f0ec8

使用 docker image ls 可以看剛剛做好的鏡像。

(3)部署app到k8s

1、利用kubectl run 創建一個deployment 或job 來管理容器

[root@localhost src]# kubectl run hello-k8s --image=server:v1 --port=8080
deployment.apps "hello-k8s" created

2、查看創建的deployment

[root@localhost src]# kubectl get deployments
NAME        DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
hello-k8s   1         1         1            0           30s

3、查看pod

[root@localhost src]# kubectl get pods
NAME                         READY     STATUS    RESTARTS   AGE
hello-k8s-69c8f4fb76-jx4kg   1/1       Running   0          1m

4、將資源暴露爲新的Kubernetes Service。

[root@localhost src]# kubectl expose deployment hello-k8s --type=LoadBalancer
service "hello-k8s" exposed

通過–type=LoadBalancer flag來在羣集外暴露Service,在支持負載均衡的雲提供商上,將配置外部IP地址來訪問Service。在Minikube上,該LoadBalancer type使服務可以通過minikube Service 命令訪問。

5、查看暴露後的Kubernetes Service

[root@localhost src]# kubectl get services
NAME         TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
hello-k8s    LoadBalancer   10.100.59.64   <pending>     8080:31007/TCP   45s
kubernetes   ClusterIP      10.96.0.1      <none>        443/TCP          1h

6、打開服務

[root@localhost src]# minikube service hello-k8s
Opening kubernetes service default/hello-k8s in default browser...
xdg-open: no method available for opening 'http://192.168.42.131:31007'

在瀏覽器當中打開http://192.168.42.131:31007/hello就可以看到輸出了。
在這裏插入圖片描述

(4)參考資料

https://kubernetes.io/docs/tutorials/hello-minikube/#before-you-begin

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章