Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
kubernetes imagePullPolicy:始终不会自动提取图像_Kubernetes_Google Cloud Platform - Fatal编程技术网

kubernetes imagePullPolicy:始终不会自动提取图像

kubernetes imagePullPolicy:始终不会自动提取图像,kubernetes,google-cloud-platform,Kubernetes,Google Cloud Platform,我希望每次我创建一个带有标签latestKubernetes的新图像时,Kubernetes都会自动提取新图像。我在pod规范中添加了imagePullPolicy:Always,但它不会用新图像更新旧图像 apiVersion: apps/v1 kind: Deployment metadata: name: node namespace: dev labels: app: my-node-app spec: replicas: 2 selector: ma

我希望每次我创建一个带有标签
latest
Kubernetes的新图像时,Kubernetes都会自动提取新图像。我在pod规范中添加了
imagePullPolicy:Always
,但它不会用新图像更新旧图像

apiVersion: apps/v1
kind: Deployment
metadata:
  name: node
  namespace: dev
  labels:
    app: my-node-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: my-node-app
  template:
    metadata:
      labels:
        app: my-node-app
    spec:
      hostNetwork: true
      securityContext:
        fsGroup: 1000
      containers:
      - name: node
        imagePullPolicy: Always
        image: gcr.io/my-repo/my-node-app:latest
        ports:
        - containerPort: 3000
        envFrom:
          - configMapRef:
              name: my-configmap
        resources:
          requests:
            cpu: 100m
            memory: 128Mi
          limits:
            cpu: 2
            memory: 8Gi
      restartPolicy: Always

imagePullPolicy
只有在创建或重新启动POD时,Kubernetes才会考虑。POD运行时不考虑它,这意味着它不会在POD运行时随时检查图像更新

即使具有相同映像的另一个POD被调度到同一Kubernetes节点上,已经运行的POD也不会受到影响,即使Kubernetes执行拉取操作,然后将新映像用于新POD

如果您想要所需的功能,则必须实现自己的解决方案。您可以实现一个侧车,定期检查Docker存储库中给定标记的更改。当它检测到这样的变化时,它可能会触发POD的重新启动,从而强制重新提取图像


POD的重启可以通过简单地退出侧车或利用侧车内的Kubernetes API来触发。但是,后一种解决方案变得更加复杂,因为您还需要服务帐户和RBAC规则来在sidecar容器中获得适当的权限。它还涉及安全问题,您必须授予整个POD升级权限。

设置
imagePullPolicy:Always
并不意味着图像将在没有任何触发的情况下自动提取

我建议使用带有标签的图像。由于您使用的是
部署
,因此您可以执行pod的滚动更新,这将拉动新图像,并以优雅的方式在所有副本pod上逐个展开更改,而不会导致任何停机

假设最初图像是
gcr.io/my repo/my node app:v1
,您希望将其更新为
v2

kubectl set image deployment/node nginx=gcr.io/my-repo/my-node-app:v2 --record
检查卷展栏历史记录

kubectl rollout history deployment.v1.apps/node
如果出现任何问题,请回滚到以前的版本

kubectl rollout undo deployment.v1.apps/node

另外,如果您想更高级,您可以使用GitOps,它支持将图像的新版本推送到容器注册表。

Kubernetes将仅在创建Pod时提取图像,这意味着它不会在Pod处于运行状态时检查图像更新。
我建议将其用于图像标记,并使用CI/CD管道来构建、标记并推送到您的注册表。然后使用CD工具,如在管道的最后一步重新创建您的POD。

我建议您考虑使用构建、标记和推送到注册表图像的管道。然后,您可以在管道的下一步中重新创建吊舱。我正在尝试使用此命令:
kubectl修补程序部署节点-p{“spec\”:{“template\”:{“metadata\”:{“labels\”:{“date\”:\“
date+'%s'
\“}}}}”
但我有一个错误
部署“我的节点应用程序”无效:spec.template.labels:无效值:
date+'%s'
:有效标签必须是空字符串或由字母数字字符“-”、“uu”或“.”组成,并且必须以字母数字字符开头和结尾(例如“MyValue”或“my_uValue”或“12345”,用于验证的正则表达式是“([a-Za-z0-9][a-Za-z0-9.]*)?[a-Za-z0-9])。”)
我不明白我遗漏了什么