orluna

k8s 如何每次拉取最新镜像

  •  
  •   orluna · Dec 17, 2022 · 6025 views
    This topic created in 1416 days ago, the information mentioned may be changed or developed.

    CICD 工作流如何保证 kubectl apply -f deploymeny.yaml 每次都是最新的 docker 镜像

    #deploymeny.yaml
    imagePullPolicy: Always
    image: xxx/xxxx/xxx:latest
    

    还是说有必要部署helm动态渲染deploymeny.yaml

    22 replies  •  2022-12-19 10:19:57 +08:00
    dingyaguang117
    dingyaguang117
    Dec 17, 2022
    1
    得手动指定 tag 吧,你这个 latest 表意不明确呀?还有如何回滚呢
    orluna
    orluna
    OP
    Dec 17, 2022
    2
    家用服务,是把 deploymeny.yaml 存在私有 git 上,所以 cicd 不会去修改 git 上的 deploymeny.yaml ,期望是每次拉最新的 images 。实际貌似都是 uncahnged ,只能用 helm 指定 tag 了吗
    SweetEriri
    SweetEriri
    Dec 17, 2022
    3
    可以 cicd 构建出镜像后 rollout deploy 滚动更新来拉取最新镜像
    ccde8259
    ccde8259
    Dec 17, 2022 via iPhone
    4
    @orluna 先 scale 0 杀 pod 再 scale 1 起 pod
    orluna
    orluna
    OP
    Dec 17, 2022
    5
    @ccde8259 清测有效 除了不太优雅~
    leeeee9
    leeeee9
    Dec 17, 2022
    6
    jenkins 里面加一条删 pod 的不就完事
    hubqin
    hubqin
    Dec 17, 2022
    7
    每次打镜像用新的 tag 并修改 yaml 里面的镜像为新的 tag
    chronos
    chronos
    Dec 17, 2022
    8
    使用 git commit hash 做为 tag ,每次 ci/cd 的时候用 yq 修改镜像的 tag ,再 apply 。或着使用 @sha256:, 如: image: gcr.io/google-containers/echoserver@sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229
    chronos
    chronos
    Dec 17, 2022
    9
    还有不优雅一点的方式,直接用 label 过滤删除对应的 pod ,然后 deployment 会重新将 pod 拉起来,imagePullPolicy: Always 就会拉新的镜像。

    kubectl delete pod -l app=labelvalue
    xuegy
    xuegy
    Dec 17, 2022 via iPhone
    10
    @ccde8259 TrueNAS Scale 的杀鸡用牛刀法
    zxzflower
    zxzflower
    Dec 17, 2022
    11
    如果 yaml 没有其他更新 至单纯更新镜像 直接`set`就好了 没必要`apply -f`
    ```
    kubectl set image deployment/nginx busybox=busybox nginx=nginx:1.9.1
    ```
    如果 yaml 有其他更新, 建议还是用`helm` or `kubectl kustomize`吧 或者你不嫌麻烦就脚本更新这个 yaml push 给代码仓库 在下一步拉去 apply 吧.

    实际上不建议用 latest 来作为镜像配置.
    - 你不知道生产上的是哪个版本
    - 不利于回滚操作
    xabcstack
    xabcstack
    Dec 17, 2022
    12
    这个模版,可以解答问题

    https://filelist.cn/disk/0/JAR-DEPLOYMENT.yml
    moonheart
    moonheart
    Dec 17, 2022
    13
    简单,给 podTemplate 加个 annotation deployedAt=xxx ,每次更新版本都改一次,保证 deployment 会重新滚动
    Shawee
    Shawee
    Dec 18, 2022
    14
    我使用的 argo 和 helm helm 仓库有提交 argo 自动更新
    Nnq
    Nnq
    Dec 18, 2022
    15
    使用详细版本号 或者删除当前所有 deploy 来重新拉去镜像
    ktqFDx9m2Bvfq3y4
    ktqFDx9m2Bvfq3y4
    Dec 18, 2022 via iPhone
    16
    @zxzflower
    把镜像放在 ci/cd 里就行了。我就是这么干的,每次 build 完后保留 image ,发布时上传给 tag ,deployment 设置总是拉取 image 。回滚就是 release 之前的 build 结果(会打 tag 重新 push )。
    ktqFDx9m2Bvfq3y4
    ktqFDx9m2Bvfq3y4
    Dec 18, 2022
    17
    打开电脑单独看了一下 CICD ,其中在 Deployment 配置是:
    image: your-app:latest
    imagePullPolicy: Always

    然后 CICD 中 Build 完生成 Image ,使用 docker save 将 Image 保存起来而不 Push

    Release 时再将当时保存的 Image 打 Tag ,再 Push 上去,使用下面指令触发部署:
    restart deployment/your-app
    xcai
    xcai
    Dec 18, 2022
    18
    如果考虑 openshift 的话,这种功能是开箱即用的。
    blackwhites
    blackwhites
    Dec 18, 2022
    19
    在 CICD 工作流中,可以通过以下步骤来保证 kubectl apply -f deployment.yaml 每次都使用最新的 Docker 镜像:

    在构建 Docker 镜像时,使用最新的代码。在构建镜像之前,可以通过拉取最新的代码或检出特定的代码分支来确保使用最新的代码。

    在部署应用时,使用 imagePullPolicy: Always 。这会告诉 Kubernetes 在每次部署应用时总是从 Docker Registry 中拉取最新的镜像。

    在构建 Docker 镜像时使用带有版本号的标签,例如 xxx/xxxx/xxx:1.0 。这样,每次构建镜像时都会生成一个新的版本号,从而确保使用最新的镜像。

    在构建镜像时使用自动化工具,例如 Jenkins 或 GitLab CI 。这些工具可以自动完成构建、测试和部署应用的过程,并确保每次都使用最新的代码和镜像
    tudou1514
    tudou1514
    Dec 19, 2022
    20
    如果 tag 不变的话,设置 imagePullPolicy: Always 就行了
    ModerRAS
    ModerRAS
    Dec 19, 2022
    21
    @blackwhites 看着好像 ChatGPT 会说出来的话
    YzSama
    YzSama
    Dec 19, 2022
    22
    latest tag 不变的话,设置 镜像策略 always 。

    然后,走 rollout restart deploy xxx 了。

    否则,kubectl 客户端 diff 永远都是 unchanged 。

    可以通过 shell 判断,如果是 unchanged 的话,则走 rollout restart
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1268 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 51ms · UTC 21:42 · PVG 05:42 · LAX 13:42 · JFK 16:42
    ♥ Do have faith in what you're doing.