Kubernetes部署有时可以工作,有时却不行

时间:2019-12-26 01:28:57

标签: kubernetes google-cloud-platform devops

我是Kubernetes的新手,我正在使用Google Container Registry存储我的私有映像,我创建了一个名为grc-puller-key的秘密密钥

当我使用命令时: kubectl apply -f deployment.yaml 我遇到了意外的行为。有时pod成功旋转,有时却没有成功。当我失败时,我描述日志并看到我没有拉图像的凭据,但是有时它确实起作用。

这是我的部署地点

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 的机密。我提供的屏幕截图如下:

https://ibb.co/ZKqLMDK

2 个答案:

答案 0 :(得分:1)

感谢您的帮助,事实证明,当我将服务帐户权限更改为StorageAdmin时,一切正常。但是我不知道为什么会导致这种行为。如果未获得我的容器注册表的授权,则应该一直失败。对?但实际上,它没有。

答案 1 :(得分:0)

我认为 Kubernetes官方文档中的一件事可以在某种程度上解释这种情况。我的猜测是,当部署成功时,它可能已经使用了所需映像的本地副本。看看this部分:

在您的部署中,没有任何明确定义的imagePullPolicy,并且 kubernetes 使用默认值:

  

默认的拉取策略为IfNotPresent,这会导致Kubelet   如果图像已经存在,则跳过该图像。如果你想   始终用力拉,您可以执行以下操作之一:

     
      
  • 将容器的imagePullPolicy设置为Always
  •   
  • 省略imagePullPolicy并使用:latest作为要使用的图像标签。
  •   
  • 省略imagePullPolicy和要使用的图像标签。
  •   
  • 启用AlwaysPullImages准入控制器。
  •   
     

请注意,您应该避免使用:latest标记,请参阅有关的最佳做法   配置以获取更多信息。

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

kubectl describe pods your-pod

如果您没有看到事件pulling image "image-name",则表示此pod已创建,无需合并映像,因此使用了本地映像。在无法拉出图像的情况下,您的Pod将进入CrashLoopBackOff状态,并且您会看到事件描述了到底发生了什么。

这实际上是我目前脑海中唯一可以解释这种行为的东西。您可以通过设置以上任意一项来轻松测试它,并检查模式是否发生更改,即如果访问映像注册表存在问题,则部署是否会持续失败。

相关问题