在k8s集群中创建mysql并且导入数据库

创建mysql

方式一:

通过kuboard工具创建

参考:1.部署一个应用程序 | Kuboard

在容器信息中创建端口号:3306

创建环境变量: MYSQL_ROOT_PASSWORD = root # mysql密码 MYSQL_ROOT_USERNAME = root # mysql的账户

创建服务/应用

第三步:设置挂载路径

还应该做一个存储卷——不然导入数据无法保存(做一个存储类——》PV——》PVC)

方式二:编写yml文件方式创建mysql的pod

---
apiVersion: apps/v1
kind: Deployment
metadata:
  annotations: {}
  labels:
    app: mysql
    k8s.kuboard.cn/layer: cloud
    k8s.kuboard.cn/name: mysql
  name: mysql
  namespace: mall4cloud     # 命名空间
  resourceVersion: '5531414'
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: mysql
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: mysql
    spec:
      containers:
        - env:
            - name: MYSQL_ROOT_PASSWORD     # 设置mysql的root密码
              value: root
            - name: MYSQL_ROOT_USER
              value: root
          image: 'mysql:8.0'
          imagePullPolicy: IfNotPresent
          name: mysql
          ports:
            - containerPort: 3306
              protocol: TCP
          resources: {}
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
          volumeMounts:
            - mountPath: /sql-file.sql
              name: sql-volume
      dnsPolicy: ClusterFirst
      nodeName: worker-1
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
      volumes:
        - hostPath:
            path: /mall4cloud/mall4cloud/db/mall4cloud-all.sql    # 数据库文件的本地路径
            type: ''
          name: sql-volume
​
---
apiVersion: v1
kind: Service
metadata:
  annotations: {}
  labels:
    app: mysql
    k8s.kuboard.cn/layer: cloud
    k8s.kuboard.cn/name: mysql
  name: mysql
  namespace: mall4cloud
  resourceVersion: '5527744'
spec:
  clusterIP: 10.233.64.192
  clusterIPs:
    - 10.233.64.192
  internalTrafficPolicy: Cluster
  ipFamilies:
    - IPv4
  ipFamilyPolicy: SingleStack
  ports:
    - name: mh2awi
      port: 3306
      protocol: TCP
      targetPort: 3306
  selector:
    app: mysql
  sessionAffinity: None
  type: ClusterIP
kubectl apply -f  xxx.yml  -n  mall4cloud        # 执行yml文件
[root@master ~]# kubectl get po -n mall4cloud      # 查看Pod是否创建
NAME                                             READY   STATUS             RESTARTS          AGE
mysql-0                                          1/1     Running            0                 15m

导入数据库文件

[root@master ~]# kubectl  exec -it mysql-0 /bin/bash -n mall4cloud 
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
bash-4.4# mysql -u root -p               # 登录数据库
Enter password:             # 输入数据库密码——尽量复杂一点
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 33
Server version: 8.0.35 MySQL Community Server - GPL
​
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
​
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
​
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
​
mysql> 
mysql> show databases;     # 查看数据库
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
mysql> create database mall4cloud;   # 创建数据库
Query OK, 1 row affected (0.00 sec)
mysql> use mall4cloud;     # 切换数据库
Database changed
mysql> source /mysql/sql-file.sql    # 导入数据库文件

问题:此方法不能永久存储数据,当worker服务器节点重启后,数据将会被清空。

补充:

在Kubernetes集群中,当Worker节点重启后,集群会自动将该节点上的Pod重新调度到其他可用的节点上。这意味着Pod的状态可能会发生变化,包括容器的重新创建和启动。

具体来说,当Worker节点重启后,以下情况可能会发生:

  1. Pod被重新调度:由于节点已经从集群中移除,所有在该节点上的Pod将被重新调度到其他可用的节点上。这可能会导致Pod的IP地址发生变化,以及其他网络配置的更改。

  2. 容器重新创建:在重新调度期间,Pod中的所有容器将被重新创建。这可能会导致容器的状态发生变化,例如容器内部的配置和数据的丢失。

  3. 容器重新启动:在重新调度后,至少有一个容器将在重新启动的状态下运行。这可能会导致短暂的服务中断或性能下降。

  4. 数据丢失:由于容器重新创建和重新启动,Pod中的任何临时数据可能会丢失。因此,在Worker节点重启后,需要确保Pod的数据持久化存储或备份以避免数据丢失。

需要注意的是,Kubernetes集群会自动处理Pod的重新调度和容器的重新创建和启动,以确保Pod的高可用性和容错性。但是,在Worker节点重启后,需要确保Pod的配置和数据正确性以避免潜在的问题。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