Mert Özen Further With Every Line

Blog

Mert Özen's blog posts on software development, backend, frontend, and DevOps.

Series
.NET Core Web API 36 Angular 31 JavaScript Basics 19 JavaScript Intermediate 18 JavaScript Advanced 16 TypeScript Basics 14 TypeScript Intermediate 14 TypeScript Advanced 12 Entity Framework Core 28 Dapper 16 Git & GitHub 29 Web Security (OWASP Top 10) 21 LLM Fundamentals 20 C# Fundamentals 20 Object-Oriented Programming in C# 16 C# Collections and Generics 11 LINQ 17 Asynchronous Programming in C# 17 Advanced C# 14 C# Versions 6 Solution Patterns 22 SOLID and Design Principles 12 Clean Code 13 Design Patterns 23 UML and Modeling 18 Introduction to Software Architecture 9 Clean, Onion and Hexagonal Architecture 8 Vertical Slice Architecture 6 Domain-Driven Design 12 CQRS and Event Sourcing 10 Messaging and Event-Driven Architecture 9 Modular Monolith 2 Microservices 10 UI Architecture Patterns 9 Architecture Decisions 7 System Design 15 Distributed Systems Fundamentals 11 Background Jobs and Scheduled Jobs 11 Working with Message Queues 14 Logging in .NET 10 Caching 10 Real-time Applications 9 ASP.NET Core MVC and Razor Pages 13 CI/CD Fundamentals 8 GitHub Actions 16 Jenkins 12 Web Servers and Hosting 12 Deployment Strategies 9 Kubernetes 19 Authentication and Authorization 18 ASP.NET Core Security 8 Frontend Security 9 API Security (OWASP API Top 10) 11 AI with .NET 14 RAG 13 AI Agents and MCP 14 Test Strategy 4 Unit Testing 13 SDLC (Software Development Life Cycle) 6 Agile Mindset 6 Scrum 11 Kanban 7 Introduction to Product Management 9 SEO Fundamentals 7 Technical SEO 12 GEO (Generative Engine Optimization) 7 Algorithms and Data Structures 22 Debugging and Problem Solving 13
8 posts found #dotnet
Kubernetes Pods: Running a .NET Container, Lifecycle, Init Containers and Native Sidecars
DevOps PART 03

Kubernetes Pods: Running a .NET Container, Lifecycle, Init Containers and Native Sidecars

A pod is the unit of execution for containers sharing one network; .NET 8+ images listen on 8080, chiseled images come non-root and shell-less, while the full aspnet image trips runAsNonRoot. With real output we look at pod phases, CrashLoopBackOff's doubling backoff, the limits of a wait-for-db init container, native sidecars (stable in 1.33) and why a sidecar that ignores SIGTERM stretches pod deletion by 30 seconds.

8 Nov 2026 11 min 4
.NET Configuration with ConfigMaps and Secrets: Environment Variables, Volumes and Picking Up Changes
DevOps PART 07

.NET Configuration with ConfigMaps and Secrets: Environment Variables, Volumes and Picking Up Changes

ConfigMaps and Secrets enter .NET configuration as environment variables (ConnectionStrings__Default) or as files in a volume; env and subPath mounts never update, directory mounts update in 10 to 80 seconds. Measured on kind, .NET 10's default watcher missed the ConfigMap change while the polling watcher caught it. We also cover the provider order trap, triggering rollouts, immutable ConfigMaps, base64 not being encryption and Angular's config.json.

8 Nov 2026 10 min 4
Graceful Shutdown: SIGTERM, terminationGracePeriodSeconds, preStop and .NET HostOptions
DevOps PART 10

Graceful Shutdown: SIGTERM, terminationGracePeriodSeconds, preStop and .NET HostOptions

When a pod is deleted, SIGTERM and removal from endpoints start at the same time with no synchronization; that race caused 23 to 26 errors in an otherwise correct rollout, and a 5-second preStop sleep action brought it to zero. With real output we watch .NET finish requests and BackgroundServices in order on SIGTERM, see how ShutdownTimeout and the grace period cut each other off, and why exec sleep fails in a chiseled image.

8 Nov 2026 8 min 5
Scaling in Kubernetes: HPA, VPA, In-Place Resize, KEDA and PodDisruptionBudgets
DevOps PART 11

Scaling in Kubernetes: HPA, VPA, In-Place Resize, KEDA and PodDisruptionBudgets

HPA computes CPU percent against the container's request, not the node, and without a request it never scales. With real kind output we look at HPA v2 behavior settings, the .NET GC not seeing the new limit after an in-place resize and the GC.RefreshMemoryLimit fix, KEDA scale-to-zero on a RabbitMQ queue, a PodDisruptionBudget that locks a drain, and a topology spread trap.

8 Nov 2026 14 min 5
Storage and Stateful Apps in Kubernetes: Volumes, PersistentVolumeClaims, StatefulSets and the Database Decision
DevOps PART 12

Storage and Stateful Apps in Kubernetes: Volumes, PersistentVolumeClaims, StatefulSets and the Database Decision

If several replicas must write the same files, the answer is object storage, not a PVC; ReadWriteOnce means one node, not one pod. With real output we look at emptyDir sizeLimit eviction, StorageClasses and reclaim policy, PostgreSQL 18 on a StatefulSet (including the new PGDATA path), managed DB versus operator, and the ASP.NET Core Data Protection key ring breaking across replicas.

8 Nov 2026 11 min 5
Jobs, CronJobs and Workers: Running an EF Core Migration Bundle as a Job
DevOps PART 13

Jobs, CronJobs and Workers: Running an EF Core Migration Bundle as a Job

Run EF Core migrations once, in a versioned Job at the start of the deploy, not in every replica's init container; in our test the EF Core 9+ migration lock did not stop concurrent init containers from racing. With real output we package the bundle in a chiseled image, tune backoffLimit and TTL, hit Job immutability, write a pipeline script that catches Complete/Failed, and set up a CronJob with timeZone.

8 Nov 2026 11 min 5
Kubernetes Security: ServiceAccounts, RBAC, Pod Security Standards, securityContext and NetworkPolicy
DevOps PART 15

Kubernetes Security: ServiceAccounts, RBAC, Pod Security Standards, securityContext and NetworkPolicy

Give every app its own ServiceAccount, don't mount the token unless needed, protect the namespace with restricted Pod Security Standards, and after a default deny NetworkPolicy open only the paths you need. With real kind output we test RBAC with kubectl auth can-i, catch the aspnet:10.0 image running as root, see what readOnlyRootFilesystem does to .NET Data Protection, try user namespaces and hit a default deny that forgot DNS.

8 Nov 2026 11 min 4
Debugging in Kubernetes: CrashLoopBackOff, ImagePullBackOff, Pending and kubectl debug
DevOps PART 16

Debugging in Kubernetes: CrashLoopBackOff, ImagePullBackOff, Pending and kubectl debug

Pod failures always follow the same order: read the symptom with get, the events with describe, the app's voice with logs --previous, and if needed bring an ephemeral container into a shell-less pod with kubectl debug. With real output we cover Pending, ImagePullBackOff, CrashLoopBackOff, OOMKilled and a port mismatch, a .NET process hanging as PID 1, and dotnet-dump killing a pod that runs near its limit.

8 Nov 2026 11 min 6
Blog Map