将 C# 部署到 Kubernetes:基础实践指南

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

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

开始课程

引言:为什么要在 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: LoadBalancer

LoadBalancer 类型适用于云提供商。对于本地集群,请使用 NodePort 或 ClusterIP,并通过 kubectl port-forward 进行端口转发。



3. 部署并验证应用程序

现在清单文件已准备就绪,可以部署到 Kubernetes 集群了。



3.1. 应用清单文件

博客

书籍推荐