k8s部署mysql服务

缺乏、安全感 2023-01-18 04:07 333阅读 0赞

搭建一个api和一个mysql服务

  • 能够接收用户传的数据并且存在mysql里面
  • 数据需要持久化

这里使用nfs服务,需提前安装并设置共享目录,参考:minikube单机安装nfs服务

pv.yaml

  1. kind: PersistentVolume
  2. apiVersion: v1
  3. metadata:
  4. name: mysql-pv
  5. spec:
  6. accessModes:
  7. - ReadWriteOnce #访问模式定义为只能以读写的方式挂载到单个节点
  8. capacity:
  9. storage: 100Mi
  10. persistentVolumeReclaimPolicy: Retain
  11. storageClassName: nfs
  12. nfs:
  13. path: /data/nfs
  14. server: 192.168.79.2

pvc.yaml

  1. kind: PersistentVolumeClaim
  2. apiVersion: v1
  3. metadata:
  4. name: mysql-pvc
  5. spec:
  6. accessModes:
  7. - ReadWriteOnce
  8. resources:
  9. requests:
  10. storage: 100Mi
  11. storageClassName: nfs #这里指定关联的PV名称

configmap.yaml

  1. apiVersion: v1
  2. kind: ConfigMap
  3. metadata:
  4. name: mysql-config
  5. data:
  6. my.cnf: |
  7. [client]
  8. default-character-set=utf8mb4
  9. [mysql]
  10. default-character-set=utf8mb4
  11. [mysqld]
  12. pid-file = /var/run/mysqld/mysqld.pid
  13. socket = /var/run/mysqld/mysqld.sock
  14. datadir = /var/lib/mysql
  15. character-set-server = utf8mb4
  16. collation-server = utf8mb4_unicode_ci
  17. init_connect='SET NAMES utf8mb4'
  18. skip-character-set-client-handshake = true
  19. # 打开binlog日志
  20. log-bin=bin-log
  21. max_connections=5000
  22. # 在容器里面需要设置下时区
  23. default-time-zone='+8:00'
  24. ---
  25. apiVersion: v1
  26. kind: ConfigMap
  27. metadata:
  28. name: go-db-config
  29. data:
  30. config.toml: |
  31. mysql-addr='root:123456@tcp(192.168.79.2:31306)/test'

mysql.yaml

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: mysql-fox-deployment
  5. spec:
  6. selector:
  7. matchLabels:
  8. app: mysql-fox
  9. replicas: 1
  10. template:
  11. metadata:
  12. labels:
  13. app: mysql-fox
  14. spec:
  15. containers:
  16. - name: mysql-fox
  17. image: mysql
  18. imagePullPolicy: Always
  19. env: #以下是设置MySQL数据库的密码
  20. - name: MYSQL_ROOT_PASSWORD
  21. value: "123456"
  22. ports:
  23. - containerPort: 3306
  24. protocol: TCP
  25. volumeMounts:
  26. - name: mysql-persistent-storage
  27. mountPath: /var/lib/mysql #MySQL容器的数据都是存在这个目录的,要对这个目录做数据持久化
  28. - name: config-volume
  29. mountPath: /etc/mysql/conf.d #mysql 配置
  30. volumes:
  31. - name: mysql-persistent-storage
  32. persistentVolumeClaim:
  33. claimName: mysql-pvc #指定pvc的名称
  34. - name: config-volume
  35. configMap:
  36. name: mysql-config
  37. ---
  38. apiVersion: v1
  39. kind: Service
  40. metadata:
  41. name: mysql-fox
  42. spec:
  43. ports:
  44. - name: mysql-fox-port
  45. protocol: TCP
  46. port: 3306
  47. targetPort: 3306
  48. nodePort: 31306
  49. type: NodePort
  50. selector:
  51. app: mysql-fox

#

部署服务并查看

  1. $ kubectl get pods
  2. NAME READY STATUS RESTARTS AGE
  3. mysql-fox-deployment-7676755855-r7c5k 1/1 Running 0 2d20h
  4. $ kubectl get svc
  5. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  6. mysql-fox NodePort 10.110.190.127 <none> 3306:31306/TCP 2d20h
  7. $ kubectl get configmap
  8. NAME DATA AGE
  9. go-db-config 1 2d3h
  10. mysql-config 1 2d21h
  11. $ kubectl get pv
  12. NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
  13. mysql-pv 100Mi RWO Retain Bound default/mysql-pvc nfs 2d21h
  14. $ kubectl get pvc
  15. NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
  16. mysql-pvc Bound mysql-pv 100Mi RWO nfs 2d21h
  17. $ minikube service list
  18. |----------------------|---------------------------|---------------------|---------------------------|
  19. | NAMESPACE | NAME | TARGET PORT | URL |
  20. |----------------------|---------------------------|---------------------|---------------------------|
  21. | default | mysql-fox | mysql-fox-port/3306 | http://192.168.79.2:31306 |

