K8S之WebApi部署


轉載聲明

本文轉自: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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM