Kubernetes部署有时有效,有时无效';T

Kubernetes部署有时有效,有时无效';T,kubernetes,google-cloud-platform,devops,Kubernetes,Google Cloud Platform,Devops,我是Kubernetes的新手,我使用Google容器注册表来存储我的私有图像,我创建了一个名为grc puller key的密钥 当我使用命令时: kubectl应用-f部署.yaml 我遇到了意想不到的行为。有时吊舱能成功地旋转起来,有时那些不能。当我失败时,我描述了日志,并看到我没有凭证来提取映像,但有时它确实起作用 这是我的部署 apiVersion: apps/v1 kind: Deployment metadata: name: portfolio labels: a

我是Kubernetes的新手,我使用Google容器注册表来存储我的私有图像,我创建了一个名为grc puller key的密钥

当我使用命令时:
kubectl应用-f部署.yaml
我遇到了意想不到的行为。有时吊舱能成功地旋转起来,有时那些不能。当我失败时,我描述了日志,并看到我没有凭证来提取映像,但有时它确实起作用

这是我的部署

apiVersion: apps/v1
kind: Deployment
metadata:
  name: portfolio
  labels:
    app: portfolio
spec:
  selector:
    matchLabels:
      app: portfolio
  template:
    metadata:
      labels:
        app: portfolio
    spec:
      containers:
      - name: portfolio
        image: gcr.io/phuong-devops/portfolio:v1
        ports: 
        - containerPort: 3000 
          protocol: TCP
      imagePullSecrets:
      - name: grc-puller-key
我确信名为grc puller key的秘密已创建。我提供的屏幕截图如下:


感谢您的帮助,当我将服务帐户权限更改为StorageAdmin时,一切正常。但我不知道为什么会导致这样的行为。如果我没有被授权访问我的容器注册表,它应该一直失败。对吗?但事实并非如此。

我认为Kubernetes官方文件中的一点可以在一定程度上解释这种情况。我的猜测是,当部署工作时,它可以使用所需映像的本地副本。请看以下部分:

在您的部署中,没有明确定义任何
imagePullPolicy
,而kubernetes使用默认策略:

默认的拉动策略是
IfNotPresent
,这会导致Kubelet 如果图像已经存在,则跳过拉取。如果你愿意 始终强制拉动,您可以执行以下操作之一:

  • 将容器的
    imagePullPolicy
    设置为始终
    
    
  • 省略
    imagePullPolicy
    并使用:latest作为要使用的图像的标记
  • 省略要使用的图像的
    imagePullPolicy
    和标记
  • 启用
    AlwaysPullImages
    准入控制器
请注意,您应该避免使用
:latest
标记,有关详细信息,请参阅最佳实践 有关详细信息,请参阅配置

最有可能的是,当您的部署工作时,它使用了本地映像。通过运行以下命令,您可以在
Pod
的事件中轻松检查它:

kubectl describe pods your-pod
如果您没有看到事件
拉取图像“image name”
,则表示此pod是在不需要共享图像的情况下创建的,因此它使用了本地图像。在无法提取图像的情况下,您的
Pod
将进入
CrashLoopBackOff
状态,您将看到描述确切发生情况的事件


这实际上是目前我脑海中唯一能够解释这种行为的东西。您可以通过设置上述任何一项轻松地对其进行测试,并检查模式是否发生变化,即如果访问映像注册表时出现问题,部署是否会持续失败。

在拉取映像时是否可以共享错误日志?它告诉我,我没有授权我的集装箱注册<代码>未能拉取映像“gcr.io/phuong-devops/portfolio:v1”:rpc错误:code=Unknown desc=来自守护程序的错误响应:gcr.io/phuong-devops/portfolio的拉取访问被拒绝,存储库不存在或可能需要“docker login”
是否可以运行
kubectl descripe pod
?在下次尝试中,当您稍等一段时间,并且没有立即删除部署时,映像不是成功拉取了吗?理论上是的,如果您未获得授权,错误应该是永久性的。您可以尝试比较这两个pod中的事件,即工作pod和失败pod。它应该说明引擎盖下发生了什么。