就我而言,我安装了一个本地 minikube,以便在本地测试我的图表和代码。
我尝试了此处和其他 stackoverflow 帖子中建议的大多数解决方案,以下是我发现的选项:
- 将映像从本地 docker 注册表移动到 minikube 的注册表,并将图表中的
pullPolicy 设置为 Never 或 IfNotPresent。
docker build . -t my-docker-image:v1
minikube image load my-docker-image:v1
$ minikube image list
rscoreacr.azurecr.io/decibel:0.0.1
k8s.gcr.io/pause:3.5
k8s.gcr.io/kube-scheduler:v1.22.3
k8s.gcr.io/kube-proxy:v1.22.3
...
##Now edit your chart and change the `pullPolicy`.
helm install my_name chart/ ## should work.
我认为此选项的主要缺点是您需要更改图表并记住将值更改为之前的值。
- 创建一个包含 acr 凭据的密钥。
首先通过以下方式登录 acr:
az acr login --name my-registry.azurecr.io --expose-token
命令的输出应该显示一个用户和一个访问令牌。
现在您应该创建一个 kubernetes 机密(确保您位于正确的 kubernetes 上下文 - minikube):
kubectl create secret docker-registry my-azure-secret --docker-server=my-registry.azurecr.io --docker-username=<my-user> --docker-password=<access-token>
现在,如果您的图表使用默认服务帐户(当您创建 pod 时,如果您未指定服务帐户,则会自动为其分配同一命名空间中的默认服务帐户),您应该通过以下命令:
kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "my-azure-secret"}]}'
我不喜欢这个选项,因为如果我为每个 helm 图表都有不同的秘密提供者,我需要用 imagePullSecrets 覆盖 yaml。
- 另一种选择是使用 minikube 的 registry creds
就我个人而言,我采用的解决方案是第一个经过调整的解决方案,而不是在 yaml 本身中添加 pullPolicy,而是在安装图表时覆盖它:
$ helm install --set image.pullPolicy=IfNotPresent <name> charts/