LoginSignup
1
1

More than 1 year has passed since last update.

plutoによるdeprecation/removalの自動検知

Last updated at Posted at 2022-01-17

Kubernetesクラスタをバージョンアップする際にマニフェストをdeprecation-guideを参照しており、適宜grepしながら確認していく作業を自動化したかったので、plutoで解決できないか試した。

以下はその備忘録。

plutoとは

このツールが生まれた背景はREADMEにも記載されているが、

  • 新たにリリースされたKubernetesの非推奨/廃止APIの使用箇所を検出することは困難。
  • api問い合わせ時にetcdに意図しない形で保持されてしまう危険性がある。(ちゃんと追えてないので間違ってたらごめんなさい)

今回やらないこと

ArgoCD + Helm Chartで管理しているため、detect-helmによるチェックは行わない。

検証

公式のInstallationに従いインストール。

$ brew install FairwindsOps/tap/pluto
$ pluto version
Version:5.1.1 Commit:188501530c46948d0062d7a3a78c730edcb79cab

以下はdetect-filesの実行例。
再帰的にディレクトリ内のマニフェストをチェックしてくれる。

pluto detect-files
NAME            KIND      VERSION              REPLACEMENT            REMOVED   DEPRECATED  
xxxxxxxxxxxxx   Ingress   extensions/v1beta1   networking.k8s.io/v1   true      true        
xxxxxxxxxxxxx   Ingress   extensions/v1beta1   networking.k8s.io/v1   true      true        
``    

自動化について

pluto | Github Action Usageを参考にして、
今回はCI時に変更を検知した場合にpr-commentで通知するようなケースを導入した。

以下は最小限のCI。

  check-kubernetes-manifest:
    runs-on: ubuntu-latest
    name: check k8s manifest
    steps:
      - name: Checkout
        uses: actions/checkout@v2
        with:
          fetch-depth: 0
      - name: Download Pluto
        uses: FairwindsOps/pluto/github-action@master
      - name: Use pluto
        id: pluto
        run: |
          pluto detect-files

次に自分が良いと思ったケースを参考程度に。
pluto detect-files実行時に検知した場合は、CI時にPRに対してコメントを行い、変更を促すようにした。
PRへのコメントはmshick/add-pr-commentを利用させていただいた。

# 略
      - name: Use pluto
        id: pluto
        run: |
          # 複数行にわたる出力の変数化はこのように書く
          echo 'content<<EOF' >> $GITHUB_ENV
          pluto detect-files -d kubernetes -o json | jq >> $GITHUB_ENV
          echo 'EOF' >> $GITHUB_ENV

          # exit statusを元に後続のstepを実行
          pluto detect-files -d kubernetes
      - uses: mshick/add-pr-comment@v1
        if: failure()
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          message: |
            ## Pluto detect deprecation/removal
            Fix from the documents below.
            [Kubernetes | Deprecated API Migration Guide](https://kubernetes.io/docs/reference/using-api/deprecation-guide/)
            ```json
            ${{ env.content }}
            ```
          repo-token: ${{ secrets.GITHUB_TOKEN }}
          repo-token-user-login: 'github-actions[bot]'
          allow-repeats: false

おわりに

Plutoいいよーって話と、それだけだとありふれているので、検知した場合の利用ケースについても紹介しました。
ArgoCD + Helm Chartの場合にうまく検知できる方法はないかと模索中だったが、やらないことに決めてます。
理由はRenovateでHelm Chartのバージョン更新を検知して、常に最新になるような運用にこれからしてく予定だからです。。。
その辺はまた今度まとめようと思います。

参考

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1