Docker應用:Kubernetes(容器集群)
閱讀目錄:
- 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(容器集群)