首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Kubernetes中获取"containers with unready:[]“错误

Kubernetes中获取"containers with unready:[]“错误
EN

Stack Overflow用户
提问于 2019-02-08 01:39:46
回答 2查看 18.8K关注 0票数 0

我正在尝试在AKS中部署Kubernetes Pod (我是Kubernetes的新手,所以在这个阶段,我只想创建一个容器,部署到Kubernetes并连接到它)。

我的Yaml文件如下:

代码语言:javascript
复制
apiVersion: v1
kind: Pod
spec: 
  containers:
    - name: dockertest20190205080020
      image: dockertest20190205080020.azurecr.io    
      ports:
      - containerPort: 443
metadata: 
  name: my-test

我已经在Azure Container Registry中创建了镜像,并根据CLI成功地将其部署到Kubernetes。

在部署之后,我使用了以下命令:

代码语言:javascript
复制
kubectl get service

它告诉我没有外部IP可以连接。然后我试着:

代码语言:javascript
复制
kubectl describe pod my-test

这给出了以下错误:

代码语言:javascript
复制
 Events:
   Warning  Failed   4m (x2221 over 8h)  kubelet, aks-nodepool1-27401563-2  Error: ImagePullBackOff
   Normal   BackOff  0s (x2242 over 8h)  kubelet, aks-nodepool1-27401563-2  Back-off pulling image "dockertest20190205080020.azurecr.io"

然后,我尝试编辑展开:

代码语言:javascript
复制
kubectl edit pods my-test

哪个游戏让我犯错:

代码语言:javascript
复制
message: 'containers with unready status: [dockertest20190205080020]'

我一点也不确定我的下一个诊断步骤是什么。我得到的印象是容器或容器注册表有问题,但我不确定如何确定可能的问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-08 01:51:51

这里发生了什么(最有可能的)-你的AKS没有权限从你的ACR中拉出图像(这是默认行为)。您需要授予这些权限(link):

代码语言:javascript
复制
#!/bin/bash

AKS_RESOURCE_GROUP=myAKSResourceGroup
AKS_CLUSTER_NAME=myAKSCluster
ACR_RESOURCE_GROUP=myACRResourceGroup
ACR_NAME=myACRRegistry

# Get the id of the service principal configured for AKS
CLIENT_ID=$(az aks show --resource-group $AKS_RESOURCE_GROUP --name $AKS_CLUSTER_NAME --query "servicePrincipalProfile.clientId" --output tsv)

# Get the ACR registry resource id
ACR_ID=$(az acr show --name $ACR_NAME --resource-group $ACR_RESOURCE_GROUP --query "id" --output tsv)

# Create role assignment
az role assignment create --assignee $CLIENT_ID --role acrpull --scope $ACR_ID

另一种选择是只使用docker登录密码(该文章也提到了这一点)。

ACR格式的示例图像:

图像名称将为

Clrtacr.azurecr.io/dns:标签(如果是最新的,则不带标签)

票数 1
EN

Stack Overflow用户

发布于 2019-02-13 11:11:17

我不确定您是否知道您的yaml文件中有错误,或者它只是显示了您想要的安全性。但我会在这里向你展示:

代码语言:javascript
复制
apiVersion: v1
kind: Pod
spec: 
  containers:
    - name: dockertest20190205080020
      image: dockertest20190205080020.azurecr.io/image_name_and_version   
      ports:
      - containerPort: 443
metadata: 
  name: my-test

此外,正如您得到的错误所示,您没有从ACR中提取图像的权限。

在我这方面,我最好使用一个秘密来从ACR中提取所有图像。您可以创建一个服务主体来实现它。步骤如下所示:

代码语言:javascript
复制
#!/bin/bash

ACR_NAME=myacrinstance
SERVICE_PRINCIPAL_NAME=acr-service-principal

# Populate the ACR login server and resource id.
ACR_LOGIN_SERVER=$(az acr show --name $ACR_NAME --query loginServer --output tsv)
ACR_REGISTRY_ID=$(az acr show --name $ACR_NAME --query id --output tsv)

# Create acrpull role assignment with a scope of the ACR resource.
SP_PASSWD=$(az ad sp create-for-rbac --name $SERVICE_PRINCIPAL_NAME --role acrpull --scopes $ACR_REGISTRY_ID --query password --output tsv)

# Get the service principal client id.
CLIENT_ID=$(az ad sp show --id http://$SERVICE_PRINCIPAL_NAME --query appId --output tsv)

# Output used when creating Kubernetes secret.
echo "Service principal ID: $CLIENT_ID"
echo "Service principal password: $SP_PASSWD"

# Create the secret 
kubectl create secret docker-registry acr-auth --docker-server <acr-login-server> --docker-username <service-principal-ID> --docker-password <service-principal-password> 

然后,您可以像这样更改yaml文件:

代码语言:javascript
复制
apiVersion: v1
kind: Pod
spec: 
  containers:
    - name: dockertest20190205080020
      image: dockertest20190205080020.azurecr.io/image_name_and_version   
      ports:
      - containerPort: 443
  imagePullSecrets:
  - name: acr-auth
metadata: 
  name: my-test
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54579188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档