社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  NGINX

在K8s上通过KubeVela部署Nginx和Java服务并使用K8s多种资源

院长技术 • 7 月前 • 165 次点击  

加入技术交流群

图片

 

通俗理解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_
显示 Nginx 相关的环境变量配置
验证 ConfigMap 挂载
kubectl exec java-service-xxx -- ls /app/config
看到 ConfigMap 的配置文件(如 nginx.conf.path 等)
验证 Nginx 启动钩子
kubectl exec nginx-service-xxx -- cat /usr/share/nginx/html/index.html
输出 Welcome to Nginx
验证 Java 健康探针
kubectl describe pod java-service-xxx | grep Readiness
显示就绪探针的配置信息
访问 Nginx 服务
vela port-forward nginx-java-app 80:80
本地访问 http://localhost,看到 Welcome to Nginx
访问 Java 服务
vela port-forward nginx-java-app 8080:8080
本地访问 http://localhost:8080/actuator/health,返回 {"status": "UP"}


关键配置解释

  1. 1. 环境变量优先级:直接定义的 env.value > ConfigMap 引用,敏感信息(如密码)建议用 secret 类型(替换 configmap 即可)。
  2. 2. 健康探针参数:Java服务启动慢,initialDelaySeconds 需设为30+,避免误判重启;Nginx启动快,设为5-10秒即可。
  3. 3. 启动钩子:preStart 是容器启动前执行(如创建目录、下载文件),postStart 是启动后执行(如修改配置),命令需用绝对路径(如 /bin/sh)。
  4. 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/

图片

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/189718