K8S之WebApi部署 转载声明 1.下载镜像 2.编写YAML 3.通过kubectl部署到K8S 4.验证WebApi 5.Dashboard

本文转自:ASP.NET Core on K8S学习初探(3)部署API到K8S

1.下载镜像

docker pull edisonsaonian/k8s-demo

因为是测试流程,直接把文中提到的镜像也拉到本地了

K8S之WebApi部署
转载声明
1.下载镜像
2.编写YAML
3.通过kubectl部署到K8S
4.验证WebApi
5.Dashboard

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

提示如下:

K8S之WebApi部署
转载声明
1.下载镜像
2.编写YAML
3.通过kubectl部署到K8S
4.验证WebApi
5.Dashboard

看到上面的提示"service created",就可以知道已经创建好了,这里我们再通过下面这个命令来验证一下:

kubectl get svc -n aspnetcore

 可以看到,在命名空间aspnetcore下,就有了一个k8s-demo1的服务(k8s-demo是之前练习加上的)运行起来了,并通过端口号30881向外部提供访问。

 K8S之WebApi部署
转载声明
1.下载镜像
2.编写YAML
3.通过kubectl部署到K8S
4.验证WebApi
5.Dashboard

4.验证WebApi

首先,我们可以通过浏览器来访问一下这个API接口,看看是否能正常访问到。

  • /api/values

 K8S之WebApi部署
转载声明
1.下载镜像
2.编写YAML
3.通过kubectl部署到K8S
4.验证WebApi
5.Dashboard

  •  /api/values/1000

K8S之WebApi部署
转载声明
1.下载镜像
2.编写YAML
3.通过kubectl部署到K8S
4.验证WebApi
5.Dashboard

5.Dashboard

5.1状态查看

通过Dashboard查看状态(需要切换命名空间)

K8S之WebApi部署
转载声明
1.下载镜像
2.编写YAML
3.通过kubectl部署到K8S
4.验证WebApi
5.Dashboard

5.2Dashboard动态伸缩

K8S之WebApi部署
转载声明
1.下载镜像
2.编写YAML
3.通过kubectl部署到K8S
4.验证WebApi
5.Dashboard

 将弹窗中需要的容器数由2改为1

K8S之WebApi部署
转载声明
1.下载镜像
2.编写YAML
3.通过kubectl部署到K8S
4.验证WebApi
5.Dashboard

 查看状态

K8S之WebApi部署
转载声明
1.下载镜像
2.编写YAML
3.通过kubectl部署到K8S
4.验证WebApi
5.Dashboard

5.3Kubectl动态伸缩

除了在Dashboard中可视化地操作进行伸缩,也可以通过kubectl来进行,例如下面这句命令,将容器实例扩展到3个。需要注意的是,由于我们的k8s-demo1所在的命名空间是在aspnetcore下,因此也需要指明--namespace=aspnetcore。

kubectl scale deployment k8s-demo1 --replicas=2 --namespace=aspnetcore

K8S之WebApi部署
转载声明
1.下载镜像
2.编写YAML
3.通过kubectl部署到K8S
4.验证WebApi
5.Dashboard

再次查看dashboard

K8S之WebApi部署
转载声明
1.下载镜像
2.编写YAML
3.通过kubectl部署到K8S
4.验证WebApi
5.Dashboard

5.4 自动伸缩

在K8S中,提供了一个autoscale接口来实现服务的自动伸缩,它会采用默认的自动伸缩策略(例如根据CPU的负载情况)来帮助我们实现弹性伸缩的功能。例如下面这句命令可以实现我们的k8s-demo可以伸缩的范围是1~3个,根据负载情况自己伸缩,在没有多少请求量压力很小时收缩为一个,在压力较大时启动另一个实例来降低负载。

kubectl autoscale deployment k8s-demo1 --min=1 --max=3 --namespace=aspnetcore