luk*_*isp 15 kubernetes minikube
我有kubernetes(minikube)的问题,并从docker上的本地图像存储库中提取图像.Docker存储库已创建:
docker run --entrypoint htpasswd registry:2 -Bbn zordon examplePassword > /mnt/LINUX/auth/htpasswd
docker run -d \
-p 5000:5000 \
--restart=always \
--name registry \
-v /mnt/LINUX/dockerreg:/var/lib/registry \
-v /mnt/LINUX/auth:/auth \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
registry:2
Run Code Online (Sandbox Code Playgroud)
然后我想用图像创建简单的pod,并成功上传到本地存储库:
curl localhost:5000/v2/_catalog
{"repositories":["car/configuration"]}
Run Code Online (Sandbox Code Playgroud)
我还在minikube集群上创建了秘密:
kubectl create secret docker-registry docregkey --docker-server=localhost:5000 --docker-username=zordon --docker-password=examplePassword --docker-email=test@dock.mail
Run Code Online (Sandbox Code Playgroud)
并定义简单的Pod:
apiVersion: v1
kind: Pod
metadata:
name: private-reg
spec:
containers:
- name: private-reg-container
image: car/configuration:latest
imagePullPolicy: Always
restartPolicy: Always
imagePullSecrets:
- name: docregkey
Run Code Online (Sandbox Code Playgroud)
不幸的是,我变得不动:
无法提取图像"car/configuration:latest":rpc错误:代码=未知desc =来自守护程序的错误响应:对于汽车/配置拉取访问权限,存储库不存在或者可能需要"docker login"
我怎么能解决这个问题?
Oli*_*ver 20
为了使 minikube 从您自己的本地 docker 注册表中拉取,该标签会影响拉取策略。根据图片文档,IfNotPresent默认情况下拉取策略是除非
:latest用作要使用的图像的标签在这些情况下,拉取策略将有效地默认为Always,这将尝试从 docker hub 拉取。这将导致 minikube 无法获取没有标签或“最新”标签的本地图像。
这个故事的寓意是,不要依赖默认设置,因为它太混乱了:)
所以总是明确说明拉取策略:
IfNotPresent或Never本地镜像Always针对那些使用“最新”或“稳定”等标签的公共图像(因为标签点会随着时间的推移而改变),以及IfNotPresent始终指向同一图像的标签(以避免获取超过必要的)这意味着,如果您避免使用诸如 latest 和 stable 等标签,则只需遵循一条规则:
imagePullPolicy将规范中的(或在运行的情况下在命令行上)显式设置为IfNotPresent,因为这将始终首先在本地查找,如果在本地找不到,则转到公共注册表,无论是否有效,这都将起作用您正在部署到 minikube 或云中。Ogn*_*rov 12
我遇到的同样问题是,当我使用本地 Docker 构建映像时,该映像不会添加到 minikube 映像列表中。
解决方法是手动添加图像:
minikube image load image-name:tag
Run Code Online (Sandbox Code Playgroud)
Onu*_*aşı 11
因为 Minikube 是 VM 而不是您的本地主机。你试试这个代码 eval $(minikube docker-env)
https://kubernetes.io/docs/getting-started-guides/minikube/
eval $(minikube docker-env)只是这个终端有效。如果关闭终端再次打开终端并写入eval $(minikube docker-env)
eval $(minikube docker-env) 此代码在 Minikube 中构建图像
小智 9
问题在于图像拉取策略 - 你已经将thist设置为Always(默认设置),并且我和docker deamon总是试图从外部docker注册表中提取图像 - 而你想要使用本地的
--image-pull-policy=Never在创建部署时尝试添加
使用本地创建的图像的好教程在这里(它帮助了我):
https://kubernetes.io/docs/tutorials/hello-minikube/#create-a-docker-container-image
我想要一个单行解决方案在我的终端中执行。我尝试的所有其他方法都过于复杂,无法使用 minikube 验证 ecr。
这是我每天运行的 aws ecr login 命令,因为令牌过期。以下示例适用于具有 AWS ECR 的 Debian 9。
贝壳
kubectl create secret docker-registry aws-ecr-credentials \
--docker-server=$ECR_REGISTRY \
--docker-username=AWS \
--docker-password=$(aws ecr get-login | awk '{print $6}') \
--docker-email=$IAM_EMAIL \
--namespace=$KUBE_NAMESPACE
Run Code Online (Sandbox Code Playgroud)
模板.yml
spec:
imagePullSecrets:
- name: aws-ecr-credentials
Run Code Online (Sandbox Code Playgroud)
小智 5
问题与您在POD yaml文件中提到的图像名称有关。
image: car/configuration:latest
Run Code Online (Sandbox Code Playgroud)
这将尝试从全局注册表而不是本地注册表中提取。更改映像名称以也包括存储库。
image: localhost:5000/car/configuration:latest
Run Code Online (Sandbox Code Playgroud)
如果您的注册表不安全,请确保在docker daemon配置中包括了不安全的注册表。
当您在 Docker for Desktop 中运行 Kubernetes 时,您的应用程序将在 Docker 和 Kubernetes 之间共享相同的映像注册表。列出所有图像:
docker images --all
Run Code Online (Sandbox Code Playgroud)
选择它们并使用更改后的属性运行它--image-pull-policy=Never。例如:
kubectl run ContainerName --image=myimage/server --port=8080 --image-pull-policy=Never
Run Code Online (Sandbox Code Playgroud)
默认情况下,kubelet 将尝试从指定的注册表中提取每个映像。但是,如果imagePullPolicy容器的属性设置为IfNotPresent或Never,则使用本地映像(分别优先或排他)。关联
这意味着 Kubernetes 从本地注册表而不是远程云中提取镜像。
| 归档时间: |
|
| 查看次数: |
20562 次 |
| 最近记录: |