閱讀目錄:html
前言:
終於出第三篇了,上個月就已經弄好了,一直沒弄上來,步入正題以前有3個建議給想要學習Kubernetes的同窗。web
一、在國內由於防火牆的緣由,你是不可能在Docker上在線開啓的Kubernetes功能的。因此若是你會fan qiang上網,那萬事大吉。docker
二、若是你離香港澳門比較近,那建議你週末抽空過去一趟,上午買罐奶粉,在店裏吃個便餐順便上網把Kubernetes功能開啓了,api
一天時間不用。又能旅遊散心、又把事情辦了,一舉多得,仍是萬事大吉。瀏覽器
三、若是上面2種你都沒有條件,那真的很遺憾,你要控制住你的雙手,一不注意,你可能會把電腦砸掉。還要準備菊花茶,清熱解毒app
以避免怒火攻心長痘痘,板藍根小柴胡也要買點,否則你氣憤身體忽冷忽熱的容易感冒。負載均衡
好了,說這些是想告訴你,你若是不能在線開啓Kubernetes功能,那將浪費不少不少。。的時間,別人不知道,反正我就是斷斷續續的post
加起來可能至少2個星期才完成。並且我後邊也不會把解決過程發出來,太羅嗦,有怒氣大家直接懟防火牆就對了,機智.jpg學習
1、Kubernetes簡單介紹
一、Kubernetes簡單點說就是關於Docker的集羣方案,具體介紹請能夠點擊這裏,在以前2章中都只是介紹了單機、單運用的開發狀況,可是ui
很明顯這是不夠的,互聯網時代,一個完整的系統可能由幾10、幾百個子系統組成,這不可能都部署在一臺機器上,因此單機單應用的Docker
部署方案最多運用在企業內部小系統上,超出這個範圍就要考慮docker集羣了,這就引出Kubernetes,他就是專爲Docker集羣而生的。
二、Kubernetes功能模塊能夠分爲:
- Container(容器)
- Pod(容器組)
- Label(標籤)
- Replication Controller(複製控制器)
- Service(服務)
- Node(節點)
- Kubernetes Master(Kubernetes主節點)
Container、Pod這2個都是關於容器的,比較好理解,Label能夠理解爲對Pod的標識,
Replication Controller則是實現Pod拷貝的功能,負載均衡應該就是他完成的,Node(節點),Kubernetes Master(Kubernetes主節點)
比較好理解,主要是yaml格式編寫要熟練,後續講到。
三、Kubernetes模塊圖示,直接摘抄了啊
2、開啓Kubernetes
一、先來看看,Kubernetes啓動成功後是有2個running的,啓動失敗那個Kubernetes會一直提示 「** is starting」,直到永遠。
二、驗證一下,在PowerShell中輸入如下指令查看Kubernete版本
1 kubectl version
3、部署web鏡像
一、新建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 }
二、編寫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才能用
三、編寫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
四、建立Pod
1 kubectl create -f kubernete-web-pod.yaml
2 kubectl get pod
五、暴露容器地址
1 kubectl port-forward kubernete-web-pod 8010:80
六、瀏覽器訪問
搞定!
4、容器集羣
一、建立 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
二、執行指令
1 kubectl create -f kubernete-web-replicaset.yaml
三、建立Service統一入口
1 kubectl expose replicaset kubernete-web-replicaset --type=loadBalancer --port=8020 --target-port=80 --name kubernete-web-service
這樣就構成了集羣負載均衡了,咱們在瀏覽器上試試
三、開3個窗口http://localhost:8020/
大功告成!。。。。。回家