K3S安装

[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

添加执行权限

1
chmod a+x 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常见命令

列出当前集群镜像

1
k3s crictl images

列出当前集群容器

1
k3s crictl ps -a

1
k3s crictl ps

查看pod占用cpu 内存资源

1
k3s crictl stats

其它常见问题

使用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"]

环境检查

1
k3s check-config

启用user_namespace

1
grubby --args="user_namespace.enable=1" --update-kernel="$(grubby --default-kernel)"

重启生效