CockroachDBのクラスタをk8s上につくる
https://1.bp.blogspot.com/-BW1xWO4cXWE/XTPouGWYOxI/AAAAAAABT1g/48Xrv_nz604N1ZvOTFhla2Xv5pNx_bIFgCLcBGAs/s450/yuenchi_viking.png
GKE へのデプロイが公式に対応している。EKS には公式には対応してないみたい。動かせないということはないと思われる。 Operator のセットアップ
code:sh
これで Operator のセットアップが出来た。(なんか折り返されてるけど気にしない)
Operator の Pod は 操作中のコンテキスト default namespace 中に出てくる。
code:sh
❯ kubectl get pods --namespace default
NAME READY STATUS RESTARTS AGE
cockroach-operator-85c5cc86db-7brrm 1/1 Running 0 28m
クラスタの設定
設定の雛形が用意されているので、まずはダウンロード。
code:sh
デフォルトでは node: 3 となっていて 3台でクラスタを作ろうとする。
リソース制限についてはデフォルトではコメントアウトされているので、必要に応じて解除、設定を行う。
ちなみに、本番環境向けハードウェア要件は公式によれば以下の通り。
なお Persistence Volume Claim がデフォルトだと 60Gi とかになっていて Docker for Windows などの環境ではストレージ不足になったりしないように注意。ちなみにこの容量は、クラスタ全体の容量ではなくノードごとの容量になる。 table: ハードウェア要件
Value Recommendation Reference
RAM per vCPU 4 GiB CPU and memory
Capacity per vCPU 150 GiB Storage
IOPS per vCPU 500 Disk I/O
MB/s per vCPU 30 Disk I/O
ひとまず今回はテスト用なので、request limit ともに cpu:2 memory: 2Gi ですすめる。
ファイルが出来たら kubectl apply -f ./<path-to-manifest>.yaml で適用する。
node 3つで正常に起動したらこんな感じになるはず。
code:sh
NAME READY STATUS RESTARTS AGE
cockroach-operator-6f7b86ffc4-9t9zb 1/1 Running 0 3m22s
cockroachdb-0 1/1 Running 0 2m31s
cockroachdb-1 1/1 Running 1 102s
cockroachdb-2 1/1 Running 0 46s
上手にできました
SQLクライアントを叩いてみる
おなじみの kubectl exec を使って SQLシェルをとってクエリを投げてみる。
--certs-dir はクライアント証明の関係らしく Operator が Pod を上げたりするときに全部用意してくれている。規定のディレクトにあるので公式のサンプル同様設定しておく。ちなみに certs-dir の指定を外すと認証で蹴られてシェルを取れないようになっていた。
code:sh
kubectl exec -it cockroachdb-1 -- ./cockroach sql --certs-dir cockroach-certs
code:sh
#
# Welcome to the CockroachDB SQL shell.
# All statements must be terminated by a semicolon.
# To exit, type: \q.
#
# Server version: CockroachDB CCL v20.2.7 (x86_64-unknown-linux-gnu, built 2021/03/29 17:52:00, go1.13.14) (same version as client)
# Cluster ID: 246018d6-4ee4-45f2-852b-9d65e4d81889
#
# Enter \? for a brief introduction.
#
root@:26257/defaultdb>
code:sql
CREATE DATABASE bank;
CREATE TABLE bank.accounts (id INT PRIMARY KEY, balance DECIMAL);
INSERT INTO bank.accounts VALUES (1, 1000.50);
SELECT * FROM bank.accounts;
このあと使いたいのでこのタイミングで管理ユーザーを作成しておく。
(ユーザー名とパスワードは公式ドキュメントより。)
code:sql
CREATE USER roach WITH PASSWORD 'Q7gc8rEdS';
GRANT admin TO roach;
\l と叩くと 作った database が見える。\q とだけ叩くと、シェルが閉じる。
今回は最初からクラスタを作っている状態なので他の node にアクセスしても同じ情報を確認できる。
AdminUI を試してみる
Operator によってAdminUIのPodも起動しているので、kubectl port-forward を使って localhost:8080 で使えるようにしてみる。(自己証明書でHTTPSが使えるようになっているのでHTTPSのエラーは出る。)
code:sh
❯ kubectl port-forward service/cockroachdb-public 8080
Forwarding from 127.0.0.1:8080 -> 8080
Forwarding from ::1:8080 -> 8080 Handling connection for 8080
Handling connection for 8080
...
アクセスすると画面はこんな感じ。
https://gyazo.com/4aae55a52245426d9313e612ae36fdfe
Metricsにアクセスするとレプリカの状態を確認したりなどなどできる。
https://gyazo.com/3b6594ca17aff2f664378727d1fb46f5
Prometheus を使ってモニタリングする
Admin UI の API に状態を取れるエンドポイントが https://localhost:8080/_status/vars のような感じで用意されている。