1. 授权认证
  2. 获取用户个人信息
  3. 项目协同
  4. 代码托管
  5. 持续集成
  6. 制品仓库
  7. 测试管理
  1. 项目协同
  2. 代码仓库
  3. DevOps 实践之旅
  4. 一分钟开始持续集成之旅
  5. 持续部署
  6. 制品库

Kubernetes 场景下的制品

制品在 Kubernetes 资源对象的部署中扮演中重要的角色,您在 manifest 文件中引用的如 Docker 镜像或 ConfigMap 都可以通过制品来进行绑定部署。

将 Manifest 作为制品

有两种方法可以部署 manifest:

  • manifest 以静态的方式(text格式)提供给部署流程

  • manifest 作为制品提供给部署流程

下图展示了在 Deploy 阶段中部署存储于 CODING 代码仓库的 manifest:

在 manifest 中绑定制品

通常来说,制品表示用户在部署流程部署中需要更新的资源。诸如 Docker 镜像和 ConfigMaps 这类通过 manifest 更新的资源类型,CODING 部署控制台(Spinnaker)提供了一种简单的方式将其注入到 manifest 文件中。

在 manifest 中绑定制品的过程中,CODING 部署控制台使用了一个便捷的规则实现。即当 manifest 中资源对象的 typevalue 与制品的 typename 分别匹配时,manifest 中的 value 将会被制品的 reference 替换。

manifest 中资源对象的 type 具体来说就是 spec.template.spec.containers.*.image 中所引用的 Docker 镜像,因此将匹配 docker/image 类型的制品。

spec.template.spec.volumes.*.configMap.name 引用 ConfigMap,因此将匹配 kubernetes/configMap 类型的制品。

它们的实现过程原理如下:

首先在部署流程中定义了需要部署的 manifest 内容:

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - image: lhkprod-docker.pkg.coding.net/cd-demo/release/nginx # possible artifact
          name: nginx
          ports:
            - containerPort: 80
          volumeMounts:
            - mountPath: /opt/config
              name: my-config-map
      volumes:
        - configMap:
            name: configmap             # possible artifact
          name: my-config-map

当部署阶段执行时,如果执行上下文中有如下的制品(制品可能来自触发器或之前的部署过程),代码如下:

[
  {
    "type": "docker/image",
    "name": "lhkprod-docker.pkg.coding.net/cd-demo/release/nginx",
    "reference": "lhkprod-docker.pkg.coding.net/cd-demo/release/nginx@sha256:0cce25b9a55"
  },
  {
    "type": "kubernetes/configMap",
    "name": "configmap",
    "version": "v001",
    "location": "default",
    "reference": "configmap-v001"
  }
]

则 ConfigMap 和 Docker 镜像将会被上下文中的制品替换,最终被部署到集群的 manifest 内容为:

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - image: lhkprod-docker.pkg.coding.net/cd-demo/release/nginx@sha256:0cce25b9a55    # bound by spinnaker
          name: nginx
          ports:
            - containerPort: 80
          volumeMounts:
            - mountPath: /opt/config
              name: my-config-map
      volumes:
        - configMap:
            name: configmap-v001                              # bound by spinnaker
          name: my-config-map

上一篇部署流程中的制品
最近更新
感谢反馈有用
感谢反馈没用