在上一篇文章 Ubuntu 18 Kubernetes的Install and Deploy 我們在ubuntu在部署了k8s集群, 今天來看看windows下怎么搞。
主要點有:
1) windows 下搭建k8s 單節點
2)ap.net core 制作和發布鏡像 ,重點在於發布到私有的harbor上(Ubuntu18 安裝搭建Harbor)
3)部署到k8s集群上
安裝
1.下載 k8s-for-docker-desktop,前查看自己docker的版本(我這里是19.03.1所以直接下載master),然后下載對應的分支
2.切換到對應的目錄,開始加載鏡像,這里通過PowerShell的方式加載: .\load_images.ps1 (也可以通過Bash Shell的方式加載:./load_images.sh), 如果出現:在此系統上禁止運行腳本 的錯誤,通過執行 set-ExecutionPolicy RemoteSigned 可以解決
拉取完畢后(需要檢查是否全部成功拉取) 需要在在Docker for Windows中啟用K8S
配置K8s
1.切換運行上下文至docker-for-desktop ,驗證Kubernetes狀態(目前是單節點)
2.部署Kubernetes Dashboard& 開啟API Server訪問代理,向外部提供面板訪問
創建用戶並獲取token
輸入token后
准備一個k8sWebApi
在創建webapi項目的(創建的時候選擇啟用docker 會自動生成Dockerfiel文件)
然后切換到目錄自作鏡像 並發布到私有倉庫:(有關harbor請參考 Ubuntu18 安裝搭建Harbor)
部署webapi到k8s
1.准備namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
name: aspnetcore
labels:
name: aspnetcore
注意我們的deploy是有名稱空間的, 所以在創建 secret的時候必須指定-n=aspnetcore
2.通過kubectl部署到K8S (以下操作在ubuntu下的k8s集群同樣適用)
首先,確保你的Docker for Windows以及Kubernetes都啟動起來了。然后,在Powershell中通過kubectl完成API的部署,然后驗證,
3.在K8S中對WebAPI的伸縮
在Dashboard中,我們可以可視化地對我們的Deployment進行容器實例的伸縮,在彈出的伸縮選項對話框中輸入個數,例如我們這里從2個縮減為1個,然后確定。如下圖所示:
除了在Dashboard中可視化地操作進行伸縮,也可以通過kubectl來進行,例如下面這句命令,將容器實例擴展到3個。需要注意的是,由於我們的k8swebapi所在的命名空間是在aspnetcore下,因此也需要指明--namespace=aspnetcore。
在K8S中,提供了一個autoscale接口來實現服務的自動伸縮,它會采用默認的自動伸縮策略(例如根據CPU的負載情況)來幫助我們實現彈性伸縮的功能。例如下面這句命令可以實現我們的k8s-demo可以伸縮的范圍是1~3個,根據負載情況自己伸縮,在沒有多少請求量壓力很小時收縮為一個,在壓力較大時啟動另一個實例來降低負載。
來一個ubuntu18 k8s集群下面的機截圖
--2019-8-15
滾動更新
修改deploy.yaml文件,並執行 kubectl apply -f deploy.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: k8swebapi namespace: aspnetcore labels: name: k8swebapi spec: replicas: 5 minReadySeconds: 10 strategy: type: RollingUpdate rollingUpdate: maxSurge: 25% maxUnavailable: 25% selector: matchLabels: name: k8swebapi template: metadata: labels: name: k8swebapi spec: imagePullSecrets: - name: regsecret containers: - name: k8swebapi image: 192.168.100.5:80/admin/k8swebapi:20190809 ports: - containerPort: 80 imagePullPolicy: Always --- kind: Service apiVersion: v1 metadata: name: k8swebapi namespace: aspnetcore spec: type: NodePort ports: - port: 80 targetPort: 80 selector: name: k8swebapi
修改程序重新push
修改deploy的鏡像路徑 image: 192.168.100.5:80/admin/k8swebapi:20190815 ,然后執行 kubectl apply -f deploy.yaml 更新后如下,api已經發生變化
參考
K8S的滾動升級RollingUpdate
ASP.NET Core on K8S深入學習(1)K8S基礎知識與集群搭建
ASP.NET Core on K8S學習初探(2)K8S基本概念快速一覽