Kubernetes容器编排实战:从部署到运维
Kubernetes概述
Kubernetes(简称K8s)是Google开源的容器编排平台,已成为云原生应用的事实标准。它提供了应用部署、扩展和管理的一体化解决方案。
为什么需要Kubernetes
- 自动化部署:声明式配置,自动创建和管理容器
- 弹性伸缩:根据负载自动扩缩容
- 服务发现:内置DNS和服务发现机制
- 滚动更新:零停机部署和回滚
- 自我修复:自动重启失败容器,替换节点
- 负载均衡:自动分配网络流量
核心概念
Pod
Pod是Kubernetes最小的部署单元,包含一个或多个容器。同一Pod内的容器共享网络和存储。
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.21
ports:
- containerPort: 80
resources:
requests:
memory: "128Mi"
cpu: "250m"
limits:
memory: "256Mi"
cpu: "500m"
Deployment
Deployment管理Pod的副本集,提供声明式更新能力。
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app
spec:
replicas: 3
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: web
image: myapp:v1.0
ports:
- containerPort: 8080
env:
- name: DB_HOST
valueFrom:
configMapKeyRef:
name: app-config
key: db-host
Service
Service定义一组Pod的访问策略,提供稳定的网络端点。
apiVersion: v1
kind: Service
metadata:
name: web-service
spec:
type: LoadBalancer
selector:
app: web
ports:
- port: 80
targetPort: 8080
protocol: TCP
实战部署
步骤一:创建命名空间
kubectl create namespace production kubectl get namespaces
步骤二:部署应用
# 应用配置 kubectl apply -f deployment.yaml # 查看部署状态 kubectl get deployments -n production kubectl get pods -n production # 查看Pod详情 kubectl describe pod-n production
步骤三:暴露服务
# 创建服务 kubectl apply -f service.yaml # 查看服务 kubectl get services -n production # 端口转发测试 kubectl port-forward service/web-service 8080:80 -n production
步骤四:配置Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: web-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: myapp.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web-service
port:
number: 80
高级功能
ConfigMap和Secret
# 创建ConfigMap
kubectl create configmap app-config --from-literal=db-host=mysql --from-literal=db-port=3306
# 创建Secret
kubectl create secret generic db-secret --from-literal=password=secretpassword
# 在Pod中使用
env:
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: db-secret
key: password
Persistent Volume
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: data-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: standard
Horizontal Pod Autoscaler
kubectl autoscale deployment web-app --cpu-percent=50 --min=2 --max=10 kubectl get hpa
运维技巧
日志查看
# 查看Pod日志 kubectl logs-n production # 实时跟踪日志 kubectl logs -f -n production # 查看前一个容器的日志(重启后) kubectl logs --previous
故障排查
# 进入容器 kubectl exec -it-- /bin/sh # 查看事件 kubectl get events --sort-by=.metadata.creationTimestamp # 查看资源使用 kubectl top pods kubectl top nodes
最佳实践
- 资源限制:始终设置requests和limits
- 健康检查:配置liveness和readiness探针
- 安全策略:使用RBAC和NetworkPolicy
- 镜像管理:使用特定版本标签,避免latest
- 配置分离:使用ConfigMap和Secret管理配置
总结
Kubernetes是现代云原生应用的核心基础设施。掌握其核心概念和运维技巧,能够帮助团队构建高可用、可扩展的应用系统。
本文链接:https://www.kkkliao.cn/?id=749 转载需授权!
版权声明:本文由廖万里的博客发布,如需转载请注明出处。



手机流量卡
免费领卡
号卡合伙人
产品服务
关于本站
