1. 程式人生 > >Docker應用:Kubernetes(容器集群)

Docker應用:Kubernetes(容器集群)

都沒有 docker cti exp cnblogs 企業 home fir -o

閱讀目錄:

  • Docker應用:Hello World
  • Docker應用:Docker-compose(容器編排)
  • Docker應用:Kubernetes(容器集群)

前言:

  終於出第三篇了,上個月就已經弄好了,一直沒弄上來,步入正題之前有3個建議給想要學習Kubernetes的同學。

  1、在國內因為防火墻的原因,你是不可能在Docker上在線開啟的Kubernetes功能的。所以如果你會fan qiang上網,那萬事大吉。

  2、如果你離香港澳門比較近,那建議你周末抽空過去一趟,上午買罐奶粉,在店裏吃個便餐順便上網把Kubernetes功能開啟了,

一天時間不用。又能旅遊散心、又把事情辦了,一舉多得,還是萬事大吉。

  3、如果上面2種你都沒有條件,那真的很遺憾,你要控制住你的雙手,一不註意,你可能會把電腦砸掉。還要準備菊花茶,清熱解毒

以免怒火攻心長痘痘,板藍根小柴胡也要買點,不然你氣憤身體忽冷忽熱的容易感冒。

  好了,說這些是想告訴你,你如果不能在線開啟Kubernetes功能,那將浪費很多很多。。的時間,別人不知道,反正我就是斷斷續續的

加起來可能至少2個星期才完成。而且我後邊也不會把解決過程發出來,太羅嗦,有怒氣你們直接懟防火墻就對了,機智.jpg

一、Kubernetes簡單介紹

1、Kubernetes簡單點說就是關於Docker的集群方案,具體介紹請可以點擊這裏,在之前2章中都只是介紹了單機、單運用的開發情況,但是

很明顯這是不夠的,互聯網時代,一個完整的系統可能由幾十、幾百個子系統組成,這不可能都部署在一臺機器上,所以單機單應用的Docker

部署方案最多運用在企業內部小系統上,超出這個範圍就要考慮docker集群了,這就引出Kubernetes,他就是專為Docker集群而生的。

2、Kubernetes功能模塊可以分為:

  • Container(容器)
  • Pod(容器組)
  • Label(標簽)
  • Replication Controller(復制控制器)
  • Service(服務)
  • Node(節點)
  • Kubernetes Master(Kubernetes主節點)

  Container、Pod這2個都是關於容器的,比較好理解,Label可以理解為對Pod的標識,

  Replication Controller則是實現Pod拷貝的功能,負載均衡應該就是他完成的,Node(節點),Kubernetes Master(Kubernetes主節點)

  比較好理解,主要是yaml格式編寫要熟練,後續講到。

3、Kubernetes模塊圖示,直接摘抄了啊

技術分享圖片

二、開啟Kubernetes

1、先來看看,Kubernetes啟動成功後是有2個running的,啟動失敗那個Kubernetes會一直提示 “** is starting”,直到永遠。

技術分享圖片

2、驗證一下,在PowerShell中輸入以下指令查看Kubernete版本

1 kubectl version

技術分享圖片

三、部署web鏡像

1、新建WebMVC項目,修改HomeController

 1     public class HomeController : Controller
 2     {
 3         public IActionResult Index()
 4         {
 5             ViewData["Message"] = string.Format("IP:{0}", Dns.GetHostAddresses(Dns.GetHostName()).FirstOrDefault());
 6 
 7             return View();
 8         }
 9 
10         ....
11     }

2、編寫Dockerfile

 1 FROM microsoft/dotnet:2.1-sdk AS build
 2 WORKDIR /app
 3 
 4 # copy csproj and restore as distinct layers
 5 COPY *.sln .
 6 COPY WebApp-HelloWorld/*.csproj ./WebApp-HelloWorld/
 7 RUN dotnet restore
 8 
 9 # copy everything else and build app
10 COPY WebApp-HelloWorld/. ./WebApp-HelloWorld/
11 WORKDIR /app/WebApp-HelloWorld
12 RUN dotnet publish -c Release -o out
13 
14 
15 FROM microsoft/dotnet:2.1-aspnetcore-runtime AS runtime
16 WORKDIR /app
17 COPY --from=build /app/WebApp-HelloWorld/out ./
18 ENTRYPOINT ["dotnet", "WebApp-HelloWorld.dll"]

運行 docker build -t helloworld . ,要先創建鏡像,後邊的kubernete才能用

3、編寫kubernete-web-pod.yaml

 1 apiVersion: v1
 2 kind: Pod 
 3 metadata:
 4   name: kubernete-web-pod 
 5   labels: 
 6     app: kubernete-web-pod
 7 spec: 
 8   containers: 
 9     - name: helloworld 
10       image: helloworld
11       imagePullPolicy: IfNotPresent 
12       ports:
13         - containerPort: 80 

4、創建Pod

1 kubectl create -f kubernete-web-pod.yaml
2 kubectl get pod

技術分享圖片

5、暴露容器地址

1 kubectl port-forward kubernete-web-pod 8010:80

技術分享圖片

6、瀏覽器訪問

技術分享圖片

搞定!

四、容器集群

1、創建 kubernete-web-replicaset.yaml

 1 apiVersion: apps/v1
 2 kind: ReplicaSet 
 3 metadata:
 4   name: kubernete-web-replicaset
 5 spec:
 6   replicas: 3 # pod實例的個數
 7   selector:
 8     matchLabels: # 標簽名稱
 9       app: kubernete-web-pod
10   template: 
11     metadata:
12       labels:
13         app: kubernete-web-pod
14     spec:
15       containers:
16       - name: kubernete-web-replicaset
17         image: helloworld
18         imagePullPolicy: IfNotPresent 

2、執行指令

1 kubectl create -f kubernete-web-replicaset.yaml

技術分享圖片

3、創建Service統一入口

1 kubectl expose replicaset kubernete-web-replicaset --type=loadBalancer --port=8020 --target-port=80 --name kubernete-web-service

技術分享圖片

這樣就構成了集群負載均衡了,我們在瀏覽器上試試

3、開3個窗口http://localhost:8020/

技術分享圖片

技術分享圖片

技術分享圖片

大功告成!。。。。。回家

Docker應用:Kubernetes(容器集群)