์ด๋ฒ ๊ธ์์๋ Kubernetes ํ๊ฒฝ์์ ClickHouse๋ฅผ ๋ฐฐํฌ ๋ฐ ์คํํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช
ํฉ๋๋ค.
Docker Desktop์ ๋ด์ฅ Kubernetes๋ฅผ ํ์ฉํ๊ณ , Helm ๋ฐ Bitnami Helm ์ฐจํธ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐํธํ๊ฒ ClickHouse๋ฅผ ๋ฐฐํฌํฉ๋๋ค.
1. ์ฌ์ ์ค๋น
1) kubectl ์ค์น (Kubernetes CLI)
kubectl์ Kubernetes ํด๋ฌ์คํฐ๋ฅผ ๊ด๋ฆฌํ๋ ๋ช ๋ น์ค ๋๊ตฌ์ ๋๋ค.
๐น macOS
brew install kubectl
๐น Windows (PowerShell)
choco install kubernetes-cli
โ ์ค์น ํ์ธ:
kubectl version --client
2) Docker Desktop์์ Kubernetes ํ์ฑํ
Docker Desktop์๋ Kubernetes๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ํฌํจ๋์ด ์์ผ๋ฉฐ, ๊ฐ๋จํ ์ค์ ์ผ๋ก ํ์ฑํํ ์ ์์ต๋๋ค.
๐น Kubernetes ํ์ฑํ ๋ฐฉ๋ฒ
- Docker Desktop ์คํ
- Settings(์ค์ ) → Kubernetes ํญ ์ด๋
3. "Enable Kubernetes" ์ต์ ์ฒดํฌ ํ "Apply & Restart" ํด๋ฆญ
kubectl ๋ช ๋ น์ด๊ฐ ์ ์์ ์ผ๋ก ๋์ํ๋์ง ํ์ธ
kubectl version --client
kubectl get nodes # Kubernetes ๋
ธ๋ ์ํ ํ์ธ
3) Helm ์ค์น (ํจํค์ง ๋งค๋์ )
Helm์ Kubernetes์์ ์ ํ๋ฆฌ์ผ์ด์
์ ์ฝ๊ฒ ๋ฐฐํฌํ๊ณ ๊ด๋ฆฌํ ์ ์๋๋ก ๋์์ฃผ๋ ํจํค์ง ๊ด๋ฆฌ ๋๊ตฌ์
๋๋ค.
๋ก์ปฌ์ Helm์ ์ค์นํ๋ ค๋ฉด ๋ค์ ๋ช
๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
- ์์ธํ ์ค์น ๋ฐฉ๋ฒ์ ๊ณต์ ์ฌ์ดํธ๋ฅผ ์ฐธ๊ณ ํ์ธ์
๐น Helm ์ค์น (Mac)
brew install helm
๐น Helm ์ค์น (Windows)
choco install kubernetes-helm
๐น ์ค์น ํ์ธ
helm version
2. Bitnami Helm Chart๋ฅผ ์ด์ฉํ ClickHouse ์ค์น
์ด์ Bitnami์ ๊ณต์ Helm ์ฐจํธ๋ฅผ ์ฌ์ฉํ์ฌ ClickHouse๋ฅผ Kubernetes์ ๋ฐฐํฌํ๊ฒ ์ต๋๋ค. Bitnami Helm Repository ์ถ๊ฐ ํ ๋ฐฐํฌํ๋ ๋ฐฉ๋ฒ๋ ์์ง๋ง, values.yaml ํ์ผ์ ๊ธฐ๋ฐ์ผ๋ก ๋ฐฐํฌํ๋ ๋ฐฉ๋ฒ์ ์๊ฐํฉ๋๋ค.
1) ClickHouse value.yaml ํ์ผ ์์ฑ
๋จผ์ values.yaml ํ์ผ์ ์์ฑํฉ๋๋ค.
mkdir clickhouse-local && cd clickhouse-local
touch values.yaml
์์ฑ๋ ํด๋ ๊ตฌ์กฐ
โโโ clickhouse-local
โโโ values.yaml
๊ทธ๋ฆฌ๊ณ artifacthub ๋ด bitnami/clickhouse ์ ์ฅ์์ ์ ์ํ์ฌ values.yaml ์๋ณธ์ ํ์ธํฉ๋๋ค.
ํด๋น ์๋ณธ์ ์ด์ ์ ์์ฑํ values.yaml ํ์ผ์ ์ถ๊ฐํฉ๋๋ค.
2) ClickHouse ์ค์ ๋ณ๊ฒฝ
ํด๋น values.yaml ํ์ผ ๊ธฐ๋ฐ์ผ๋ก ๋ฐฐํฌํ๊ธฐ ์ํด ๋ช๊ฐ์ง ์ค์ ์ ๋ณ๊ฒฝํฉ๋๋ค.
1. Authentication ์ค์
- values.yaml์์
auth:
๋ฅผ ๊ฒ์ํฉ๋๋ค. username๊ณผ password๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค.
2. Resource ์ค์
- values.yaml์์๋ clickhouse, zookeeper์ ๋ํ ๋ฆฌ์์ค๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ์ฐ์ clickhouse์ ๋ฆฌ์์ค๋ง ๋ณ๊ฒฝํ์ฌ ๋ฐฐํฌํฉ๋๋ค.
- resourcePreset ์ค์ ์ ๋ณ๊ฒฝํ์ฌ ์ด๋ฏธ ์ง์ ๋ ๋ฆฌ์์ค๋ก ๋ฐฐํฌํ ์๋ ์์ต๋๋ค. ์์ธํ ๋ฆฌ์์ค preset ์ค์ ๋ณ cpu, memory ์ฌ์ฉ๋์ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ์๊ธฐ ๋ฐ๋๋๋ค.
- DB IDE(DBeaver, HeidiSQL ๋ฑ)์ ์ฐ๊ฒฐ์ ์ํด request(cpu: 2, memory: 1Gi) / limit(cpu:3, memory 2Gi)๋ก ์ค์ ํ์ต๋๋ค.
- ์ด๋ณด๋ค ์์ ๊ฒฝ์ฐ DBeaver์์ ์ฐ๊ฒฐ ์ MEMORY_LIMIT_EXCEED ์๋ฌ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
3. replica, shard ์ค์
- values.yaml์์
shards:
๋ฅผ ๊ฒ์ํฉ๋๋ค. ์ด๋ฒ ์ค์ต์์๋ shards 2, replicaCount 2๋ก ์ค์ ํฉ๋๋ค. - zookeeper์ replicaCount๋ฅผ 2๋ก ๋ณ๊ฒฝํฉ๋๋ค.
3) ClickHouse ๋ฐฐํฌ
์ด์ ClickHouse๋ฅผ Kubernetes ํด๋ฌ์คํฐ์ ๋ฐฐํฌํฉ๋๋ค. clickhouse-local ๋๋ ํ ๋ฆฌ์์ ์คํํฉ๋๋ค.
- ๊ฐ ๋ค์์คํ์ด์ค ๋ณ ๋ฆฌ์์ค ๊ด๋ฆฌ๋ฅผ ์ํด ๋ณ๋์ ๋ค์์คํ์ด์ค๋ฅผ ์์ฑํ์์ต๋๋ค.(clickhouse)
helm install clickhouse oci://registry-1.docker.io/bitnamicharts/clickhouse -f ./values.yaml --create-namespace --namespace clickhouse
์ค์น๊ฐ ์๋ฃ๋๋ฉด, ๋ฐฐํฌ๋ ๋ฆฌ์์ค๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
kubectl get pods -n clickhouse
์ถ๋ ฅ ์์:
NAME READY STATUS RESTARTS AGE
clickhouse-shard0-0 1/1 Running 0 53s
clickhouse-shard0-1 1/1 Running 0 78s
clickhouse-shard1-0 1/1 Running 0 53s
clickhouse-shard1-1 1/1 Running 0 78s
clickhouse-zookeeper-0 1/1 Running 0 71s
clickhouse-zookeeper-1 1/1 Running 0 87s
3. ClickHouse ์ ์ ๋ฐ ํ ์คํธ
1) Pod ๋ด๋ถ์์ ClickHouse ์ ์
ClickHouse Pod์ ์ง์ ์ ์ํ์ฌ ์ฟผ๋ฆฌ๋ฅผ ์คํํ ์ ์์ต๋๋ค.
kubectl exec -it pod/clickhouse-shard0-0 -n clickhouse -- clickhouse-client --user <username> --password <password>
์ํ ๋ฐ์ดํฐ ์ฝ์ ๋ฐ ์กฐํ
CREATE TABLE default.test_table (
id UInt32,
name String
) ENGINE = MergeTree()
ORDER BY id;
INSERT INTO default.test_table VALUES (1, 'Alice'), (2, 'Bob');
SELECT * FROM default.test_table;
ํด๋ฌ์คํฐ ๊ตฌ์ฑ ์กฐํ
select * from system.clusters
2) ์ธ๋ถ์์ ClickHouse ์ ์ (Port Forwarding)
๋ก์ปฌ ํ๊ฒฝ์์ ClickHouse์ ์ ๊ทผํ๋ ค๋ฉด ํฌํธ ํฌ์๋ฉ์ ์ค์ ํด์ผ ํฉ๋๋ค.
kubectl port-forward svc/clickhouse 8123:8123 -n clickhouse
์ด์ ์น ๋ธ๋ผ์ฐ์ ๋๋ curl ๋ช ๋ น์ด๋ก ClickHouse์ REST API์ ์ ๊ทผํ ์ ์์ต๋๋ค.
curl "http://localhost:8123/?query=SELECT%201"
์ถ๋ ฅ:
1
4. ClickHouse ์ ๋ฐ์ดํธ
values.yaml ํ์ผ ๋ด ์ค์ ๋ณ๊ฒฝ ํ ์ ๋ฐ์ดํธ ์ ๋ค์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค.
helm upgrade clickhouse oci://registry-1.docker.io/bitnamicharts/clickhouse -f ./clickhouse-local/values.yaml -n clickhouse
5. ClickHouse ์ ๊ฑฐ ๋ฐฉ๋ฒ (Cleanup)
ํ ์คํธ๊ฐ ๋๋ ํ Helm์ ์ฌ์ฉํ์ฌ ClickHouse๋ฅผ ์ญ์ ํ ์ ์์ต๋๋ค.
helm uninstall my-clickhouse
์ญ์ ๋ ๋ฆฌ์์ค ํ์ธ:
kubectl get all