k8s部署

创建nas

阿里云,文件存储。使用通用性NAS(容量最大10P)

image-20240119145611321

创建k8s volume

阿里云 k8s,先创建存储卷,选择NAS,配置挂载点,配置挂载路径

然后创建存储声明,使用刚才创建的存储卷

创建prod

使用无状态模式。

镜像使用mysql/mysql-server, Tag使用8.0.26

配置环境变量

1
2
MYSQL_ROOT_PASSWORD
MYSQL_ROOT_HOST

配置启动参数

1
["--default-authentication-plugin=mysql_native_password"]

使用挂载卷(挂载卷配置路径/var/lib/mysql),对应容器路径/var/lib/mysql

迁移

导出原来数据

可以使用export导出,或者使用client工具导出.

由于原数据库使用阿里云RDS,不区分大小写。自己部署的区分大小写。

注意导出的数据库表名为小写,需要手动修改表名为大小。

导入,使用source

1
2
3
4
5
# 原数据库名称为 weixin-database; 8.0开始不能使用-作为表名
create database weixin-database;
use weixin-database;
charset utf8;
source /Users/tang/Downloads/weixin-database-test_2024-01-18.sql;

账号

创建账号

1
2
3
CREATE USER 'remote_user'@'%' IDENTIFIED BY 'remote_user@1234;
GRANT ALL PRIVILEGES ON *.* TO 'remote_user'@'%';
flush privileges;

可以通过NAT外网访问,或者通过SLB配置公网访问

在k8s中,可以通过mysql.common:3306 访问

问题

大小写问题

在MySQL中,从版本 8.0.1 开始,引入了 lower_case_table_names 参数,该参数控制数据库对象名称的大小写敏感性。

默认情况下,lower_case_table_names 的值是 0,表示表名大小写敏感。在这种情况下,你需要确保在创建表和查询表时使用一致的大小写。

如果将 lower_case_table_names 设置为非零值,例如设置为 1,MySQL 将表名视为大小写不敏感。在这种情况下,不同大小写的表名将被视为相同的表名

1
SHOW VARIABLES LIKE 'lower_case_table_names';

尝试通过调整配置项,调整lower_case_table_names,无法生效。

卸载、挂载nas数据

  1. 挂载nas数据。可以将nas数据,点击挂载ECS,添加挂账点,从而导出数据。同一个路径不能有多个挂载点

image-20240119135041771

点击卸载,可以查看挂载点,然后卸载对应数据。

可以挂载到ECS,然后导出对应的磁盘数据。

参考文档https://help.aliyun.com/zh/nas/user-guide/mount-a-file-system-on-an-ecs-instance-by-using-the-nas-console?spm=a2c4g.11186623.0.i5#task-2095318

kebuctl 相关操作

秘钥, 从k8s中导出密钥到ECS,就可以在ECS上,使用kubectl命令操作k8s

image-20240119114726948

常用命令

1
2
3
4
5
6
# 卸载weixin namespace所有prod
kubectl get pods -n weixin| awk '{print $1}' | xargs kubectl delete pod -n weixin
# 卸载单个pod
kubectl delete pod database-57b5c8c87c-26kk8 -n weixin --force --grace-period=0
# 进入container
kubectl exec -it database-mysql-0 -n common bash
  1. 查看正在运行的 Pod:

    1
    kubectl get pods

    这会列出所有正在运行的 Pod。

  2. 查看 Pod 的详细信息:

    1
    kubectl describe pod <pod-name>

    用实际的 Pod 名称替换 <pod-name>

  3. 查看 Pod 内的容器:

    1
    kubectl get pods <pod-name> -o jsonpath='{.spec.containers[*].name}'

    替换 <pod-name> 为你想要查看的 Pod 的名称。

  4. 查看容器日志:

    1
    kubectl logs <pod-name> -c <container-name>

    替换 <pod-name> 为 Pod 名称,<container-name> 为容器名称。

外网访问

通过NAT,配置DNAT条码,将外网IP 306端口映射 10.0.0.6 3306端口,实现外网访问。

image-20240119114654899