docker - 外部 docker 注册表中的镜像更新不会触发部署

标签 docker openshift artifactory openshift-enterprise

我在 OpenShift Web 客户端中导入以下模板来创建 ImageStream、DeploymentConfig 和 Service。

ImageStream 是从外部 Docker 注册表上可用的 Docker 镜像创建的。

除了外部注册表中的 Docker 镜像更改时不会发生重新部署这一事实之外,一切似乎都运行良好。

当外部注册表中的 Docker 镜像发生更改时,Openshift 和外部注册表是否可以触发自动部署。

{
    "kind": "Template",
    "apiVersion": "v1",
    "metadata": {
        "name": "test-100"
    },
    "objects": [
        {
            "kind": "ImageStream",
            "apiVersion": "image.openshift.io/v1",
            "metadata": {
                "name": "test-100",
                "creationTimestamp": null,
                "labels": {
                    "app": "test-100"
                },
                "annotations": {
                    "openshift.io/generated-by": "OpenShiftNewApp"
                }
            },
            "spec": {
                "lookupPolicy": {
                    "local": false
                },
                "tags": [
                    {
                        "name": "latest",
                        "annotations": {
                            "openshift.io/imported-from": "artifactory.company.com/docker-dev-local/test/dev/test:latest"
                        },
                        "from": {
                            "kind": "DockerImage",
                            "name": "artifactory.company.com/docker-dev-local/test/dev/test:latest"
                        },
                        "generation": null,
                        "importPolicy": {},
                        "referencePolicy": {
                            "type": ""
                        }
                    }
                ]
            }
        },
        {
            "kind": "DeploymentConfig",
            "apiVersion": "apps.openshift.io/v1",
            "metadata": {
                "name": "test-100",
                "creationTimestamp": null,
                "labels": {
                    "app": "test-100"
                },
                "annotations": {
                    "openshift.io/generated-by": "OpenShiftNewApp"
                }
            },
            "spec": {
                "strategy": {
                    "resources": {}
                },
                "triggers": [
                    {
                        "type": "ConfigChange"
                    },
                    {
                        "type": "ImageChange",
                        "imageChangeParams": {
                            "automatic": true,
                            "containerNames": [
                                "test-100"
                            ],
                            "from": {
                                "kind": "ImageStreamTag",
                                "name": "test-100:latest"
                            }
                        }
                    }
                ],
                "replicas": 1,
                "test": false,
                "selector": {
                    "app": "test-100",
                    "deploymentconfig": "test-100"
                },
                "template": {
                    "metadata": {
                        "creationTimestamp": null,
                        "labels": {
                            "app": "test-100",
                            "deploymentconfig": "test-100"
                        },
                        "annotations": {
                            "openshift.io/generated-by": "OpenShiftNewApp"
                        }
                    },
                    "spec": {
                        "containers": [
                            {
                                "name": "test-100",
                                "image": "artifactory.company.com/docker-dev-local/test/dev/test:latest",
                                "ports": [
                                    {
                                        "containerPort": 8080,
                                        "protocol": "TCP"
                                    },
                                    {
                                        "containerPort": 8443,
                                        "protocol": "TCP"
                                    },
                                    {
                                        "containerPort": 8778,
                                        "protocol": "TCP"
                                    }
                                ],
                                "resources": {}
                            }
                        ]
                    }
                }
            }
        },
        {
            "kind": "Service",
            "apiVersion": "v1",
            "metadata": {
                "name": "test-100",
                "creationTimestamp": null,
                "labels": {
                    "app": "test-100"
                },
                "annotations": {
                    "openshift.io/generated-by": "OpenShiftNewApp"
                }
            },
            "spec": {
                "ports": [
                    {
                        "name": "8080-tcp",
                        "protocol": "TCP",
                        "port": 8080,
                        "targetPort": 8080
                    },
                    {
                        "name": "8443-tcp",
                        "protocol": "TCP",
                        "port": 8443,
                        "targetPort": 8443
                    },
                    {
                        "name": "8778-tcp",
                        "protocol": "TCP",
                        "port": 8778,
                        "targetPort": 8778
                    }
                ],
                "selector": {
                    "app": "test-100",
                    "deploymentconfig": "test-100"
                }
            }
        }
    ]
}

最佳答案

OpenShift 无法检测外部注册表上的图像更改。所以你应该配置importPolicy.scheduled: true刷新图像。

例如>您可以为每个图像标签配置 imagePolicy。

apiVersion: v1
kind: ImageStream
metadata:
  name: ruby
spec:
  tags:
  - from:
      kind: DockerImage
      name: openshift/ruby-20-centos7
    name: latest
    importPolicy:
      scheduled: true

间隔默认为 15 分钟。如果要更改值,可以从 /etc/origin/master/master-config.yaml 调整配置如下。

例如> ScheduledImageImportMinimumIntervalSeconds是图像流导入的间隔时间。引用 Image Policy Configuration 有关其他参数的详细信息。
imagePolicyConfig:
  MaxScheduledImageImportsPerMinute: 10  
  ScheduledImageImportMinimumIntervalSeconds: 1800
  disableScheduledImport: false
  maxImagesBulkImportedPerRepository: 3

更多信息在这里:Automatically Update Red Hat Container Images on OpenShift 3.11 .

关于docker - 外部 docker 注册表中的镜像更新不会触发部署,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58462781/

相关文章:

windows - Openshift3 中的 "User "系统 "cannot get securitycontextconstraints at the cluster scope"

mysql - OpenShift 应用程序无法连接到 MySQL : JDBCConnectionException: Could not open connection

artifactory - 无论如何,是否可以在 Artifactory 中手动缓存远程 Artifactory ?

docker - 将dockerfile + bash脚本转换为OpenShift部署配置

maven - Jenkins Artifactory插件未生成POM文件

amazon-web-services - 获取一个 jar 及其源代码和 javadoc

docker - Docker引擎群模式下跨多个节点的持久卷

docker - 在Heroku上设置多阶段Docker构建

linux - 根据 docker run 命令启动 java 进程

docker - Dockerfile和环境变量