Openshift Origin 运行-app against insecure registry yields stuck pod with "Error while pulling image"
Openshift Origin run-app against insecure registry yields stuck pod with "Error while pulling image"
我在 Docker 容器中使用 Openshift Origin,并使用以下方法从 Docker 注册表(同一 RHEL 主机 VM 上的容器)中提取图像:
oc new-app --insecure-registry=true --docker-image=mtl-vm375:5000/jenkins:1.0
那个命令当时似乎工作正常。但是,pod 保持为 "ContainerCreating" 并且 kubectl 的结果 describe pods:
OPENSHIFT_DEPLOYMENT_NAME: jenkins-1
OPENSHIFT_DEPLOYMENT_NAMESPACE: default
Conditions:
Type Status
Ready False
Volumes:
deployer-token-3bls9:
Type: Secret (a volume populated by a Secret)
SecretName: deployer-token-3bls9
Events:
FirstSeen LastSeen Count From SubobjectPath Type Reason Message
--------- -------- ----- ---- ------------- -------- ------ -------
2h 4m 33 {kubelet mtl-vm375} Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "POD" with ErrImagePull: "Error while pulling image: Get https://index.docker.io/v1/repositories/openshift/origin-pod/images: dial tcp 10.230.22.20:443: connection refused"
2h 6s 652 {kubelet mtl-vm375} Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "POD" with ImagePullBackOff: "Back-off pulling image \"openshift/origin-pod:v1.1.5\""
有一个错误表明它正在尝试使用 https,我猜(但不确定)是错误,因为我还没有正确设置 https 证书:
根据 Whosebug 上的其他建议,我已将这些环境变量添加到 Origin 图像中:
KUBE_ENABLE_INSECURE_REGISTRY=真
EXTRA_DOCKER_OPTS=--不安全的注册表
我也有类似的结果:
KUBE_ENABLE_INSECURE_REGISTRY=真\
EXTRA_DOCKER_OPTS="--不安全注册表 10.230.22.20"
版本信息:
[root@mtl-vm375 origin]# oc version
oc v1.1.5-52-gd58f979 kubernetes v1.2.0-36-g4a3f9c5
和
[root@mtl-vm375 ~]# docker version
Client:
Version: 1.8.2-el7.centos
API version: 1.20
Package Version: docker-1.8.2-10.el7.centos.x86_64
Go version: go1.4.2
Git commit: a01dc02/1.8.2
Built:
OS/Arch: linux/amd64
Server:
Version: 1.8.2-el7.centos
API version: 1.20
Package Version:
Go version: go1.4.2
Git commit: a01dc02/1.8.2
Built:
OS/Arch: linux/amd64
提前致谢,
约翰
这是我为使用来自另一个 Docker 注册表(甚至在我的集群之外)的图像而执行的步骤。
我的注册表:
https://ec2-xx-xx-xx-xx.eu-central-1.compute.amazonaws.com:5000
我将项目(在 OS 中)创建到我想要推送的位置。
$ oc new-project test
我在项目中,我将创建一个秘密,以便我的 openshift 能够访问我的注册表:
$ oc secrets new-dockercfg mysecret --docker-server=https://ec2-xx-xx-xx-xx.eu-central-1.compute.amazonaws.com:5000 --docker-username=testuser --docker-password=testpassword --docker-email=any@mail.com
向服务帐户添加密码
$ oc secrets add serviceaccount/default secrets/mysecret --for=pull
$ oc secrets add serviceaccount/builder secrets/mysecret
导入图像流
$ oc import-image --insecure ec2-xx-xx-xx-xx.eu-central-1.compute.amazonaws.com:5000/test/name-of-image:1 --confirm
现在您可以创建一个
oc new-app --insecure-registry <image-stream-name>:tag
更好的方法是将图像推送到 OpenShift 注册表。无需创建秘密并执行 oc import
。
您可以公开注册表(安全注册表),以便您可以从集群外部访问注册表以推送图像。
如果您在通过重新发布(重新导入)更新导入 :tag 后遇到 Openshift Builder 问题
您的 OpenShift 构建似乎没有使用您通过 oc import-image 发布的最新图像标签..
- 打开"Builder-Configuration of your app",
- 转到第 "Image Configuration"
部分
- 并将 "Build From" 值从 "Docker Image Repository" 切换为 "Image Stream Tag"
- 和select那里的命名空间、图像流和标签。
生成器配置概述:
- 将新值设置为 "Docker Image Repository" 没有帮助。
- 在 "Always pull the build..." 处设置复选框也没有帮助。
改变这个...
到这个...
我在 Docker 容器中使用 Openshift Origin,并使用以下方法从 Docker 注册表(同一 RHEL 主机 VM 上的容器)中提取图像:
oc new-app --insecure-registry=true --docker-image=mtl-vm375:5000/jenkins:1.0
那个命令当时似乎工作正常。但是,pod 保持为 "ContainerCreating" 并且 kubectl 的结果 describe pods:
OPENSHIFT_DEPLOYMENT_NAME: jenkins-1
OPENSHIFT_DEPLOYMENT_NAMESPACE: default
Conditions:
Type Status
Ready False
Volumes:
deployer-token-3bls9:
Type: Secret (a volume populated by a Secret)
SecretName: deployer-token-3bls9
Events:
FirstSeen LastSeen Count From SubobjectPath Type Reason Message
--------- -------- ----- ---- ------------- -------- ------ -------
2h 4m 33 {kubelet mtl-vm375} Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "POD" with ErrImagePull: "Error while pulling image: Get https://index.docker.io/v1/repositories/openshift/origin-pod/images: dial tcp 10.230.22.20:443: connection refused"
2h 6s 652 {kubelet mtl-vm375} Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "POD" with ImagePullBackOff: "Back-off pulling image \"openshift/origin-pod:v1.1.5\""
有一个错误表明它正在尝试使用 https,我猜(但不确定)是错误,因为我还没有正确设置 https 证书:
根据 Whosebug 上的其他建议,我已将这些环境变量添加到 Origin 图像中: KUBE_ENABLE_INSECURE_REGISTRY=真 EXTRA_DOCKER_OPTS=--不安全的注册表
我也有类似的结果: KUBE_ENABLE_INSECURE_REGISTRY=真\ EXTRA_DOCKER_OPTS="--不安全注册表 10.230.22.20"
版本信息:
[root@mtl-vm375 origin]# oc version
oc v1.1.5-52-gd58f979 kubernetes v1.2.0-36-g4a3f9c5
和
[root@mtl-vm375 ~]# docker version
Client:
Version: 1.8.2-el7.centos
API version: 1.20
Package Version: docker-1.8.2-10.el7.centos.x86_64
Go version: go1.4.2
Git commit: a01dc02/1.8.2
Built:
OS/Arch: linux/amd64
Server:
Version: 1.8.2-el7.centos
API version: 1.20
Package Version:
Go version: go1.4.2
Git commit: a01dc02/1.8.2
Built:
OS/Arch: linux/amd64
提前致谢,
约翰
这是我为使用来自另一个 Docker 注册表(甚至在我的集群之外)的图像而执行的步骤。
我的注册表:
https://ec2-xx-xx-xx-xx.eu-central-1.compute.amazonaws.com:5000
我将项目(在 OS 中)创建到我想要推送的位置。
$ oc new-project test
我在项目中,我将创建一个秘密,以便我的 openshift 能够访问我的注册表:
$ oc secrets new-dockercfg mysecret --docker-server=https://ec2-xx-xx-xx-xx.eu-central-1.compute.amazonaws.com:5000 --docker-username=testuser --docker-password=testpassword --docker-email=any@mail.com
向服务帐户添加密码
$ oc secrets add serviceaccount/default secrets/mysecret --for=pull
$ oc secrets add serviceaccount/builder secrets/mysecret
导入图像流
$ oc import-image --insecure ec2-xx-xx-xx-xx.eu-central-1.compute.amazonaws.com:5000/test/name-of-image:1 --confirm
现在您可以创建一个
oc new-app --insecure-registry <image-stream-name>:tag
更好的方法是将图像推送到 OpenShift 注册表。无需创建秘密并执行 oc import
。
您可以公开注册表(安全注册表),以便您可以从集群外部访问注册表以推送图像。
如果您在通过重新发布(重新导入)更新导入 :tag 后遇到 Openshift Builder 问题
您的 OpenShift 构建似乎没有使用您通过 oc import-image 发布的最新图像标签..
- 打开"Builder-Configuration of your app",
- 转到第 "Image Configuration" 部分
- 并将 "Build From" 值从 "Docker Image Repository" 切换为 "Image Stream Tag"
- 和select那里的命名空间、图像流和标签。
生成器配置概述:
- 将新值设置为 "Docker Image Repository" 没有帮助。
- 在 "Always pull the build..." 处设置复选框也没有帮助。
改变这个...
到这个...