80 phút
Container Orchestration với Kubernetes
Giới thiệu Kubernetes
Kubernetes là hệ thống container orchestration mã nguồn mở để tự động hóa deployment, scaling, và quản lý ứng dụng containerized.
Kubernetes Concepts
Pods
apiVersion: v1
kind: Pod
metadata:
name: my-app-pod
labels:
app: my-app
tier: frontend
spec:
containers:
- name: my-app
image: my-app:1.0
ports:
- containerPort: 3000
env:
- name: NODE_ENV
value: "production"
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
Deployments
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app-deployment
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: my-app:1.0
ports:
- containerPort: 3000
livenessProbe:
httpGet:
path: /health
port: 3000
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /ready
port: 3000
initialDelaySeconds: 5
periodSeconds: 5
Services
apiVersion: v1
kind: Service
metadata:
name: my-app-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 3000
type: LoadBalancer
Kubernetes Commands
Basic Commands
# Get cluster information
kubectl cluster-info
# Get nodes
kubectl get nodes
# Get pods
kubectl get pods
# Get services
kubectl get services
# Get deployments
kubectl get deployments
Application Management
# Apply configuration
kubectl apply -f deployment.yaml
# Scale deployment
kubectl scale deployment my-app-deployment --replicas=5
# View logs
kubectl logs -f deployment/my-app-deployment
# Port forwarding
kubectl port-forward service/my-app-service 8080:80
Advanced Kubernetes Features
ConfigMaps và Secrets
# ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
database.url: "postgresql://localhost:5432/mydb"
cache.host: "redis://localhost:6379"
app.port: "3000"
# Secret
apiVersion: v1
kind: Secret
metadata:
name: app-secrets
type: Opaque
data:
database.password: cGFzc3dvcmQxMjM= # base64 encoded
api.key: YXBpLWtleS1zZWNyZXQ=
Persistent Volumes
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: postgres-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
Kubernetes trong Production
Resource Management
resources:
requests:
memory: "128Mi"
cpu: "250m"
limits:
memory: "256Mi"
cpu: "500m"
Health Checks
livenessProbe:
httpGet:
path: /health
port: 3000
initialDelaySeconds: 30
periodSeconds: 10
failureThreshold: 3
readinessProbe:
httpGet:
path: /ready
port: 3000
initialDelaySeconds: 5
periodSeconds: 5
successThreshold: 1
failureThreshold: 3
Horizontal Pod Autoscaling
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: my-app-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: my-app-deployment
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50