Dynamic deployment of stateful applications in GKE
System Design practice on Codemia
Work through 120+ system design problems with detailed solutions, from rate limiters to multi-region storage.
Introduction
Running stateful applications on Google Kubernetes Engine (GKE) presents unique challenges compared to stateless applications due to their dependency on persistent storage and the need for stable network identities. Kubernetes offers constructs like StatefulSets, Persistent Volumes (PVs), and Persistent Volume Claims (PVCs) to tackle these challenges. This article explores these tools and techniques to dynamically deploy stateful applications effectively on GKE.
Basics of Stateful Applications
Unlike stateless applications, which can scale easily without worrying about the underlying data, stateful applications require persistent storage. They include applications like databases, messaging systems, and other services that maintain state across sessions and reboots.
Key Concepts:
- StatefulSets: Used to manage the deployment and scaling of a set of pods, providing each pod with a unique ordinal index.
- Persistent Volumes (PVs) and Persistent Volume Claims (PVCs): PVs provide a unified storage solution independent of individual pods, while PVCs allow pods to request storage resources.
Deploying Stateful Applications using StatefulSets
StatefulSets are the primary construct for deploying and managing stateful applications in Kubernetes. They offer several benefits:
- Unique Pod Identities: Provides a stable identity for each pod, preserving the network identity and maintaining the order.
- Ordered Scaling and Rolling Updates: Ensures predictable deployment and scaling by maintaining a specific order.
Example of StatefulSet Deployment:
Let's explore a basic StatefulSet configuration for a MySQL database:
- name: mysql
- containerPort: 3306
- name: mysql-data
- metadata:
- Replicas: Specifies the number of pod replicas.
- ServiceName: Each pod gets a DNS name under the service name.
- VolumeClaimTemplates: Automatically provisions PVCs for pod data storage.
- ReadWriteOnce
- port: 3306
- Ordered Pod Termination and Creation: StatefulSets ensure that pods are terminated and created in order, maintaining data integrity.
- Partitioned Updates: Using partitioned strategy to control the extent of updates.
- Ensure the choice of storage supports the performance needs of your database or stateful application.
- Design cloud-native backup solutions to maintain high availability and data durability.
- Configure resource requests and limits carefully to manage the utilization of CPU, memory, and storage.
Related reading
- dynamic envoy configuration from k8s configmap
- Effect of pod disruption budget on a single replica deployment
- EKS - Node labels
- EKS Ingress with Single ALB, multiple namespaces, and External DNS
- Dynamic References to Specify Secret Manager Values in AWS Cloudformation
- Dynamically change log levels across all instances
- EKS Kubernetes outbound traffic
- eksctl create cluster stuck waiting for CloudFormation stack

System Design Fundamentals
Build a strong foundation in designing scalable, reliable distributed systems.
View the courseTrack what you have practised
A free account saves your progress, solutions and study plan across every problem on Codemia.
System Design practice on Codemia
Work through 120+ system design problems with detailed solutions, from rate limiters to multi-region storage.