在k8s集群中创建mysql并且导入数据库
需要注意的是,Kubernetes集群会自动处理Pod的重新调度和容器的重新创建和启动,以确保Pod的高可用性和容错性。在Kubernetes集群中,当Worker节点重启后,集群会自动将该节点上的Pod重新调度到其他可用的节点上。创建环境变量: MYSQL_ROOT_PASSWORD = root # mysql密码 MYSQL_ROOT_USERNAME = root # mysql的账户。P
在k8s集群中创建mysql并且导入数据库
创建mysql
方式一:
通过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节点重启后,以下情况可能会发生:
-
Pod被重新调度:由于节点已经从集群中移除,所有在该节点上的Pod将被重新调度到其他可用的节点上。这可能会导致Pod的IP地址发生变化,以及其他网络配置的更改。
-
容器重新创建:在重新调度期间,Pod中的所有容器将被重新创建。这可能会导致容器的状态发生变化,例如容器内部的配置和数据的丢失。
-
容器重新启动:在重新调度后,至少有一个容器将在重新启动的状态下运行。这可能会导致短暂的服务中断或性能下降。
-
数据丢失:由于容器重新创建和重新启动,Pod中的任何临时数据可能会丢失。因此,在Worker节点重启后,需要确保Pod的数据持久化存储或备份以避免数据丢失。
需要注意的是,Kubernetes集群会自动处理Pod的重新调度和容器的重新创建和启动,以确保Pod的高可用性和容错性。但是,在Worker节点重启后,需要确保Pod的配置和数据正确性以避免潜在的问题。
更多推荐
所有评论(0)