Kubernetes微服务部署指南

Kubernetes微服务部署指南

解决方案goocz2025-07-04 19:59:353A+A-


在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


最佳实践

  1. 标签与注解:规范使用labels和annotations提高可维护性。
  2. 资源限制:为每个容器设置requests和limits避免资源争抢。
  3. 滚动更新:通过strategy.rollingUpdate配置无损发布。
  4. 安全加固:使用非root用户运行容器,限制不必要的权限。

常见问题排查

  • 镜像拉取失败:检查镜像名称、仓库权限及网络连通性。
  • 服务不可访问:确认Service的selector与Pod标签匹配,检查网络策略。
  • Pod崩溃:查看日志(kubectl logs)及事件(kubectl describe pod)。

通过以上步骤,您可以将微服务高效部署到Kubernetes集群中。对于复杂场景,建议采用Helm管理多服务依赖,或结合CI/CD工具实现自动化部署。

点击这里复制本文地址 以上内容由goocz整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!

果子教程网 © All Rights Reserved.  蜀ICP备2024111239号-5