k8s部署mysql服务
搭建一个api和一个mysql服务
- 能够接收用户传的数据并且存在mysql里面
- 数据需要持久化
这里使用nfs服务,需提前安装并设置共享目录,参考:minikube单机安装nfs服务
pv.yaml
kind: PersistentVolume
apiVersion: v1
metadata:
name: mysql-pv
spec:
accessModes:
- ReadWriteOnce #访问模式定义为只能以读写的方式挂载到单个节点
capacity:
storage: 100Mi
persistentVolumeReclaimPolicy: Retain
storageClassName: nfs
nfs:
path: /data/nfs
server: 192.168.79.2
pvc.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: mysql-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Mi
storageClassName: nfs #这里指定关联的PV名称
configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql-config
data:
my.cnf: |
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
skip-character-set-client-handshake = true
# 打开binlog日志
log-bin=bin-log
max_connections=5000
# 在容器里面需要设置下时区
default-time-zone='+8:00'
---
apiVersion: v1
kind: ConfigMap
metadata:
name: go-db-config
data:
config.toml: |
mysql-addr='root:123456@tcp(192.168.79.2:31306)/test'
mysql.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql-fox-deployment
spec:
selector:
matchLabels:
app: mysql-fox
replicas: 1
template:
metadata:
labels:
app: mysql-fox
spec:
containers:
- name: mysql-fox
image: mysql
imagePullPolicy: Always
env: #以下是设置MySQL数据库的密码
- name: MYSQL_ROOT_PASSWORD
value: "123456"
ports:
- containerPort: 3306
protocol: TCP
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql #MySQL容器的数据都是存在这个目录的,要对这个目录做数据持久化
- name: config-volume
mountPath: /etc/mysql/conf.d #mysql 配置
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-pvc #指定pvc的名称
- name: config-volume
configMap:
name: mysql-config
---
apiVersion: v1
kind: Service
metadata:
name: mysql-fox
spec:
ports:
- name: mysql-fox-port
protocol: TCP
port: 3306
targetPort: 3306
nodePort: 31306
type: NodePort
selector:
app: mysql-fox
#
部署服务并查看
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
mysql-fox-deployment-7676755855-r7c5k 1/1 Running 0 2d20h
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
mysql-fox NodePort 10.110.190.127 <none> 3306:31306/TCP 2d20h
$ kubectl get configmap
NAME DATA AGE
go-db-config 1 2d3h
mysql-config 1 2d21h
$ kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
mysql-pv 100Mi RWO Retain Bound default/mysql-pvc nfs 2d21h
$ kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
mysql-pvc Bound mysql-pv 100Mi RWO nfs 2d21h
$ minikube service list
|----------------------|---------------------------|---------------------|---------------------------|
| NAMESPACE | NAME | TARGET PORT | URL |
|----------------------|---------------------------|---------------------|---------------------------|
| default | mysql-fox | mysql-fox-port/3306 | http://192.168.79.2:31306 |
访问mysql
创建数据库和表
$ mysql -h192.168.79.2 -uroot -P31306 -p123456
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
mysql> CREATE DATABASE IF NOT EXISTS `test`;
Query OK, 1 row affected, 1 warning (0.20 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test |
+--------------------+
mysql> USE `test`;
Database changed
mysql> CREATE TABLE `go` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(10) NOT NULL DEFAULT '' COMMENT 'name',
`create_time` int unsigned NOT NULL DEFAULT '0' COMMENT '创建时间',
`update_time` int unsigned NOT NULL DEFAULT '0' COMMENT '更新时间',
`up_timestamp` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='test';
mysql> select * from go;
部署go服务
go.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: go-deployment
labels:
app: go
spec:
selector:
matchLabels:
app: go
replicas: 3
minReadySeconds: 5
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
template:
metadata:
labels:
app: go
spec:
containers:
- image: foxliang/go-mysql:v2
name: go-mysql
imagePullPolicy: Always
ports:
- containerPort: 8088
protocol: TCP
volumeMounts:
- name: config-volume
mountPath: /var/config #mysql 配置
volumes:
- name: config-volume
configMap:
name: go-db-config
---
apiVersion: v1
kind: Service
metadata:
name: go-service
labels:
app: go
spec:
selector:
app: go
ports:
- name: go-port
protocol: TCP
port: 8088
targetPort: 8088
nodePort: 31088
type: NodePort
访问api
#新增
$ curl http://192.168.79.2:31088/data/create\?name\=1
"success create"
#获取单条
$ curl http://192.168.79.2:31088/data/get\?name\=1
{"id":1,"name":"1","create_time":1619507317,"update_time":1619507317}
#获取列表
$ curl http://192.168.79.2:31088/data/list
[{"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}
还没有评论,来说两句吧...