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

TiDB Operatorの紹介

PingCAP-Japan
November 01, 2023

TiDB Operatorの紹介

ウェビナー開催日:2023年11月01日

本スライドでは、TiDBをKubernetes環境でご利用いただくために必要なTiDB Operatorについて紹介します。TiDB Operatorを用いることで、kindなどお手元の環境や、Amazon EKSなどのパブリッククラウドで動作させることが可能です。

TiDB Operatorを利用した環境で、実際にTiDBクラスタのデプロイやアップグレード、フェイルオーバーの動作、スケールアウトの動作について、デモ環境を用いて紹介いたします。

トピック
・TiDB Operatorとは
・TiDB Operatorを利用したTiDBクラスタのデプロイ
・TiDB Operatorを利用したTiDBのアップグレード、フェイルオーバー時の動作

アーカイブ動画
https://youtu.be/S53BGdUYtaA

PingCAP-Japan

November 01, 2023
Tweet

More Decks by PingCAP-Japan

Other Decks in Technology

Transcript

  1. これまでのウェビナースケジュール https://pingcap.co.jp/event/ 
 
 2023年3月2日(木) 14:00-15:00 ハンズオン TiDB Cloud Serverless

    TierとChatGPTのSQL生成を試してみ よう! 2023年3月24日(木) 14:00 - 15:00 TiFlashの紹介 2023年4月13日(木) 14:00 - 15:00 TiDBにおけるSQLチューニング SQL bindingのご紹介 2023年5月18日(木) 14:00 - 15:00 TiDB 7.0 DMR新機能の紹介 2023年6月15日(木) 14:00 - 15:00 【TiDB Serverless GA直前】TiDB新章。Serverless + Data API + AIによる新 たな活用 2023年7月27日(木) 14:00-15:00 TiDB Cloud最新状況の紹介 2023年9月14日(木) 14:00-15:00 TiDBとMySQLの互換性改善アップデート 2023年11月1日(木) 14:00-15:00 TiDB Operatorの紹介 ※過去開催アーカイブ:https://pingcap.co.jp/event-video/
  2. TiDB Operatorとは • Operatorとは ◦ https://kubernetes.io/ja/docs/concepts/extend-kubernetes/operator/ “オペレーターはカスタムリソースを使用する Kubernetesへのソフトウェア拡張です。 オペレーター は、特に制御ループのような

    Kubernetesが持つ仕組みに準拠しています。 ” ◦ データベースなどステートフルなサービスを提供するために利用されます • TiDB Operatorとは ◦ TiDBクラスタをKubernetes (K8s) 環境で動作させるために必要なオペレーターです ◦ https://github.com/pingcap/tidb-operator ◦ Apache License 2.0 ◦ 現在の最新バージョンは v1.5.1
  3. Custom Resource Definition(CRD)とは • TiDBをK8s環境で動作させるために必要なリソース • TiDB用に作成定義されている主な CRD ◦ Backup

    TiDB clusterバックアップ用 ◦ BackupSchedule TiDB clusterの定期的なバックアップ用 ◦ Restore TiDB clusterリストア用 ◦ TidbCluster TIDB clusterのあるべき姿を記述 ◦ TidbInitializer TiDB clusterの初期化用 ◦ TidbMonitor TiDB clusterのモニタリングコンポーネント ◦ DMCluster, TidbDashboard ,TidbNGMonitoring • https://github.com/pingcap/tidb-operator/blob/master/manifests/crd.yaml
  4. TiDB Operatorを利用可能なK8s環境 • 今回利用する環境 ◦ K3s https://k3s.io/ • テスト用 ◦

    minikube ◦ kind • 本番運用 ◦ Amazon Elastic Kubernetes Service (EKS) ◦ Google Kubernetes Engine (GKE)等 • Note ◦ 今回利用する K3s 環境は動作確認用に用いるもので、本番環境での利用対象ではありません ◦ https://docs.pingcap.com/tidb-in-kubernetes/dev/tidb-operator-overview
  5. K3sとは • SUSEから提供されている IoTやEdge computing向きの軽量K8s環境 ◦ https://k3s.io/ • K3sはRed Hat

    Enterprise Linux, Ubuntu, Raspberry PiなどのLinuxで動作 ◦ https://github.com/k3s-io/k3s/issues/55#issuecomment-783667843 ▪ “I've only ever heard @ibuildthecloud (the creator) pronounce it as "kay three ess" :-D”
  6. K3sのインストール • K3sはmacOSでは直接動作しないので、Multipassを利用してUbuntuをVMとして利用 ◦ Ubuntuが直接利用可能であればそちらもご利用いただけます • % brew install multipass

    • cloud-init.yaml の作成: 内部でK3sのインストールとHelm(K8sのパッケージマネージャー)をインストール # cloud-init.yaml repo_update: true repo_upgrade: all runcmd: - 'curl -sfL https://get.k3s.io | sh -' - 'curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash' ssh_authorized_keys: - ${HOME}/.ssh/id_ed25519.pub
  7. K3sのインストール • multipassによるUbuntu Linux 22.04の起動 • multipass launch --cpus 8

    --memory 8G --disk 20G --name k3s --cloud-init cloud-init.yaml ◦ 発表者の環境(MacBook Pro Intel Core i7 16GBメモリ)約90秒 ◦ 後ほどスケールアウトを行うのでリソースを多めに割り当てています ◦ スケールアウトを行わない場合、下記のリソース割り当てで動作することを確認しています ◦ multipass launch --cpus 4 --memory 4G --disk 10G --name k3s --cloud-init cloud-init.yaml • Ubuntu Linux 22.04へのログイン • % multipass shell k3s
  8. sudo なしで kubectl を実施可能にする(optional) • Non rootユーザー (ubuntu)でkubectlを実施可能にします mkdir -p

    ~/.kube sudo kubectl config view --raw >> ~/.kube/config chmod 600 ~/.kube/config echo "export KUBECONFIG=~/.kube/config" >> ~/.bashrc source ~/.bashrc
  9. CRDのインストール • TiDB Operator v1.5.1のCRDが定義されたyamlファイルを(crd.yaml)適用します • コマンド ◦ kubectl create

    -f https://raw.githubusercontent.com/pingcap/tidb-operator/v1.5. 1/manifests/crd.yaml ◦ kubectl get crd • 出力結果 ◦ CRDが作成されます
  10. TiDB Operatorのインストール • TiDB Operator v1.5.1をインストールします • コマンド ◦ helm

    search repo pingcap ◦ helm install --namespace tidb-admin tidb-operator pingcap/tidb-operator --version v1.5.1 • 出力結果
  11. tidb-controllerとtidb-scheduler podの動作確認 • tidb-schedulerとtidb-controller-manager podの確認 ◦ tidb-scheduler (K8sのバージョンが1.19以上であればオプション ) ▪

    TiDB用のK8sスケジューラー拡張 ◦ tidb-controller-manager ▪ TiDB用のK8sカスタムコントローラーで、 TidbClusterオブジェクトの「あるべき姿」と現状 を比較し、あるべき姿に近づける • コマンド ◦ kubectl get pods --namespace tidb-admin -l app.kubernetes.io/instance=tidb-operator • 出力結果
  12. tidb-cluster.yaml ファイルの取得と編集 • TiDB cluster (kind: TidbCluster) を作成するyamlファイルをダウンロード ◦ 後述のバージョンアップのためにv6.5.5を利用するようにyamlファイルを書き換えます

    ◦ https://github.com/pingcap/tidb-operator/tree/v1.5.1/examples 配下に多数のyamlファイルの例があります ◦ 今回のyamlファイルは、本番環境では利用しないでください # IT IS NOT SUITABLE FOR PRODUCTION USE. # This YAML describes a basic TiDB cluster with minimum resource requirements, # which should be able to run in any Kubernetes cluster with storage support. • コマンド wget https://raw.githubusercontent.com/pingcap/tidb-operator/v1.5.1/examples/basic/tidb-cluster.yaml sed -i 's/v7.1.1/v6.5.5/g' tidb-cluster.yaml • 出力結果
  13. basic-tidbサービスのClusterIPにポートフォワード • TiDB クラスタの `basic-tidb` サービスに外部から接続するためポートフォワードを設定します • コマンド ◦ kubectl

    get svc -n tidb-cluster ◦ kubectl port-forward --address 0.0.0.0 -n tidb-cluster svc/basic-tidb 4000 • 出力結果 ◦ note: kubectl port-forwardコマンドはプロンプトを返しません
  14. TiDBのアップグレード • TiDBのアップグレードは、 cluster.yamlに記載された version を更新し、宣言的に行います • コマンド ◦ sed

    -i 's/v6.5.5/v7.1.2/g' tidb-cluster.yaml ◦ kubectl -n tidb-cluster apply -f tidb-cluster.yaml • 出力結果
  15. スケールアウト • TiDBのアップグレードは、 cluster.yamlに記載された replicas を更新し、宣言的に行います • コマンド ◦ sed

    -i 's/replicas: 1/replicas: 3/g' tidb-cluster.yaml ◦ kubectl -n tidb-cluster apply -f tidb-cluster.yaml • 出力結果
  16. スケールアウトの順序 • TiDBでは以下の順番で対応する podが追加されます ◦ PDサーバー (basic-pd1, basic-pd2) ◦ TiKVサーバー

    (basic-tikv-1, basic-tikv-2) ◦ TiDBサーバー (basic-tidb-1, basic-tidb-2) • コマンド ◦ kubectl get pods -n tidb-cluster
  17. 環境のクリーンアップ • クラスタの削除 (Ubuntu Linux) $ kubectl -n tidb-cluster delete

    -f tidb-cluster.yaml $ tidbcluster.pingcap.com "basic" deleted $ kubectl delete namespace tidb-cluster $ kubectl delete -f https://raw.githubusercontent.com/pingcap/tidb-operator/v1.5.1/manifests/crd.yaml $ helm uninstall -n tidb-admin tidb-operator $ kubectl delete namespace tidb-admin • K3sの削除 (macOS) % multipass stop k3s % multipass delete k3s % multipass purge • multipassの削除 (macOS) % brew uninstall multipass
  18. Q&A