Pluto を使うと Kubernetes マニフェストの apiVersion
に対して deprecated(非推奨)と removed(削除)を検出できる.警告自体は Deprecated API Migration Guide | Kubernetes を見れば確認できるし,kubectl apply
コマンドを実行したときにも表示されるけど,Pluto は実行前に確認できて便利!パイプラインに組み込むのも良し!
セットアップ
Pluto CLI は macOS なら Homebrew を使えば簡単にセットアップできる.今回は現時点で最新となる Pluto v5.10.2 を前提とする.
$ brew install FairwindsOps/tap/pluto $ pluto version Version:5.10.2 Commit:0070fa703641a58ec339a9675aa214ba080ad5d3 $ pluto help A tool to detect Kubernetes apiVersions Usage: pluto [flags] pluto [command] Available Commands: completion Generate the autocompletion script for the specified shell detect Checks a single file or stdin for deprecated apiVersions. detect-files detect-files detect-helm detect-helm help Help about any command list-versions Outputs a JSON object of the versions that Pluto knows about. version Prints the current version of the tool. Flags: -f, --additional-versions string Additional deprecated versions file to add to the list. Cannot contain any existing versions --columns strings A list of columns to print. Mandatory when using --output custom, optional with --output markdown --components strings A list of components to run checks for. If nil, will check for all found in versions. -h, --help help for pluto --ignore-deprecations Ignore the default behavior to exit 2 if deprecated apiVersions are found. --ignore-removals Ignore the default behavior to exit 3 if removed apiVersions are found. -r, --only-show-removed Only display the apiVersions that have been removed in the target version. -o, --output string The output format to use. (normal|wide|custom|json|yaml|markdown|csv) (default "normal") -t, --target-versions stringToString A map of targetVersions to use. This flag supersedes all defaults in version files. (default []) -v, --v Level number for the log level verbosity Use "pluto [command] --help" for more information about a command.
Pluto を実行する
さっそく Pluto CLI を試す.個人的によく使っている Kubernetes マニフェストの一部を抜粋して pluto detect-files
コマンドを実行してみた.すると CronJob
と PodDisruptionBudget
で deprecated(非推奨)が検出された.なお,Pluto はデフォルトで「Kubernetes v1.22」を検出対象にしている.
$ pluto detect-files -d . NAME KIND VERSION REPLACEMENT REMOVED DEPRECATED my-cronjob CronJob batch/v1beta1 batch/v1 false true my-pdb PodDisruptionBudget policy/v1beta1 policy/v1 false true
kubectl
コマンドのように -o
オプションも使える.-o wide
オプションだと該当するバージョンも表示できて便利!他にも -o json
や -o yaml
も使える.
$ pluto detect-files -d . -o wide NAME NAMESPACE KIND VERSION REPLACEMENT DEPRECATED DEPRECATED IN REMOVED REMOVED IN my-cronjob <UNKNOWN> CronJob batch/v1beta1 batch/v1 true v1.21.0 false v1.25.0 my-pdb <UNKNOWN> PodDisruptionBudget policy/v1beta1 policy/v1 true v1.21.0 false v1.25.0
さらに --target-versions
オプションを使うと検出対象にする Kubernetes バージョンを変更できる.--target-versions k8s=v1.23.0
オプションを使うと HorizontalPodAutoscaler
でも deprecated(非推奨)が検出された.明示的に指定しておくのが良さそう.
$ pluto detect-files -d . -o wide --target-versions k8s=v1.23.0 NAME NAMESPACE KIND VERSION REPLACEMENT DEPRECATED DEPRECATED IN REMOVED REMOVED IN my-cronjob <UNKNOWN> CronJob batch/v1beta1 batch/v1 true v1.21.0 false v1.25.0 my-hpa <UNKNOWN> HorizontalPodAutoscaler autoscaling/v2beta2 autoscaling/v2 true v1.23.0 false v1.26.0 my-pdb <UNKNOWN> PodDisruptionBudget policy/v1beta1 policy/v1 true v1.21.0 false v1.25.0
Pluto を GitHub Actions に組み込む
次は Pluto を GitHub Actions に組み込む.ドキュメントに載っている YAML を使えば簡単に実行できる!
name: CI on: push: branches: - main pull_request: branches: - main jobs: pluto: name: pluto runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Download Pluto uses: FairwindsOps/pluto/github-action@master - name: Run Pluto run: pluto detect-files -d . -o wide --target-versions k8s=v1.23.0
しかし Pluto は実行時に以下のリターンコードを返す.よって,deprecated(非推奨)や removed(削除)が検出されると落ちてしまう.もし「検出はするけど CI は継続する」場合は --ignore-deprecations
オプションと --ignore-removals
オプションを併用する.そうすれば「リターンコード 0」を返せるようになる.
- リターンコード 1 : エラー
- リターンコード 2 : deprecated(非推奨)あり
- リターンコード 3 : removed(削除)あり
name: CI on: push: branches: - main pull_request: branches: - main jobs: pluto: name: pluto runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Download Pluto uses: FairwindsOps/pluto/github-action@master - name: Run Pluto run: pluto detect-files -d . -o wide --target-versions k8s=v1.23.0 --ignore-deprecations --ignore-removals
まとめ
Kubernetes マニフェストの apiVersion
に対して deprecated(非推奨)と removed(削除)を検出できる Pluto を試した.日常的に使っているマニフェストリポジトリの GitHub Actions に Pluto を設定したので,継続的に使ってみようと思う.