我有一个Oracle OCI Kubernetes集群。我用Loadbalancer测试了一个示例nginx,它工作正常并且可以从外部访问。现在,我的本地计算机上(而不是群集节点上)有一个DB&Weblogic docker容器映像。当我尝试部署它们时,我收到一条错误消息,指出未在注册表中找到它。我尚未将图像上传到注册表。我的问题是,有没有办法在运行kubectl的本地盒子上直接引用该图像并进行部署?
nginx示例作品
root@docker-forms-ubuntu:/docker/kubernetes# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
oracle/database 12.2.0.1-ee 190ad0c5e1c8 46 hours ago 6.12GB
localhost/oracle/formsreports 12.2.1.3 cd673b530298 3 days ago 14.7GB
oracle/fmw-infrastructure 12.2.1.3 a167bf2e519e 3 days ago 6.29GB
oracle/serverjdk 8 f34272b9b150 3 days ago 642MB
iad.ocir.io/orasenatdpublicsector05/guru/oracldb 12.2.1.3 331e9a596394 3 days ago 6.12GB
nginx latest 5a3221f0137b 9 days ago 126MB
oraclelinux 7-slim 874477adb545 2 weeks ago 118MB
oraclelinux latest 5f993b1aafe5 2 weeks ago 235MB
hello-world latest fce289e99eb9 7 months ago 1.84kB
root@docker-forms-ubuntu:/docker/kubernetes#
Normal Scheduled 22s default-scheduler Successfully assigned default/database-7d95f6774f-bl55h to 10.0.10.2
Normal BackOff 19s (x2 over 20s) kubelet, 10.0.10.2 Back-off pulling image "oracle/database:12.2.0.1-ee"
Warning Failed 19s (x2 over 20s) kubelet, 10.0.10.2 Error: ImagePullBackOff
Normal Pulling 5s (x2 over 21s) kubelet, 10.0.10.2 pulling image "oracle/database:12.2.0.1-ee"
Warning Failed 4s (x2 over 21s) kubelet, 10.0.10.2 Failed to pull image "oracle/database:12.2.0.1-ee": rpc error: code = Unknown desc = pull access denied for oracle/database, repository does not exist or may require 'docker login'
Warning Failed 4s (x2 over 21s) kubelet, 10.0.10.2 Error: ErrImagePull
答案 0 :(得分:1)
有没有一种方法可以直接引用本地盒子上的图像
不。所有人都需要运行或有权使用Docker注册表服务器才能使用Kubernetes。
您不能直接从其他系统的Docker守护程序下载内容。 Kubernetes甚至不将图像存储在集群中:当pod规范具有image:
时,运行它的每个单独节点都会关闭并检索图像内容。这样做的结果是,您必须将映像上传到 somewhere ,以便Kubernetes节点可以下载它,并且“ somewhere”是Docker注册表服务(Docker Hub,一个私有注册表) ,如Amazon ECR等云服务,...)。
各种Kubernetes-on-Your-Workstation安装(minikube,kind,...)通常可以通过某种方式直接使用Kubernetes节点的Docker守护程序或将映像上传到“集群”中,但这并没有听起来像您的情况。
答案 1 :(得分:0)
好吧,如果出于测试目的,请使用docker save,然后使用scp
复制到节点,然后将imagePullPolicy
设置为Never
。但是只是不要将其用于生产,请使用容器注册表,如果没有注册表,请使用this helm chart将一个注册表部署到您的集群中,这将是私有的。