kubernetes 從入門到棄坑-1

學習方法

在一個互聯網技術更迭頻繁的世界,學習一門新的互聯網技術時,我們需要用最有效率的學習方法快速學習。K8S是時下最流行的容器編排技術,當我們學習這個新技術的時候,總會發現很難入門,沒有資源學習。其實你是沒有掌握一個學習方法。就我而言,學習一個新的技術,我首先會打開這個技術的官方網站,在官網中找相關的文檔去閱讀,雖然說很多技術文檔都是英文,閱讀有障礙,可是你還有字典可以翻譯啊,沉下心來先從官方文檔中學習。除此之外,我們也要善於利用一些技術論壇,技術論壇中有很多分享的相關知識可以學習借鑑,沒事可以多逛逛論壇,總會有收穫的。如果說以上兩點,你很難做到,那麼只剩下一條路了,找一個靠譜的博客博主或自媒體博主,跟著他一步步學習。不過說實話,互聯網這麼大,靠譜的人可真不多,這個尋找過程是困難且耗時的。

簡單說說K8S

K8S 全稱kubernetes,是容器平臺技術中的編排引擎。簡單點說就是大家都在使用的基於容器技術的分佈式架構方案。K8S 之所以這麼火,是因為它牛!體現在K8S是谷歌開源的技術方案,紅帽、Docker、亞馬遜雲、阿里雲、騰訊雲、華為雲都基於K8S進行開發容器服務。換句話說,全行業的大佬都在用K8S 進行容器編排管理,你要學習容器技術還不快點學K8S。說了這麼多K8S到底能做什麼?docker 可以管理容器的全生命週期:創建、運行、銷燬;K8S 可以管理應用的全生命週期:創建應用,應用部署,提供服務,擴容縮容,應用更新 。當然這裡的應用都是一個個容器組成的,說白了K8S管理著docker 容器組成的應用的全生命週期。既然K8S這麼厲害我們就一起來學習一下吧。

跟我一起學 k8s

找到官網

既然要學習K8S,我們就找到K8S的官網,去看看官方有什麼文檔可以輔助學習。

kubernetes 從入門到棄坑-1

文檔大家可以慢慢看,我還是帶著大家上手練練K8S的命令吧。

動手練習

打開模擬器之後,跟上我的步驟,我們一起了解下K8S的常用操作

kubernetes 從入門到棄坑-1


# 我們打開的頁面是模擬器,你第一步需要做的事情就是打開迷你版的K8S,怎麼打開,左側提示信息很清晰的告訴你運行命令啟動迷你版K8S,其實運行start之後你是獲取到一臺雲主機,接下來的操作都是在你獲得的雲主機上執行的。
minikube version
minikube start

# 接下來我們先看看K8S的版本
kubectl version
# 也可以查看一下集群信息
kubectl cluster info
# 查看K8S的集群節點
kubectl get nodes
# 查看主機名
hostname

# 總結:通過上面的命令可以發現K8S的命令,都是以kubectl 開頭的,瞭解K8S命令可以 kubectl --help 查看每個命令的使用方法。

# 接下來我們可以練習一個 部署kubernetes-bootcamp應用的實例(來源:CloudMan)

# 使用kubectl run 命令部署應用,可以看出鏡像選擇的是v1版,接下來我們有升級鏡像的操作,要注意的是這時的--port只是設置對外開放的端口,而不是映射關係
kubectl run kubernetes-bootcamp --image=docker.io/jocatalin/kubernetes-bootcamp:v1 --port=8080
# 應用開放了8080端口,只能確保pod中的容器是可以訪問到,而不能確保外部也可以訪問。所有我們創建一個services 使得容器的端口和主機進行綁定。

kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080
# 這裡解釋一下兩個概念,pod和services
# pod 裡面有一個根容器 Pause容器,一個或者多個業務容器。也就是說一個pod是一組容器的集合,這一組容器都共享Pause 容器的ip和數據卷
# services 簡單理解就是微服務,這個微服務可以定義服務訪問的入口地址

# 現在我們查看一下pods 和 services
kubectl get pods
```
NAME READY STATUS RESTARTS AGE
kubernetes-bootcamp-56cdd766d-87gkw 1/1 Running 0 1m
```
kubectl get services
```
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 443/TCP 1m
kubernetes-bootcamp NodePort 10.111.59.30 8080:30592/TCP 47s
```
# 可以看到我們服務訪問入口地址已經綁定到主機的32067端口上,那我們就訪問一下我們的30592端口,看看效果吧
hostname
```
minikube
```
curl minikube:30592
```
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-56cdd766d-87gkw | v=1
```

