簡體   English   中英

在 k8s 中使用沒有注冊表設置的本地 docker 鏡像

[英]Use local docker image without registry setup in k8s

我已經根據官方教程設置了單節點 kubernetes。

除了官方文檔,我還設置了單節點集群:

kubectl taint nodes --all node-role.kubernetes.io/master-

殘疾人驅逐限制:

cat << EOF >> /var/lib/kubelet/config.yaml
evictionHard:
  imagefs.available: 1%
  memory.available: 100Mi
  nodefs.available: 1%
  nodefs.inodesFree: 1%
EOF

systemctl daemon-reload
systemctl restart kubelet

並為 Docker 設置 systemd 驅動程序:

cat << EOF > /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF

systemctl daemon-reload
systemctl restart docker

我試過以下:

docker build -t localhost:5000/my-image .
kubectl run -it --rm --restart=Always --image=localhost:5000/my-image my-image

但在 pod 日志中,我看到ImagePullBackOff 如果我設置了本地存儲庫並在構建映像后執行docker push localhost:5000/my-image image ,那么一切正常。

是否可以使用本地圖像(在發布docker images后已經可用)而無需設置本地存儲庫,推送到該存儲庫然后從中拉取?

您只需將container規范中Pod模板中的imagePullPolicy設置為Never 否則kubelet會嘗試拉取鏡像。 示例Pod定義可能如下所示:

apiVersion: v1
kind: Pod
metadata:
  name: test
spec:
  containers:
    - name: uses-local-image
      image: local-image-name
      imagePullPolicy: Never

您可以在此處找到更多相關信息

默認情況下,kubelet 會嘗試從指定的注冊表中拉取每個鏡像。 但是,如果容器的imagePullPolicy屬性設置為IfNotPresentNever ,則使用本地圖像(分別優先或專門)。

如果您想依靠預拉鏡像來代替注冊中心身份驗證,您必須確保集群中的所有節點都具有相同的預拉鏡像。

這可用於預加載某些圖像以提高速度或作為對私有注冊表進行身份驗證的替代方法。

所有 pod 都可以讀取任何預先提取的圖像。

馬里奧的回答是正確的。 將完成命令雖然。 因此,您希望按如下方式創建部署:

kubectl run -it --rm --restart Always DEPLOYMENT_NAME --image my-image --image-pull-policy IfNotPresent COMMAND

注意:如果您有多個節點,則需要確保在所有節點上都有一個具有該名稱的圖像,因為不存在存儲庫,並且它會失敗。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM