将 C# 部署到 Kubernetes:开发者基础指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

将 C# 应用部署到 Kubernetes:基础指南

Kubernetes (K8s) 已成为容器化应用编排的事实标准。如果您使用 C# (.NET) 进行开发,迟早会面临一个问题:如何打包您的应用并在云上或您自己的集群中运行它。在本指南中,我们将介绍完整的流程——从创建一个基于 ASP.NET Core 的简单 Web API,到将其部署到 Kubernetes。

本文面向已经熟悉 C# 和 Docker 基础知识,但刚开始使用 Kubernetes 的开发人员。



1. 准备 .NET 应用和 Docker 镜像

在将应用部署到 Kubernetes 之前,需要先将其打包到容器中。让我们创建一个最小的 C# Web API。

  1. 创建一个新项目:
    dotnet new webapi -n MyK8sAppcd MyK8sApp
  2. 确保应用监听 80 端口。在 Program.cs(或 appsettings.json)文件中指定:
    builder.WebHost.UseUrls("http://0.0.0.0:80");
  3. 在项目根目录创建 Dockerfile 文件:
    FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS baseWORKDIR /appEXPOSE 80

    FROM mcr.microsoft.com/dotnet/sdk:8.0 AS buildWORKDIR /srcCOPY ["MyK8sApp.csproj", "."]RUN dotnet restore "./MyK8sApp.csproj"COPY . .RUN dotnet build "MyK8sApp.csproj" -c Release -o /app/build

    FROM build AS publishRUN dotnet publish "MyK8sApp.csproj" -c Release -o /app/publish

    FROM base AS finalWORKDIR /appCOPY --from=publish /app/publish .ENTRYPOINT ["dotnet", "MyK8sApp.dll"]
  4. 构建镜像并将其推送到仓库(例如 Docker Hub):
    docker build -t yourdockerhub/my-k8s-app:v1 .docker push yourdockerhub/my-k8s-app:v1

重要提示: 将 yourdockerhub 替换为实际的用户名。对于本地测试,可以使用 minikube 并且无需发布镜像——在本地构建即可。



2. 创建 Kubernetes 清单文件

Kubernetes 使用声明式的 YAML 文件来描述集群的期望状态。我们需要两个主要对象:Deployment(Pod 管理)和 Service(网络访问)。



2.1. Deployment(部署)

创建 deployment.yaml 文件:

apiVersion: apps/v1kind: Deploymentmetadata:  name: my-k8s-app-deployment  labels:    app: my-k8s-appspec:  replicas: 2  selector:    matchLabels:      app: my-k8s-app  template:    metadata:      labels:        app: my-k8s-app    spec:      containers:      - name: my-k8s-app        image: yourdockerhub/my-k8s-app:v1        ports:        - containerPort: 80        resources:          requests:            memory: "64Mi"            cpu: "250m"          limits:            memory: "128Mi"            cpu: "500m"        livenessProbe:          httpGet:            path: /health            port: 80          initialDelaySeconds: 5          periodSeconds: 10        readinessProbe:          httpGet:            path: /ready            port: 80          initialDelaySeconds: 3          periodSeconds: 5

在此清单中,我们指定了:

  • replicas: 2 — 两个应用实例以实现容错。
  • resources — CPU 和内存限制(对于集群稳定运行很重要)。
  • livenessProbe 和 readinessProbe — 健康检查。请在您的控制器中添加 /health 和 /ready 端点。


2.2. Service(服务)

创建 service.yaml 文件:

apiVersion: v1kind: Servicemetadata:  name: my-k8s-app-servicespec:  selecto                

博客

书籍推荐