🦇

plutoをGitLab CIに組み込んで非推奨のk8s apiVersionを検出する

2023/06/12に公開

はじめに

k8sのバージョンが上がるとAPIが再編成されたりアップグレードされたりします。
新しいAPIが出ると古いAPIは非推奨になり最終的には削除されます。
なので、k8sのバージョンアップ時はDeprecated API Migration Guideなどを見て非推奨のapiVersionが使われていないか確認して時には修正する必要があります。

https://kubernetes.io/docs/reference/using-api/deprecation-guide/


CronJob の batch/v1beta1 -> batch/v1

pluto

plutoはFairwinds Ops, Inc のOSSで非推奨のKubernetes apiVersionを見つけてくれるツールです
https://github.com/FairwindsOps/pluto

GitLab CI

helmfileを使っているならhelmfile templateをplutoに標準入力として渡せば良いだけです。
--target-versionsにはアップグレード先のk8sのversionを指定します。

pluto:
  image: quay.io/fairwinds/pluto:master
  variables:
    K8S_VERSION: "1.25.0"
  when: manual
  before_script:
    - wget -q https://get.helm.sh/helm-v3.11.2-linux-amd64.tar.gz -O - | tar xz
    - export PATH="${PATH}:$(realpath linux-amd64)"
    - wget -q https://github.com/helmfile/helmfile/releases/download/v0.152.0/helmfile_0.152.0_linux_amd64.tar.gz -O - | tar xz
  script:
    - find . -name helmfile.yaml | xargs -i ./helmfile -f {} template | /pluto detect --target-versions k8s=v${K8S_VERSION} -
NAME     KIND      VERSION         REPLACEMENT   REMOVED   DEPRECATED
sample   CronJob   batch/v1beta1   batch/v1      true      true

plutoは当然ですがapiVersionしか眼中にないので、apiVersionだけの形式をsedで作って流しても検査してくれます。

cat chart/templates/*yaml | grep apiVersion | sed '1,$i ---' | /pluto detect --target-versions k8s=v${K8S_VERSION} -

Discussion