kind搭建k8s集群中部署AspNetCore应用

2022/7/11 1:20:21

本文主要是介绍kind搭建k8s集群中部署AspNetCore应用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

前面使用kind快速搭建本地k8s集群 介绍了使用kind搭建k8s集群,这节介绍使用kind搭建的k8s集群中部署.net core 的api应用程序。

1. 准备AspNetCore WebApi项目

项目结构如下:

 

 

 

添加一个Controller,返回当前其中一个IP:

namespace WebApiK8S.Test.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class TestController : ControllerBase
    {
        public string Get()
        {
            var hostName = Dns.GetHostName();
            var hostIP = Dns.GetHostEntry(hostName).AddressList;
            return hostIP[0].ToString();
        }
    }
}

 

 

编写Dockerfile:

FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /app
EXPOSE 80

COPY . .
ENTRYPOINT ["dotnet", "WebApiK8S.Test.dll"]

 

#指定基础镜像
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base

#配置工作目录 相当于cd
WORKDIR /app
  
#暴露容器端口,此端口与程序运行路径一致,可
EXPOSE 5000

#复制文件到工作目录
COPY . .
 
#ENV :配置系统环境变量,比如程序环境环境等在这里配置(开发、预发、线上环境)
#这里是配置程序运行端口,如果程序不使用默认的80端口这里一定要设置(程序运行端口)
ENV ASPNETCORE_URLS http://+:5000

#设置时间为中国上海,默认为UTC时间
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

#启动程序
ENTRYPOINT ["dotnet", "AspNetCoreDeployInK8S.dll"]
折叠    

2、制作镜像

项目编译后拖到Centos系统中

 

 

 

制作镜像

cd /home/website/WebApiK8S.Test/

docker build -t webapik8stest .

 

 

 

 

 

 

 


3、编写发布应用的demoDeployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: k8s-demo-deployment
  labels:
    k8s-app: k8s-demo-web
spec:
  replicas: 2
  selector:
    matchLabels:
      k8s-app: k8s-demo-web
  template:
    metadata:
      labels:
        k8s-app: k8s-demo-web
    spec:
      containers:
      - name: k8s-demo
        image: webapik8stest
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
---
kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: k8s-demo-web
  name: k8s-demo-service
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 80
    name: http
    nodePort: 30000
  selector:
    k8s-app: k8s-demo-web

 


4. 新建K8s集群,暴露80、443、30000端口

用kind创建K8s时,是相当在本地运行了一个容器,而K8s Cluster就运行在这个容器中。

所以,如果想从外部访问kind K8s的话,就需要把这个容器的端口(K8s的端口)暴露出来。

为了下一步测试,我们重新创建一个新的K8s cluster并且把80、443、30000端口暴露出来。

运行下列命令删除现在的k8s cluster

kind delete cluster --name tsk8s

  

运行下列命令创建新的k8s cluster

cat <<EOF | kind create cluster --name tsk8s --config=-
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
  kubeadmConfigPatches:
  - |
    kind: InitConfiguration
    nodeRegistration:
      kubeletExtraArgs:
        node-labels: "ingress-ready=true"
  extraPortMappings:
  - containerPort: 80
    hostPort: 80
    protocol: TCP
  - containerPort: 443
    hostPort: 443
    protocol: TCP
  - containerPort: 30000
    hostPort: 30000
    protocol: TCP
EOF

说明:

  • extraPortMappings:把K8s容器(相当于K8s所在的服务器)端口暴露出来,这里暴露了80、443、30000
  • node-labels:只允许Ingress controller运行在有"ingress-ready=true"标签的node上

运行结果

  

这时可以看到80、443、30000端口已经暴露出来了

  

 注意:如果是在公司代理环境下,我们要在K8s容器中设置代理,才可以正常进行下面的测试,设置代理请参考上一篇文章《代理环境下在WSL2中用Kind创建Kubernetes集群》”

5. 添加镜像

 不能直接使用主机上的镜像,需要导入到kind的节点(容器中)

kind load docker-image webapik8stest --name tsk8s

 

 

说明:

  • webapik8stest:创建的镜像名
  • tsk8s:创建的集群名

 

6. 创建deployment

将demoDeployment.yaml文件拖到Centos系统中

 

 

 创建deployment并查看pod,svc状态:

kubectl create -f  demoDeployment.yaml
kubectl get svc,pod -o wide

 

 

从上图可以看到对外暴露pod的端口为30000,且该api运行了两个副本。

 

7、在浏览器访问api

http://192.168.192.140:332/api/test

 

 

 http://192.168.192.140:30000/WeatherForecast

 

 

curl  http://192.168.192.140:30000/WeatherForecast

 

 

 

访问成功,证明我们的aspnetcore应用成功部署在K8S上!

 

鸣谢:

https://blog.csdn.net/weixin_42758299/article/details/120908185

https://www.cnblogs.com/roluodev/p/13824191.html

 



这篇关于kind搭建k8s集群中部署AspNetCore应用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程