引言:为什么 C# 和 Kubernetes 是强大的组合
现代开发越来越要求不仅编写代码,还要正确地将其打包并在云环境中运行。Kubernetes(或 K8s)已成为容器编排的事实标准,而 C# (.NET) 是创建高负载 Web 应用程序和微服务最流行的语言之一。
在本指南中,我们将走完从现成的 C# 应用程序到将其完全部署到 Kubernetes 集群的整个过程。您将学习如何创建 Docker 镜像、编写部署和服务清单,然后使用 kubectl 运行所有内容。没有魔法——只有实践。
步骤 1:准备 .NET 应用程序并进行容器化
1.1 创建简单的 C# Web API
为了演示,我们将创建一个最小的 ASP.NET Core Web API。打开终端并执行:
dotnet new webapi -n MyK8sAppcd MyK8sApp默认情况下,项目已经包含 WeatherForecastController 控制器。让我们确保应用程序可以在本地运行:
dotnet run导航到 http://localhost:5000/weatherforecast — 您应该会看到 JSON 响应。现在我们的应用程序已准备好进行打包。
1.2 创建 Dockerfile
没有容器化就无法部署到 Kubernetes。在项目根目录中创建一个 Dockerfile 文件:
# 使用官方镜像进行构建FROM mcr.microsoft.com/dotnet/sdk:8.0 AS buildWORKDIR /app
# 复制项目文件并还原依赖项COPY *.csproj .RUN dotnet restore
# 复制其余文件并构建应用程序COPY . .RUN dotnet publish -c Release -o out
# 最终镜像——仅运行时FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS runtimeWORKDIR /appCOPY --from=build /app/out .ENTRYPOINT ["dotnet", "MyK8sApp.dll"]请注意:我们使用多阶段构建——这可以减少最终镜像大小并提高安全性。
1.3 构建并检查 Docker 镜像
构建镜像并在本地运行:
docker build -t myk8sapp:latest .docker run -d -p 8080:80 --name myapp myk8sapp:latest检查是否正常工作:http://localhost:8080/weatherforecast。如果一切正常,那就太好了。停止容器:
docker stop myapp && docker rm myapp步骤 2:Kubernetes 基础知识——部署需要了解的内容
在编写清单之前,让我们了解 Kubernetes 的关键概念:
- Pod — 最小的部署单元。包含一个或多个容器。
- Deployment — 管理 Pod 的状态:扩展、更新、故障恢复。
- Service — 提供对 Pod 的网络访问的抽象。通常使用
ClusterIP(内部)或LoadBalancer(外部)类型。 - ConfigMap / Secret — 用于存储配置和敏感数据。
我们将使用 minikube 进行本地测试。请按照官方说明进行安装。
启动集群:
minikube start步骤 3:为 C# 应用程序创建 Kubernetes 清单
3.1 Deployment 清单
创建 deployment.yaml 文件:
apiVersion: apps/v1kind: Deploymentmetadata: name: myk8sapp-deploymentspec: replicas: 3 selector: matchLabels: app: myk8sapp template: metadata: labels: app: myk8sapp spec: containers: - name: myk8sapp image: myk8sapp:latest imagePullPol