LoginSignup
2
0

k3sを使ってTiDB Operatorをmacosで動かしてみた

Last updated at Posted at 2023-10-03

オープンソース版のTiDB(TiDB Community)では、ローカルホストやオンプレミスなど様々な環境でTiDBを動作させることができます。このTiDB Community、TiUPと呼ばれるツールを使い必要なプロセスをインストール、起動する方法と、HelmとOperatorを使ってK8s上で動作させる方法があります。

macOSでもTiUPを使ってローカルでTiDBを動かすことができます。ただ、TiDB Operatorの動作確認などK8s環境で動かしたいときもあります。軽量K8sのK3sを利用してmacosでTiDBを動作させてみたので手順を紹介します。

K3s環境の構築

Multipassのインストール

K3sをmacOSで動作させるために、Ubuntu仮想マシンを簡単に起動できるMultipassをインストールします。Multipassはbrewで簡単にインストールできます。

brew install multipass

K3s, Helmをインストール済みのUbuntuを起動

Multipassを使ってUbuntuを起動します。Multipassではcloud-initが利用できるので、cloud-initでK3s, helmをインストールしておきます。また、TiDB Operatorを動かすにはストレージがデフォルトの5GBだと不足するので、10GBで起動します。

まず、cloud-initのyamlファイルを作成します。

# 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:
  - <あなたのssh公開鍵へのパス>

次にこれを使ってイメージを作成、起動します。

multipass launch --cpus 4 --memory 4G --disk 10G --name k3s --cloud-init cloud-init.yaml

作成できたら、ログインしてみます。

multipass shell k3s

TiDB Operatorのインストール

無事イメージが作成できたら、Ubuntu上でTiDB Operatorをインストールしていきます。

K3s設定

標準ではK3sはsudoでkubectlを動かすようになっています。これだとコマンドを実行するとき少し不便なので、ubuntuユーザーでも実行出来るようにしておきます。

mkdir -p ~/.kube
sudo kubectl config view --raw >> ~/.kube/config
chmod 600 ~/.kube/config
echo "export KUBECONFIG=~/.kube/config" >> ~/.bashrc
source ~/.bashrc

TiDB Operatorのインストール

ここからの手順は基本的にCreating a Kubenetes Cluster using minikubeの手順に沿っています。

Operatorのバージョンなどは適宜修正してください。

# CRDのインストール
kubectl create -f https://raw.githubusercontent.com/pingcap/tidb-operator/master/manifests/crd.yaml
# helmリポジトリの追加
helm repo add pingcap https://charts.pingcap.org/
# namespace作成
kubectl create namespace tidb-admin
# tidb operatiorのインストール。バージョンは適宜修正
helm install --namespace tidb-admin tidb-operator pingcap/tidb-operator --version v1.5.0-beta.1
# podが立ち上がっていることの確認
kubectl get pods --namespace tidb-admin -l app.kubernetes.io/instance=tidb-operator

最後のpodの確認で、tidb-controller-managerとtidb-schedulerが必要数起動していればOKです。

TiDBクラスタの作成

TiDBクラスタを作成します。TiDBクラスタの作成には少し時間がかかります。

# クラスタ作成。時間がかかる。
kubectl create namespace tidb-cluster && \
    kubectl -n tidb-cluster apply -f https://raw.githubusercontent.com/pingcap/tidb-operator/master/examples/basic/tidb-cluster.yaml
# クラスタが起動するまで確認。起動したら Ctrl-Cで中断し先に進む
# basic-pd, basic-tikv, basic-tidb が起動するまで待つ。pd -> tikv -> tidbの順に起動する
watch kubectl get po -n tidb-cluster
# TiDB Dashboardの作成
kubectl -n tidb-cluster apply -f https://raw.githubusercontent.com/pingcap/tidb-operator/master/examples/basic/tidb-dashboard.yaml
# モニタリングの作成
kubectl -n tidb-cluster apply -f https://raw.githubusercontent.com/pingcap/tidb-operator/master/examples/basic/tidb-monitor.yaml
# dashboardとmonitoringが起動するまで確認。起動したら Ctrl-Cで中断し先に進む
watch kubectl get po -n tidb-cluster

TiDBへの接続

podが全て想定数起動していれば、TiDBクラスタが作成できています。ここからはTiDB、TiDB Dashboard、Grafanaに接続していきます。

ポートフォーワード設定

TiDBクラスタを動作させているUbuntu上で、下記のコマンドを実行します。

kubectl port-forward --address 0.0.0.0 -n tidb-cluster svc/basic-tidb 4000 > pf4000.out &
kubectl port-forward --address 0.0.0.0 -n tidb-cluster svc/basic-grafana 3000 > pf3000.out &
kubectl port-forward --address 0.0.0.0 -n tidb-cluster svc/basic-tidb-dashboard-exposed 12333 > pf12333.out &

これでK3s上のTiDBクラスタに外部から接続できるようになります。
別のターミナルを開いて、今度はmacOS側からMultipassを使い、実行中のK3sのIPアドレスを確認します。

multipass list 
Name                    State             IPv4             Image
k3s                     Running           <IP>             Ubuntu 22.04 LTS

このIPv4列がK3sが実行されているUbuntuのIPです。macOS側からはこのIPを使って先ほどポートフォーワード設定をしたサービスに接続します。いくつかIPが表示された場合は、プライベートアドレスのものを利用してください。

# mysqlに接続
mysql -u root -h <IP> -P 4000

また、http://:3000 でGrafanaに、http://:12333 でTiDB Dashboardにアクセスできます。

この状態での利用リソースはメモリ3.6GB、ディスク6GBというところでした。pd/tikv が1台、tidbが2台という構成なので、あまりPlaygroundと変わらないです。基本的にHelm/Operatorの動作や手順確認等で利用して、実際のワークロードはクラウド上のマネージドK8sサービスを使うのが良いのではと思います。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0