【问题标题】:Can a Kubernetes Deployment be done from an OpenShift Template file?可以从 OpenShift 模板文件完成 Kubernetes 部署吗?
【发布时间】:2022-02-18 03:12:06
【问题描述】:

我正在使用 OpenShift 4.7,我想将我的 OpenShift DeploymentConfig 转换为 Kubernetes Deployment。现在,我正在使用 OpenShift kind: Template 文件创建大部分应用程序。 OpenShift 模板是否支持 Kubernetes 部署,或者如果我想使用 Kubernetes 部署,我是否需要切换到另一种工具?

由于这方面的信息有限,我只是尝试对其进行转换以查看会发生什么,但无法使其正常工作。如果有人能阐明这个主题以及在哪里可以找到如何从 DeploymentConfigs 到 Deployments 的好例子,我想互联网,我会很感激。

我当前的一个 OpenShift 部署配置在模板文件中如下所示:

...
- apiVersion: v1
  kind: DeploymentConfig
  metadata:
    annotations:
      description: Defines how to deploy the database
      template.alpha.openshift.io/wait-for-ready: 'true'
    name: postgresql
  spec:
    replicas: 1
    selector:
      name: postgresql
    strategy:
      type: Recreate
    template:
      metadata:
        labels:
          name: postgresql
        name: postgresql
      spec:
        containers:
        - env:
          - name: POSTGRESQL_USER
            valueFrom:
              secretKeyRef:
                key: database-user
                name: ${NAME}
          - name: POSTGRESQL_PASSWORD
            valueFrom:
              secretKeyRef:
                key: database-password
                name: ${NAME}
          - name: POSTGRESQL_DATABASE
            value: ${DATABASE_NAME}
          image: ' '
          livenessProbe:
            exec:
              command:
              - /usr/libexec/check-container
              - --live
            initialDelaySeconds: 120
            timeoutSeconds: 10
          name: postgresql
          ports:
          - containerPort: 5432
          readinessProbe:
            exec:
              command:
              - /usr/libexec/check-container
            initialDelaySeconds: 5
            timeoutSeconds: 1
          resources:
            limits:
              memory: ${MEMORY_POSTGRESQL_LIMIT}
          volumeMounts:
          - mountPath: /var/lib/pgsql/data
            name: postgresql-data
        volumes:
        - name: postgresql-data
          persistentVolumeClaim:
            claimName: postgresql
    triggers:
    - imageChangeParams:
        automatic: true
        containerNames:
        - postgresql
        from:
          kind: ImageStreamTag
          name: postgresql:${POSTGRESQL_VERSION}
          namespace: ${NAMESPACE}
      type: ImageChange
    - type: ConfigChange
...

【问题讨论】:

  • 您不能只更改模板中的“DeploymentConfig”->“Deployment”,因为它们是具有不同 API 的完全不同的对象。我建议将您的 DeploymentConfig 与部署的 k8s API 参考文档进行比较:kubernetes.io/docs/reference/generated/kubernetes-api/v1.19/…
  • 谢谢你,威尔。您是说如果字段已从 DeploymentConfig 正确转换,则无法从模板文件中完成 Kubernetes 部署?
  • “部署”本身应该在 OpenShift 模板中正常工作。它纯粹是一个 GoLang 模板系统,可以轻松地将所有需要的对象一起定义在一个包中(将其视为 Helm 的替代方案)。我只是想暗示(如下面的回答), Deployment 和 DeploymentConfig 有不同的定义。因此,如果您更改模板中的“种类”而不更改其他内容,我预计这会失败。

标签: kubernetes deployment openshift openshift-4


【解决方案1】:

根据官方OpenShift documentation 的说法,您没有理由不能对部署进行模板化。

但是,deploymentConfigs 和 Deployments 并不相同。因此,简单地更改 apiVersion 和 kind 以匹配部署可能会导致 OpenShift 无法理解的 yaml。

例如,您提供的 DeploymentConfig 包含一个“触发器”部分。触发器可用于 DeploymentConfig,但不适用于 Deployment。

附带说明:openshift 模板仍然存在,但是您应该考虑使用其他更广泛的模板工具,例如 helm v3。它更常用,可应用于 OpenShift 和普通 Kubernetes 集群(假设该 helm 图表中只有普通 kubernetes 资源类型/crd)。

【讨论】:

    【解决方案2】:

    答案是肯定的,但你现在必须为triggers 和 git hooks 等问题想出自己的解决方案。对我来说,上述 DeploymentConfig 的转换如下所示:

    ...
    - apiVersion: v1
      kind: Deployment
      metadata:
        annotations:
          deployment.kubernetes.io/revision: '4'
          image.openshift.io/triggers: |-
            [
              {
                "from": {
                  "kind": "ImageStreamTag",
                  "namespace": "openshift",
                  "name": "openshift/postgresql:10"
                },
                "fieldPath": "spec.template.spec.containers[0].image"
              }
            ]
        selfLink: /apis/apps/v1/namespaces/abigail-discourse-project-1/deployments/postgresql
        name: postgresql
        #namespace: ${openshift.project()}
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: postgresql
        template:
          metadata:
            creationTimestamp: null
            labels:
              app: postgresql
          spec:
            containers:
              - resources: {}
                readinessProbe:
                  exec:
                    command:
                      - /usr/libexec/check-container
                  initialDelaySeconds: 5
                  timeoutSeconds: 1
                  periodSeconds: 9
                  successThreshold: 1
                  failureThreshold: 3
                terminationMessagePath: /dev/termination-log
                name: postgresql
                livenessProbe:
                  exec:
                    command:
                      - /usr/libexec/check-container --live
                  initialDelaySeconds: 120
                  timeoutSeconds: 1
                  periodSeconds: 15
                  successThreshold: 1
                  failureThreshold: 3
                env:
                  - name: POSTGRESQL_DATABASE
                    value: discourse
                  - name: POSTGRESQL_USER
                    valueFrom:
                      secretKeyRef:
                        name: discourse
                        key: database-user
                  - name: POSTGRESQL_PASSWORD
                    valueFrom:
                      secretKeyRef:
                        name: discourse
                        key: database-password
                ports:
                  - containerPort: 5432
                    protocol: TCP
                imagePullPolicy: Always
                envFrom:
                  - secretRef:
                      name: discourse
                image: >-
                  image-registry.openshift-image-registry.svc:5000/openshift/postgresql:10
            restartPolicy: Always
        strategy:
          type: Recreate
    ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-18
      • 2019-05-31
      • 2020-05-06
      • 2019-09-10
      • 2020-06-08
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多