# 接下來我們要搞事情,把這個副本擴大點然後再縮小點,這裡補充一下 deployments概念,他和RC概念很像都是用來部署的工具,可以創建應用並隨時知道部署的進度。概念性東西后續教程會更上不用太糾結。


# 查看deployments 還是使用kubectl get命令
kubectl get deployments
# 動態擴容kubernetes-bootcamp應用的副本數
kubectl scale deployments/kubernetes-bootcamp --replicas=3
# 查看此時部署的進度
kubectl get deployments
```
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
kubernetes-bootcamp 3 3 3 3 3m
```
# 查看pods
kubectl get pods
```
NAME READY STATUS RESTARTS AGE
kubernetes-bootcamp-56cdd766d-2zpmp 1/1 Running 0 10s
kubernetes-bootcamp-56cdd766d-87gkw 1/1 Running 0 2m
kubernetes-bootcamp-56cdd766d-nqhxf 1/1 Running 0 10s
```
# K8S是編排工具,pod又是一組應用的容器集合,那麼實際上每次訪問這個應用時請求會發送到不同的 Pod,三個副本輪詢處理,這樣就實現了負載均衡。
curl minikube:30592
```
$ curl minikube:30592
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-56cdd766d-2zpmp | v=1
$ curl minikube:30592
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-56cdd766d-87gkw | v=1
$ curl minikube:30592
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-56cdd766d-2zpmp | v=1
$ curl minikube:30592
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-56cdd766d-87gkw | v=1
```

# 接下來我們升級鏡像
kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2
# 可以看到升級的過程
kubectl get pods
```
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
kubernetes-bootcamp-56cdd766d-2zpmp 1/1 Terminating 0 3m

kubernetes-bootcamp-56cdd766d-87gkw 1/1 Terminating 0 5m
kubernetes-bootcamp-56cdd766d-nqhxf 1/1 Terminating 0 3m
kubernetes-bootcamp-7799cbcb86-qkfrl 1/1 Running 0 14s
kubernetes-bootcamp-7799cbcb86-qsdwj 1/1 Running 0 11s
kubernetes-bootcamp-7799cbcb86-rhs95 1/1 Running 0 12s
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
kubernetes-bootcamp-7799cbcb86-qkfrl 1/1 Running 0 52s
kubernetes-bootcamp-7799cbcb86-qsdwj 1/1 Running 0 49s
kubernetes-bootcamp-7799cbcb86-rhs95 1/1 Running 0 50s
```
curl minikube:30592
```
$ curl minikube:30592
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-7799cbcb86-rhs95 | v=2
```
# 回退到v1的鏡像也很簡單使用kubectl rollout undo 命令即可
kubectl rollout undo deployments/kubernetes-bootcamp
# 可以看到回退的過程
kubectl get pods
```
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
kubernetes-bootcamp-56cdd766d-drtnh 1/1 Running 0 23s
kubernetes-bootcamp-56cdd766d-mm76p 1/1 Running 0 22s
kubernetes-bootcamp-56cdd766d-nn75g 1/1 Running 0 25s
kubernetes-bootcamp-7799cbcb86-qkfrl 1/1 Terminating 0 2m
kubernetes-bootcamp-7799cbcb86-qsdwj 1/1 Terminating 0 2m
kubernetes-bootcamp-7799cbcb86-rhs95 1/1 Terminating 0 2m
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
kubernetes-bootcamp-56cdd766d-drtnh 1/1 Running 0 33s
kubernetes-bootcamp-56cdd766d-mm76p 1/1 Running 0 32s
kubernetes-bootcamp-56cdd766d-nn75g 1/1 Running 0 35s
kubernetes-bootcamp-7799cbcb86-qkfrl 0/1 Terminating 0 3m
kubernetes-bootcamp-7799cbcb86-qsdwj 0/1 Terminating 0 3m
kubernetes-bootcamp-7799cbcb86-rhs95 0/1 Terminating 0 3m
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
kubernetes-bootcamp-56cdd766d-drtnh 1/1 Running 0 1m
kubernetes-bootcamp-56cdd766d-mm76p 1/1 Running 0 1m
kubernetes-bootcamp-56cdd766d-nn75g 1/1 Running 0 1m
```
curl minikube:30592
```
$ curl minikube:30592
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-56cdd766d-nn75g | v=1
```

總結

好記性不然爛筆頭,看的多不然動手練練。K8S系列教程將持續更新,請大家多多指點。

kubernetes 從入門到棄坑-1


分享到:


相關文章: