Loading source
Pulling the file list, source metadata, and syntax-aware rendering for this listing.
Source from repo
Deploy and manage Kubernetes workloads: manifests, RBAC, Helm charts, service mesh, GitOps, and troubleshooting.
Files
Skill
Size
Entrypoint
Format
Open file
Syntax-highlighted preview of this file as included in the skill package.
references/configuration.md
1# Kubernetes Configuration Management23## ConfigMap Patterns45### Basic ConfigMap67```yaml8apiVersion: v19kind: ConfigMap10metadata:11name: app-config12namespace: production13data:14# Simple key-value pairs15database.host: "postgres-service.database.svc.cluster.local"16database.port: "5432"17database.name: "appdb"1819# Multi-line configuration20app.properties: |21server.port=808022logging.level=INFO23cache.enabled=true24cache.ttl=36002526# JSON configuration27features.json: |28{29"featureA": true,30"featureB": false,31"maxConnections": 10032}3334# YAML configuration35config.yaml: |36server:37port: 808038timeout: 30s39database:40pool_size: 2041max_connections: 10042```4344### ConfigMap from Files4546```bash47# Create from literal values48kubectl create configmap app-config \49--from-literal=database.host=postgres \50--from-literal=database.port=54325152# Create from file53kubectl create configmap nginx-config \54--from-file=nginx.conf5556# Create from directory57kubectl create configmap app-configs \58--from-file=configs/59```6061## Secret Patterns6263### Opaque Secret (Generic)6465```yaml66apiVersion: v167kind: Secret68metadata:69name: app-secrets70namespace: production71type: Opaque72stringData:73# Plain text (will be base64 encoded)74db-password: "MySecurePassword123!"75api-key: "sk-1234567890abcdef"76jwt-secret: "super-secret-jwt-key"77data:78# Already base64 encoded79tls.crt: LS0tLS1CRUdJTi...80tls.key: LS0tLS1CRUdJTi...81```8283### TLS Secret8485```yaml86apiVersion: v187kind: Secret88metadata:89name: example-tls90namespace: production91type: kubernetes.io/tls92stringData:93tls.crt: |94-----BEGIN CERTIFICATE-----95MIIDXTCCAkWgAwIBAgIJAKZ...96-----END CERTIFICATE-----97tls.key: |98-----BEGIN PRIVATE KEY-----99MIIEvQIBADANBgkqhkiG9w0B...100-----END PRIVATE KEY-----101```102103### Docker Registry Secret104105```yaml106apiVersion: v1107kind: Secret108metadata:109name: registry-credentials110namespace: production111type: kubernetes.io/dockerconfigjson112stringData:113.dockerconfigjson: |114{115"auths": {116"myregistry.io": {117"username": "myuser",118"password": "mypassword",119"email": "[email protected]",120"auth": "bXl1c2VyOm15cGFzc3dvcmQ="121}122}123}124```125126### Basic Auth Secret127128```yaml129apiVersion: v1130kind: Secret131metadata:132name: basic-auth133namespace: production134type: kubernetes.io/basic-auth135stringData:136username: admin137password: super-secret-password138```139140### SSH Auth Secret141142```yaml143apiVersion: v1144kind: Secret145metadata:146name: ssh-key147namespace: production148type: kubernetes.io/ssh-auth149stringData:150ssh-privatekey: |151-----BEGIN OPENSSH PRIVATE KEY-----152b3BlbnNzaC1rZXktdjEAAAAABG5vbmUA...153-----END OPENSSH PRIVATE KEY-----154```155156## Using ConfigMaps and Secrets157158### Environment Variables159160```yaml161apiVersion: v1162kind: Pod163metadata:164name: app-pod165spec:166containers:167- name: app168image: myapp:latest169env:170# Single value from ConfigMap171- name: DATABASE_HOST172valueFrom:173configMapKeyRef:174name: app-config175key: database.host176177# Single value from Secret178- name: DATABASE_PASSWORD179valueFrom:180secretKeyRef:181name: app-secrets182key: db-password183184# All keys from ConfigMap as env vars185envFrom:186- configMapRef:187name: app-config188prefix: CONFIG_189190# All keys from Secret as env vars191- secretRef:192name: app-secrets193prefix: SECRET_194```195196### Volume Mounts197198```yaml199apiVersion: v1200kind: Pod201metadata:202name: app-pod203spec:204containers:205- name: app206image: myapp:latest207volumeMounts:208# Mount entire ConfigMap as directory209- name: config-volume210mountPath: /etc/config211readOnly: true212213# Mount specific key as file214- name: app-properties215mountPath: /etc/app/app.properties216subPath: app.properties217readOnly: true218219# Mount Secret as files220- name: secrets-volume221mountPath: /etc/secrets222readOnly: true223224# Mount TLS certificates225- name: tls-certs226mountPath: /etc/tls227readOnly: true228229volumes:230- name: config-volume231configMap:232name: app-config233234- name: app-properties235configMap:236name: app-config237items:238- key: app.properties239path: app.properties240241- name: secrets-volume242secret:243secretName: app-secrets244defaultMode: 0400 # Read-only for owner245246- name: tls-certs247secret:248secretName: example-tls249```250251## Immutable ConfigMaps and Secrets252253```yaml254apiVersion: v1255kind: ConfigMap256metadata:257name: immutable-config258namespace: production259immutable: true260data:261key: value262---263apiVersion: v1264kind: Secret265metadata:266name: immutable-secret267namespace: production268type: Opaque269immutable: true270stringData:271password: "MyPassword123"272```273274## External Secrets Operator275276```yaml277apiVersion: external-secrets.io/v1beta1278kind: ExternalSecret279metadata:280name: app-secrets281namespace: production282spec:283refreshInterval: 1h284secretStoreRef:285name: aws-secrets-manager286kind: SecretStore287target:288name: app-secrets289creationPolicy: Owner290data:291- secretKey: db-password292remoteRef:293key: prod/database/password294- secretKey: api-key295remoteRef:296key: prod/api/key297---298apiVersion: external-secrets.io/v1beta1299kind: SecretStore300metadata:301name: aws-secrets-manager302namespace: production303spec:304provider:305aws:306service: SecretsManager307region: us-east-1308auth:309jwt:310serviceAccountRef:311name: external-secrets-sa312```313314## Sealed Secrets (GitOps)315316```yaml317apiVersion: bitnami.com/v1alpha1318kind: SealedSecret319metadata:320name: app-secrets321namespace: production322spec:323encryptedData:324db-password: AgBj8xK5...encrypted...base64325api-key: AgCY9mL2...encrypted...base64326template:327metadata:328name: app-secrets329namespace: production330type: Opaque331```332333## Environment Variable Best Practices334335### Structured Environment Variables336337```yaml338apiVersion: v1339kind: Pod340metadata:341name: app342spec:343containers:344- name: app345image: myapp:latest346env:347# Application settings348- name: APP_NAME349value: "my-application"350- name: APP_ENV351value: "production"352- name: APP_VERSION353value: "v1.2.0"354355# Database configuration356- name: DB_HOST357valueFrom:358configMapKeyRef:359name: app-config360key: database.host361- name: DB_PORT362valueFrom:363configMapKeyRef:364name: app-config365key: database.port366- name: DB_NAME367valueFrom:368configMapKeyRef:369name: app-config370key: database.name371- name: DB_USER372valueFrom:373secretKeyRef:374name: app-secrets375key: db-username376- name: DB_PASSWORD377valueFrom:378secretKeyRef:379name: app-secrets380key: db-password381382# Kubernetes metadata383- name: POD_NAME384valueFrom:385fieldRef:386fieldPath: metadata.name387- name: POD_NAMESPACE388valueFrom:389fieldRef:390fieldPath: metadata.namespace391- name: POD_IP392valueFrom:393fieldRef:394fieldPath: status.podIP395- name: NODE_NAME396valueFrom:397fieldRef:398fieldPath: spec.nodeName399400# Resource limits401- name: MEMORY_LIMIT402valueFrom:403resourceFieldRef:404containerName: app405resource: limits.memory406- name: CPU_REQUEST407valueFrom:408resourceFieldRef:409containerName: app410resource: requests.cpu411```412413## Dynamic Configuration Updates414415```yaml416apiVersion: v1417kind: Deployment418metadata:419name: app420spec:421template:422metadata:423annotations:424# Force pod restart on config change425checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}426checksum/secret: {{ include (print $.Template.BasePath "/secret.yaml") . | sha256sum }}427spec:428containers:429- name: app430image: myapp:latest431volumeMounts:432- name: config433mountPath: /etc/config434readOnly: true435volumes:436- name: config437configMap:438name: app-config439```440441## Best Practices4424431. **Separation**: Use ConfigMaps for non-sensitive data, Secrets for credentials4442. **Immutability**: Mark production configs as immutable for safety4453. **Versioning**: Include version in ConfigMap/Secret names for updates4464. **Least Privilege**: Mount secrets as files with restrictive permissions (0400)4475. **External Secrets**: Use External Secrets Operator for cloud secret managers4486. **No Hardcoding**: Never hardcode secrets in container images4497. **Encryption**: Enable encryption at rest for Secrets in etcd4508. **GitOps**: Use Sealed Secrets for safe GitOps workflows4519. **Rotation**: Implement secret rotation strategies45210. **Validation**: Validate configuration before deployment453