Workflow 结构
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: springboot-service-workflow-
spec:
entrypoint: springboot-workflow
-
apiVersion: argoproj.io/v1alpha1
和kind: Workflow
:这定义了这是一个Argo Workflow
类型的资源,表示这个文件用于定义一个工作流。 -
metadata.generateName: springboot-service-workflow-
:这个字段为工作流生成一个唯一的名称。generateName
表示Argo
会在每次创建工作流时,为该工作流添加一个随机的后缀,以确保工作流名称的唯一性。 -
spec.entrypoint: springboot-workflow
:指定工作流的入口点,即从哪个模板开始执行。在这个例子中,工作流会从springboot-workflow
模板开始执行。
Templates 定义
接下来的部分定义了工作流中的多个步骤 (steps),这些步骤会按顺序执行。
创建 Kubernetes 服务 (create-service)
- name: create-service
resource:
action: apply
manifest: |
apiVersion: v1
kind: Service
metadata:
name: springboot-service
spec:
selector:
app: springboot-app
ports:
- protocol: TCP
port: 8080
targetPort: 8080
type: NodePort # 可以根据需要修改为 LoadBalancer 或 NodePort
- name: create-service:这个步骤的名称。
- resource:
- action: apply:表示使用 kubectl apply 命令应用 Kubernetes 资源,创建一个服务。
- manifest: 这是一个 Kubernetes Service 的 YAML 定义,描述了服务的配置。
- apiVersion: v1 和 kind: Service:表示这个资源是一个 Kubernetes 服务。
- metadata.name: springboot-service:服务的名称是 springboot-service。
- spec:
- selector: 用于选择应用的 Pod。这里的选择器选择标签为 app: springboot-app 的 Pod。
- ports: 定义服务的端口,服务监听 8080 端口,并将请求转发到目标端口 8080。
- type: NodePort:指定服务类型为 NodePort,这意味着服务将暴露在 Kubernetes 节点的一个端口上,便于从外部访问应用。你可以根据需要将其改为 LoadBalancer 或 ClusterIP,具体取决于你的网络需求。
- spec:
启动 Spring Boot 容器 (springboot-container)
- name: springboot-container
container:
name: springboot-app
image: my-image:v1 # 替换成你的 Docker 镜像
command: [ "java" ] # 显式指定命令为 `java`
args: [ "-jar", "arthas-study.jar" ] # 显式指定 `arthas-study.jar` 文件作为参数
ports:
- containerPort: 8080
env:
- name: SPRING_PROFILES_ACTIVE
value: "prod"
metadata:
labels:
app: springboot-app
完整workflow内容
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: springboot-service-workflow-
spec:
entrypoint: springboot-workflow
templates:
- name: springboot-workflow
steps:
- - name: create-service
template: create-service
- - name: start-springboot-container
template: springboot-container
- name: create-service
resource:
action: apply
manifest: |
apiVersion: v1
kind: Service
metadata:
name: springboot-service
spec:
selector:
app: springboot-app
ports:
- protocol: TCP
port: 8080
targetPort: 8080
type: NodePort # 可以根据需要修改为 LoadBalancer 或 NodePort
- name: springboot-container
container:
name: springboot-app
image: my-image:v1 # 替换成你的 Docker 镜像
command: [ "java" ] # 显式指定命令为 `java`
args: [ "-jar", "arthas-study.jar" ] # 显式指定 `arthas-study.jar` 文件作为参数
ports:
- containerPort: 8080
env:
- name: SPRING_PROFILES_ACTIVE
value: "prod"
metadata:
labels:
app: springboot-app
可以看到springboot项目已经运行成功。
kubectl get svc -n argo
http://192.168.56.115:32356/user/1