3.5.5. odo deploy

odo 可用于部署组件的方式类似于如何使用 CI/CD 系统进行部署。首先,odo 构建容器镜像,然后部署部署组件所需的 Kubernetes 资源。

在运行命令 odo deploy 时,odo 在 devfile 中搜索 kind deploy 的默认命令,并执行这个命令。从 2.2.0 版本开始的 devfile 格式支持 kind 部署

deploy 命令通常是一个 复合 命令,由多个 应用命令组成

  • 引用 镜像 组件(应用时)的命令将构建要部署的容器的镜像,然后将其推送到注册表。
  • 引用 Kubernetes 组件的命令 (应用时)将在集群中创建 Kubernetes 资源。

使用以下示例 devfile.yaml 文件,会使用 目录中存在的 Dockerfile 来构建容器镜像。镜像被推送到其 registry,然后使用这个全新的构建镜像在集群中创建 Kubernetes Deployment 资源。

schemaVersion: 2.2.0
[...]
variables:
  CONTAINER_IMAGE: quay.io/phmartin/myimage
commands:
  - id: build-image
    apply:
      component: outerloop-build
  - id: deployk8s
    apply:
      component: outerloop-deploy
  - id: deploy
    composite:
      commands:
        - build-image
        - deployk8s
      group:
        kind: deploy
        isDefault: true
components:
  - name: outerloop-build
    image:
      imageName: "{{CONTAINER_IMAGE}}"
      dockerfile:
        uri: ./Dockerfile
        buildContext: ${PROJECTS_ROOT}
  - name: outerloop-deploy
    kubernetes:
      inlined: |
        kind: Deployment
        apiVersion: apps/v1
        metadata:
          name: my-component
        spec:
          replicas: 1
          selector:
            matchLabels:
              app: node-app
          template:
            metadata:
              labels:
                app: node-app
            spec:
              containers:
                - name: main
                  image: {{CONTAINER_IMAGE}}