[toc]
k3s安装
环境需求
参考以下链接:
https://rancher.com/docs/k3s/latest/en/installation/installation-requirements/
软件版本
软件 |
版本 |
OS |
centos7.7 |
k3s |
k3s version v1.18.2+k3s1 |
centos7节点安装
1 2 3
| yum install -y container-selinux selinux-policy-base rpm -i https://rpm.rancher.io/k3s-selinux-0.1.1-rc1.el7.noarch.rpm
|
K3S在线安装
安装master
使用containerd
1
| curl -sfL https://docs.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -s - --write-kubeconfig ~/.kube/config --write-kubeconfig-mode 666
|
使用本机docker
1
| curl -sfL https://docs.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -s - --docker --write-kubeconfig ~/.kube/config --write-kubeconfig-mode 666
|
worker安装
在master上获取连接的token和apiserver地址部署worker节点
1
| cat /var/lib/rancher/k3s/server/node-token
|
1
| curl -sfL https://docs.rancher.cn/k3s/k3s-install.sh| INSTALL_K3S_MIRROR=cn K3S_URL=https://xxx:6443 K3S_TOKEN=xxx sh -
|
参数说明:
参数 |
解释 |
INSTALL_K3S_MIRROR |
安装加速器区域 |
-s |
启动master |
–write-kubeconfig ~/.kube/config |
写入kubeconfig文件路径 |
–write-kubeconfig-mode 666 |
kubeconfig文件权限 |
K3S_URL=https://xxx:6443 |
连接api-server地址 |
K3S_TOKEN |
连接的token |
master节点上查看是否加入
1 2 3 4
| kubectl get node NAME STATUS ROLES AGE VERSION rke-k3s-node1.novalocal Ready master 13m v1.18.2+k3s1 rke-k3s-node2 Ready <none> 35s v1.18.2+k3s1
|
部署应用测试
1
| kubectl run test --image nginx
|
K3S离线安装
准备下载离线包
在github,k3s release页下载对应的离线镜像和k3s可执行文件
1
| https://github.com/rancher/k3s/releases/
|
根据机器类型,下载对应的文件
文件 |
作用 |
机器类型 |
k3s |
k3s 可执行文件 |
x86 CPU架构64位系统 |
k3s-arm64 |
k3s可执行文件 |
ARM CPU架构 64位系统 |
k3s-armhf |
k3s可执行文件 |
ARM CPU架构 32位系统 |
k3s-airgap-images-amd64.tar |
离线镜像包 |
x86 CPU架构64位系统 |
k3s-airgap-images-arm64.tar |
离线镜像包 |
ARM CPU架构 64位系统 |
k3s-airgap-images-arm.tar |
离线镜像包 |
ARM CPU架构 32位系统 |
选择对应的操作系统版本,下载对应的k3s可执行文件和离线镜像包。
需要提前在打开操作系统cgroup
ubuntu18.04操作系统:
1 2 3
| sudo vi /boot/firmware/cmdline.txt cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory
|
重启生效。
导入离线镜像
使用containerd做为runtime导入镜像
创建镜像存储目录
1
| mkdir -p /var/lib/rancher/k3s/agent/images/
|
拷贝离线镜像
1
| sudo cp ./k3s-airgap-images-$ARCH.tar /var/lib/rancher/k3s/agent/images/
|
使用docker做为runtime导入镜像
1
| docker load < k3s-airgap-images-$ARCH.tar
|
拷贝可执行文到/usr/bin目录,并配置可执行权限
1 2
| cp k3s /usr/local/bin/k3s chmod a+x /usr/local/bin/k3s
|
下载部署脚本并部署
1
| https://raw.githubusercontent.com/rancher/k3s/master/install.sh
|
添加执行权限
执行部署
部署server
1
| INSTALL_K3S_SKIP_DOWNLOAD=true ./install.sh --docker --write-kubeconfig ~/.kube/config --write-kubeconfig-mode 666
|
注:
若要使用containerd去除–docker参数
部署agent
在master节点上获取连接token
1
| cat /var/lib/rancher/k3s/server/node-token
|
部署agent节点
1
| INSTALL_K3S_SKIP_DOWNLOAD=true K3S_URL=https://masterip:6443 K3S_TOKEN=token ./install.sh - --docker
|
注:
若要使用containerd去除–docker参数
查看集群
1 2 3 4
| kubectl get node NAME STATUS ROLES AGE VERSION rke-node5 Ready master 36m v1.18.2+k3s1 rke-node6 Ready <none> 76s v1.18.2+k3s1
|
K3S高可用安装

