Skip to main content

๐Ÿš€Master User Authentication in .NET 8 Web API Email Confirmation, Password Reset, 2FA & Lockout with JWT & Identity๐Ÿ”

Ready to Scale? ๐Ÿš€ Build & Run Your .NET Web API in Kubernetes with Docker! ๐Ÿณ Learn How Today

Ready to Scale? ๐Ÿš€ Build & Run Your .NET Web API in Kubernetes with Docker! ๐Ÿณ Learn How Today!

Introduction

Hello, Netcode-Hub community! ๐Ÿ‘‹ Frederick is here with another exciting lesson for you, we're diving into the world of Kubernetes and Docker, specifically focusing on how to build and run your .NET Web API application in Kubernetes using Docker.

If you've been using Docker Compose to manage your containerized applications, you're already familiar with the convenience it brings. However, as your applications grow and require more advanced orchestration capabilities, Kubernetes becomes a powerful ally. In this section, I'll walk you through why you should consider Kubernetes over Docker Compose for orchestrating your applications, and we'll set up a practical scenario to highlight the benefits of using Kubernetes.

Why Choose Kubernetes Over Docker Compose?

Kubernetes and Docker Compose both serve the purpose of managing containerized applications, but they cater to different needs and scales. Here's why you might choose Kubernetes over Docker Compose:

  • Scalability: Kubernetes excels at scaling applications seamlessly. Whether you need to scale up or down, Kubernetes handles the orchestration efficiently.
  • High Availability: Kubernetes ensures your applications are highly available, distributing workloads across nodes and handling failovers automatically.
  • Self-Healing: With Kubernetes, if a container fails, it automatically restarts or replaces it, ensuring minimal downtime.
  • Rolling Updates and Rollbacks: Kubernetes allows for smooth rolling updates and easy rollbacks, reducing the risk of deployment failures.
  • Advanced Networking: Kubernetes provides advanced networking capabilities, including service discovery, load balancing, and DNS management.
  • Extensibility: Kubernetes has a rich ecosystem of plugins and tools that extend its capabilities, from monitoring to security enhancements.

Scenario: Importance of Using Kubernetes

Imagine you're running a microservices-based e-commerce application. During peak shopping seasons, like Black Friday or Cyber Monday, the traffic to your application surges exponentially. With Docker Compose, scaling the application manually to handle this traffic would be cumbersome and error-prone.

By leveraging Kubernetes, you can define auto-scaling rules that automatically adjust the number of instances based on the traffic load. Kubernetes also ensures that if any of your microservices fail, they are automatically restarted or replaced, ensuring continuous availability and a smooth user experience. This level of automation and resilience is critical for handling high-traffic scenarios and maintaining user satisfaction.

# Create Project with Docker Support 
# See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging.
# This stage is used when running from VS in fast mode (Default for Debug configuration)
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
USER app
WORKDIR /app
EXPOSE 80
# This stage is used to build the service project
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["DemoWebApiWithKubernetes/DemoWebApiWithKubernetes.csproj", "DemoWebApiWithKubernetes/"]
RUN dotnet restore "./DemoWebApiWithKubernetes/DemoWebApiWithKubernetes.csproj"
COPY . .
WORKDIR "/src/DemoWebApiWithKubernetes"
RUN dotnet build "./DemoWebApiWithKubernetes.csproj" -c $BUILD_CONFIGURATION -o /app/build

# This stage is used to publish the service project to be copied to the final stage
FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "./DemoWebApiWithKubernetes.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false

# This stage is used in production or when running from VS in regular mode (Default when not using the Debug configuration)
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "DemoWebApiWithKubernetes.dll"]
 
# Build Project As Docker Image
docker build -t netcodehub/youtubapp:v1 .

# Push Image to Docker Container Registry
docker push netcodehub/youtubeapp:v1

# Create Deployment File with Service
apiVersion: apps/v1  
kind: Deployment
metadata:
  name: youtubeapp-deployment
  annotations:
    kubernetes.io/change-cause: "Starting deployment of youtubeapp"
  labels:
    app: youtubeapp
spec:
  replicas: 3
  selector:
    matchLabels:
      app: youtubeapp
  template:
    metadata:
      labels:
        app: youtubeapp
    spec:
      containers:
      - name: youtubeapp
        image: netcodehub/youtubeapp:v1
        ports:
        - containerPort: 80
        env:
        - name: ENVIRONMENT
          value: "development"
        - name: ASPNETCORE_URLS
          value: http://+:80;
        resources:
          requests:
            memory: "64Mi"
            cpu: "250m"
          limits:
            memory: "128Mi"
            cpu: "500m"
---
apiVersion: v1 
kind: Service
metadata:
  name: youtubeapp-loadbalancer-service
spec:
  type: LoadBalancer
  selector:
    app: youtubeapp
  ports:
     - protocol: TCP
       port: 5005
       targetPort: 80

# Install Kubectl 
$version = (Invoke-RestMethod -Uri https://dl.k8s.io/release/stable.txt).Trim()
$url = "https://dl.k8s.io/release/$version/bin/windows/amd64/kubectl.exe"
Invoke-WebRequest -Uri $url -OutFile "kubectl.exe"![image](https://github.com/user-attachments/assets/699b4910-b22e-4d71-baa3-2742720b8ec7)


# Apply The File
kubectl apply -f deployment.yml

 # Run Your Image On Specified Port http://localhost:5005/swagger
http://localhost:5005/swaager

Summary and Conclusion

In this lesson, we've explored the fundamental reasons to consider Kubernetes over Docker Compose for orchestrating your .NET Web API applications. We've set up a practical scenario to demonstrate the advantages of Kubernetes in handling high-traffic, ensuring high availability, and providing robust scaling and self-healing capabilities.

By adopting Kubernetes, you not only future-proof your applications but also streamline your DevOps processes, making it easier to manage complex deployments with confidence.

Thank you for reading! If you found this video helpful, don't forget to give this repository a thumbs up, subscribe to the Netcode-Hub YouTube Channel for more tutorials and lessons, and hit the bell icon to stay updated with our latest content.

Until next time, happy coding! ๐Ÿš€

Feel free to reach out through our social media links or support the channel via Buy Me a Coffee:

Comments

Popular Posts

Complete Employee Management System | .NET 8 Blazor Wasm & Web API - Perform CRUD, Print, PDF etc..

.NET 8 Clean Architecture with Blazor CRUD, JWT & Role Authorization using Identity & Refresh Token๐Ÿ”ฅ

Employee Management System | .NET 8 Blazor Wasm- Profile & real-time data retrieval. Update 1