离线部署轻量级Kubernetes发行版K3s
2021-10-23
K3s简介 #
K3s是一个轻量级的Kubernetes发行版,它针对边缘计算、物联网等场景进行了高度优化。 K3s做了以下功能:
- 将众多k8s组件打包成单个二进制文件,以简化部署,通过封装在简单的启动程序自动处理很多复杂的TLS配置,使K3s具有自动化和管理包括证书分发在内的复杂集群操作的能力
- 默认使用轻量级别的存储后端sqlite3,同时又支持使用etcd3, MySQL, PostgreSQL作为存储后端
- 默认提供的配置适用于轻量级场景且默认的配置是安全的
- 默认安装集成了很多实用功能和组件,如
local-path-provisioner
,metrics-server
,traefik ingress controller
运行K3s所需的资源相对较少,因此K3s适用于边缘计算、物联网等场景,当然也适用于开发和测试场景,使用K3s不仅能够缩短启动集群的时间,还能够减少集群需要消耗的资源。
K3s的架构 #
K3s集群在节点上分为K3s Server
节点和K3s Agent
节点。
K3s Server
节点是K3s的控制节点,K3s集群在部署上支持K3s Server
的单节点架构和多节点的高可用架构。
K3s单节点集群的架构如下图所示,该集群有一个内嵌SQLite数据库的单节点 K3s server。在这种配置中,每个agent节点都注册到同一个 server 节点。K3s用户可以通过调用server节点上的K3s API来操作Kubernetes资源。
K3s集群高可用架构如下图所示,需要部署多个K3s Server节点,同时需要使用外部数据库替换sqlite作为数据存储。
部署前的准备工作 #
在安装之前,需要先做好如下准备。3台CentOS 7.9主机如下:
1cat /etc/hosts
2192.168.96.151 node1
3192.168.96.152 node2
4192.168.96.153 node3
从k3s的发布页面下载具体版本的k3s所需镜像tar文件和k3s的二进制文件,k3s二进制文件需要与离线镜像的版本一致,这里下载的是v1.21.5+k3s2
版本的。
下面进行手动部署镜像操作,创建镜像目录,并将下载的镜像tar文件拷贝到镜像目录中:
1mkdir -p /var/lib/rancher/k3s/agent/images/
2cp ./k3s-airgap-images-amd64.tar /var/lib/rancher/k3s/agent/images/
将k3s二进制文件拷贝每个节点的/usr/local/bin/
目录下,并确保其拥有可执行权限。
1cp ./k3s /usr/local/bin
2chmod +x /usr/local/bin/k3s
在每个节点上下载获取k3s的安装脚本到/usr/local/bin
中,并确保其执行权限:
1cd /usr/local/bin
2curl -o install.sh https://get.k3s.io
3chmod +x install.sh
离线部署k3s #
可以在离线环境中执行单节点安装,在一个服务器节点上安装k3s,或高可用安装在多个服务器节点上安装k3s。 这里先体验单节点安装,现在node1上安装k3s,执行下面的命令:
1cd /usr/local/bin
2INSTALL_K3S_SKIP_DOWNLOAD=true ./install.sh
3[INFO] Skipping k3s download and verify
4[INFO] Skipping installation of SELinux RPM
5[ERROR] Failed to find the k3s-selinux policy, please install:
6 yum install -y container-selinux selinux-policy-base
7 yum install -y https://rpm.rancher.io/k3s/stable/common/centos/7/noarch/k3s-selinux-0.3-0.el7.noarch.rpm
根据提示错误安装selinux相关包:
1yum install -y container-selinux selinux-policy-base
2yum install -y https://rpm.rancher.io/k3s/stable/common/centos/7/noarch/k3s-selinux-0.3-0.el7.noarch.rpm
再次安装:
1INSTALL_K3S_SKIP_DOWNLOAD=true ./install.sh
确认k3s启动:
1systemctl status k3s
2
3kubectl get node
4NAME STATUS ROLES AGE VERSION
5node1 Ready control-plane,master 15s v1.21.5+k3s2
6
7kubectl get pod -A
8NAMESPACE NAME READY STATUS RESTARTS AGE
9kube-system local-path-provisioner-5ff76fc89d-thqnq 1/1 Running 0 115s
10kube-system metrics-server-86cbb8457f-hvvch 1/1 Running 0 115s
11kube-system coredns-7448499f4d-xnvs8 1/1 Running 0 115s
12kube-system helm-install-traefik-crd-wv28f 0/1 Completed 0 115s
13kube-system helm-install-traefik-68967 0/1 Completed 1 115s
14kube-system svclb-traefik-7skbh 2/2 Running 0 32s
15kube-system traefik-97b44b794-xzv92 1/1 Running 0 32s
查看控制节点node1上的k3s token:
1cat /var/lib/rancher/k3s/server/node-token
2K10cdf421e686597c8b4ca470afb1d1dbe772522549624ac1c0c642a985d01907c8::server:8c23ba1711a7e8ed0121ef3bdf624067
添加node2和node3为k3s集群的agent,在每个节点上执行下面的操作:
1cd /usr/local/bin
2INSTALL_K3S_SKIP_DOWNLOAD=true K3S_URL=https://192.168.96.151:6443 K3S_TOKEN=K10cdf421e686597c8b4ca470afb1d1dbe772522549624ac1c0c642a985d01907c8::server:8c23ba1711a7e8ed0121ef3bdf624067 ./install.sh
查看启动是否正常:
1systemctl status k3s-agent
2
3# 在控制节点node1上运行:
4kubectl get node
5NAME STATUS ROLES AGE VERSION
6node1 Ready control-plane,master 29m v1.21.5+k3s2
7node2 Ready <none> 7m39s v1.21.5+k3s2
8node3 Ready <none> 105s v1.21.5+k3s2
9
10kubectl get pod -A
11NAMESPACE NAME READY STATUS RESTARTS AGE
12kube-system local-path-provisioner-5ff76fc89d-thqnq 1/1 Running 0 30m
13kube-system metrics-server-86cbb8457f-hvvch 1/1 Running 0 30m
14kube-system coredns-7448499f4d-xnvs8 1/1 Running 0 30m
15kube-system helm-install-traefik-crd-wv28f 0/1 Completed 0 30m
16kube-system helm-install-traefik-68967 0/1 Completed 1 30m
17kube-system svclb-traefik-7skbh 2/2 Running 0 29m
18kube-system traefik-97b44b794-xzv92 1/1 Running 0 29m
19kube-system svclb-traefik-sfpg7 2/2 Running 0 8m2s
20kube-system svclb-traefik-7wmdj 2/2 Running 0 2m8s