使用helm部署mariadb-operator,并部署wordpress+mariaDB应用
一、部署mariadb-operator + mariadb实例
- 部署mariadb-operator
使用helm部署
helm repo add mariadb-operator https://mariadb-operator.github.io/mariadb-operator
helm install mariadb-operator mariadb-operator/mariadb-operator
-
helm release
https://github.com/mariadb-operator/mariadb-operator/releases -
部署相关config和secret
kubectl apply -f config/samples/config
- 部署storageclass和pv(在官方文档中没有这个步骤,如果集群中没有pv资源的话,创建mariadb实例会一直pending)
kubectl apply -f /k8s-study/pv.yml
kubectl apply -f /k8s-study/storageclass.yml
sample output:
persistentvolume/pv1 created
persistentvolume/pv2 created
persistentvolume/pv3 created
- 部署mariaDB实例
kubectl apply -f config/samples/mariadb_v1alpha1_mariadb.yaml
sample output:
kubectl get mariadbs
NAME READY STATUS AGE
mariadb True Running 75s
kubectl get statefulsets
NAME READY AGE
mariadb 1/1 2m12s
kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
mariadb ClusterIP 10.96.235.145 <none> 3306/TCP,9104/TCP 2m17s
- 部署数据库实例、user、grant
kubectl apply -f config/samples/mariadb_v1alpha1_database.yaml
kubectl apply -f config/samples/mariadb_v1alpha1_user.yaml
kubectl apply -f config/samples/mariadb_v1alpha1_grant.yaml
sample output:
kubectl get databases
NAME READY STATUS CHARSET COLLATE AGE
data-test True Created utf8 utf8_general_ci 22s
kubectl get users
NAME READY STATUS MAXCONNS AGE
mariadb-metrics True Created 3 19m
user True Created 20 29s
kubectl get grants
NAME READY STATUS DATABASE TABLE USERNAME GRANTOPT AGE
mariadb-metrics True Created * * mariadb-metrics false 19m
user True Created * * user true 36s
部署mariadb-operator中遇到的问题:
- 部署maridb实例pod pending的问题
- 解决方法:手动创建pv和storageclass(是否有其他方法?
- 部署mariadb实例时,readiness探针会报错
ERROR 2002 (HY000): Can't connect to local server through socket '/run/mysqld/mysqld.sock' (2)
- 百度和Google了一通后,似乎是和容器的host有关系,最后在https://serverfault.com/questions/337818/how-to-force-mysql-to-connect-by-tcp-instead-of-a-unix-socket中找到答案
- 解决方法:在mariadb的yaml文件中spec.myCnf字段增加
[client] protocol=tcp
- 无法通过
pod.svc
的方式访问具体的mariadb pod- 进入一个带ping工具的pod,比如redis
kubectl exec -it redis-sts-0 -- sh # ping mariadb-0.mariadb 不通
- 解决方法:删除kube-system中的coredns,让其重新创建
二、 部署wordpress容器
- wordpress-deployment
# wp-dep.yml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: wp-dep
name: wp-dep
spec:
replicas: 2
selector:
matchLabels:
app: wp-dep
template:
metadata:
labels:
app: wp-dep
spec:
containers:
- image: wordpress:5
name: wordpress
ports:
- containerPort: 80
envFrom:
- prefix: 'WORDPRESS_DB_'
configMapRef:
name: wp-cm
- wordpress-service
apiVersion: v1
kind: Service
metadata:
labels:
app: wp-dep
name: wp-svc
spec:
ports:
- name: http80
port: 80
protocol: TCP
targetPort: 80
nodePort: 30088
selector:
app: wp-dep
type: NodePort
- wordpress-configmap
apiVersion: v1
kind: ConfigMap
metadata:
name: wp-cm
data:
HOST: 'mariadb-0.mariadb' #host是pod.svc的形式
USER: 'root'
PASSWORD: 'mariadb'
NAME: 'data-test'
- 部署wordpress
kubectl apply -f wp-svc.yml
kubectl apply -f wp-cm.yml
kubectl apply -f wp-dep.yml
三、测试是否安装成功
- 查看wordpress部署在哪个节点
kubectl get pod -o wide
-
访问相应主机的相应端口
添加一些注册信息 -
查看数据库是否有数据
kubectl exec -it mariadb-0 /bin/bash
root@mariadb-0:/# mysql -uroot -pmariadb
...
MariaDB [(none)]> show databases;
...
MariaDB [(none)]> use data-test;
MariaDB [data-test]> show tables;
+-----------------------+
| Tables_in_data-test |
+-----------------------+
| wp_commentmeta |
| wp_comments |
| wp_links |
| wp_options |
| wp_postmeta |
| wp_posts |
| wp_term_relationships |
| wp_term_taxonomy |
| wp_termmeta |
| wp_terms |
| wp_usermeta |
| wp_users |
+-----------------------+
12 rows in set (0.000 sec)
MariaDB [data-test]> select user_login from wp_users;
+------------+
| user_login |
+------------+
| huyiqiu |
+------------+
1 row in set (0.000 sec)