引言:为什么要在 Kubernetes 中运行 C#?
现代 C# (.NET) 开发越来越需要可扩展且容错的基础设施。Kubernetes (K8s) 已成为容器编排的标准,能够自动化部署、扩展和管理应用程序。在本指南中,我们将演示如何将您的 C# 应用程序容器化,并在 Kubernetes 集群中实际运行它。
您将学习如何准备 Docker 镜像、编写 Kubernetes 清单文件,并使用 kubectl 执行部署。本文面向已熟悉 C# 基础知识并希望掌握现代 DevOps 实践的开发者。
1. 准备 C# 应用程序以进行容器化
在将应用程序部署到 Kubernetes 之前,需要先将其打包成 Docker 镜像。我们以一个简单的 ASP.NET Core Web API 应用程序为例。
1.1. 创建项目
使用 .NET CLI 创建一个新项目:
dotnet new webapi -n MyK8sAppcd MyK8sApp确保应用程序在本地运行正常:
dotnet run默认情况下,应用程序将在 http://localhost:5000 地址可用。
1.2. 添加 Dockerfile
在项目根目录创建一个 Dockerfile 文件(无扩展名)。使用多阶段构建来优化镜像大小:
# 构建阶段FROM mcr.microsoft.com/dotnet/sdk:8.0 AS buildWORKDIR /appCOPY *.csproj ./RUN dotnet restoreCOPY . ./RUN dotnet publish -c Release -o out
# 运行阶段FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS runtimeWORKDIR /appCOPY --from=build /app/out ./ENV ASPNETCORE_URLS=http://+:80EXPOSE 80ENTRYPOINT ["dotnet", "MyK8sApp.dll"]1.3. 构建并验证 Docker 镜像
构建镜像并在本地运行:
docker build -t myk8sapp:latest .docker run -d -p 8080:80 --name myapp myk8sapp:latest验证应用程序是否响应:curl http://localhost:8080/weatherforecast(或在浏览器中打开)。
2. 编写 Kubernetes 清单文件
要部署到 Kubernetes,需要编写描述应用程序期望状态的 YAML 文件。最小集合包括 Deployment 和 Service。
2.1. 创建 Deployment
文件 deployment.yaml:
apiVersion: apps/v1kind: Deploymentmetadata: name: myk8sapp-deployment labels: app: myk8sappspec: replicas: 2 selector: matchLabels: app: myk8sapp template: metadata: labels: app: myk8sapp spec: containers: - name: myk8sapp image: myk8sapp:latest ports: - containerPort: 80 env: - name: ASPNETCORE_ENVIRONMENT value: "Production" resources: requests: memory: "128Mi" cpu: "250m" limits: memory: "256Mi" cpu: "500m"重要提示: 如果您使用本地集群(例如 Minikube 或 Kind),镜像必须在集群内可用。或者,对于本地镜像,请设置 imagePullPolicy: Never。
2.2. 创建 Service
文件 service.yaml:
apiVersion: v1kind: Servicemetadata: name: myk8sapp-servicespec: selector: app: myk8sapp ports: - protocol: TCP port: 80 targetPort: 80 type: LoadBalancerLoadBalancer 类型适用于云提供商。对于本地集群,请使用 NodePort 或 ClusterIP,并通过 kubectl port-forward 进行端口转发。
3. 部署并验证应用程序
现在清单文件已准备就绪,可以部署到 Kubernetes 集群了。