kubeconformとplutoはあとで検証してブログ書く
— adachin👾SRE (@adachin0817) November 13, 2023
https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.28.md
https://kubernetes.io/docs/reference/using-api/deprecation-guide/
最近、AKS Kubernetesのバージョンアップを対応しているのですが、進めるに当たって上記、KubernetesのChange LogとBreaking Changeの差分を1年に一回、目grepするのは非常にボリュームが多いのとツラくなります。そこで、Plutoを利用すればManifestやクラスターのapiVersionに対してdeprecatedとremovedを検出することができるので、早速オプションから確認していきましょう。
ちなみにAKSのバージョンアップ手順は以下参考に。
Pluto
https://github.com/FairwindsOps/pluto
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
$ pluto version Version:5.18.6 Commit:Homebrew $ pluto -h 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-all-in-cluster run all in-cluster detections detect-api-resources detect-api-resources 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. --ignore-unavailable-replacements Ignore the default behavior to exit 4 if deprecated but unavailable apiVersions are found. --no-footer Disable footer output -H, --no-headers When using the default or custom-column output format, don't print headers (default print headers). -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. |
detect
はManifestや標準出力した結果を検知することができます。 detect-all-in-cluster
はhelmなどに管理されている全てのクラスターから検知が可能です。なので、Manifestを変更時でコンテナをデプロイ/buildした後に pluto detect
を実行、全てのクラスターは定期的にバッチで pluto detect-all-in-cluster
を実行するのが望ましいでしょう。
試しにManifestの networking.k8s.io/v1beta1
に変更すると以下のようにv1.19でdepricatedと出力されます。
1 2 3 |
$ pluto detect-files -d . -o wide --target-versions k8s=v1.28.3 NAME NAMESPACE KIND VERSION REPLACEMENT DEPRECATED DEPRECATED IN REMOVED REMOVED IN REPL AVAIL REPL AVAIL IN hoge <UNKNOWN> Ingress networking.k8s.io/v1beta1 networking.k8s.io/v1 true v1.19.0 true v1.22.0 true v1.19.0c |
GitHub Actions
- .github/workflows/ci_pluto.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
name: pluto CI on: schedule: - cron: 0 1 1 * * workflow_dispatch: env: SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }} SLACK_USERNAME: pluto-ci SLACK_CHANNEL: hoge-ci SLACK_ICON: https://upload.wikimedia.org/wikipedia/labs/thumb/b/ba/Kubernetes-icon-color.svg/2110px-Kubernetes-icon-color.svg.png jobs: pluto_ci: runs-on: ubuntu-latest strategy: matrix: env: ["stg","prod"] steps: - name: Checkout uses: actions/checkout@v3 - name: Login to AKS run: | az login --service-principal -u ${AZURE_USER} -p ${AZURE_PASSWORD} --tenant ${AZURE_TENANT} az aks get-credentials --resource-group ${{ matrix.env }} --name ${{ matrix.env }}-aks env: AZURE_USER: ${{ secrets.HOGE_CLIENT_ID }} AZURE_PASSWORD: ${{ secrets.HOGE_CLIENT_SECRET }} AZURE_TENANT: ${{ secrets.HOGE_TENANT_ID }} - name: Download Pluto uses: FairwindsOps/pluto/github-action@master - name: Run Pluto detect-all-in-cluster run: | { echo '```' pluto detect-all-in-cluster k8s=v1.28.3 -o wide echo '```' } | tee -a "$GITHUB_STEP_SUMMARY" - name: Slack Success if: ${{ success() }} uses: rtCamp/action-slack-notify@v2 env: SLACK_TITLE: Pluto CI Success SLACK_COLOR: good SLACK_MESSAGE: "Pluto CI Success🚀" - name: Slack Failure if: ${{ failure() }} uses: rtCamp/action-slack-notify@v2 env: SLACK_TITLE: Pluto CI Failure SLACK_COLOR: danger SLACK_MESSAGE: "<!subteam^hoge> Pluto CI Failure. Check deprecated/removed🚨" |
https://docs.github.com/en/actions/using-jobs/using-a-matrix-for-your-jobs
pluto detect-all-in-clusterはscheduleで毎月1日の10時に実行するようにしました。26行目のLogin to AKSではplutoでdetect-all-in-clusterでstgとprodの環境に認証したいため、matrixを使って単一のジョブ定義で変数を使用して、変数の組み合わせに基づいてそれぞれ複数のジョブ実行するようにしました。結果をteeコマンドで$GITHUB_STEP_SUMMARYに渡すとSummaryが見やすくなると、deprecatedとremovedが出た場合はメンションでSlack通知させると便利です。
- common.mk
1 2 3 |
~省略~ deplication-check: kustomize build . | pluto detect - -t k8s=v1.28.3 --ignore-deprecations --ignore-removals --ignore-unavailable-replacements |
続いてcommon.mkはMakefileですが、以下のManifestで参照するために、kustomize buildで生成されるyamlファイルに対して、 pluto detectを実行します。ここで毎回エラー出て止まらないようにするために、オプションの --ignore-deprecations
--ignore-removals
--ignore-unavailable-replacements
を追加することで、検知はされますが、リターンコード 0になるのでそのままスルーされます。
- .github/workflows/deploy_manifest.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 |
~省略~ - name: Download Pluto uses: FairwindsOps/pluto/github-action@master - name: Deprecation check run: | { echo '## Deprecation check' echo '```' make --silent deplication-check echo '```' } | tee -a "$GITHUB_STEP_SUMMARY" working-directory: ${{ env.WORKDIR }} |
あとはデプロイ用のManifestに指定すれば完了です。テストしてみましょう。
確認
- 検知しない場合
- 検知した場合
まとめ
「Kubernetesの知識地図」届いた。ハンドブックで読みやすい!🙌 pic.twitter.com/hqwrtayj7K
— adachin👾SRE (@adachin0817) June 26, 2023
「Kubernetesの知識地図」でPlutoを知ったので、超便利でありがたや!個人のクラスターにも導入しようと思います。次はkubeconformをCI化してみよう。ところで、Azureの技術ブログは今回初めてです!これは歴史に刻む!
ちなみにCircleCIだとOrbsがあるのでこれで良さそう。
https://circleci.com/developer/ja/orbs/orb/fairwinds/pluto
0件のコメント