HA K3s集群包括:
- 两个或更多服务器节点;
- 一个外部数据存储;
- 一个固定的注册地址,放置在server节点前面,允许worker节点向集群注册;
K3S高可用原理
Demo演示以docker启动mysql为例,实际生产环境需要高可用的数据库集群
启动mysql数据库
1
| docker run -itd -p 3306:3306 -e MYSQL_ROOT_PASSWORD=1234567 mysql:5.7
|
在mysql中创建k3s数据库
1
| mysql> create database k3s;
|
启动并配置外部LB
配置Loadblance转发
这里主要以nginx为例
在宿主机上创建nginx.conf文件
创建目录
1 2
| mkdir /etc/nginx vim /etc/nginx/nginx.conf
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| worker_processes 4; worker_rlimit_nofile 40000; events { worker_connections 8192; } stream { upstream k3s-server { least_conn; server <IP_NODE_1>:6443 max_fails=3 fail_timeout=5s; server <IP_NODE_2>:6443 max_fails=3 fail_timeout=5s; } server { listen 6443; proxy_pass k3s-server; } }
|
1
| docker run -d --restart=unless-stopped -p 6443:6443 -v /etc/nginx/nginx.conf:/etc/nginx/nginx.conf nginx:stable
|
启动K3S Master
1
| curl -sfL https://docs.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -s - --docker --write-kubeconfig ~/.kube/config --write-kubeconfig-mode 666 --datastore-endpoint="mysql://username:password@tcp(Database_ip:database_port)/database_name"
|
将对应的参数替换实际参数
注意:
1、若要master节点不调度其他workload运行在启动时使用--node-taint k3s-controlplane=true:NoExecute
参数
加入worker节点
注意: 这里worker节点需要直接连接到LB的6443端口
在master上获取连接的token和apiserver地址部署worker节点
1
| cat /var/lib/rancher/k3s/server/node-token
|
1
| curl -sfL https://docs.rancher.cn/k3s/k3s-install.sh| INSTALL_K3S_MIRROR=cn K3S_URL=https://xxx:6443 K3S_TOKEN=xxx sh -
|
参考节点
1 2 3 4 5
| kubectl get node NAME STATUS ROLES AGE VERSION rke-node5 Ready master 10h v1.18.2+k3s1 rke-node6 Ready master 18m v1.18.2+k3s1 rke-node7 Ready <none> 29s v1.18.2+k3s1
|
将k3s导入到Rancher中
部署完成后可以将K3S导入到Rancher中管理
1、在Rancher导入K3S集群管理

复制导入命令在节点上执行


部署应用测试

containerd常见命令
列出当前集群镜像
列出当前集群容器
查看pod占用cpu 内存资源
其它常见问题
使用docker禁用默认contained
卸载集群
master
1
| bash /usr/local/bin/k3s-uninstall.sh
|
worker
1
| bash /usr/local/bin/k3s-agent-uninstall.sh
|
containerd配置Registry-mirror和insecure-Registry
创建/etc/rancher/k3s/registries.yaml文件
添加以下内容:
1 2 3 4
| mirrors: docker.io: endpoint: - "https://yefnfc9c.mirror.aliyuncs.com"
|
重启k3s
1
| systemctl restart k3s-agent
|
检查是否生效
1 2 3 4 5 6
| cat /var/lib/rancher/k3s/agent/etc/containerd/config.toml [plugins.cri.registry.mirrors] [plugins.cri.registry.mirrors."docker.io"] endpoint = ["https://yefnfc9c.mirror.aliyuncs.com"]
|
环境检查
启用user_namespace
1
| grubby --args="user_namespace.enable=1" --update-kernel="$(grubby --default-kernel)"
|
重启生效