Kubernetes微服务部署指南
在Kubernetes(k8s)上部署微服务需要系统化的步骤,以下是详细指南:
1. 容器化微服务
- 编写Dockerfile
示例:
dockerfile
FROM openjdk:11-jre-slim # 根据语言选择基础镜像(如Node.js、Python等)
COPY target/*.jar /app.jar
EXPOSE 8080
CMD ["java", "-jar", "/app.jar"]
优化建议:多阶段构建减小镜像体积。
- 构建镜像并推送至仓库
bash
docker build -t yourusername/microservice:v1 .
docker push yourusername/microservice:v1
2. 编写Kubernetes配置文件
Deployment(核心配置)
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: user-service
spec:
replicas: 3 # 副本数
selector:
matchLabels:
app: user-service
template:
metadata:
labels:
app: user-service
spec:
containers:
- name: user-service
image: yourusername/microservice:v1
ports:
- containerPort: 8080
resources:
limits:
memory: "512Mi"
cpu: "500m"
livenessProbe: # 存活探针
httpGet:
path: /health
port: 8080
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe: # 就绪探针
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 20
Service(暴露服务)
yaml
apiVersion: v1
kind: Service
metadata:
name: user-service
spec:
selector:
app: user-service
ports:
- protocol: TCP
port: 80 # 外部访问端口
targetPort: 8080 # 容器端口
type: ClusterIP # 类型可选NodePort/LoadBalancer
Ingress(外部访问,可选)
yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: user-ingress
spec:
rules:
- host: user.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: user-service
port:
number: 80
3. 部署到Kubernetes集群
bash
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
kubectl apply -f ingress.yaml # 如果使用Ingress
4. 验证部署
- 查看资源状态
bash
kubectl get pods -l app=user-service
kubectl describe pod <pod-name> # 排查启动问题
kubectl logs <pod-name> # 查看日志
- 测试服务连通性
bash
kubectl port-forward svc/user-service 8080:80
curl http://localhost:8080/api/test
5. 进阶配置
- 配置管理
O ConfigMap:存储环境变量或配置文件。
yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
config.properties: |
database.url=jdbc:mysql://db-host:3306/app
O Secret:管理敏感信息(需Base64编码)。
bash
echo -n 'password' | base64
yaml
apiVersion: v1
kind: Secret
metadata:
name: db-secret
type: Opaque
data:
db-password: cGFzc3dvcmQ=
- 持久化存储
yaml
# PersistentVolumeClaim示例
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: data-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
6. 监控与运维
- 集成监控工具
使用Prometheus + Grafana监控资源指标,或通过kubectl top pods查看实时资源使用。 - 自动扩缩容
bash
kubectl autoscale deployment user-service --cpu-percent=50 --min=2 --max=10
最佳实践
- 标签与注解:规范使用labels和annotations提高可维护性。
- 资源限制:为每个容器设置requests和limits避免资源争抢。
- 滚动更新:通过strategy.rollingUpdate配置无损发布。
- 安全加固:使用非root用户运行容器,限制不必要的权限。
常见问题排查
- 镜像拉取失败:检查镜像名称、仓库权限及网络连通性。
- 服务不可访问:确认Service的selector与Pod标签匹配,检查网络策略。
- Pod崩溃:查看日志(kubectl logs)及事件(kubectl describe pod)。
通过以上步骤,您可以将微服务高效部署到Kubernetes集群中。对于复杂场景,建议采用Helm管理多服务依赖,或结合CI/CD工具实现自动化部署。
相关文章
- 微软为Windows 11带来新安全功能,提升系统防护!
- 微软专家示警:个人PC最大安全隐患在于日常使用管理员账户
- 外媒:微软将安全工作与员工绩效考核紧密联系
- 微软承认Win10/Win11家庭安全功能导致Chrome等浏览器崩溃
- 微软Azure云计算服务第四财季收入增长放缓
- 微软Azure AI落地印度Yotta云平台,加速本土AI发展
- 微软Azure再下一城:娱乐软件零售巨头GameStop
- 微软发布Azure Orbary,与亚马逊竞争卫星的云端接入
- 微软上线Azure H200 v5系列AI虚拟机:吞吐量提升35%
- 微软预览主权私有云服务Azure Local和Microsoft 365 Local