K3s安装报错:对接AWS RDS MySQL时k3s.service启动失败如何解决
K3s对接AWS RDS MySQL启动失败排查方案
高概率故障点(覆盖90%同类报错场景)
RDS MySQL 8.0认证插件不兼容
AWS RDS MySQL 8.0默认采用caching_sha2_password作为用户认证插件,K3s内置的MySQL存储驱动仅支持mysql_native_password认证方式,连接时会直接触发认证失败,导致服务进程退出。
修复步骤:- 登录RDS数据库,执行SQL修改k3s用户认证规则:
ALTER USER 'k3s'@'%' IDENTIFIED WITH mysql_native_password BY '<替换为实际数据库密码>'; FLUSH PRIVILEGES;- 执行
/usr/local/bin/k3s-uninstall.sh清理失败安装的残留文件,重新走安装流程。
数据存储连接参数未被systemd服务加载
当前shell中通过export设置的临时环境变量,不会被K3s安装脚本自动写入systemd服务配置,k3s服务启动时读取不到外接数据库地址,会默认尝试启动内置etcd,引发数据、端口冲突导致启动失败。
修复步骤:- 清理安装残留:执行
/usr/local/bin/k3s-uninstall.sh,若存在旧数据目录则手动删除:sudo rm -rf /var/lib/rancher/k3s - 放弃临时环境变量传参方式,直接将数据存储地址写入安装命令:
curl -sfL https://get.k3s.io | sh -s server \ --datastore-endpoint='mysql://k3s:<xxxdbpasswordxxx>@tcp(k3s-cluster-db.cz2c5bol8r6l.us-east-1.rds.amazonaws.com:3306)/k3s' \ --write-kubeconfig=/home/ubuntu/.kube/config \ --write-kubeconfig-mode=644- 安装后执行
cat /etc/systemd/system/k3s.service,确认ExecStart配置行包含--datastore-endpoint参数,证明配置已正确写入服务。
- 清理安装残留:执行
数据库权限或基础连通性异常
按以下顺序校验:- 确认已在RDS中手动创建名为
k3s的空数据库,K3s不会自动创建目标库 - 给k3s用户授予目标库全量权限,执行SQL:
GRANT ALL PRIVILEGES ON k3s.* TO 'k3s'@'%'; FLUSH PRIVILEGES;- 在EC2实例上安装mysql客户端:
sudo apt update && sudo apt install -y mysql-client,手动执行连接命令验证连通性:
mysql -h k3s-cluster-db.cz2c5bol8r6l.us-east-1.rds.amazonaws.com -P 3306 -u k3s -p该步骤连接失败的话,优先排查RDS公网/私网访问配置、用户白名单、路由规则,无需继续执行K3s安装。
- 确认已在RDS中手动创建名为
低概率故障点
- RDS参数组配置不满足要求:确认参数组中
max_connections≥200,innodb_log_file_size≥256M,否则K3s初始化表结构时会触发数据库端报错。 - RDS开启强制SSL连接:测试环境可在数据库连接串末尾添加
tls=skip-verify参数跳过证书校验,连接串格式参考:
生产环境建议下载RDS根证书,在连接串中指定证书路径完成SSL验证。mysql://k3s:<xxxdbpasswordxxx>@tcp(k3s-cluster-db.cz2c5bol8r6l.us-east-1.rds.amazonaws.com:3306)/k3s?tls=skip-verify
内容的提问来源于stack exchange,提问作者Ayush
相关产品推荐
相关产品推荐

