Lock in $30 Savings on PRO—Offer Ends Soon! ⏳

GoogleとOracle:この二人は友達になれました~GKEでOraOperatorを動かそう~

nnaka2992
October 01, 2024

 GoogleとOracle:この二人は友達になれました~GKEでOraOperatorを動かそう~

2024 年 8 月 30 日(金)に開催されたJagu'e'r クラウドネイティブ分科会 Meetup #15にて紹介した資料です。
https://jaguer-cloud-native.connpass.com/event/324998/

Google Cloudとのパートナーシップを発表し、GKE上で動かすことが出来るようになったOracle Database をKubernetes Operator経由で動かす方法を紹介します。

nnaka2992

October 01, 2024
Tweet

More Decks by nnaka2992

Other Decks in Programming

Transcript

  1. \du 2 株式会社スリーシェイク Sreake事業部 業務内容 - DBRE兼SRE見習い - 全人類にデータベースを好きになってもらうために 活動しています

    - 自称データ雑用係 - DBAでもDBREでもデータエンジニアでも 興味あること - DBをKubernetesにのせること - SREっぽいこと - データベース関連ならなんでも Jagu’e’rにはデータベース分科会がないので、場違いじゃない範囲で いろんな分科会にお邪魔しています。 中楯 直希 @nnaka2992 @nnaka2992.bsky.social
  2. SREを主軸にクラウドネイティブ化/エンジニアリング内製化を支援 SRE/DevOps SecOps BizOps HR ・SRE総合支援からセキュリティ対 策を全方位支援 ・Geminiを用いた生成AIの活用支援 ・ワンストップで脆弱性診断を行う セキュリティ対策SaaS

    ・クラウド型ETL/データパイプ ラインSaaSの決定版 ・あらゆるSaaSをノーコードで連携 ・ハイスキルフリーランスエンジニ ア紹介エージェント IT内製化 / 高度化 クラウドネイティブ化 モダナイゼーション ITアジリティ向上
  3. Sreakeサービスの概要 SREの考え方を軸にした全方位型のご支援 クラウドネイティブインフラ・セキュリティ支援 クラウドネイティブアプリケーション開発支援 GenAI基盤構築支援 ・コンテナ化、コンテナ運用ご支援  (Kubernetesに強み) ・CI/CD環境構築支援 ・クラウドセキュリティ設計・運用支援 ・Observability設計・運用支援

    データモダナイゼーション支援 ・コンテナ化対応などクラウドネイティブ対応に関す るアプリケーション開発のご支援 ・アプリケーションモダナイゼーション支援 ・バックエンド開発支援(Go, Python, TypeScript) ・フロントエンド開発支援(Vue, React) ・BigQuery/Dataplex データ基盤構築支援 ・BI(Looker)構築をフルスタックで支援 ・Snowflakeメインのデータ基盤構築支援 ・DBRE支援(Spanner/AlloyDB) ・NewSQL(TiDB, YugabyteDB)支援 ・VertexAIシリーズ構築運用内製化支援 ・外部SaaS連携支援 ・Gemini API導入支援 ・AI CCoE立ち上げ支援 ・SRE LLMの提供 • 高度な技術力と幅広い領域の経験を持つエンジニアが多数在籍しており、伴走型でお客様に最適なクラウドネイティブ対応の ご支援を行います。 • インフラ・アプリケーション・セキュリティなど含め全方位型で対応可能です。 SREの考え方を元に運用まで見据えたご支援を行います。
  4. 今日はなすこと 13 今日はなすこと ✅ Oracle Database Operator for Kubernetesの紹介 ✅

    GKE上での動作デモ 今日はなさないこと ❌ Oracle Databaseのライセンス体型
  5. OraOperatorの紹介 15 Oracle Database Operator for Kubernetes¹とは • Oracleが中心となって開発している「Oracle DatabaseをKubernetse

    Nativeにする」オペレーター • 大きく分けて3種類の機能を提供している 1. https://github.com/oracle/oracle-database-operator
  6. OraOperatorの紹介 16 Oracle Database Operator for Kubernetes¹とは • Oracleが中心となって開発している「Oracle DatabaseをKubernetse

    Nativeにする」オペレーター • 大きく分けて3種類の機能を提供している ◦ OCI²にリソースを展開する機能 ◦ Kubernetes上にOracle Databaseをデプロイする機能 ◦ Kubernetes上のOracle Database運用を楽にする機能 1. https://github.com/oracle/oracle-database-operator 2. Oracle Cloud Infrastructureの略
  7. OraOperatorの紹介 17 Oracle Database Operator for Kubernetes¹とは • Oracleが中心となって開発している「Oracle DatabaseをKubernetse

    Nativeにする」オペレーター • 大きく分けて3種類の機能を提供している ◦ OCI²にリソースを展開する機能 ◦ Kubernetes上にOracle Databaseをデプロイする機能 ◦ Kubernetes上のOracle Database運用を楽にする機能 1. https://github.com/oracle/oracle-database-operator 2. Oracle Cloud Infrastructureの略
  8. OraOperatorの紹介 18 Oracle Database Operator for Kubernetes¹とは • Oracleが中心となって開発している「Oracle DatabaseをKubernetse

    Nativeにする」オペレーター • 大きく分けて3種類の機能を提供している ◦ OCI²にリソースを展開する機能 ◦ Kubernetes上にOracle Databaseをデプロイする機能 ◦ Kubernetes上のOracle Database運用を楽にする機能 今日はOracle DatabaseをGKEにデプロイする部分をデモします 1. https://github.com/oracle/oracle-database-operator 2. Oracle Cloud Infrastructureの略
  9. OraOperatorデモ: 環境セットアップ 19 GKEをプロビジョニングしたTerraformコード # ./module/network/main.tf resource "google_compute_network" "main" {

    name = "${var.project_name}-network" auto_create_subnetworks = false routing_mode = "GLOBAL" mtu = 1460 } resource "google_compute_subnetwork" "main" { name = "${var.project_name}-subnetwork" network = google_compute_network.main.id region = var.region ip_cidr_range = var.subnetwork.primary_ip_cidr secondary_ip_range { range_name = "${var.project_name}-range-pods" ip_cidr_range = var.subnetwork.secondary_ip_pods_cidr } secondary_ip_range { range_name = "${var.project_name}-range-services" ip_cidr_range = var.subnetwork.secondary_ip_services_cidr } } # ./main.tf module "network" { source = "./modules/network" project_name = var.project_id region = var.region subnetwork = { primary_ip_cidr = var.subnetwork.primary_ip_cidr secondary_ip_pods_cidr = cidrsubnet(var.subnetwork.secondary_ip_cidr, 4, 0) secondary_ip_services_cidr = cidrsubnet(var.subnetwork.secondary_ip_cidr, 4, 1) } } # ./main.tf module "gke" { source = "terraform-google-modules/kubernetes-engine/google" version = "31.1.0" project_id = var.project_id name = "${var.project_id}-cluster" regional = false region = var.region zones = ["${var.region}-a", "${var.region}-b", "${var.region}-c"] network = module.network.network_name subnetwork = module.network.subnetwork_name # ip_range_pods with /20 CIDR block ## witch is 4096 addresses and 16 nodes in max. ip_range_pods = module.network.subnetwork_secondary_ip_cidr_pods_range_name # ip_range_services with /20 CIDR block ## witch is 4096 services. ip_range_services = module.network.subnetwork_secondary_ip_cidr_services_range_name create_service_account = true enable_binary_authorization = false deletion_protection = false stateful_ha = true node_pools = [ { name = "default-pool" machine_type = "e2-standard-8" min_count = 0 max_count = 1 disk_size_gb = 20 disk_type = "pd-standard" local_ssd_count = 0 preemptible = true initial_node_count = 1 } ] remove_default_node_pool = true }
  10. OraOperatorデモ: Operatorのインストール 20 GKEにオペレーターをインストールする # certmanagerをインストール > kubectl apply -f

    https://github.com/cert-manager/cert-manager/releases/download/v1.14.4/cert-manager.yaml # Operatorのリポジトリをクローン > git clone https://github.com/oracle/oracle-database-operator.git # rbacをGKEにApply > kubectl apply -f oracle-database-operator/rbac/cluster-role-binding.yaml # OperatorをGKEに作成 > kubectl apply -f oracle-database-operator/oracle-database-operator.yaml # Operatorが起動していることを確認 > kubectl get pods -n oracle-database-operator-system NAME READY STATUS RESTARTS AGE oracle-database-operator-controller-manager-5b55c7b74d-4jjhz 1/1 Running 0 9m3s oracle-database-operator-controller-manager-5b55c7b74d-hxbt5 1/1 Running 0 9m3s oracle-database-operator-controller-manager-5b55c7b74d-mkwmf 1/1 Running 0 9m3s
  11. OraOperatorデモ: Oracle Databaseの起動 21 Oracle Databaseを起動する # oracle のコンテナレジストリの認証情報を登録 >

    kubectl create secret docker-registry oracle-container-registry-secret --docker-server=container-registry.oracle.com --docker-username='<oracle-sso-email-address>' --docker-password='<container-registry-auth-token>' --docker-email='<oracle-sso-email-address>' # SingleInstanceDatabaseリソースを作成 > kubectl apply -f ./singleinstancedatabase_free.yaml > kubectl get singleinstancedatabase sidb-sample NAME EDITION STATUS VERSION CONNECT STR TCPS CONNECT STR OEM EXPRESS URL sidb-sample Free    Healthy 23.5.0.0.0 10.0.25.54:1521/ORCL1 Unavailable https://10.0.25.54:5500/em
  12. OraOperatorデモ: Operatorのインストール 22 Applyしたyamlファイルの内容 apiVersion: database.oracle.com/v1alpha1 kind: SingleInstanceDatabase metadata: name:

    freedb-sample namespace: default spec: sid: FREE edition: free adminPassword: secretName: db-admin-secret image: pullFrom: container-registry.oracle.com/database/free:latest prebuiltDB: true persistence: size: 50Gi storageClass: "standard-rwo" # GKEのCSIドライバー accessMode: "ReadWriteOnce" replicas: 1 # Freeエディションでは 1podのみ
  13. 感想 23 動かしてみての感想 • 他のDB Operatorに比べて面倒な部分が多い ◦ imageを配布するコンテナレジストリにログインが必要 • Podの立ち上げに時間がかかる

    ◦ Oracle Database自体がPostgreSQL/MySQLに比べると起動に時 間がかかるため • データのレプリケーションの設定が面倒そう(未検証) ◦ DataGuard(Oracle DBのレプリケーションツール)をCRDとして起動 する必要がある ◦ 他DBのOperatorだとDBリソースのYamlファイルに Replication: trueなどするとレプリケーションされる。