我这里用的系统环境是 centos7.6 使用的集群配置为: 1核2G
一、环境准备
如下 非必须 的也可以不操作
-
确保是一台干净的 CentOS7 服务器。
-
开放端口(需要在安全组中放开一些必须的端口,确保正常访问)
-
准备一个域名,负载均衡到需要安装的k3s Server节点 (master主节点)
这里主要实现主节点负载均衡,当访问对应域名时能自动分发到任意一个主节点上
比如我这里使用 master.k3s.demo.com 负载到每个Server节点上,那么后续通过该域名地址就能连接到Server节点,如果有多个Server节点存在,当有一台Server节点宕机了还能分发到其它正常的Server节点上,保证了高可用
- 安装前顺便把源换为国内的 ( 非必须,切换国内源速度会快一些)
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
如下图示例:
- 升级所有包同时也升级软件和系统内核(非必须)
yum -y update
## 如果只升级所有,不升级软件和系统内核 则可以使用如下命令
yum -y upgrade
如下图示例:
更新完后可以查看下当前系统信息如下:
cat /etc/redhat-release
- 修改主机名(非必须, 可以每台机器的主机名设置一下,方便区分)
这里随便提一下 hostname 跟 hostnamectl 的区别:
临时修改主机名用 hostname 如: hostname k3s-master1
永久修改主机名用hostnamectl 如: hostnamectl set-hostname k3s-master1
# 比如我这里准备两台master节点,那我就可以将这两台机器主机名分别设置为 k3s-master1 跟 k3s-master2 方便日后自己区分
hostnamectl set-hostname k3s-master1
# 如果是node节点则可以分别设置 k3s-node1 , k3s-node2 , ...
hostnamectl set-hostname k3s-node1
可以查看下,如下:
hostnamectl
二、安装K3S
安装后对应的k3s配置文件位置: /etc/rancher/k3s/k3s.yaml
# 这个走的是国外的源,在国内使用这个会慢一些
curl -sfL https://get.k3s.io | sh -
# 如果是国内安装可以使用下面这个
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -
# 如果是需要高可用,就是需要多个server节点(master主节点),则需要指定外部数据源, 可参考下面的方式指定外部数据源
如下图所示:
安装完后如下:
可以查看下节点状态以及 k3s 版本
kubectl get node
可以查看下所有 pod 信息
kubectl get pods -A
到此一个单点节K3S集群就安装好了,如果需要采用外部数据源方式,请参考下面方式
----------------------- 安装需要指定外部数据源,可参考下面方式 ---------------------------
如果想让为K3S指定外部的Mysql 或 MariaDB 存储数据库时, 可以加上对应的数据库配置,如下:
使用 datastore-endpoint 指定数据库信息
格式: --datastore-endpoint=“mysql://数据库账号:数据库密码@tcp(数据库连接地址:数据库端口)/数据库名称”
对应到下面连接: --datastore-endpoint=“mysql://demo:demo123@tcp(mysql.demo.com:3306)/demodb”
# 这个走的是国外的源,在国内使用这个会慢一些
curl -sfL https://get.k3s.io | sh -s - server --datastore-endpoint="mysql://demo:demo123@tcp(mysql.demo.com:3306)/demodb"
# 如果是国内安装可以使用下面这个
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -s - server --datastore-endpoint="mysql://demo:demo123@tcp(mysql.demo.com:3306)/demodb"
如果指定PostgreSQL 数据库,则对应 datastore-endpoint 格式如下:
--datastore-endpoint="postgres://数据库账号:数据库密码@数据库连接地址:数据库端口//数据库名称"
如果指定etcd存储,则对应 datastore-endpoint 格式如下:
--datastore-endpoint="连接地址:端口"
# 多个以逗号隔开,例如:
--datastore-endpoint="https://etcd-host-1:2379,https://etcd-host-2:2379,https://etcd-host-3:2379"
三、向集群中添加新的Server节点(master节点)
使用外部数据源的k3s集群可以添加多个Server节点实现高可用
- 在集群中的任意一个Server节点(master)的对应文件中 /var/lib/rancher/k3s/server/node-token 查看token令牌凭证
cat /var/lib/rancher/k3s/server/node-token
- 在需要加入的新机器上执行如下命令,将该机器加入到集群Server节点中
如下 mytoken 表示token令牌凭证,在每个Server节点中都有一份,可查看获取
如下 datastore-endpoint 对应的就是k3s集群外部存储库,指定对应的库就会加入现有的集群中
# 这个走的是国外的源,在国内使用这个会慢一些
curl -sfL https://get.k3s.io | sh -s - server --token=mytoken --datastore-endpoint="mysql://demo:demo123@tcp(mysql.demo.com:3306)/demodb"
# 如果是国内安装可以使用下面这个
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -s - server --token=mytoken --datastore-endpoint="mysql://demo:demo123@tcp(mysql.demo.com:3306)/demodb"
- 最后将当前新加入的Server节点IP加入到主节点统一访问的那个域名中
四、向集群中添加新的Agent节点(工作节点)
- 在集群中的任意一个Server节点(master)的对应文件中 /var/lib/rancher/k3s/server/node-token 查看token令牌凭证
cat /var/lib/rancher/k3s/server/node-token
- 在需要加入的新机器上执行如下命令,将该机器加入到集群Agent节点中
如下 https://myserver 表示 K3S集群 server节点(主节点的)的地址, 可以是任意一个主节点地址,如果配置了主节点的负载均衡地址的话,这可以填那个统一的域名地址
如下 mytoken 表示token令牌凭证,在每个Server节点中都有一份,可查看获取
# 这个走的是国外的源,在国内使用这个会慢一些 ()
curl -sfL https://get.k3s.io | K3S_URL=https://myserver:6443 K3S_TOKEN=mytoken sh -
# 如果是国内安装可以使用下面这个
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn K3S_URL=https://myserver:6443 K3S_TOKEN=mytoken sh -