是否有一些方法可以离线管理Kubernetes图像?

问题描述 投票:1回答:2

我是kubernetes的新手。最近,我成功地使用在线服务器来管理kubernetes。但是,当我移到隔离区域(脱机服务器)时,无法部署kubectl映像。但是我所有的环境都运行良好,我陷入了困境。不同的只是互联网连接。

目前,我无法在离线服务器中部署kubernetes仪表板和一些映像。我的kubectl命令在离线服务器中的示例(我在在线服务器中下载了tar文件):

# docker load < nginx.tar

# kubectl create deployment test-nginx --image=nginx

# kubectl get pods --all-namespaces
NAMESPACE     NAME                                   READY   STATUS             RESTARTS   AGE
default       test-nginx-7d97ffc85d-2s4lh            0/1     ImagePullBackOff   0          50s
kube-system   coredns-6955765f44-2s54f               1/1     Running            1          26h
kube-system   coredns-6955765f44-wmtq9               1/1     Running            1          26h
kube-system   etcd-devkubeapp01                      1/1     Running            1          26h
kube-system   kube-apiserver-devkubeapp01            1/1     Running            1          26h
kube-system   kube-controller-manager-devkubeapp01   1/1     Running            1          26h
kube-system   kube-flannel-ds-amd64-czn8z            1/1     Running            0          26h
kube-system   kube-flannel-ds-amd64-d58x4            1/1     Running            0          26h
kube-system   kube-flannel-ds-amd64-z9w9x            1/1     Running            0          26h
kube-system   kube-proxy-9wxj2                       1/1     Running            0          26h
kube-system   kube-proxy-mr76b                       1/1     Running            1          26h
kube-system   kube-proxy-w5pvm                       1/1     Running            0          26h
kube-system   kube-scheduler-devkubeapp01            1/1     Running            1          26h

# kubectl get nodes
NAME           STATUS   ROLES     AGE   VERSION
devkubeapp01   Ready    master    26h   v1.17.2
devkubeapp02   Ready    minion1   26h   v1.17.2
devkubeapp03   Ready    minion2   25h   v1.17.2 

# docker images
REPOSITORY                           TAG                 IMAGE ID            CREATED             SIZE
nginx                                latest              5ad3bd0e67a9        6 days ago          127MB
k8s.gcr.io/kube-proxy                v1.17.2             cba2a99699bd        10 days ago         116MB
k8s.gcr.io/kube-apiserver            v1.17.2             41ef50a5f06a        10 days ago         171MB
k8s.gcr.io/kube-controller-manager   v1.17.2             da5fd66c4068        10 days ago         161MB
k8s.gcr.io/kube-scheduler            v1.17.2             f52d4c527ef2        10 days ago         94.4MB
k8s.gcr.io/coredns                   1.6.5               70f311871ae1        2 months ago        41.6MB
k8s.gcr.io/etcd                      3.4.3-0             303ce5db0e90        3 months ago        288MB
quay.io/coreos/flannel               v0.11.0-amd64       ff281650a721        12 months ago       52.6MB
k8s.gcr.io/pause                     3.1                 da86e6ba6ca1        2 years ago         742kB

我的Pod无法正常运行,因此状态CreationContainer变为ImagePullBackOff(当我断开Internet连接时尝试在联机服务器中,状态相同=> ImagePullBackOff)。任何人都可以帮助解决这个问题? kubernetes是否支持离线环境来部署映像?

谢谢。

docker kubernetes offline
2个回答
0
投票

正如我先前的评论中已经提到的那样:

我怀疑您的imagePullPolicy可能配置错误。

并通过您提供的日志进一步证明:

来自服务器的错误(BadRequest):容器中的容器“ nginx”“ test-nginx-7d97ffc85d-2s4lh”正在等待启动:尝试并失败拉图像

问题出在imagePullPolicy configuration之内。

imagePullPolicy中所述:

预拉图像

默认情况下,kubelet将尝试从指定的图像中提取每个图像注册表。但是,如果容器的official documentation属性设置为imagePullPolicyIfNotPresent,然后使用本地图像(分别为首选或专有)。

如果您要依靠预拉的映像代替注册表身份验证,您必须确保集群中的所有节点都具有相同的预拉图像。

基本上,如@Eduardo所述,您需要确保所有节点上的图像均相同,并且Never的配置正确。

但是,请确保容器始终使用相同版本的图像,您可以指定其imagePullPolicy,例如digest。摘要唯一地标识了图像的特定版本,因此,除非您更改摘要值,否则Kubernetes绝不会对其进行更新。

这种方式在将来会避免类似的问题,因为在这种情况下最大的陷阱就是保持图像群集的完全相同的版本宽。

我希望这会有所帮助并扩展先前的答案(正确的答案),并从一开始就证明我的观点。


-2
投票

使用离线环境,您需要在所有节点上预加载Docker映像,并确保使用正确的sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2来防止Kubernetes下载容器映像。

您需要:

  1. [所有节点中的C0]
  2. 确保部署使用的值为imagePullPolicyimagePullPolicydocker load < nginx.tar(默认值为imagePullPolicy,这可能是您的问题)。
© www.soinside.com 2019 - 2024. All rights reserved.