Post

๐Ÿ› ๏ธ Kubernetes Intermediate: Configuration and Management

A deep dive into Kubernetes configuration and management practices. Learn how to handle application configurations, manage sensitive data with Secrets, implement resource quotas, and master different deployment strategies. Includes real-world scenarios and best practices for production environments.

Kubernetes Intermediate: Configuration and Resource Management

Welcome to part 2 of our Kubernetes tutorial series! In this post, weโ€™ll explore more advanced concepts and learn how to properly configure and manage your applications in Kubernetes.

What Weโ€™ll Cover

  1. Configuration Management with ConfigMaps
  2. Managing Secrets
  3. Resource Management
  4. Advanced Deployment Strategies

Prerequisites

ConfigMaps: Managing Application Configuration

ConfigMaps allow you to decouple configuration from your container images.

# config-map.yaml apiVersion: v1 kind: ConfigMap metadata: name: app-config data: app.properties: | environment=development log.level=debug database.properties: | db.url=localhost:5432 db.name=myapp

Using ConfigMaps in Pods

apiVersion: v1 kind: Pod metadata: name: config-test-pod spec: containers: - name: test-container image: busybox volumeMounts: - name: config-volume mountPath: /etc/config volumes: - name: config-volume configMap: name: app-config

Secrets: Managing Sensitive Data

# Create a secret apiVersion: v1 kind: Secret metadata: name: app-secrets type: Opaque data: db-password: BASE64_ENCODED_PASSWORD api-key: BASE64_ENCODED_API_KEY

Using Secrets as Environment Variables

apiVersion: v1 kind: Pod metadata: name: secret-test-pod spec: containers: - name: test-container image: myapp env: - name: DB_PASSWORD valueFrom: secretKeyRef: name: app-secrets key: db-password

Resource Management

Setting Resource Requests and Limits

apiVersion: v1 kind: Pod metadata: name: resource-demo spec: containers: - name: resource-demo-container image: nginx resources: requests: memory: "64Mi" cpu: "250m" limits: memory: "128Mi" cpu: "500m"

Resource Quotas

apiVersion: v1 kind: ResourceQuota metadata: name: compute-quota spec: hard: requests.cpu: "1" requests.memory: 1Gi limits.cpu: "2" limits.memory: 2Gi

Advanced Deployment Strategies

Rolling Updates

apiVersion: apps/v1 kind: Deployment metadata: name: rolling-demo spec: replicas: 3 strategy: type: RollingUpdate rollingUpdate: maxSurge: 1 maxUnavailable: 1 # ... rest of deployment spec

Blue-Green Deployments

# service.yaml apiVersion: v1 kind: Service metadata: name: my-app spec: selector: app: my-app version: blue # Switch between blue and green ports: - port: 80

Hands-on Exercise: Complete Application Setup

Letโ€™s create a complete application setup with:

  • ConfigMap for application settings
  • Secret for sensitive data
  • Deployment with resource limits
  • Service for exposure
# Complete example in the repository

Whatโ€™s Next?

In the next post, weโ€™ll explore:

  • StatefulSets and persistent storage
  • Networking and Service Mesh
  • Monitoring and logging
  • Horizontal Pod Autoscaling

Additional Resources

This post is licensed under CC BY 4.0 by the author.