AKS 无法从 GitHub 私有注册表中提取镜像,但 Minikube 可以提取相同的镜像
AKS cannot pull image from GitHub Private registry but Minikube could pull the same one
我正在尝试构建应用程序,但是当我尝试创建部署时,容器在创建阶段失败并出现错误:
"docker.pkg.github.com/XXXXX/XXXXXX/XXXXXXXXXXXX:latest": rpc error: code = NotFound desc = failed to pull and unpack image "docker.pkg.github.com/XXXXX/XXXXXXX/XXXXXXXXXX:latest": failed to copy: httpReaderSeeker: failed open: content at https://docker.pkg.github.com/v2/XXXXXXX/XXXXXX/XXXXXXX/manifests/sha........ not found: not found
我完全按照本教程进行操作:https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
我在云端shell和我的本地机器上都尝试了 kubectl,同样的问题:
然后我在我的本地机器上尝试了 minikube,并使用 YAML 进行部署,并且部署创建没有任何问题。此外,docker pull
也在工作。我想那应该不是 github 凭据问题。
我真的想不通 kubernetes 在 azure 和 minikube 上表现如此不同的原因。非常感谢任何有关如何排查和解决此问题的帮助。
仅供参考,我使用下面的 shell cmd 在 Azure 上创建资源,想知道我是否遗漏了任何步骤:
az group create \
--name $RESOURCE_GROUP \
--location $REGION_NAME
az network vnet create \
--resource-group $RESOURCE_GROUP \
--location $REGION_NAME \
--name $VNET_NAME \
--address-prefixes 10.0.0.0/8 \
--subnet-name $SUBNET_NAME \
--subnet-prefixes 10.240.0.0/16
SUBNET_ID=$(az network vnet subnet show \
--resource-group $RESOURCE_GROUP \
--vnet-name $VNET_NAME \
--name $SUBNET_NAME \
--query id -o tsv)
VERSION=$(az aks get-versions \
--location $REGION_NAME \
--query 'orchestrators[?!isPreview] | [-1].orchestratorVersion' \
--output tsv)
az aks create \
--resource-group $RESOURCE_GROUP \
--name $AKS_CLUSTER_NAME \
--vm-set-type VirtualMachineScaleSets \
--node-count 1 \
--load-balancer-sku standard \
--location $REGION_NAME \
--kubernetes-version $VERSION \
--network-plugin azure \
--vnet-subnet-id $SUBNET_ID \
--service-cidr 10.2.0.0/24 \
--dns-service-ip 10.2.0.10 \
--docker-bridge-address 172.17.0.1/16 \
--generate-ssh-keys
echo 'xxxxxxx' | docker login https://docker.pkg.github.com -u xxxxxxx --password-stdin
失败是因为最新版本的 AKS(1.20 或更高版本)已弃用 docker 作为容器运行时(改为使用 ContainerD)。我切换到旧版本1.18后,问题解决了。
我正在尝试构建应用程序,但是当我尝试创建部署时,容器在创建阶段失败并出现错误:
"docker.pkg.github.com/XXXXX/XXXXXX/XXXXXXXXXXXX:latest": rpc error: code = NotFound desc = failed to pull and unpack image "docker.pkg.github.com/XXXXX/XXXXXXX/XXXXXXXXXX:latest": failed to copy: httpReaderSeeker: failed open: content at https://docker.pkg.github.com/v2/XXXXXXX/XXXXXX/XXXXXXX/manifests/sha........ not found: not found
我完全按照本教程进行操作:https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
我在云端shell和我的本地机器上都尝试了 kubectl,同样的问题:
然后我在我的本地机器上尝试了 minikube,并使用 YAML 进行部署,并且部署创建没有任何问题。此外,docker pull
也在工作。我想那应该不是 github 凭据问题。
我真的想不通 kubernetes 在 azure 和 minikube 上表现如此不同的原因。非常感谢任何有关如何排查和解决此问题的帮助。
仅供参考,我使用下面的 shell cmd 在 Azure 上创建资源,想知道我是否遗漏了任何步骤:
az group create \
--name $RESOURCE_GROUP \
--location $REGION_NAME
az network vnet create \
--resource-group $RESOURCE_GROUP \
--location $REGION_NAME \
--name $VNET_NAME \
--address-prefixes 10.0.0.0/8 \
--subnet-name $SUBNET_NAME \
--subnet-prefixes 10.240.0.0/16
SUBNET_ID=$(az network vnet subnet show \
--resource-group $RESOURCE_GROUP \
--vnet-name $VNET_NAME \
--name $SUBNET_NAME \
--query id -o tsv)
VERSION=$(az aks get-versions \
--location $REGION_NAME \
--query 'orchestrators[?!isPreview] | [-1].orchestratorVersion' \
--output tsv)
az aks create \
--resource-group $RESOURCE_GROUP \
--name $AKS_CLUSTER_NAME \
--vm-set-type VirtualMachineScaleSets \
--node-count 1 \
--load-balancer-sku standard \
--location $REGION_NAME \
--kubernetes-version $VERSION \
--network-plugin azure \
--vnet-subnet-id $SUBNET_ID \
--service-cidr 10.2.0.0/24 \
--dns-service-ip 10.2.0.10 \
--docker-bridge-address 172.17.0.1/16 \
--generate-ssh-keys
echo 'xxxxxxx' | docker login https://docker.pkg.github.com -u xxxxxxx --password-stdin
失败是因为最新版本的 AKS(1.20 或更高版本)已弃用 docker 作为容器运行时(改为使用 ContainerD)。我切换到旧版本1.18后,问题解决了。