Skip to content

Commit 87513b0

Browse files
committed
add containerization
1 parent b90bb1a commit 87513b0

File tree

4 files changed

+445
-0
lines changed

4 files changed

+445
-0
lines changed

CN/modules/ROOT/nav.adoc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
* IvorySQL高级
99
** xref:v4.6/6.adoc[安装指南]
1010
** xref:v4.6/7.adoc[集群搭建]
11+
** 容器化指南
12+
*** xref:v4.6/37.adoc[K8S部署]
1113
** xref:v4.6/8.adoc[开发者指南]
1214
** xref:v4.6/9.adoc[运维管理指南]
1315
** xref:v4.6/10.adoc[迁移指南]

CN/modules/ROOT/pages/v4.6/37.adoc

Lines changed: 221 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,221 @@
1+
2+
:sectnums:
3+
:sectnumlevels: 5
4+
5+
= k8s部署单机容器和高可用集群
6+
7+
== 单机容器
8+
进入k8s集群的master节点上,创建名为ivorysql的namespace
9+
```
10+
[root@k8s-master ~]# kubectl create ns ivorysql
11+
```
12+
13+
下载最新docker_library代码
14+
```
15+
[root@k8s-master ~]# git clone https://github.com/IvorySQL/docker_library.git
16+
```
17+
18+
进入单机目录
19+
```
20+
[root@k8s-master ~]# cd docker_library/k8s-cluster/single
21+
[root@k8s-master single]# vim statefulset.yaml #根据个人环境自行修改statefulset中的pvc信息及数据库密码
22+
```
23+
24+
使用statefulset.yaml创建一个单机pod
25+
```
26+
[root@k8s-master single]# kubectl apply -f statefulset.yaml
27+
service/ivorysql-svc created
28+
statefulset.apps/ivorysql created
29+
```
30+
31+
等待pod创建成功
32+
```
33+
[root@k8s-master single]# kubectl get all -n ivorysql
34+
NAME READY STATUS RESTARTS AGE
35+
pod/ivorysql-0 0/1 ContainerCreating 0 47s
36+
37+
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
38+
service/ivorysql-svc NodePort 10.108.178.236 <none> 5432:32106/TCP,1521:31887/TCP 47s
39+
40+
NAME READY AGE
41+
statefulset.apps/ivorysql 0/1 47s
42+
[root@k8s-master single]# kubectl get all -n ivorysql
43+
NAME READY STATUS RESTARTS AGE
44+
pod/ivorysql-0 1/1 Running 0 2m39s
45+
46+
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
47+
service/ivorysql-svc NodePort 10.108.178.236 <none> 5432:32106/TCP,1521:31887/TCP 2m39s
48+
49+
NAME READY AGE
50+
statefulset.apps/ivorysql 1/1 2m39s
51+
```
52+
53+
psql连接IvorySQL的PG端口
54+
```
55+
[root@k8s-master single]# psql -U ivorysql -p 32106 -h 127.0.0.1 -d ivorysql
56+
Password for user ivorysql:
57+
58+
ivorysql=# select version();
59+
version
60+
------------------------------------------------------------------------------------------------------------------------
61+
PostgreSQL 17.6 (IvorySQL 4.6) on x86_64-pc-linux-gnu, compiled by gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-28), 64-bit
62+
(1 row)
63+
64+
ivorysql=# show ivorysql.compatible_mode;
65+
ivorysql.compatible_mode
66+
--------------------------
67+
pg
68+
(1 row)
69+
70+
ivorysql=# exit
71+
```
72+
73+
psql连接IvorySQL的Oracle端口
74+
```
75+
[root@k8s-master single]# psql -U ivorysql -p 31887 -h 127.0.0.1 -d ivorysql
76+
Password for user ivorysql:
77+
78+
ivorysql=# select version();
79+
version
80+
------------------------------------------------------------------------------------------------------------------------
81+
PostgreSQL 17.6 (IvorySQL 4.6) on x86_64-pc-linux-gnu, compiled by gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-28), 64-bit
82+
(1 row)
83+
84+
ivorysql=# show ivorysql.compatible_mode;
85+
ivorysql.compatible_mode
86+
--------------------------
87+
oracle
88+
(1 row)
89+
```
90+
91+
== 高可用集群
92+
93+
进入k8s集群的master节点上,创建名为ivorysql的namespace
94+
```
95+
[root@k8s-master ~]# kubectl create ns ivorysql
96+
```
97+
98+
下载最新docker_library代码
99+
```
100+
[root@k8s-master ~]# git clone https://github.com/IvorySQL/docker_library.git
101+
```
102+
103+
进入高可用集群目录
104+
```
105+
[root@k8s-master ~]# cd docker_library/k8s-cluster/ha-cluster/helm_charts
106+
[root@k8s-master single]# vim values.yaml #根据个人环境自行values.yaml中的pvc信息及集群规模等信息,数据库密码查看templates/secret.yaml并自行修改。
107+
```
108+
109+
使用Helm(https://helm.sh/docs/intro/install/)命令部署高可用集群
110+
```
111+
[root@k8s-master helm_charts]# helm install ivorysql-ha-cluster -n ivorysql .
112+
NAME: ivorysql-ha-cluster
113+
LAST DEPLOYED: Wed Sep 10 09:45:36 2025
114+
NAMESPACE: ivorysql
115+
STATUS: deployed
116+
REVISION: 1
117+
TEST SUITE: None
118+
[root@k8s-master helm_charts]# kubectl get all -n ivorysql
119+
NAME READY STATUS RESTARTS AGE
120+
pod/ivorysql-patroni-hac-0 1/1 Running 0 42s
121+
pod/ivorysql-patroni-hac-1 0/1 Running 0 18s
122+
123+
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
124+
service/ivorysql-patroni-hac NodePort 10.96.119.203 <none> 5432:32391/TCP,1521:32477/TCP 42s
125+
service/ivorysql-patroni-hac-config ClusterIP None <none> <none> 42s
126+
service/ivorysql-patroni-hac-pods ClusterIP None <none> <none> 42s
127+
service/ivorysql-patroni-hac-repl NodePort 10.100.122.0 <none> 5432:30111/TCP,1521:32654/TCP 42s
128+
129+
NAME READY AGE
130+
statefulset.apps/ivorysql-patroni-hac 1/3 42s
131+
```
132+
133+
等待所有pod均运行成功,集群部署成功
134+
```
135+
[root@k8s-master helm_charts]# kubectl get all -n ivorysql
136+
NAME READY STATUS RESTARTS AGE
137+
pod/ivorysql-patroni-hac-0 1/1 Running 0 88s
138+
pod/ivorysql-patroni-hac-1 1/1 Running 0 64s
139+
pod/ivorysql-patroni-hac-2 1/1 Running 0 41s
140+
141+
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
142+
service/ivorysql-patroni-hac NodePort 10.96.119.203 <none> 5432:32391/TCP,1521:32477/TCP 88s
143+
service/ivorysql-patroni-hac-config ClusterIP None <none> <none> 88s
144+
service/ivorysql-patroni-hac-pods ClusterIP None <none> <none> 88s
145+
service/ivorysql-patroni-hac-repl NodePort 10.100.122.0 <none> 5432:30111/TCP,1521:32654/TCP 88s
146+
NAME READY AGE
147+
statefulset.apps/ivorysql-patroni-hac 3/3 88s
148+
```
149+
150+
使用psql连接集群主节点的PG、Oracle端口
151+
```
152+
[root@k8s-master helm_charts]# psql -U ivorysql -p 32391 -h 127.0.0.1 -d ivorysql
153+
Password for user ivorysql:
154+
155+
ivorysql=# show ivorysql.compatible_mode;
156+
ivorysql.compatible_mode
157+
--------------------------
158+
pg
159+
(1 row)
160+
161+
ivorysql=# SELECT pg_is_in_recovery();
162+
pg_is_in_recovery
163+
-------------------
164+
f
165+
(1 row)
166+
167+
ivorysql=# exit
168+
[root@k8s-master helm_charts]# psql -U ivorysql -p 32477 -h 127.0.0.1 -d ivorysql
169+
Password for user ivorysql:
170+
171+
ivorysql=# show ivorysql.compatible_mode;
172+
ivorysql.compatible_mode
173+
--------------------------
174+
oracle
175+
(1 row)
176+
177+
ivorysql=# SELECT pg_is_in_recovery();
178+
pg_is_in_recovery
179+
-------------------
180+
f
181+
(1 row)
182+
183+
ivorysql=#
184+
```
185+
186+
使用psql连接集群备节点的PG、Oracle端口
187+
```
188+
[root@k8s-master helm_charts]# psql -U ivorysql -p 30111 -h 127.0.0.1 -d ivorysql
189+
Password for user ivorysql:
190+
191+
ivorysql=# show ivorysql.compatible_mode;
192+
ivorysql.compatible_mode
193+
--------------------------
194+
pg
195+
(1 row)
196+
197+
ivorysql=# SELECT pg_is_in_recovery();
198+
pg_is_in_recovery
199+
-------------------
200+
t
201+
(1 row)
202+
203+
ivorysql=# exit
204+
205+
[root@k8s-master helm_charts]# psql -U ivorysql -p 32654 -h 127.0.0.1 -d ivorysql
206+
Password for user ivorysql:
207+
208+
ivorysql=# show ivorysql.compatible_mode;
209+
ivorysql.compatible_mode
210+
--------------------------
211+
oracle
212+
(1 row)
213+
214+
ivorysql=# SELECT pg_is_in_recovery();
215+
pg_is_in_recovery
216+
-------------------
217+
t
218+
(1 row)
219+
220+
ivorysql=#
221+
`````

EN/modules/ROOT/nav.adoc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
* IvorySQL Advanced Feature
99
** xref:v4.6/6.adoc[Installation]
1010
** xref:v4.6/7.adoc[Building Cluster]
11+
** Containerization
12+
*** xref:v4.6/37.adoc[K8S]
1113
** xref:v4.6/8.adoc[Developer]
1214
** xref:v4.6/9.adoc[Operation Management]
1315
** xref:v4.6/10.adoc[Migration]

0 commit comments

Comments
 (0)