访问mysql

创建数据库和表

  1. $ mysql -h192.168.79.2 -uroot -P31306 -p123456
  2. mysql> show databases;
  3. +--------------------+
  4. | Database |
  5. +--------------------+
  6. | information_schema |
  7. | mysql |
  8. | performance_schema |
  9. | sys |
  10. +--------------------+
  11. mysql> CREATE DATABASE IF NOT EXISTS `test`;
  12. Query OK, 1 row affected, 1 warning (0.20 sec)
  13. mysql> show databases;
  14. +--------------------+
  15. | Database |
  16. +--------------------+
  17. | information_schema |
  18. | mysql |
  19. | performance_schema |
  20. | sys |
  21. | test |
  22. +--------------------+
  23. mysql> USE `test`;
  24. Database changed
  25. mysql> CREATE TABLE `go` (
  26. `id` int unsigned NOT NULL AUTO_INCREMENT,
  27. `name` varchar(10) NOT NULL DEFAULT '' COMMENT 'name',
  28. `create_time` int unsigned NOT NULL DEFAULT '0' COMMENT '创建时间',
  29. `update_time` int unsigned NOT NULL DEFAULT '0' COMMENT '更新时间',
  30. `up_timestamp` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  31. PRIMARY KEY (`id`),
  32. KEY `idx_create_time` (`create_time`)
  33. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='test';
  34. mysql> select * from go;

部署go服务

go.yaml

  1. ---
  2. apiVersion: apps/v1
  3. kind: Deployment
  4. metadata:
  5. name: go-deployment
  6. labels:
  7. app: go
  8. spec:
  9. selector:
  10. matchLabels:
  11. app: go
  12. replicas: 3
  13. minReadySeconds: 5
  14. strategy:
  15. type: RollingUpdate
  16. rollingUpdate:
  17. maxSurge: 1
  18. maxUnavailable: 1
  19. template:
  20. metadata:
  21. labels:
  22. app: go
  23. spec:
  24. containers:
  25. - image: foxliang/go-mysql:v2
  26. name: go-mysql
  27. imagePullPolicy: Always
  28. ports:
  29. - containerPort: 8088
  30. protocol: TCP
  31. volumeMounts:
  32. - name: config-volume
  33. mountPath: /var/config #mysql 配置
  34. volumes:
  35. - name: config-volume
  36. configMap:
  37. name: go-db-config
  38. ---
  39. apiVersion: v1
  40. kind: Service
  41. metadata:
  42. name: go-service
  43. labels:
  44. app: go
  45. spec:
  46. selector:
  47. app: go
  48. ports:
  49. - name: go-port
  50. protocol: TCP
  51. port: 8088
  52. targetPort: 8088
  53. nodePort: 31088
  54. type: NodePort

访问api

  1. #新增
  2. $ curl http://192.168.79.2:31088/data/create\?name\=1
  3. "success create"
  4. #获取单条
  5. $ curl http://192.168.79.2:31088/data/get\?name\=1
  6. {"id":1,"name":"1","create_time":1619507317,"update_time":1619507317}
  7. #获取列表
  8. $ curl http://192.168.79.2:31088/data/list
  9. [{"id":1,"name":"1","create_time":1619507317,"update_time":1619507317},{"id":2,"name":"33","create_time":1619507325,"update_time":1619507627},{"id":3,"name":"33","create_time":1619507639,"update_time":1619507639},{"id":4,"name":"44","create_time":1619507902,"update_time":1619507902},{"id":5,"name":"44","create_time":1619508242,"update_time":1619508242},{"id":6,"name":"23","create_time":1619510263,"update_time":1619510263},{"id":7,"name":"7","create_time":1619517602,"update_time":1619517602},{"id":8,"name":"1","create_time":1619519922,"update_time":1619519922},{"id":9,"name":"7","create_time":1619686700,"update_time":1619686700}

发表评论

表情:
评论列表 (有 0 条评论,333人围观)

还没有评论,来说两句吧...

相关阅读