使用 .NET Core 和 Kubernetes 构建微服务体系结构

bcf1dadb180e08a84adc3e53a91c4591.png微服务架构已成为现代软件开发的基石,使组织能够构建可扩展、弹性和可维护的应用程序。将 .NET Core 与 Kubernetes 相结合,为开发、部署和管理微服务提供了一个强大的平台。本文深入探讨了使用 .NET Core 和 Kubernetes 实现微服务体系结构的高级方面,并通过实际示例进行了说明。

了解微服务

原理概述

微服务架构将大型应用程序分解为较小的独立服务,这些服务通过定义明确的 API 进行通信。每个微服务都专注于特定的业务功能,从而促进更好的可扩展性和开发敏捷性。

设置环境
步骤 1:创建新的 .NET Core 微服务 首先,为微服务创建新的 .NET Core Web API 项目:

dotnet new webapi -n ProductService  
cd ProductService

第 2 步:定义微服务
在此示例中,我们将创建一个简单的产品服务来处理产品数据。

型号/Product.cs

public class Product  
{  
    public int Id { get; set; }  
    public string Name { get; set; }  
    public decimal Price { get; set; }  
}

控制器/ProductController.cs

[ApiController]
[Route("api/[controller]")]
public class ProductController : ControllerBase
{
    private static readonly List<Product> Products = new List<Product>
    {
        new Product { Id = 1, Name = "Laptop", Price = 1200.00M },
        new Product { Id = 2, Name = "Smartphone", Price = 800.00M }
    };

    [HttpGet]
    public ActionResult<IEnumerable<Product>> Get() => Products;

    [HttpGet("{id}")]
    public ActionResult<Product> Get(int id)
    {
        var product = Products.FirstOrDefault(p => p.Id == id);
        if (product == null) return NotFound();
        return product;
    }

    [HttpPost]
    public ActionResult Post(Product product)
    {
        Products.Add(product);
        return CreatedAtAction(nameof(Get), new { id = product.Id }, product);
    }
}

步骤 3:对微服务
进行 Docker 化 创建“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 ["ProductService/ProductService.csproj", "ProductService/"]
RUN dotnet restore "ProductService/ProductService.csproj"
COPY . .
WORKDIR "/src/ProductService"
RUN dotnet build "ProductService.csproj" -c Release -o /app/build

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

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "ProductService.dll"]

构建并运行 Docker 镜像:

docker build -t productservice .  
docker run -d -p 8080:80 --name productservice productservice

部署到 Kubernetes
步骤 4:创建 Kubernetes 部署和服务
创建用于部署产品服务的 Kubernetes 清单。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: productservice
spec:
  replicas: 3
  selector:
    matchLabels:
      app: productservice
  template:
    metadata:
      labels:
        app: productservice
    spec:
      containers:
      - name: productservice
        image: productservice:latest
        ports:
        - containerPort: 80

service.yaml

apiVersion: v1
kind: Service
metadata:
  name: productservice
spec:
  selector:
    app: productservice
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: LoadBalancer

将服务部署到 Kubernetes:

kubectl apply -f deployment.yaml  
kubectl apply -f service.yaml

第 5 步:设置 Ingress Controller
设置 Ingress Controller 以管理对微服务的外部访问。

yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: productservice-ingress
spec:
  rules:
  - host: productservice.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: productservice
            port:
              number: 80

应用入口配置:

kubectl apply -f ingress.yaml

步骤 6:配置 CI/CD 管道
使用 CI/CD 管道自动执行生成、测试和部署过程。GitHub Actions 示例:

.github/workflows/ci-cd-pipeline.yaml

name: CI/CD Pipeline

on:
  push:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout code
      uses: actions/checkout@v2

    - name: Set up .NET
      uses: actions/setup-dotnet@v1
      with:
        dotnet-version: '5.0.x'

    - name: Build
      run: dotnet build --configuration Release

    - name: Test
      run: dotnet test --no-build --verbosity normal

    - name: Docker Build and Push
      run: |
        docker build -t productservice .
        docker tag productservice:latest yourdockerhub/productservice:latest
        echo "${{ secrets.DOCKER_HUB_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_HUB_USERNAME }}" --password-stdin
        docker push yourdockerhub/productservice:latest

    - name: Deploy to Kubernetes
      uses: Azure/k8s-deploy@v1
      with:
        manifests: |
          ./deployment.yaml
          ./service.yaml
          ./ingress.yaml
        images: |
          yourdockerhub/productservice:latest

监控和扩展
步骤 7:使用 Prometheus 和 Grafana
设置监控 部署 Prometheus 和 Grafana 以监控微服务的运行状况和性能。

kubectl create namespace monitoring  
kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/main/bundle.yaml

设置 Grafana 以可视化指标:

kubectl apply -f https://raw.githubusercontent.com/grafana-operator/grafana-operator/main/deploy/grafana.yaml

步骤 8:使用 Horizontal Pod Autoscaler
进行自动缩放 为产品服务启用自动缩放:

kubectl autoscale deployment productservice --cpu-percent=50 --min=3 --max=10

使用 .NET Core 和 Kubernetes 实现微服务体系结构为构建可缩放、可复原和可维护的应用程序提供了一个强大的框架。通过利用 Docker 进行容器化,利用 Kubernetes 进行编排,利用 CI/CD 管道进行自动化,您可以简化开发和部署过程。Prometheus 和 Grafana 等监控工具以及自动缩放功能可确保您的微服务始终以最佳方式运行。深入了解这些高级技术,以增强 .NET Core 应用程序并拥抱软件开发的未来。

如果你喜欢我的文章,请给我一个赞!谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值