K3s对接阿里云RDS(MySQL 5.7)

本以为k3s对接阿里云的 mysql 5.7和docker run的 mysql应该是一样的,但实际操作时候发现有点小坑,就是阿里云RDS默认的innodb_large_prefix=OFF,这会导致k3s在启动的时候会报错,然后对于第一次使用阿里云RDS小白用户(我)来说,修改innodb_large_prefix的配置的时候也懵逼了下。

配置阿里云RDS

  1. 创建RDS实例,实例类型选择MySQL 5.7,因为K3S官方支持这个版本,其他选项根据实际情况设置

  1. 设置白名单,白名单的内容设置为你的K3s 实例的IP即可

如果不设置白名单,貌似不会自动生成rds的内网域名

  1. 创建账号,我是创建了一个普通账号(ksd)和一个高权限账号账号,但实际使用的时候只使用普通账号(ksd)即可

  2. 创建数据库,设置数据库名称(k3s),授权账号(ksd)

之前在使用docker启动的mysql时,不需要提前创建数据库,因为启动k3s的时候会自动创建,但在阿里云RDS上户型,必须得先在UI上创建数据库。

启动K3S


curl -sfL https://docs.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_SKIP_DOWNLOAD=true \

INSTALL_K3S_MIRROR=cn \

K3S_DATASTORE_ENDPOINT='mysql://hailong:WWW163com@tcp(rm-2ze8a65b8mi15gj92.mysql.rds.aliyuncs.com:3306)/k3s' \

sh -s - server

具体的配置参考官网吧,Rancher Docs: K3s - Lightweight Kubernetes

故障排查

问题描述

本以为可以顺利的启动k3s,但事与愿违,k3s 报错了:


# tail -200f /var/log/syslog

...

Jul 29 20:08:06 iZ2zed0v8rqape974mz8suZ systemd[1]: k3s.service: Service hold-off time over, scheduling restart.

Jul 29 20:08:06 iZ2zed0v8rqape974mz8suZ systemd[1]: k3s.service: Scheduled restart job, restart counter is at 11.

Jul 29 20:08:06 iZ2zed0v8rqape974mz8suZ systemd[1]: Stopped Lightweight Kubernetes.

Jul 29 20:08:06 iZ2zed0v8rqape974mz8suZ systemd[1]: Starting Lightweight Kubernetes...

Jul 29 20:08:07 iZ2zed0v8rqape974mz8suZ k3s[24934]: time="2020-07-29T20:08:07.145963348+08:00" level=info msg="Starting k3s v1.18.6+k3s1 (6f56fa1d)"

Jul 29 20:08:07 iZ2zed0v8rqape974mz8suZ k3s[24934]: time="2020-07-29T20:08:07.159363656+08:00" level=fatal msg="starting kubernetes: preparing server: creating storage endpoint: building kine: Error 1071: Specified key was too long; max key length is 767 bytes"

Jul 29 20:08:07 iZ2zed0v8rqape974mz8suZ systemd[1]: k3s.service: Main process exited, code=exited, status=1/FAILURE

Jul 29 20:08:07 iZ2zed0v8rqape974mz8suZ systemd[1]: k3s.service: Failed with result 'exit-code'.

Jul 29 20:08:07 iZ2zed0v8rqape974mz8suZ systemd[1]: Failed to start Lightweight Kubernetes.

...

这个是因为在阿里云的mysql 5.7的innodb_large_prefix默认为OFF照成

解决

为了解决这个问题,可以在阿里云RDS->参数设置里,将innodb_large_prefix修改为ON,然后点击右上角的 提交参数,然后确定,否则修改不生效…… (第一次用,吃了这个亏,老土了)

之后再次查看/var/log/syslog日志,已经不再刷新上面的日志了,并且可以get node和pods了