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

Oracle MySQL Operator for Kubernetes

Oracle MySQL Operator for Kubernetes

Cloud Native Database Meetup #3 資料

oracle4engineer

January 14, 2022
Tweet

More Decks by oracle4engineer

Other Decks in Technology

Transcript

  1. Oracle MySQL Operator for Kubernetes Cloud Native Database Meetup #3

    Yutaka Ichikawa Solutions Architect Oracle Corporation Japan Jan 14, 2022
  2. 2 Copyright © 2022, Oracle and/or its affiliates Profile Name

    • Yutaka Ichikawa/市川 豊 Belong • Solutions Architect Role • Principal Cloud Solution Engineer SNS • Twitter/GitHub/Qiita:cyberblack28 Blog • https://cyberblack28.hatenablog.com/ Materials • https://speakerdeck.com/cyberblack28/ Community • CloudNative Days Tokyo #cndt #o11y2022 Certified • Certified Kubernetes Administrator • Certified Kubernetes Application Developer • Certified Kubernetes Security Specialist • Kubernetes and Cloud Native Associate Publications New 3/11 開催 絶賛CFP受付中!!(1/25締切)
  3. Kubernetes Operator • What’s Kubernetes Operator ? • Kubernetesについて •

    Operatorについて Oracle MySQL Operator for K8s • Summary • Feature • MySQL InnoDB Cluster • Container-based application & MySQL • Oracle MySQL Operator on K8s • Other MySQL Operator Oracle MySQL Operator for K8s DEMO • WordPress + Oracle MySQL Operator (Scale Out) on K8s • Self-healing(Failover) • まとめ • 参考資料 3 Copyright © 2022, Oracle and/or its affiliates Agenda
  4. 5 Copyright © 2022, Oracle and/or its affiliates Kubernetes Operator

    Kubernetesについて What’s Kubernetes Operator ? • コンテナのスケジューリング • ローリングアップデート • オートスケーリング • 死活監視 • 頻繁なアプリケーションのデプロイを可能にするシステム 基盤 • 無停止によるリリース、高可用なシステム基盤 • 負荷に応じた伸縮自在なシステム基盤 実現 主な役割 複数のコンテナを自動管理するプラットフォーム、コンテナオーケストレーション • コンテナの自動修復 • サービスディスカバリ • ロードバランシング
  5. 6 Copyright © 2022, Oracle and/or its affiliates Kubernetes Operator

    Kubernetesについて What’s Kubernetes Operator ? $ kubectl apply -f sample-nginx.yaml マニフェストファイル YAML 宣言的オペレーション Kubernetesクラスタ上に配備する要素をマニフェストファイルに定義してクラスタへ登録、 その定義をあるべき理想の状態として維持する。 Kubernetesクラスタ sample-nginx.yaml
  6. 7 Copyright © 2022, Oracle and/or its affiliates Kubernetes Operator

    Kubernetesについて What’s Kubernetes Operator ? マニフェストファイル YAML Controllerがあるべき理想の状態へ収束 Controller内のReconciliation loop(調整ループ)と呼ばれる、あるべき理想の状 態へ収束させるループ処理を実行。 Kubernetesクラスタ 登録 Controller 監視 コンテナ管理 (作成・削除) Reconciliation loop
  7. 8 Copyright © 2022, Oracle and/or its affiliates Kubernetes Operator

    Kubernetesについて What’s Kubernetes Operator ? Reconciliation loop Observe Act Analyze 現在の状態を確認 あるべき理想の状態と現在の状態 との差分を分析 分析した差分に対する処理を実行
  8. 9 Copyright © 2022, Oracle and/or its affiliates Kubernetes Operator

    Kubernetesについて What’s Kubernetes Operator ? Observe Act Analyze Controller あるべき理想の状態 Kubernetesクラスタの状態 指定された 「replicas: 3」 のPod数を維持すること
  9. 10 Copyright © 2022, Oracle and/or its affiliates Kubernetes Operator

    Kubernetesについて What’s Kubernetes Operator ? Observe Act Analyze Controller あるべき理想の状態 Kubernetesクラスタの状態 (例)起動しているPodが2個の場合 Observe 理想:3 現状:2
  10. 11 Copyright © 2022, Oracle and/or its affiliates Kubernetes Operator

    Kubernetesについて What’s Kubernetes Operator ? Observe Act Analyze Controller あるべき理想の状態 Kubernetesクラスタの状態 (例)起動しているPodが2個の場合 Analyze 理想状態と比較して、Podが1個足りない
  11. 12 Copyright © 2022, Oracle and/or its affiliates Kubernetes Operator

    Kubernetesについて What’s Kubernetes Operator ? Observe Act Analyze Controller あるべき理想の状態 Kubernetesクラスタの状態 Act 「image: nginx:1.21.0」のPodを作成 (例)起動しているPodが2個の場合
  12. 13 Copyright © 2022, Oracle and/or its affiliates Kubernetes Operator

    Kubernetesについて What’s Kubernetes Operator ? Kubernetesには、たくさんのControllerがあり、この仕組みを利用して処理の自動化を実現 Deployment Controller, Ingress Controller, Node Controller etc. 1つの分散処理システムとして成立
  13. 14 Copyright © 2022, Oracle and/or its affiliates Kubernetes Operator

    Operatorについて What’s Kubernetes Operator ? 実現したい運用ロジックをコード化して、自動処理させることができる 運用のコード化 Controllerは、Custom Controllerとして自作することもできる
  14. 15 Copyright © 2022, Oracle and/or its affiliates Kubernetes Operator

    Operatorについて What’s Kubernetes Operator ? Shell Perl crond etc. Linuxシステムで、Shell ScriptやPerlなどとcrond を連携して運用を自動化 Kubernetesでは、Custom Controllerと Custom Resourceと組み合わせて、作成及び 利用するOperatorで運用を自動化 Controller (Custom Controller) Custom Resource Operator 運用のコード化
  15. 16 Copyright © 2022, Oracle and/or its affiliates Kubernetes Operator

    Operatorについて What’s Kubernetes Operator ? Custom Resource • ユーザが独自に定義するリソース • Custom Resource Definition(CRD)を利用して定義する • Kubernetes APIを拡張して実装する • Kubernetes APIを利用して、オブジェクトを管理 Custom Controller • ユーザが独自に作成するコントローラー • Custom Resourceの実体となるオブジェクトの状態をあるべき理想の姿に維持
  16. 17 Copyright © 2022, Oracle and/or its affiliates Kubernetes Operator

    Operatorについて What’s Kubernetes Operator ? OperatorHub.io(https://operatorhub.io/) • Kubernetes Operatorのパブリックレジストリ • オープンソースコミュニティ、ソフトウェアベンダー、クラウドベンダーなど OperatorHubに協力 • OperatorHubにマッチするOperatorがある場合、自作せずに利用可能 • 192 items/132 provider(2021年7月時点)
  17. Copyright © 2022, Oracle and/or its affiliates 18 Oracle MySQL

    Operator for K8s Oracle MySQL Operator MySQL InnoDB Cluster
  18. 19 Copyright © 2022, Oracle and/or its affiliates Oracle MySQL

    Operator for K8s MySQLの高可用性構成を実現するInnoDB ClusterをKubernetes上に構築、管理を容易化するオペレター Summary • オラクルのオープンソースプロジェクト(https://github.com/mysql/mysql-operator) • 2018年にリリース。一時期開発が中断、2021年5月末にプレビューリリース • Preview State ⇒ DO NOT USE IN PRODUCTION. OPERATOR CAPABILITY LEVELS https://operatorframework.io/operator-capabilities/ バックアップや動的リカバリなどストレージ領域を含めたアプリケーションライフサイクルをサポート
  19. 20 Copyright © 2022, Oracle and/or its affiliates Oracle MySQL

    Operator for K8s Feature • MySQL Server/Routerの自動 デプロイと管理 • セルフヒーリング • バックアップ • MySQL Server/Routerのス ケールアウト/イン • ローリングアップデート(最小限 ダウンタイム)
  20. 21 Copyright © 2022, Oracle and/or its affiliates Oracle MySQL

    Operator for K8s MySQL InnoDB Cluster グループレプリケーション、MySQL Router、MySQL Shell の3つの技術要素を組み合わせて実現す るMySQLサーバの高可用性構成 MySQL Connector Application MySQL Router MySQL Connector Application MySQL Router MySQL Shell P S S グループレプリケーション • 複数のMySQLサーバのデータをトランザク ション整合性を担保して複製可能 • プライマリへの自動昇格機能も実装 • 複数のMySQL接続、 MySQL/MySQLXプ ロトコルに対応 • バックエンドの構成変 更や障害発生を検出 して接続の切り替えを 自動的に実行 mysqlshクライアント、コマンドを利用して InnoDB Clusterの構成や設定管理が可能 P = Primary, S=Secondary
  21. 22 Copyright © 2022, Oracle and/or its affiliates Oracle MySQL

    Operator for K8s MySQL InnoDB Cluster Secondary Secondary Primary Primary Primary Praimary シングルプライマリ型 マルチプライマリ型 参照処理のみを分散 更新処理を分散 Oracle MySQL Operator for K8sでは、現時点(2022年1月)ではシングルプライマリのみ対応
  22. 23 Copyright © 2022, Oracle and/or its affiliates Oracle MySQL

    Operator for K8s MySQL InnoDB Cluster MySQL InnoDB Clusterの高可用性がシングルプライマリ型でどのように機能するか? S S P MySQL Router App S S P MySQL Router App R/W R/O S P MySQL Router App P R/O R/O R/W S MySQL Router App P R/O R/W S Group Replication Group Replication Group Replication Group Replication
  23. 24 Copyright © 2022, Oracle and/or its affiliates Oracle MySQL

    Operator for K8s MySQL InnoDB Cluster Virtual Machine Virtual Machine Virtual Machine On-premise On-premise On-premise Virtual Machine Virtual Machine Virtual Machine OKE Block Volume Block Volume Block Volume On-premise Virtual Machine Container InnoDB Clusterは、ハードウェア調達、MySQLインストール(台数分)、グループレプリケーション設定やセットアップな ど構築、バックアップ・リストア、スケールなど、運用に時間を要する。 オンプレミス(物理)に比べると仮想マシン、コンテナの方が時間的には改善傾向にある
  24. 25 Copyright © 2022, Oracle and/or its affiliates Oracle MySQL

    Operator for K8s Container-based application & MySQL Oracle MySQL Operatorは、現時点(2022年1月)プレビュー版のため本番利用は厳しいので、OCIにおける 「MySQL Database Service」というMySQLのマネージドサービスとの利用を推奨 Use MySQL Kubernetes Operator to automate Use MySQL Database Service - Fully Managed Service - HeatWave Query Acceleration - Peace of Mind Architecture https://www.oracle.com/jp/mysql/
  25. 26 Copyright © 2022, Oracle and/or its affiliates Oracle Announces

    MySQL Autopilot for MySQL HeatWave Service MySQL Autopilotは、9つの新しい機械学習を利用した自動化機能を提供し、 MySQL HeatWave Serviceのパフォーマンスとスケーラビリティをさらに向上 https://www.oracle.com/uk/news/announcement/mysql-autopilot-for-heatwave-2021-08-10/ Press Release
  26. 27 Copyright © 2022, Oracle and/or its affiliates Oracle MySQL

    Operator for K8s Oracle MySQL Operator on K8s Virtual Machine Virtual Machine Virtual Machine OKE Block Volume PVC PV Block Volume PVC PV Block Volume PVC PV MySQL Operator Agent Pod Service MySQL Router Pod Operator Agent : MySQL InnoDB Clusterメンバーを 制御するサイドカーコンテナ MySQL Shellから制御可能 MySQL : mysqldが稼働するコンテナ MySQL Router : アプリケーションがMySQL Routerを経 由してMySQLに接続 App MySQL Operator Pod App Service MySQL Operator : InnoDB Clusterの制御管理、 MySQL Shell(mysqlsh)の実行可能 type: LoadBalancer Request $ kubectl Custom Controller CRD apiVersion: mysql.oracle.com/v2alpha1 kind: InnoDBCluster metadata: name: mycluster spec: secretName: mypwds instances: 3 router: instances: 1 マニフェストの instances数を変更 することで、その数の Pod, PVC, PV, Block Volumeを自 動作成 sample-cluster.yaml manifest 0 1 2 StatfulSetの仕組みを利用 • 決められた順番でPodの起動や削除を実行 • Pod名が変わらない • PVCから固定の永続ストレージをマウント
  27. 28 Copyright © 2022, Oracle and/or its affiliates Oracle MySQL

    Operator for K8s 2021/7/27 「最新!MySQL Operator for Kubernetes」ウェビナーフィードバック • MySQL InnoDB ReplicaSet は未対応 MySQL InnoDB Clusterのグループレプリケーションに対する、 MySQL InnoDB ReplicaSetは、非同期レプリケーション。 グループ レプリケーション 非同期 レプリケーション • MySQL OperatorからMySQL Shellでのスケールは可能ではあるが、Kubernetesのマニフェストで対 応することを推奨 MySQL Shellでは、MySQL管理、Kubernetesクラスタに関係するものはマニフェストで管理することを推奨。
  28. Copyright © 2022, Oracle and/or its affiliates 32 Oracle MySQL

    Operator for K8s DEMO Scale WordPress + Oracle MySQL Operator (Scale Out/In) for K8s Self-healing(Failover)/Backup
  29. 33 Copyright © 2022, Oracle and/or its affiliates Oracle MySQL

    Operator for K8s DEMO Demo環境概要図 WordPress + Oracle MySQL Operator (Scale Out/In) on K8s NFS PVC PV PVC PV Service Service Service Cloud Shell MySQL Operator Namespace: mysql-operator Namespace: default PVC PV PVC PV PVC PV Block Volume Pod Pod Pod Pod Pod Pod mycluster wordpress-service nsf-service Port: 6446 MySQL Router Pod Block Volume Block Volume Block Volume mycluster-router Primary Secondary Secondary mycluster-0 mycluster-1 mycluster-2 Group Replication WordPress Podを 10にスケールさせます。 MySQL Routerを2、MySQL Serverインスタン スを5にスケールさせます。その後、元の値に戻します。
  30. 34 Copyright © 2022, Oracle and/or its affiliates Oracle MySQL

    Operator for K8s DEMO Scale Out WordPress + Oracle MySQL Operator (Scale Out/In) on K8s apiVersion: mysql.oracle.com/v2alpha1 kind: InnoDBCluster metadata: name: mycluster spec: secretName: mypwds instances: 3 version: "8.0.25" router: instances: 1 version: "8.0.25" apiVersion: mysql.oracle.com/v2alpha1 kind: InnoDBCluster metadata: name: mycluster spec: secretName: mypwds instances: 5 version: “8.0.25” router: instances: 2 version: "8.0.25" MySQL Podの数(PVC,PV,BlockVolume含む) MySQL Routerの数 マニフェストを書き換えて、kubectl applyすると自動スケールアウト。PVC、PV、Block Volumeも同時に作成。
  31. 35 Copyright © 2022, Oracle and/or its affiliates Oracle MySQL

    Operator for K8s DEMO Scale In WordPress + Oracle MySQL Operator (Scale Out/In) on K8s apiVersion: mysql.oracle.com/v2alpha1 kind: InnoDBCluster metadata: name: mycluster spec: secretName: mypwds instances: 3 version: "8.0.25" router: instances: 1 version: "8.0.25" apiVersion: mysql.oracle.com/v2alpha1 kind: InnoDBCluster metadata: name: mycluster spec: secretName: mypwds instances: 5 version: “8.0.25” router: instances: 2 version: "8.0.25" MySQLとMySQL RouterのPod数は、マニフェストの数となる。2022年1月時点、PVC、PV、Block Volumeは自 動では削除されず、手動での削除。Reclaim PolicyがDeleteのため、手動でPVCを削除することで、PV、Block Volumeも同時に削除される。
  32. 39 Copyright © 2022, Oracle and/or its affiliates Oracle MySQL

    Operator for K8s DEMO Demo環境概要図 Self-healing(Failover) Cloud Shell MySQL Operator Namespace: mysql-operator Namespace: mysql-cluster PVC PV PVC PV PVC PV Pod Pod Pod Pod MySQL Router Pod Block Volume Block Volume Block Volume mysql-router Primary Secondary Secondary mysql-0 mysql-1 mysql-2 Group Replication mysql-0を手動deleteして疑似障害を起こして、動作を確 認します。 Object Storage PVC PV Backup Job Backup Job OCI hostPath: path: /tmp/backupdir
  33. 40 Copyright © 2022, Oracle and/or its affiliates Oracle MySQL

    Operator for K8s DEMO Self-healing(Failover) Self-healing(Failover) Pod Pod Pod mysql-0 mysql-1 mysql-2 MySQL Router mysql> create database test; mysql> create table test.test (i int primary key); mysql> insert into test.test values (1), (2), (3); Cloud Shell ① DB/Table Create ② Group Replication Pod Pod Pod mysql-0 mysql-1 mysql-2 MySQL Router Cloud Shell $ kubectl delete pod mysql-0 ③ Delete mysql-0 ⑤ Group Replication mysql> insert into test.test values (4), (5), (6); ④ Insert values into table of mysql-1
  34. 41 Copyright © 2022, Oracle and/or its affiliates Oracle MySQL

    Operator for K8s DEMO Pod Pod Pod mysql-0 mysql-1 mysql-2 MySQL Router mysql> select * from test.test; Cloud Shell ⑦ Check table of mysql-0 ⑥ Group Replication Self-healing(Failover) Self-healing(Failover)
  35. 44 Copyright © 2022, Oracle and/or its affiliates 1.MySQLの高可用性構成を実現するInnoDB ClusterをKubernetes上に構築、管理を容易化するオペレター

    2.オラクルのオープンソースプロジェクトであり、OPERATOR CAPABILITY LEVELS III (2022年1月時点) • MySQL Server/Routerの自動デプロイと管理 • セルフヒーリング(フェールオーバー) • バックアップ 3.主な機能 まとめ 4.MySQL InnoDB ReplicaSet は未対応 5.MySQL Shellでは、MySQL管理、Kubernetesに関係するものはマニフェストで管理することを推奨。 • MySQL Server/Routerのスケールアウト/イン • ローリングアップデート(最小限ダウンタイム)
  36. 45 Copyright © 2022, Oracle and/or its affiliates 参考資料 MySQL

    Operator for Kubernetes https://github.com/mysql/mysql-operator 『データベース管理システム「MySQL」の新クライアント MySQL Shellを使おう』 梶山 隆輔 (著) Introduction to MySQL Operator for Kubernetes https://www.youtube.com/watch?v=Qb1R1Dl0-tA Kubernetes x MySQL ! OperatorでMySQLを動かしてみよう https://speakerdeck.com/cotoc/oracle-mysql-operator-jian-zheng-sitemita SpeakerDeck YouTube GitHub Book
  37. 46 Copyright © 2022, Oracle and/or its affiliates 公開資料 Oracle

    MySQL Operator for Kubernetes プレビューリリース版解説 https://www.youtube.com/watch?v=V9lcaTqN2ko&list=PL8x2FJpi0g-vCJu519r2f8Ge4EIqmKYMk Oracle MySQL Operator for Kubernetes https://speakerdeck.com/oracle4engineer/mysql-technology-cafe-number-13-oracle-mysql-operator-for- kubernetes-purebiyuririsuban-jie-shuo MySQL Technology Cafe 13 https://github.com/oracle-japan/mysql-technology-cafe-13 Oracle MySQL Operator for Kubernetes & WordPress https://qiita.com/cyberblack28/items/cdf744ece15311714b6c Oracle MySQL Opreator for Kubernetes & Self-healing(Failover) https://qiita.com/cyberblack28/items/553c99a3195b7998a2dc Qiit GitHub SpeakerDeck YouTube
  38. 47 Copyright © 2022, Oracle and/or its affiliates Oracle Database

    Operator for Kubernetes Oracle Database World https://www.oracle.com/database/database-world/on-demand/#sessions
  39. 48 Copyright © 2022, Oracle and/or its affiliates Oracle Database

    Operator for Kubernetes Oracle DB Operator Kubernetes Cluster kubectl Controller Controller Controller Containerized Oracle DBs Autonomous DBs On-Premises DBs Supported Database Configurations • Containerized Database in Kubernetes • Databases in Oracle Cloud • Databases on-premises Lifecycle Operations • Provision / Bind / Start / Stop / Terminate • Backup / Restore • Scaling • Patching, Upgrade • Monitoring, Logging, Metrics
  40. 49 Copyright © 2022, Oracle and/or its affiliates Oracle Database

    Operator for Kubernetes https://github.com/oracle/oracle-database-operator
  41. 50 Copyright © 2022, Oracle and/or its affiliates https://ochacafe.connpass.com/event/232810/ OCHaCafe5

    #1 Kubernetes Operator 超入門 2022年1月19日(水) 19:00~21:00
  42. 51 Copyright © 2022, Oracle and/or its affiliates #ochacafe ではLTを絶賛募集中です!!

    # テーマ キーワード 1 Kubernetes Operator 超入門 Kubernetes Operator, SDK, etc. 2 Kebernetesで並列分散処理 Apache Spark, Spark Operator, etc. 3 Kubernetes のセキュリティ RBAC, NetworkPolicy, SecurityContext, etc. 4 挑戦 Typescript Typescript, JavaScript, React, Vue, etc. 5 実験!カオスエンジニアリング Chaos Engineering, Chaos Mesh, etc. 6 OMLOps を始めよう! Jupyter Enterprise Gateway, Kubeflow, etc.