轉載聲明
本文轉自:ASP.NET Core on K8S學習初探(3)部署API到K8S
1.下載鏡像
docker pull edisonsaonian/k8s-demo
因為是測試流程,直接把文中提到的鏡像也拉到本地了
2.編寫YAML
apiVersion: apps/v1 kind: Deployment metadata: name: k8s-demo1 namespace: aspnetcore labels: name: k8s-demo1 spec: replicas: 2 selector: matchLabels: name: k8s-demo1 template: metadata: labels: name: k8s-demo1 spec: containers: - name: k8s-demo image: edisonsaonian/k8s-demo ports: - containerPort: 80 imagePullPolicy: Always --- kind: Service apiVersion: v1 metadata: name: k8s-demo1 namespace: aspnetcore spec: type: NodePort ports: - port: 80 targetPort: 80 selector: name: k8s-demo1
這里這個deploy.yaml就會告訴K8S關於你的API的所有信息,以及通過什么樣的方式暴露出來讓外部訪問。
需要注意的是,這里我們提前為要部署的ASP.NET Core WebAPI項目創建了一個namespace,叫做aspnetcore,因此這里寫的namespace : aspnetcore。
K8S中通過標簽來區分不同的服務,因此這里統一name寫成了k8s-demo。
在多實例的配置上,通過replicas : 2這個設置告訴K8S給我啟動2個實例起來,當然你可以寫更大的一個數量值。
最后,在spec中告訴K8S我要通過NodePort的方式暴露出來公開訪問,因此端口范圍從上一篇可以知道,應該是 30000-32767這個范圍之內。
3.通過kubectl部署到K8S
首先,確保你的Docker for Windows以及Kubernetes都啟動起來了。
然后,在Powershell中通過kubectl完成API的部署,只需要下面這一句命令行即可:
kubectl create -f deploy.yaml
提示如下:
看到上面的提示"service created",就可以知道已經創建好了,這里我們再通過下面這個命令來驗證一下:
kubectl get svc -n aspnetcore
可以看到,在命名空間aspnetcore下,就有了一個k8s-demo1的服務(k8s-demo是之前練習加上的)運行起來了,並通過端口號30881向外部提供訪問。
4.驗證WebApi
首先,我們可以通過瀏覽器來訪問一下這個API接口,看看是否能正常訪問到。
- /api/values
- /api/values/1000
5.Dashboard
5.1狀態查看
通過Dashboard查看狀態(需要切換命名空間)
5.2Dashboard動態伸縮
將彈窗中需要的容器數由2改為1
查看狀態
5.3Kubectl動態伸縮
除了在Dashboard中可視化地操作進行伸縮,也可以通過kubectl來進行,例如下面這句命令,將容器實例擴展到3個。需要注意的是,由於我們的k8s-demo1所在的命名空間是在aspnetcore下,因此也需要指明--namespace=aspnetcore。
kubectl scale deployment k8s-demo1 --replicas=2 --namespace=aspnetcore
再次查看dashboard
5.4 自動伸縮
在K8S中,提供了一個autoscale接口來實現服務的自動伸縮,它會采用默認的自動伸縮策略(例如根據CPU的負載情況)來幫助我們實現彈性伸縮的功能。例如下面這句命令可以實現我們的k8s-demo可以伸縮的范圍是1~3個,根據負載情況自己伸縮,在沒有多少請求量壓力很小時收縮為一個,在壓力較大時啟動另一個實例來降低負載。
kubectl autoscale deployment k8s-demo1 --min=1 --max=3 --namespace=aspnetcore