kubernetes · diff

git:20260313.3ab01ea to git:20260709.80a1f3d

56 added, 661 removed. Audit A to A.

---
- name: kubernetes-gke
- description: Kubernetes cluster management and operations with focus on Google Kubernetes Engine (GKE). Use when working with Kubernetes clusters, deployments, services, pods, namespaces, GKE-specific features, kubectl commands, YAML manifests, helm charts, or when troubleshooting Kubernetes issues. Includes GKE autopilot, workload identity, config connector, and GCP integration.
+ name: kubernetes
+ description: Kubernetes and GKE operations: kubectl, manifests, deployments, services, workload identity, autopilot, config connector, private clusters, and troubleshooting.
---
# Kubernetes with GKE Focus
- Comprehensive guidance for Kubernetes operations with specialized knowledge of Google Kubernetes Engine (GKE) features and best practices.
+ Guidance for Kubernetes operations with specialized knowledge of Google Kubernetes Engine (GKE) features and best practices. This entry file covers the common day-to-day commands and workflows; deep-dive topics live in the reference files listed at the bottom.
## Quick Start
- ### Check cluster status
+ ### Connect to a cluster
```bash
# List GKE clusters
gcloud container clusters list
# Get cluster credentials
gcloud container clusters get-credentials CLUSTER_NAME --region REGION
# Verify connection
kubectl cluster-info
kubectl get nodes
```
### Common operations
```bash
# Deploy application
kubectl apply -f deployment.yaml
# Check pod status
kubectl get pods -n NAMESPACE
- # View logs
+ # View logs (add --previous for a crashed container, -f to follow)
kubectl logs POD_NAME -n NAMESPACE
# Scale deployment
kubectl scale deployment DEPLOYMENT_NAME --replicas=3 -n NAMESPACE
- ```
- ## Core Workflows
-
- ### 1. Application Deployment
-
- **Standard deployment pattern:**
-
- 1. Create namespace (if needed):
-
- ```bash
- kubectl create namespace my-app
- ```
-
- 2. Apply manifests in order:
-
- ```bash
- kubectl apply -f configmap.yaml
- kubectl apply -f secret.yaml
- kubectl apply -f deployment.yaml
- kubectl apply -f service.yaml
- kubectl apply -f ingress.yaml
- ```
-
- 3. Verify deployment:
-
- ```bash
- kubectl rollout status deployment/my-app -n my-app
- kubectl get all -n my-app
- ```
-
- ### 2. Troubleshooting Pods
-
- **Systematic debugging approach:**
-
- 1. Check pod status:
-
- ```bash
- kubectl get pods -n NAMESPACE
- kubectl describe pod POD_NAME -n NAMESPACE
- ```
-
- 2. Review events:
-
- ```bash
- kubectl get events -n NAMESPACE --sort-by='.lastTimestamp'
- ```
-
- 3. Check logs:
-
- ```bash
- # Current logs
- kubectl logs POD_NAME -n NAMESPACE
-
- # Previous container logs (if crashed)
- kubectl logs POD_NAME -n NAMESPACE --previous
-
- # Follow logs
- kubectl logs -f POD_NAME -n NAMESPACE
-
- # Multi-container pod
- kubectl logs POD_NAME -c CONTAINER_NAME -n NAMESPACE
- ```
-
- 4. Interactive debugging:
-
- ```bash
- # Execute command in pod
+ # Interactive debug / port-forward
kubectl exec -it POD_NAME -n NAMESPACE -- /bin/sh
-
- # Port forward for local testing
kubectl port-forward POD_NAME 8080:80 -n NAMESPACE
```
- ### 3. Resource Management
-
- **Check resource usage:**
-
- ```bash
- # Node resources
- kubectl top nodes
-
- # Pod resources
- kubectl top pods -n NAMESPACE
-
- # Resource quotas
- kubectl get resourcequota -n NAMESPACE
-
- # Limit ranges
- kubectl get limitrange -n NAMESPACE
- ```
-
- ## GKE-Specific Features
-
- ### Autopilot vs Standard Clusters
-
- **Autopilot clusters:**
-
- - Fully managed node pools
- - Automatic scaling and updates
- - Pod-based pricing
- - Limited node customization
- - Use for: simplified operations, cost optimization
-
- **Standard clusters:**
-
- - Full control over nodes
- - Custom node pools
- - Node-based pricing
- - Machine type selection
- - Use for: specific hardware requirements, advanced configurations
-
- ### Workload Identity
-
- **Enable workload identity for GCP service access:**
-
- 1. Enable on cluster:
-
- ```bash
- gcloud container clusters update CLUSTER_NAME \
- --workload-pool=PROJECT_ID.svc.id.goog \
- --region=REGION
- ```
-
- 2. Create Kubernetes service account:
-
- ```yaml
- apiVersion: v1
- kind: ServiceAccount
- metadata:
- name: my-ksa
- namespace: default
- ```
-
- 3. Bind to GCP service account:
-
- ```bash
- gcloud iam service-accounts add-iam-policy-binding \
- GSA_NAME@PROJECT_ID.iam.gserviceaccount.com \
- --role roles/iam.workloadIdentityUser \
- --member "serviceAccount:PROJECT_ID.svc.id.goog[NAMESPACE/KSA_NAME]"
- ```
-
- 4. Annotate Kubernetes service account:
-
- ```bash
- kubectl annotate serviceaccount KSA_NAME \
- iam.gke.io/gcp-service-account=GSA_NAME@PROJECT_ID.iam.gserviceaccount.com \
- -n NAMESPACE
- ```
-
- ### GKE Ingress
-
- **Use GKE-managed ingress controller:**
-
- ```yaml
- apiVersion: networking.k8s.io/v1
- kind: Ingress
- metadata:
- name: my-ingress
- annotations:
- kubernetes.io/ingress.class: "gce"
- kubernetes.io/ingress.global-static-ip-name: "my-static-ip"
- spec:
- rules:
- - host: example.com
- http:
- paths:
- - path: /
- pathType: Prefix
- backend:
- service:
- name: my-service
- port:
- number: 80
- ```
-
- **For HTTPS with managed certificates:**
-
- ```yaml
- apiVersion: networking.gke.io/v1
- kind: ManagedCertificate
- metadata:
- name: my-cert
- spec:
- domains:
- - example.com
- - www.example.com
- ```
-
- Add annotation to Ingress:
-
- ```yaml
- metadata:
- annotations:
- networking.gke.io/managed-certificates: my-cert
- ```
-
- ### Config Connector
-
- **Manage GCP resources from Kubernetes:**
-
- See [CONFIG_CONNECTOR.md](CONFIG_CONNECTOR.md) for complete setup and usage patterns.
-
- ### GKE Networking
-
- **Network policies for pod security:**
-
- ```yaml
- apiVersion: networking.k8s.io/v1
- kind: NetworkPolicy
- metadata:
- name: allow-from-namespace
- spec:
- podSelector:
- matchLabels:
- app: my-app
- policyTypes:
- - Ingress
- ingress:
- - from:
- - namespaceSelector:
- matchLabels:
- name: allowed-namespace
- ```
-
- **Private clusters:**
-
- - Control plane is private
- - Use Cloud NAT for egress
- - VPC peering for internal access
- - See [PRIVATE_CLUSTERS.md](PRIVATE_CLUSTERS.md) for setup
-
- ## Manifest Patterns
-
- ### Deployment Best Practices
-
- ```yaml
- apiVersion: apps/v1
- kind: Deployment
- metadata:
- name: my-app
- namespace: production
- spec:
- replicas: 3
- selector:
- matchLabels:
- app: my-app
- template:
- metadata:
- labels:
- app: my-app
- version: v1.2.3
- spec:
- serviceAccountName: my-ksa
- containers:
- - name: app
- image: gcr.io/PROJECT_ID/my-app:v1.2.3
- ports:
- - containerPort: 8080
- name: http
- env:
- - name: ENV_VAR
- valueFrom:
- configMapKeyRef:
- name: my-config
- key: config-key
- resources:
- requests:
- memory: "256Mi"
- cpu: "250m"
- limits:
- memory: "512Mi"
- cpu: "500m"
- livenessProbe:
- httpGet:
- path: /healthz
- port: 8080
- initialDelaySeconds: 30
- periodSeconds: 10
- readinessProbe:
- httpGet:
- path: /ready
- port: 8080
- initialDelaySeconds: 5
- periodSeconds: 5
- # Security context
- securityContext:
- runAsNonRoot: true
- runAsUser: 1000
- fsGroup: 2000
- # Node affinity for GKE
- affinity:
- nodeAffinity:
- preferredDuringSchedulingIgnoredDuringExecution:
- - weight: 100
- preference:
- matchExpressions:
- - key: cloud.google.com/gke-nodepool
- operator: In
- values:
- - default-pool
- ```
-
- ### Service Types
-
- **ClusterIP (internal):**
-
- ```yaml
- apiVersion: v1
- kind: Service
- metadata:
- name: my-service
- spec:
- type: ClusterIP
- selector:
- app: my-app
- ports:
- - port: 80
- targetPort: 8080
- ```
-
- **LoadBalancer (external):**
-
- ```yaml
- apiVersion: v1
- kind: Service
- metadata:
- name: my-lb-service
- annotations:
- cloud.google.com/load-balancer-type: "Internal" # For internal LB
- spec:
- type: LoadBalancer
- selector:
- app: my-app
- ports:
- - port: 80
- targetPort: 8080
- ```
-
- ### ConfigMaps and Secrets
-
- **ConfigMap:**
-
- ```yaml
- apiVersion: v1
- kind: ConfigMap
- metadata:
- name: my-config
- data:
- app.properties: |
- key1=value1
- key2=value2
- config.json: |
- {
- "setting": "value"
- }
- ```
-
- **Secret (use GCP Secret Manager with workload identity when possible):**
-
- ```yaml
- apiVersion: v1
- kind: Secret
- metadata:
- name: my-secret
- type: Opaque
- data:
- password: BASE64_ENCODED_VALUE
- ```
-
- ## Helm Integration
-
- ### Basic Helm operations
-
- ```bash
- # Add repository
- helm repo add stable https://charts.helm.sh/stable
- helm repo update
-
- # Install chart
- helm install my-release stable/nginx-ingress -n namespace
-
- # Upgrade release
- helm upgrade my-release stable/nginx-ingress -n namespace
-
- # List releases
- helm list -n namespace
-
- # Uninstall release
- helm uninstall my-release -n namespace
- ```
-
- ### Custom values
-
- Create `values.yaml`:
-
- ```yaml
- replicaCount: 3
- image:
- repository: gcr.io/PROJECT_ID/app
- tag: v1.0.0
- resources:
- requests:
- memory: 256Mi
- cpu: 250m
- ```
-
- Install with custom values:
-
- ```bash
- helm install my-release ./chart -f values.yaml -n namespace
- ```
-
- ## Monitoring and Logging
-
- ### GKE Observability
-
- **Cloud Logging:**
-
- ```bash
- # View logs in Cloud Console
- gcloud logging read "resource.type=k8s_container" --limit 50
-
- # Stream logs
- gcloud logging read "resource.type=k8s_container" --limit 50 --format json | jq .
- ```
-
- **Cloud Monitoring:**
-
- - Workload metrics automatically collected
- - Create custom dashboards in Cloud Console
- - Set up alerts for pod crashes, resource limits
-
- ### Common kubectl monitoring
-
- ```bash
- # Watch pods
- kubectl get pods -n namespace -w
-
- # Describe all resources
- kubectl describe all -n namespace
-
- # Get pod metrics
- kubectl top pod POD_NAME -n namespace
-
- # View resource usage
- kubectl describe node NODE_NAME
- ```
-
- ## Security Best Practices
-
- ### Pod Security
-
- 1. **Use non-root users:**
-
- ```yaml
- securityContext:
- runAsNonRoot: true
- runAsUser: 1000
- ```
-
- 2. **Read-only root filesystem:**
-
- ```yaml
- securityContext:
- readOnlyRootFilesystem: true
- ```
-
- 3. **Drop capabilities:**
-
- ```yaml
- securityContext:
- capabilities:
- drop:
- - ALL
- ```
-
- 4. **Use network policies** to restrict traffic
-
- 5. **Use workload identity** instead of service account keys
-
- ### GKE Security Features
-
- - **Binary Authorization**: Enforce deployment policies
- - **Shielded GKE Nodes**: Secure boot and integrity monitoring
- - **Pod Security Policies/Standards**: Enforce pod security requirements
- - **Private clusters**: Isolate control plane
-
- See [SECURITY.md](SECURITY.md) for detailed security configurations.
-
- ## Backup and Disaster Recovery
-
- ### Velero for backups
-
- ```bash
- # Install Velero
- velero install \
- --provider gcp \
- --plugins velero/velero-plugin-for-gcp:v1.5.0 \
- --bucket BUCKET_NAME \
- --secret-file ./credentials-velero
-
- # Backup namespace
- velero backup create my-backup --include-namespaces my-namespace
-
- # Restore backup
- velero restore create --from-backup my-backup
-
- # Schedule automatic backups
- velero schedule create daily-backup --schedule="0 2 * * *" --include-namespaces my-namespace
- ```
-
- ## Performance Optimization
-
- ### Node Pool Configuration
-
- **For compute-intensive workloads:**
-
- ```bash
- gcloud container node-pools create compute-pool \
- --cluster CLUSTER_NAME \
- --machine-type n2-standard-8 \
- --num-nodes 3 \
- --enable-autoscaling \
- --min-nodes 2 \
- --max-nodes 10 \
- --region REGION
- ```
-
- **For memory-intensive workloads:**
-
- ```bash
- gcloud container node-pools create memory-pool \
- --cluster CLUSTER_NAME \
- --machine-type n2-highmem-8 \
- --num-nodes 2 \
- --enable-autoscaling \
- --min-nodes 1 \
- --max-nodes 5 \
- --region REGION
- ```
-
- ### Horizontal Pod Autoscaling
-
- ```yaml
- apiVersion: autoscaling/v2
- kind: HorizontalPodAutoscaler
- metadata:
- name: my-app-hpa
- spec:
- scaleTargetRef:
- apiVersion: apps/v1
- kind: Deployment
- name: my-app
- minReplicas: 2
- maxReplicas: 10
- metrics:
- - type: Resource
- resource:
- name: cpu
- target:
- type: Utilization
- averageUtilization: 70
- - type: Resource
- resource:
- name: memory
- target:
- type: Utilization
- averageUtilization: 80
- ```
-
- ### Vertical Pod Autoscaling
-
- ```yaml
- apiVersion: autoscaling.k8s.io/v1
- kind: VerticalPodAutoscaler
- metadata:
- name: my-app-vpa
- spec:
- targetRef:
- apiVersion: apps/v1
- kind: Deployment
- name: my-app
- updatePolicy:
- updateMode: "Auto"
- ```
-
- ## Common Issues and Solutions
-
- ### ImagePullBackOff
-
- **Cause**: Cannot pull container image
- **Solutions**:
-
- - Verify image exists: `gcloud container images list --repository=gcr.io/PROJECT_ID`
- - Check permissions: Ensure node service account has Storage Object Viewer role
- - For Artifact Registry: Configure authentication
-
- ### CrashLoopBackOff
-
- **Cause**: Container crashes repeatedly
- **Solutions**:
-
- 1. Check logs: `kubectl logs POD_NAME --previous`
- 2. Verify environment variables and secrets
- 3. Check resource limits
- 4. Review liveness/readiness probes
-
- ### Pending Pods
-
- **Cause**: Cannot schedule pod
- **Solutions**:
-
- 1. Check node resources: `kubectl top nodes`
- 2. Review pod events: `kubectl describe pod POD_NAME`
- 3. Check resource requests vs available capacity
- 4. Verify node selectors and taints
-
- ### OOMKilled
-
- **Cause**: Container exceeded memory limit
- **Solutions**:
-
- 1. Increase memory limits
- 2. Review application memory usage
- 3. Consider VPA for automatic adjustment
-
- ## Quick Reference
-
- ### Essential kubectl commands
+ ### Essential kubectl / gcloud reference
```bash
# Contexts
kubectl config get-contexts
kubectl config use-context CONTEXT_NAME
- # Resources
+ # Inspect resources
kubectl get all -n namespace
kubectl get pods -o wide -n namespace
- kubectl get svc,deploy,ing -n namespace
+ kubectl describe pod POD_NAME -n namespace
- # Editing
+ # Edit / roll out
kubectl edit deployment DEPLOYMENT_NAME -n namespace
kubectl set image deployment/DEPLOYMENT_NAME CONTAINER=IMAGE -n namespace
+ kubectl rollout status deployment/DEPLOYMENT_NAME -n namespace
- # Debugging
- kubectl describe pod POD_NAME -n namespace
- kubectl exec -it POD_NAME -n namespace -- bash
- kubectl logs -f POD_NAME -n namespace
+ # Resource usage
+ kubectl top nodes
+ kubectl top pods -n namespace
- # Cleanup
- kubectl delete pod POD_NAME -n namespace
- kubectl delete -f manifest.yaml
+ # GKE clusters and node pools
+ gcloud container clusters describe CLUSTER_NAME --region REGION
+ gcloud container clusters resize CLUSTER_NAME --num-nodes 3 --region REGION
+ gcloud container node-pools list --cluster CLUSTER_NAME --region REGION
```
- ### GKE CLI commands
+ ## Core Workflows
- ```bash
- # Clusters
- gcloud container clusters list
- gcloud container clusters describe CLUSTER_NAME --region REGION
- gcloud container clusters resize CLUSTER_NAME --num-nodes 3 --region REGION
+ ### 1. Application Deployment
- # Node pools
- gcloud container node-pools list --cluster CLUSTER_NAME --region REGION
- gcloud container node-pools describe POOL_NAME --cluster CLUSTER_NAME --region REGION
+ 1. Create the namespace if needed: `kubectl create namespace my-app`.
+ 2. Apply manifests in dependency order: configmap → secret → deployment → service → ingress.
+ 3. Verify: `kubectl rollout status deployment/my-app -n my-app` and `kubectl get all -n my-app`.
- # Operations
- gcloud container operations list
- gcloud container operations describe OPERATION_ID --region REGION
- ```
+ See [MANIFESTS.md](MANIFESTS.md) for production-ready deployment, service, and ConfigMap/Secret manifests.
- ## Advanced Topics
+ ### 2. Troubleshooting Pods
- For detailed information on advanced features, see:
+ 1. Check status: `kubectl get pods -n NS` then `kubectl describe pod POD -n NS`.
+ 2. Review events: `kubectl get events -n NS --sort-by='.lastTimestamp'`.
+ 3. Check logs (current, `--previous`, `-f`, or `-c CONTAINER` for multi-container pods).
+ 4. Debug live: `kubectl exec -it POD -n NS -- /bin/sh` or `kubectl port-forward`.
- - [CONFIG_CONNECTOR.md](CONFIG_CONNECTOR.md) - Manage GCP resources from Kubernetes
- - [PRIVATE_CLUSTERS.md](PRIVATE_CLUSTERS.md) - Setup and networking for private GKE clusters
- - [SECURITY.md](SECURITY.md) - Comprehensive security configurations
- - [CI_CD.md](CI_CD.md) - GitOps and continuous deployment patterns
- - [MULTI_CLUSTER.md](MULTI_CLUSTER.md) - Multi-cluster management and Anthos
+ See [OPERATIONS.md](OPERATIONS.md) for ImagePullBackOff, CrashLoopBackOff, Pending, and OOMKilled fixes.
+
+ ### 3. Resource Management
+
+ Check usage and limits with `kubectl top nodes`, `kubectl top pods -n NS`, `kubectl get resourcequota -n NS`, and `kubectl get limitrange -n NS`.
+
+ ## GKE at a Glance
+
+ - **Cluster modes** — Autopilot (fully managed, pod-priced) vs Standard (full node control). See [GKE_FEATURES.md](GKE_FEATURES.md).
+ - **Workload Identity** — pods access GCP services without service account keys; setup in [SECURITY.md](SECURITY.md).
+ - **Ingress & managed certs** — GKE-managed HTTP(S) load balancing; manifests in [GKE_FEATURES.md](GKE_FEATURES.md).
+ - **Config Connector** — manage GCP resources as Kubernetes manifests; see [CONFIG_CONNECTOR.md](CONFIG_CONNECTOR.md).
+ - **Networking & network policies** — pod-level isolation and private clusters; see [SECURITY.md](SECURITY.md) and [PRIVATE_CLUSTERS.md](PRIVATE_CLUSTERS.md).
+ - **Autoscaling & node pools** — HPA/VPA manifests and node pool sizing in [MANIFESTS.md](MANIFESTS.md) and [GKE_FEATURES.md](GKE_FEATURES.md).
+
+ ## Reference files
+
+ | File | Read this when… |
+ | --- | --- |
+ | [GKE_FEATURES.md](GKE_FEATURES.md) | Choosing Autopilot vs Standard, configuring GKE Ingress / managed certificates, or sizing node pools. |
+ | [MANIFESTS.md](MANIFESTS.md) | Writing Deployment / Service / ConfigMap / Secret manifests, using Helm, or setting up HPA/VPA autoscaling. |
+ | [OPERATIONS.md](OPERATIONS.md) | Setting up monitoring/logging, Velero backups, or debugging common pod failures. |
+ | [CONFIG_CONNECTOR.md](CONFIG_CONNECTOR.md) | Managing GCP resources (SQL, buckets, Pub/Sub, IAM) from Kubernetes manifests. |
+ | [PRIVATE_CLUSTERS.md](PRIVATE_CLUSTERS.md) | Creating or accessing private GKE clusters, Cloud NAT, VPC peering, or shared VPC. |
+ | [SECURITY.md](SECURITY.md) | Hardening pods, network policies, Workload Identity, secrets, RBAC, Binary Authorization, or audit logging. |
+ | [CI_CD.md](CI_CD.md) | Building GitOps / continuous deployment pipelines for GKE. |
+ | [MULTI_CLUSTER.md](MULTI_CLUSTER.md) | Managing multiple clusters or using Anthos multi-cluster features. |
## Package Requirements
This skill requires the following tools:
- `kubectl` - Kubernetes command-line tool
- `gcloud` - Google Cloud SDK
- Optional: `helm` - Kubernetes package manager
- Optional: `velero` - Backup and restore tool