Kubernetes入门与实战部署
Kubernetes(K8s)是当前最流行的容器编排平台,它可以自动化容器的部署、扩展和管理。虽然学习曲线较陡,但掌握K8s是现代云原生开发的必备技能。本文将介绍K8s的核心概念和实战部署方法。
一、核心概念
# Pod - 最小部署单元
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
spec:
containers:
- name: app
image: myapp:latest
ports:
- containerPort: 8080
resources:
requests:
memory: "128Mi"
cpu: "250m"
limits:
memory: "256Mi"
cpu: "500m"
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 5
二、Deployment与Service
# Deployment - 管理Pod副本集
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
replicas: 3
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: myapp:v1
ports:
- containerPort: 8080
---
# Service - 暴露服务
apiVersion: v1
kind: Service
metadata:
name: myapp-service
spec:
selector:
app: myapp
ports:
- port: 80
targetPort: 8080
type: ClusterIP
三、Ingress与配置管理
# Ingress - HTTP路由
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: myapp-ingress
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
tls:
- hosts:
- myapp.example.com
secretName: tls-secret
rules:
- host: myapp.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: myapp-service
port:
number: 80
# ConfigMap - 配置文件
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
DATABASE_HOST: "mysql-service"
REDIS_HOST: "redis-service"
APP_ENV: "production"
四、常用命令
# 部署相关
kubectl apply -f deployment.yaml
kubectl get pods
kubectl describe pod myapp-pod
kubectl logs myapp-pod -f
kubectl exec -it myapp-pod -- /bin/sh
# 扩缩容
kubectl scale deployment myapp --replicas=5
kubectl autoscale deployment myapp --min=2 --max=10 --cpu-percent=80
# 更新与回滚
kubectl set image deployment/myapp myapp=myapp:v2
kubectl rollout status deployment/myapp
kubectl rollout undo deployment/myapp
kubectl rollout history deployment/myapp
# 调试
kubectl get events --sort-by=.metadata.creationTimestamp
kubectl top pods
kubectl top nodes
Kubernetes是容器编排的事实标准,学习它需要时间和实践。建议从Minikube本地环境开始,逐步掌握Pod、Service、Deployment等核心概念,再深入到Ingress、存储和网络等高级主题。