
通俗理解KubeVela
KubeVela 是 简化 Kubernetes 应用部署的工具,不用写复杂的 Deployment、Service 等原生 YAML,而是用统一的「应用清单」描述服务、环境变量、配置、健康检查等需求,底层自动转换成 K8s 资源,小白也能快速上手。
部署 Nginx + Java 服务
以下是可直接验证的 KubeVela 应用清单(app.yaml),包含环境变量、健康探针、启动钩子、ConfigMap 所有需求,每部分附详细解释:
应用元信息:指定名称和命名空间
apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: nginx-java-app
namespace: default
spec:
components:
###########################################################################
# 1. Nginx 服务配置
###########################################################################
- name: nginx-service
type: webservice # KubeVela 内置类型:长期运行的Web服务
properties:
# 基础配置
image: nginx:1.25 # 镜像版本(稳定版,可直接使用)
ports:
- port: 80 # 容器端口
expose: true # 对外暴露端口(自动创建Service)
# 环境变量(两种方式:直接指定 + 引用ConfigMap)
env:
- name: NGINX_ENV # 直接定义的环境变量
value: "production"
- name: NGINX_CONF_PATH # 引用ConfigMap的环境变量
valueFrom:
configMapKeyRef:
name: app-config # 关联下面的ConfigMap名称
key: nginx.conf.path
# 健康探针(存活探针 + 就绪探针)
livenessProbe: # 存活探针:检测容器是否运行,失败则重启
httpGet:
path: / # 访问Nginx根路径
port: 80
initialDelaySeconds: 10 # 容器启动10秒后开始探测
periodSeconds: 5 # 每5秒探测一次
readinessProbe: # 就绪探针:检测容器是否就绪,就绪后才接收流量
httpGet:
path: / # 访问Nginx根路径
port: 80
initialDelaySeconds: 5
periodSeconds: 3
# 启动钩子(容器启动后执行的命令,比如修改Nginx配置)
lifecycle:
postStart: # 启动后钩子(容器启动成功后执行)
exec:
command: ["/bin/sh", "-c", "echo 'Welcome to Nginx' > /usr/share/nginx/html/index.html"]
# 资源限制(可选,避免资源占用过高)
resources:
cpu: "100m" # 最小100毫核
memory: "128Mi" # 最小128MB内存
limits:
cpu: "500m"
memory: "256Mi"
###########################################################################
# 2. Java 服务配置(以Spring Boot为例)
###########################################################################
- name: java-service
type: webservice
properties:
# 基础配置
image: openjdk:17-jdk-slim # Java 17基础镜像(适配大部分Spring Boot项目)
command: ["java", "-jar", "/app/spring-boot-app.jar"] # 启动命令(假设Jar包在/app目录)
ports:
- port: 8080
expose: true
# 环境变量(引用ConfigMap + 自定义变量)
env:
- name: SPRING_PROFILES_ACTIVE # Spring环境配置
value: "prod"
- name: DB_URL # 从ConfigMap读取数据库地址
valueFrom:
configMapKeyRef:
name: app-config
key: db.url
- name: DB_USERNAME # 敏感信息建议用Secret,这里演示ConfigMap
valueFrom:
configMapKeyRef:
name: app-config
key: db.username
# 健康探针(Spring Boot默认健康检查端点/actuator/health)
livenessProbe:
httpGet:
path: /actuator/health/liveness
port: 8080
initialDelaySeconds: 30 # Java服务启动慢,延长探测等待时间
periodSeconds: 10
readinessProbe:
httpGet:
path: /actuator/health/readiness
port:
8080
initialDelaySeconds: 20
periodSeconds: 5
# 启动钩子(启动前执行:创建/app目录 + 复制Jar包,实际场景可替换为挂载存储)
lifecycle:
preStart: # 启动前钩子(容器启动前执行)
exec:
command: ["/bin/sh", "-c", "mkdir -p /app && echo 'Jar包将挂载到/app目录' > /app/note.txt"]
# 挂载ConfigMap(将配置文件直接挂载到容器目录)
configs:
- name: app-config # 关联下面的ConfigMap
mountPath: /app/config # 挂载到容器的/app/config目录(Spring Boot默认读取配置目录)
# 资源限制(Java服务内存需求较高,适当调高)
resources:
cpu: "200m"
memory: "512Mi"
limits:
cpu: "1000m"
memory: "1Gi"
###########################################################################
# 3. 共享ConfigMap(存储两个服务的公共配置)
###########################################################################
configs:
- name: app-config # ConfigMap名称,与上面的env/configs关联
type: configmap
properties:
data:
nginx.conf.path: "/etc/nginx/conf.d" # Nginx配置文件路径
db.url: "jdbc:mysql://mysql-service:3306/myapp" # 数据库连接地址(假设mysql-service是数据库服务名)
db.username: "app_user" # 数据库用户名
部署与验证步骤
1. 前提条件
• 已安装 Kubernetes 集群(如 Minikube、Kind)
• 已安装 KubeVela CLI(参考:https://kubevela.io/docs/installation/cli)
2. 部署应用
1. 应用清单(创建服务 + ConfigMap)
vela up -f app.yaml
2. 查看应用状态(确认是否运行正常)
vela status nginx-java-app -n default
3. 核心验证点(确保配置生效)
| | |
|---|
| kubectl get pods | 出现 nginx-service-xxx 和 java-service-xxx,状态为 Running |
| kubectl exec nginx-service-xxx -- env | grep NGINX_ | |
| kubectl exec java-service-xxx -- ls /app/config | 看到 ConfigMap 的配置文件(如 nginx.conf.path 等) |
| kubectl exec nginx-service-xxx -- cat /usr/share/nginx/html/index.html | |
| kubectl describe pod java-service-xxx | grep Readiness | |
| vela port-forward nginx-java-app 80:80 | 本地访问 http://localhost,看到 Welcome to Nginx |
| vela port-forward nginx-java-app 8080:8080 | 本地访问 http://localhost:8080/actuator/health,返回 {"status": "UP"} |
关键配置解释
- 1. 环境变量优先级:直接定义的 env.value > ConfigMap 引用,敏感信息(如密码)建议用 secret 类型(替换 configmap 即可)。
- 2. 健康探针参数:Java服务启动慢,initialDelaySeconds 需设为30+,避免误判重启;Nginx启动快,设为5-10秒即可。
- 3. 启动钩子:preStart 是容器启动前执行(如创建目录、下载文件),postStart 是启动后执行(如修改配置),命令需用绝对路径(如 /bin/sh)。
- 4. 端口暴露:expose: true 会自动创建 NodePort 类型的 Service,本地可通过 vela port-forward 访问,生产环境可替换为 LoadBalancer 类型。
扩展说明
• 如果Java服务有 Jar 包,可通过 volumes 挂载本地文件或云存储(如 S3、NFS),替换 preStart 钩子中的占位命令。
• 若需修改配置,直接编辑 app.yaml 后重新执行 vela up -f app.yaml,KubeVela 会自动更新服务。
🎉购书籍,做大牛🎉
院长书籍链接:
https://deanit.cn/DeanBooks/