Net Core 微服务 - 如何将.Net Core Web Api服务部署到Kubernetes (K8s)中

1.新建一个WebApi项目



默认的web api项目包含一个默认的api:/weatherforecast

 

 2. 新建一个Dockerfile文件

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

FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["CoreApi.csproj", "."]
RUN dotnet restore "./CoreApi.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "CoreApi.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "CoreApi.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "CoreApi.dll"]
复制代码

3. 通过Dockerfile生成Docker镜像文件

在Dockerfile所在目录打开命令行工具运行如下命令(注意YourUserName是你在Docker官网注册的账户名):

docker build -t YourUserName/coreapi1 .

4. 将刚生成的Docker镜像推送到Docker仓库中

你需要去Docker官网注册一个账户,注册完成后进行登录:docker login --username  YourUserName

YourUserName是你注册的用户名,接着会让你输入密码,验证成功后会提示Login Succeeded

将镜像推送到仓库这个步骤是不能省略的,因为编写K8s部署文件的时候,需要从仓库拉取镜像,因为服务器在国外,所以会有点慢。

还有一个问题就是你的镜像名字需要用你的Docker用户名开头,比如YourUserName/coreapi1,YourUserName是你Docker的用户名,不然上传会提示没有权限。

5. 编写k8s的部署文件 k8s-deploy.yaml

复制代码
kind: Deployment
apiVersion: apps/v1
metadata:
  labels:
    k8s-app: k8s-apidemo
  name: k8s-apidemo
  namespace: coreapi
spec:
  replicas: 2
  selector:
    matchLabels:
      k8s-app: k8s-apidemo
  template:
    metadata:
      labels:
        k8s-app: k8s-apidemo
    spec:
      containers:
      - name: k8s-apidemo
        image: YourUserName/coreapi1
        ports:
        - containerPort: 80

---

kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: k8s-apidemo
  name: k8s-apidemo
  namespace: coreapi
spec:
  type: NodePort
  ports:
    - nodePort: 31001
port: 80 targetPort: 80 selector: k8s-app: k8s-apidemo
复制代码

需要说明两个问题,标红的image就是我们推送到仓库的镜像,namespace是资源空间名称,也就是我们当前这个pod要运行的资源空间,所以我们需要创建一下这个资源空间:

kubectl create namespace coreapi

创建完成后可以通过以下命令进行查看:kubectl get namespace coreapi

6. 运行我们的部署文件 k8s-deploy.yaml

kubectl create -f k8s-deploy.yaml

如果我们没有创建资源空间coreapi,运行以上命令就会看到如下错误:

正常情况下会有两个提示,分别是deployment.apps/k8s-apidemo created 和 service/k8s-apidemo created

完成之后我们可以通过以下命令查看:kubectl get svc -n coreapi -o wide

 结果显示我的这个pod运行在31001端口,此时我们可以通过浏览器测试:

 

 OK. 部署成功了!!!

 

posted @   SilverFox8588  阅读(424)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示