Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Operator のプロジェクトを最新にアップグレードする方法

kenya888
April 01, 2021

Operator のプロジェクトを最新にアップグレードする方法

https://groups.google.com/g/operator-framework/c/kVG1MqaNG6c に投稿された、Operator SDK/Kubebuilder の統合に伴うって、自分のOperator プロジェクトを最新のバージョンにしておく方法のドキュメントを日本語化と若干の追記をしたものです。

kenya888

April 01, 2021
Tweet

More Decks by kenya888

Other Decks in Technology

Transcript

  1. 日本語訳版のおことわり • この資料は以下Operator Framework コミュニティのメーリングリストに投稿された資料の簡易 日本語訳です(as of 2021/03/31) ◦ https://groups.google.com/g/operator-framework/c/kVG1MqaNG6c

    ◦ 資料はRed Hatのメンバーが作成したものですが、クレジットとしてレッドハットのロゴなどは入っていません ので、Operator Frameworkコミュニティでの活動として捉えてください ◦ 最新でない可能性があるので常にオリジナルおよび資料内で参照されているリンク先も確認してください ◦ 理解の助けのために、日本語版で若干のスライド追加を行っています(明示しています) • この日本語訳はTakahiro Hashimoto<[email protected]>がやりました。日本語の内容の 質問があってもオリジナルの作者に連絡しないようにご注意ください。 • 技術的な内容はの質問は、積極的にぜひ Openな場所(Slackチャンネルやメーリングリストで、こ の資料にも記載があります )などでのコミュニケーションにチャレンジしていただけると嬉しいです
  2. このドキュメントの対象 Operator SDKかKubebuilderを使ってOperatorを開発している人に向けて、以下の情報 を提供します • なぜ最新のOperator SDK[1](1.5以降) または Kubebuilder[2](v3.0.0以降、v3.0.0 の安定リリースが直近に予定

    )に更新すべきかとその方法 • 自分のOperatorプロジェクトを簡単にアップデートとメンテナンスできるようにしてお く方法 • 変更点と便利な支援ツールの理解 • Kubernetes コミュニティによって提案されたレイアウトの理解 • 最新のOperator SDKの便利な機能 使用したリンク: [1] - https://github.com/operator-framework/operator-sdk [2] - https://github.com/kubernetes-sigs/kubebuilder
  3. なぜ Operator SDK 1.0 から新しいレイアウトを採用したのですか Operator SDK は Kubebuilder と統合されました。どちらのプロジェクトも

    Operator Framework と Kubernetes コミュニティが推進する同じベースレイアウトを生成します 詳細はこちら[1] Operator SDK を使ったプロジェクトで Kubebuilder のドキュメントは利用できますか はい、こちら https://book.kubebuilder.io/ をごらんください その時はこんな風に インストラクションを読んでください : $ kubebuilder <command> を $ operator-sdk <command> に置きかえる 使用したリンク: [1] - https://github.com/kubernetes-sigs/kubebuilder/blob/master/designs/integrating-kubebuilder-and-osdk.md
  4. Operator SDKとKubebuilderの違い Operator SDK は Kubebuilder が提供する基本的な project scaffold に下記の追加機能を提供し

    ます • プロジェクトをOLM(Operator Lifecycle Manager)と統合するためのヘルパー ◦ 例. operator bundle をビルド、アップグレード、テストするためのヘルパー • カスタムテストを作成できるようにするための Scorecard • その他 その他の Kubebuilder to Operator SDK の関連性についてはこちらの ブログ記事[1]を参照してく ださい 使用したリンク: [1] - https://www.openshift.com/blog/operator-sdk-reaches-v1.0?extIdCarryOver=true&sc_cid=701f2000001Css5AAC
  5. なぜ私のプロジェクトをアップグレードしないといけないのでしょうか • 現在と将来に提供されるヘルパーや機能を使えるようにする • webhooks を利用できるようにする • Scorecard によるカスタムテストを作成、利用できるようにする •

    廃止された package manifest を取り除き、新しい Bundle format の利用の開始する • コミュニティに支援されているレイアウトを採用し以下のメリットを享受する ◦ コミュニティにとって貢献をより容易にする ◦ メンテナンス性の向上 • 自分の Operator プロジェクトにある技術負債と依存関係のアップグレードに関する問題を解決する • 自分のプロジェクトがテストされ、推奨された特定のバージョンを利用することを保証する • CRDとWebhook(使用していれば)で使われているAPIをマイグレーションする(下記参照) CRD: apiextensions/v1beta1 Webhook: admissionregistration.k8s.io/v1beta1 の2つは Kubernetes 1.16で deprecated, 1.22 で削除される予定です それぞれ新しいAPI version (v1) を使用する必要があります
  6. Operator SDK v0.19 以前からのレイアウト変更点 deploy ディレクトリが was config ディレク トリに置き換えられました:

    • deploy/crds/ にあった CRD manifest は config/crd/bases へ • deploy/crds/ にあった CR manifest は config/samples へ • Controller manifest deploy/operator.yaml は config/manager/manager.yaml に 変更 • deploy にあった RBAC manifests は config/rbac/ へ deploy/olm-catalog/ は bundle/ に 置き換えられました 例:deploy/olm-catalog/<name>-ope rator/manifests/ は bundle/manifests となります cmd/manager/main.go はroot ディレクトリに移動 pkg/apis と pkg/controllers はルー トディレクトリに置かれます. build/Dockerfile はルートデレクトリに移動 しました
  7. /argocd-operator ├── 0.0.12 │ ├── Dockerfile │ ├── manifests │

    │ ├── argocd-operator.v.0.0.12.clusterserviceversion.yaml │ │ ├── argoproj.io_applications_crd.yaml │ │ ├── argoproj.io_appprojects_crd.yaml │ │ ├── argoproj.io_argocdexports_crd.yaml │ │ └── argoproj.io_argocds_crd.yaml │ └── metadata │ ├── annotations.yaml │ └── dependencies.yaml └── 0.0.11 ├── Dockerfile ├── manifests │ ├── argocd-operator.v.0.0.11.clusterserviceversion.yaml │ ├── argoproj.io_applications_crd.yaml │ ├── argoproj.io_appprojects_crd.yaml │ ├── argoproj.io_argocdexports_crd.yaml │ └── argoproj.io_argocds_crd.yaml └── metadata ├── annotations.yaml └── dependencies.yaml /argocd-operator ├── 0.0.12 │ ├── argocd-operator.v.0.0.12.clusterserviceversion.yaml │ ├── argoproj.io_applications_crd.yaml │ ├── argoproj.io_appprojects_crd.yaml │ ├── argoproj.io_argocdexports_crd.yaml │ └── argoproj.io_argocds_crd.yaml ├── 0.0.11 │ ├── argocd-operator.v.0.0.11.clusterserviceversion.yaml │ ├── argoproj.io_applications_crd.yaml │ ├── argoproj.io_appprojects_crd.yaml │ ├── argoproj.io_argocdexports_crd.yaml │ └── argoproj.io_argocds_crd.yaml ├── 0.0.9 ├── 0.0.8 ├── … └── argocd-operator.package.yaml Package Manifest Format Bundle Format Legacy Format New Format Bundle Formatは、「manifests」「metadata」ディレクトリで構成 され、Bundle拡張が容易になっている Operator SDK 1.0 以降でのManifest構成の変更(metadataの追加) 使用したリンク: [1] - https://github.com/operator-framework/community-operators/tree/master/upstream-community-operators/argocd-operator ArgoCD operator[1] を仮にBundle Formatに変更した場合の例 日本語版追加スライド
  8. 実際どのようにアップデートをしたらよいですか このステップ[1]を参考にしてください。これは Memcached sample operator[2] を0。19から 最新のバージョンへマイグレーションする例となっています。通常これに倣えば、それより旧 バージョン(0.15.x, 0.16.x, 0.17.x,

    0.18.x) で作成されたoperatorであっても、同じようにプロ ジェクトを最新バージョンにアップデートできます。 Operator SDK のコマンドおよびヘルパーのチートシート[3]に もう少し詳しい情報があるので確認してください 使用したリンク: [1] - https://master.sdk.operatorframework.io/docs/building-operators/golang/migration/ [2] - https://github.com/operator-framework/operator-sdk-samples/tree/v0.19.2/go/memcached-operator [3] - https://master.sdk.operatorframework.io/docs/overview/cheat-sheet/
  9. マイグレーションでどんな問題が発生する可能性があり 発生したらどのように解決すればよいですか もしかするとこのステップでカバーできていない問題が発生するかもしれません。例えば、破 壊的な変更が存在するとても古いバージョンの controller-runtime[1] を使用している場合、 プロジェクトのビルド時にエラーが発生するでしょう。問題を解決するためには、マイグレー ションガイド(現 在のバージョンから 0.19まで。0.13を使っていれば0.13から0.19までのすべ

    てのガイド)に記載されているエラーコードを出力しているコードを探しましょう。おそらく "CodeXをCodeYで置き換える" といったような解決策を見つけることができます。 また、いつでもSlack(https://kubernetes.slack.com)のチャンネル(#operator-sdk-dev, #kubebuilder) で相談することができますし、 operator framework のリポジトリのissueとメー リングリスト <[email protected]> で問題を追うこともでます 使用したリンク: [1] - https://github.com/kubernetes-sigs/controller-runtime [2] - https://master.sdk.operatorframework.io/docs/upgrading-sdk-version/
  10. 私のOperatorはnamespace内でのみ権限を要求します。 マイグレーションの後どのように変更したらよいでしょうか OperatorSDKがKubebuilderと統合される前は、すべてのプロジェクトは namespace内での み有効(namespace-scoped)なパーミッションつきで作成されていました。現在はすべての プロジェクトは cluster scope なパーミッション(cluster-scoped) で作成されるのがデフォルト

    の動作となります。しかしもちろんこれは変更可能です。詳細は こちら[1]を確認してください ポイント: • RBAC manifestは: config/rbac ディレクトリにあります • "Updating your Service Account"[2] のステップを必ず確認してください • Operator SDK 1.6.0以降のリリースで、AnsibleとHelm ベースのOperatorもそれぞ れ独自のService Accountを持つようになります : 詳細: #4653 使用したリンク: [1] - https://sdk.operatorframework.io/docs/building-operators/golang/operator-scope/ [2] - https://master.sdk.operatorframework.io/docs/building-operators/golang/migration/#updating-your-serviceaccount [3] - https://github.com/operator-framework/operator-sdk/pull/4653
  11. 私は Helm/Ansible を使っており、Go を使っていません 手 順は同じような感じです。 Helmのガイド[1]およびAnsibleのガイド[2]を確 認してください。 AnsibleでもHelmでも基 本は同じレイアウトに従いますが、それぞれの選

    択に合うように scaffold が準備されます 使用したリンク: [1] - https://master.sdk.operatorframework.io/docs/building-operators/helm/migration/ [2] -https://master.sdk.operatorframework.io/docs/building-operators/ansible/migration/
  12. Operator Lifecycle Manager(OLM) について知りたくなりました 使用したリンク: [1] - https://speakerdeck.com/shkitayama/operatorlifecyclemanager-101 [2] -

    https://olm.operatorframework.io/docs/ [3] - https://docs.openshift.com/container-platform/4.7/operators/understanding/olm/olm-understanding-olm.html Operator Lifecycle Managerについて日本語で説明した資料 [1]が公開されていますので、 理解の助けになるかと思います。また OLM公式のドキュメント[2]と、OpenShift のドキュメン ト[3]にもOLMについての言及がありますので、こちらも理解の助けになると思います 日本語版追加スライド