【发布时间】:2019-02-14 02:45:22
【问题描述】:
我正在使用 OpenShift 版本:
oc v3.10.0+dd10d17
kubernetes v1.10.0+b81c8f8
features: Basic-Auth GSSAPI Kerberos SPNEGO
Server https://127.0.0.1:8443
openshift v3.10.0+e3465d0-44
kubernetes v1.10.0+b81c8f8
我的 docker 版本是:
Client:
Version: 18.06.1-ce
API version: 1.38
Go version: go1.10.3
Git commit: e68fc7a
Built: Tue Aug 21 17:24:56 2018
OS/Arch: linux/amd64
Experimental: false
Server:
Engine:
Version: 18.06.1-ce
API version: 1.38 (minimum version 1.12)
Go version: go1.10.3
Git commit: e68fc7a
Built: Tue Aug 21 17:23:21 2018
OS/Arch: linux/amd64
Experimental: false
要在我的计算机上启动本地 OpenShift 集群,我按照以下步骤操作:https://github.com/openshift/origin/blob/master/docs/cluster_up_down.md#linux
我想部署一个 Redis 实例,由于没有默认 Redis 模板(有 20 个默认模板),我将其作为 JSON 模板从 URL 加载:https://github.com/openshift/origin/blob/master/examples/db-templates/redis-ephemeral-template.json
从该模板创建应用时,Redis pod 无法启动并发出以下错误信号:
无法提取图像“172.30.1.1:5000/openshift/redis@sha256:0cf7163e0589baab918b1d70cd1ed4c711e2430c618c672b9121f1fd35cf562a”:rpc 错误:代码 = 未知 desc = 来自守护进程的错误响应:未知:无法从 docker.io/redis/提取清单-32-centos7:latest: 获取https://registry-1.docker.io/v2/: net/http: 请求在等待连接时取消(Client.Timeout 在等待标头时超出)
当我通过提供 docker 映像 openshiftroadshow/parksmap-katacoda:1.0.0 来部署应用程序时 - 它已被成功拉取并部署。
我已经登录到在 172.30.1.1:5000 发布的容器,该容器托管了 OpenShift 的 docker 注册表,并且在解析 registry-1.docker.io 域时显然存在问题:
bash-4.2$ nslookup registry-1.docker.io
;; connection timed out; no servers could be reached
如果我指定8.8.8.8 DNS,一切都很好:
bash-4.2$ nslookup registry-1.docker.io 8.8.8.8
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
Name: registry-1.docker.io
Address: 52.22.67.152
....
所以我查看了/etc/resolv.conf 文件,这是它的内容:
bash-4.2$ cat /etc/resolv.conf
nameserver 172.30.0.2
search default.svc.cluster.local svc.cluster.local cluster.local home
options ndots:5
我的问题是:
- OpenShift 是否使用了一些内部 DNS 解决方案?如果是这样,我应该调整它的配置吗?
- 谁(以及在哪里)负责配置
resolv.conf文件的内容? - 我使用的 Redis 模板有什么问题吗?
- 逐个添加缺失的模板是否是一种好习惯,是否可以一次添加大量缺失的有用模板?
- 我应该怎么做才能使我的示例正常工作?
非常感谢您的帮助和时间!
【问题讨论】:
-
该模板默认需要
redis图像存在于openshift项目中。你是把它导入到那个项目中,还是你自己的并覆盖了它期望从中提取的名称空间? -
@GrahamDumpleton,你怎么知道模板期望
redis图像存在于openshift项目中?我没有更改模板。此外,我没有在内部 docker 注册表中添加或删除任何图像。我使用带有 ODK 3.10 的minishift测试了相同的场景,并且在内部 docker 注册表中找不到图像后,该图像是从docker.io注册表中提取的。如果找不到图像,内部 docker 注册表是否应该访问外部 docker 注册表(如 docker.io),或者我是否负责将必要的图像推送到内部 docker 注册表? -
哦,我使用的是 Ubuntu 16.04。 ODK 3.10 是否应该毫无问题地在其上运行?
标签: docker redis openshift docker-registry openshift-origin