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

MySQL Technology Cafe #13-Oracle MySQL Operator...

MySQL Technology Cafe #13-Oracle MySQL Operator for Kubernetes プレビューリリース版解説

MySQL Technology Cafe #13-Oracle MySQL Operator for Kubernetes プレビューリリース版解説 資料

oracle4engineer

August 12, 2021
Tweet

More Decks by oracle4engineer

Other Decks in Technology

Transcript

  1. Oracle MySQL Operator for Kubernetes MySQL Technology Cafe #13 Yutaka

    Ichikawa Solutions Architect Oracle Corporation Japan Aug 12, 2021
  2. 2 Copyright © 2021, 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 • Cloud Native Bright Future #cnbfmeetup Certified • Certified Kubernetes Administrator • Certified Kubernetes Application Developer Publications
  3. 3 Copyright © 2021, Oracle and/or its affiliates 本書では、アプリケーションエンジニア、インフラエンジニア、オペレーション エンジニアの方々を対象に、これまでのアプリケーション開発とコンテナア

    プリケーション開発の違い、コンテナアプリケーション開発に必要となる Docker、Kubernetesや自動化で必要となるCI/CD、コンテナアプリ ケーションの運用方法を基本から解説しています。 Dockerコンテナ開発・環境構築の基本 2021/7/27 発売
  4. 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/In & Rolling Update) on K8s • Self- healing(Failover)/Backup • まとめ • 参考資料 4 Copyright © 2021, Oracle and/or its affiliates Agenda
  5. 6 Copyright © 2021, Oracle and/or its affiliates Kubernetes Operator

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

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

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

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

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

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

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

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

    Operatorについて What’s Kubernetes Operator ? 実現したい運用ロジックをコード化して、自動処理させることができる 運用のコード化 Controllerは、Custom Controllerとして自作することもできる
  15. 16 Copyright © 2021, 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 運用のコード化
  16. 17 Copyright © 2021, 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の実体となるオブジェクトの状態をあるべき理想の姿に維持
  17. 18 Copyright © 2021, 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月時点)
  18. Copyright © 2021, Oracle and/or its affiliates 19 Oracle MySQL

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

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

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

    Operator for K8s MySQL InnoDB Cluster Secondary Secondary Primary Primary Primary Praimary シングルプライマリ型 マルチプライマリ型 参照処理のみを分散 更新処理を分散 Oracle MySQL Operator for K8sでは、現時点(2021年8月)ではシングルプライマリのみ対応
  23. 24 Copyright © 2021, 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
  24. 25 Copyright © 2021, 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インストール(台数分)、グループレプリケーション設定やセットアップな ど構築、バックアップ・リストア、スケールなど、運用に時間を要する。 オンプレミス(物理)に比べると仮想マシン、コンテナの方が時間的には改善傾向にある
  25. 26 Copyright © 2021, Oracle and/or its affiliates Oracle MySQL

    Operator for K8s Container-based application & MySQL Oracle MySQL Operatorは、現時点(2021年8月)プレビュー版のため本番利用は厳しいので、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/
  26. 27 Copyright © 2021, 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
  27. 28 Copyright © 2021, 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から固定の永続ストレージをマウント
  28. 29 Copyright © 2021, Oracle and/or its affiliates Oracle MySQL

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

    Operator for K8s DEMO Scale WordPress + Oracle MySQL Operator (Scale Out/In & Rolling Update) for K8s Self-healing(Failover)/Backup
  30. 34 Copyright © 2021, Oracle and/or its affiliates Oracle MySQL

    Operator for K8s DEMO Demo環境概要図 WordPress + Oracle MySQL Operator (Scale Out/In & Rolling Update) 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にスケールさせます。その後、元の値に戻します。
  31. 35 Copyright © 2021, Oracle and/or its affiliates Oracle MySQL

    Operator for K8s DEMO Scale Out WordPress + Oracle MySQL Operator (Scale Out/In & Rolling Update) 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も同時に作成。
  32. 36 Copyright © 2021, Oracle and/or its affiliates Oracle MySQL

    Operator for K8s DEMO Scale In WordPress + Oracle MySQL Operator (Scale Out/In & Rolling Update) 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数は、マニフェストの数となる。2021年8月時点、PVC、PV、Block Volumeは自 動では削除されず、手動での削除。Reclaim PolicyがDeleteのため、手動でPVCを削除することで、PV、Block Volumeも同時に削除される。
  33. 37 Copyright © 2021, Oracle and/or its affiliates Oracle MySQL

    Operator for K8s DEMO Rolling Update WordPress + Oracle MySQL Operator (Scale Out/In & Rolling Update) 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.26” router: instances: 2 version: "8.0.26" Imageバージョン Kubernetesの仕組みを利用したローリングアップデート。MySQL InnoDBクラスタの各Pod(セカンダリーの末番から) を終了して再作成。MySQL InnoDBクラスタのプライマリーが最後にアップデートされる仕組み。
  34. 38 Copyright © 2021, Oracle and/or its affiliates Oracle MySQL

    Operator for K8s DEMO Rolling Update WordPress + Oracle MySQL Operator (Scale Out/In & Rolling Update) on K8s 実際に以下の環境で実行してみたところ、2021年8月時点、最初のPodはローリングアップデートされるが、それ以降 Terminatingのままでうまくいかず。。 Kubernetes:v1.20.8、v1.19.12 MySQL Image: 8.0.25 ⇒ 8.0.26 Node: 3 (VM.Standard.E3.Flex、CPUs 2、Mem 32GB)
  35. 40 Copyright © 2021, Oracle and/or its affiliates Oracle MySQL

    Operator for K8s DEMO Demo環境概要図 Self-healing(Failover)/Backup 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 Backup Jobを作成して、 PersistentVolumeとObject Storageにバックアップを実行します。 hostPath: path: /tmp/backupdir
  36. 41 Copyright © 2021, Oracle and/or its affiliates Oracle MySQL

    Operator for K8s DEMO Self-healing(Failover) Self-healing(Failover)/Backup 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
  37. 42 Copyright © 2021, 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)/Backup
  38. 43 Copyright © 2021, Oracle and/or its affiliates Oracle MySQL

    Operator for K8s DEMO Backup Self-healing(Failover)/Backup apiVersion: mysql.oracle.com/v2alpha1 kind: MySQLBackup metadata: name: dump-test1 namespace: mysql-cluster spec: clusterName: mysql backupProfileName: dump-instance-profile-pvc $ kubectl apply -f backup_to_pv.yaml Block Volume PVC Backup Job hostPath: path: /tmp/backupdir PV backup_to_pv.yaml apiVersion: mysql.oracle.com/v2alpha1 kind: MySQLBackup metadata: name: dump-test-oci namespace: mysql-cluster spec: clusterName: mysql backupProfileName: dump-instance-profile-oci $ kubectl apply -f backup_to_oci.yaml Object Strorage Backup Job backup_to_oci.yaml Buket Name: idbcluster_backup
  39. 45 Copyright © 2021, Oracle and/or its affiliates 1.MySQLの高可用性構成を実現するInnoDB ClusterをKubernetes上に構築、管理を容易化するオペレター

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

    Operator for Kubernetes https://github.com/mysql/mysql-operator MySQL Technology Cafe 13 https://github.com/oracle-japan/mysql-technology-cafe-13 『データベース管理システム「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