k3s集群安装
一、k3s介绍
1、k3s是一个轻量级的 Kubernetes 发行版,它针对边缘计算、物联网等场景进行了高度优化。我们希望安装的 Kubernetes 在内存占用方面只是一半的大小。Kubernetes 是一个 10 个字母的单词,简写为 k8s。所以,有 Kubernetes 一半大的东西就是一个 5 个字母的单词,简写为 k3s。k3s 没有全称,也没有官方的发音。
2、文档
3、环境规划
- 本例使用的是指定版本和docker容器方式安装
- docker的安装及使用:https://www.cnblogs.com/lvlinguang/p/15183571.html
- 服务器列表如下
集群角色 | ip地址 |
---|---|
server节点 | 192.168.3.17 |
agent节点 | 192.168.3.18 |
- 关闭防火墙
# 关闭防火墙
systemctl stop firewalld
# 开机禁用
systemctl disable firewalld
# 检查状态
firewall-cmd --state
4、注意:每台计算机必须具有唯一的主机名。如果您的计算机没有唯一的主机名,请传递K3S_NODE_NAME环境变量,并为每个节点提供一个有效且唯一的主机名。
二、在线安装
1、server节点安装
-
如果不打算安装traefik,而是使用nginx ingress按以下操作
- INSTALL_K3S_EXEC 增加--disable traefik
- ingress安装,参考该章节的ingress部署:https://www.cnblogs.com/lvlinguang/p/16270133.html
-
运行脚本
export INSTALL_K3S_VERSION=v1.21.5+k3s2
export K3S_NODE_NAME=k3s-master
export INSTALL_K3S_EXEC="--docker --write-kubeconfig ~/.kube/config --cluster-cidr 10.72.0.0/16 --service-cidr 10.73.0.0/16 --write-kubeconfig-mode 666"
# 高可用(配置外部sql,第二个server节点需要配置K3S_TOKEN)
# export K3S_TOKEN=server1的token
# export INSTALL_K3S_EXEC="--docker --datastore-endpoint=mysql://root:123456@tcp(192.168.3.13:6008)/k3s --write-kubeconfig ~/.kube/config --cluster-cidr 10.72.0.0/16 --service-cidr 10.73.0.0/16 --write-kubeconfig-mode 666"
curl -sfL https://get.k3s.io | sh -
- server参数说明:
- --docker:k3s server组件以containerd作为容器运行时。可以顺便在k3s server节点上启动一个Agent节点,Agent节点可以使用Docker作为容器运行时,这样k3s server节点也可以当做工作节点用。当然也可以不在server节点上启动Agent节点(添加参数--disable-agent即可)。
- --bind-address:k3s监听的IP地址,非必选,默认是localhost。
- --cluster-cidr:与Kubernetes一样,也就是Pod所在网络平面,非必选,默认是10.42.0.0/16。
- --service-cidr:与Kubernetes一样,服务所在的网络平面,非必选,默认是10.43.0.0/16。
- --kube-apiserver-arg:额外的API Server配置参数,具体可以参考Kuberntes官方网站了解支持的配置选项,非必选。
- --write-kubeconfig:安装时顺便写一个Kubeconfig文件,方便使用kubectl工具直接访问。如果不加此参数,则默认的配置文件路径为/etc/rancher/k3s/k3s.yaml,默认只有root用户能读。
- --write-kubeconfig-mode:与--write-kubeconfig一起使用,指定Kubeconfig文件的权限。
- --node-label:顺便给节点打上一个asrole=worker的label,非必选。
- --disable traefik:不安装traefik
2、agent节点安装
- 从server节点获取token
cat /var/lib/rancher/k3s/server/node-token
- agent节点执行脚本
export INSTALL_K3S_VERSION=v1.21.5+k3s2
export K3S_NODE_NAME=k3s-node1
export INSTALL_K3S_EXEC="--docker --write-kubeconfig ~/.kube/config --cluster-cidr 10.72.0.0/16 --service-cidr 10.73.0.0/16 --write-kubeconfig-mode 666"
curl -sfL https://get.k3s.io | K3S_URL=https://192.168.3.17:6443 K3S_TOKEN=server1的token sh -
三、离线安装
- 本例以安装v1.21.5-k3s2版本
- 百度网盘离线包:链接:https://pan.baidu.com/s/1Kkch79lB64Ndd4ti-j8qag 提取码:fzjm
1、server节点安装
- 下载文件
cd /usr/local/bin
# 下载k3s-airgap-images-amd64.tar
wget https://github.com/k3s-io/k3s/releases/download/v1.21.5+k3s2/k3s-airgap-images-amd64.tar
# 下载k3s可执行文件
wget https://github.com/k3s-io/k3s/releases/download/v1.21.5+k3s2/k3s
# 下载在线脚本
curl https://get.k3s.io >> k3s-install.sh
# 设置权限
chmod +x k3s-install.sh k3s
- 设置环境变量并安装
# 跳过二进制文件下载
export INSTALL_K3S_SKIP_DOWNLOAD=true
# 修改节点名称
export K3S_NODE_NAME=k3s-master
# 配置额外参数
export INSTALL_K3S_EXEC="--docker --write-kubeconfig ~/.kube/config --cluster-cidr 10.72.0.0/16 --service-cidr 10.73.0.0/16 --write-kubeconfig-mode 666"
# 高可用(配置外部sql,第二个server节点需要配置K3S_TOKEN)
# export K3S_TOKEN=server1的token
# export INSTALL_K3S_EXEC="--docker --datastore-endpoint=mysql://root:123456@tcp(192.168.3.13:6008)/k3s --write-kubeconfig ~/.kube/config --cluster-cidr 10.72.0.0/16 --service-cidr 10.73.0.0/16 --write-kubeconfig-mode 666"
# 执行安装脚本
./k3s-install.sh
2、agent节点安装
- 从server节点获取token
cat /var/lib/rancher/k3s/server/node-token
- 下载文件
cd /usr/local/bin
# 下载k3s-airgap-images-amd64.tar
wget https://github.com/k3s-io/k3s/releases/download/v1.21.5+k3s2/k3s-airgap-images-amd64.tar
# 下载k3s可执行文件
wget https://github.com/k3s-io/k3s/releases/download/v1.21.5+k3s2/k3s
# 下载在线脚本
curl https://get.k3s.io >> k3s-install.sh
# 设置权限
chmod +x k3s-install.sh k3s
- 设置环境变量并安装
# 跳过二进制文件下载
export INSTALL_K3S_SKIP_DOWNLOAD=true
# 修改节点名称
export K3S_NODE_NAME=k3s-node1
# 配置server节点信息,token来自server节点
export K3S_URL=https://192.168.3.17:6443
export K3S_TOKEN=server1的token
# 配置额外参数
export INSTALL_K3S_EXEC="--docker --write-kubeconfig ~/.kube/config --cluster-cidr 10.72.0.0/16 --service-cidr 10.73.0.0/16 --write-kubeconfig-mode 666"
# 执行安装脚本
./k3s-install.sh
四、高可用安装
1、一个 K3s HA 集群由以下几个部分组成:
- 两个或多个server 节点,将为 Kubernetes API 提供服务并运行其他 control-plane 服务
- 零个或多个agent 节点,用于运行您的应用和服务
- 外部数据存储 (与单个 k3s server 设置中使用的嵌入式 SQLite 数据存储相反)
- 固定的注册地址,位于 server 节点的前面,以允许 agent 节点向集群注册
2、指定mysql数据库
- 格式:mysql://username:password@tcp(hostname:3306)/database-name
- 如果指定的数据库名称不存在,k3s server 将尝试创建它
3、server节点修改
- 增加参数:--datastore-endpoint
# 配置数据库信息
export INSTALL_K3S_EXEC="--docker --datastore-endpoint=mysql://root:123456@tcp(192.168.3.13:6008)/k3s --write-kubeconfig ~/.kube/config --write-kubeconfig-mode 666"
- 第二个server节点需要指定K3S_TOKEN
export K3S_TOKEN=server1的token
4、agent节点不做任何修改
五、配置镜像仓库
在Docker中可以通过配置registry-mirrors来实现从其他镜像仓库中获取K3s镜像。这样配置之后,会先从registry-mirrors配置的地址拉取镜像,如果获取不到才会从默认的docker.io获取镜像,从而满足了我们的需求
- 修改daemon.json
vim /etc/docker/daemon.json
- 添加以下配置
{
"insecure-registries":["192.168.3.12:6007"]
}
- 重启docker
systemctl daemon-reload
systemctl restart docker
六、集群重启/卸载
- 查看k3s服务状态
systemctl status k3s
- 重启k3s服务
systemctl restart k3s
- 卸载 K3s
# server节点卸载
/usr/local/bin/k3s-uninstall.sh
# agent节点卸载
/usr/local/bin/k3s-agent-uninstall.sh
七、Kubernetes 仪表盘
1、kuboard仪表盘
-
安装方法,参考我的另一篇文章:https://www.cnblogs.com/lvlinguang/p/16864989.html
八、入门教程学习
1、k3s/k83学习有一定门槛,通过入门教程能够快速掌握基础知识,推荐大家学习
-
视频教程,百度网盘
链接:https://pan.baidu.com/s/101YH_l0DthYLvMX-5a69qA
提取码:3faf