k3s部署Tx2集群

2024-03-26 20:38
文章标签 部署 集群 tx2 k3s

本文主要是介绍k3s部署Tx2集群,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

参考: http://dockone.io/article/9384

准备工作

假定下载到的文件已经上传到服务器节点的~/packages目录下面。

将k3s-amd64二进制文件放置到/usr/local/bin目录下,并赋予可执行权限:

# cp ~/packages/k3s-amd64 /usr/local/bin/ 
# chmod +x /usr/local/bin/k3s-amd64

将离线镜像包放置到指定的位置:

# mkdir -p /var/lib/rancher/k3s/agent/images/
# cp ~/packages/k3s-airgap-images-arm64.tar /var/lib/rancher/k3s/agent/images/

可执行文件和离线镜像不是很好下载,有需要的可以在这里下载k3s-airgap-images-arm64.tar,k3s-arm64。

需要在k3s集群所有节点上都放置上面的离线文件。

如果没有专门的域名服务器提供主机名解析服务,那么在每一台节点的/etc/hosts文件中。写入本节点的IP与主机名映射。

至此,准备工作完成。

部署k3s Server节点

k3s server节点安装时,可以选在同时在本地安装一个k3s Agent节点用以承载工作负载,如果选择不在Server节点上安装Agent节点,则除了k3s集成的Kubernetes组件(如kubelet、API Server)之外,其余的插件、应用均不会被调度到Server节点上。

k3s支持使用多种容器运行时环境,Server默认以containerd作为运行时,不支持更改。Agent节点可以使用contained也可以使用Docker,推荐使用Docker,因为Docker人机更友好,可以方便的管理镜像和容器以及查错。所以如果选择Agent节点以Docker作为容器运行时,那么必须要提前安装并配置好Docker服务。

现在,我们可以启动k3s Server节点:

# k3s-amd64 server \
--docker \
--bind-address=10.0.0.201 \
--cluster-cidr=10.128.0.0/16 \
--service-cidr=10.129.0.0/16 \
--kube-apiserver-arg service-node-port-range=1000-65000 \
--write-kubeconfig=/root/.kube/config \
--write-kubeconfig-mode=644 \
--node-label asrole=worker

参数说明:
–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,非必选。

k3s支持众多的安装参数和选型,详细请参考官方文档:https://rancher.com/docs/k3s/l … tion/。

完成之后,检查集群状态:

$ k3s-arm64 kubectl get nodes
WARN[2020-05-14T09:29:22.540598968+08:00] Unable to read /etc/rancher/k3s/k3s.yaml, please start server with --write-kubeconfig-mode to modify kube config permissions 
error: error loading config file "/etc/rancher/k3s/k3s.yaml": open /etc/rancher/k3s/k3s.yaml: permission denied

提示权限不够,给 /etc/rancher/k3s/k3s.yaml添加可读权限:

$ sudo chmod a+r /etc/rancher/k3s/k3s.yaml

然后检查集群状态:

#$ k3s-arm64 kubectl get nodes
NAME           STATUS   ROLES    AGE     VERSION
face-desktop   Ready    master   2d19h   v1.17.5+k3s1

可见节点已经呈就绪状态。

检查Pod的状态:

$ k3s-arm64 kubectl get po --all-namespaces
NAMESPACE     NAME                                      READY   STATUS      RESTARTS   AGE
kube-system   helm-install-traefik-jtlq8                0/1     Completed   0          2d19h
default       dummy-web-test-7c8f8847cb-jxg4l           1/1     Running     3          2d19h
default       dummy-web-test-7c8f8847cb-zxtqj           1/1     Running     3          2d19h
kube-system   metrics-server-6d684c7b5-7mbhb            1/1     Running     3          2d19h
kube-system   svclb-traefik-kh7p2                       2/2     Running     6          2d19h
kube-system   traefik-7b8b884c8-lp8ck                   1/1     Running     3          2d19h
kube-system   coredns-6c6bb68b64-htrh9                  1/1     Running     3          2d19h
kube-system   local-path-provisioner-58fb86bdfd-2rlzg   1/1     Running     4          2d19h

可以看到,系统命名空间下所有的应用都已经启动了,server节点已经就绪,接下来可以部署k3s agent工作节点了。

在上面的命令中,我们均是以k3s kubectl开头的命令,是否可以直接使用kubectl客户端呢?当然可以,只需要下载一个对应版本的kubectl二进制文件放到系统的Path中,赋予可执行权限即可,使用起来与使用Kubernetes集群一模一样!

由于上面的命令是在前台执行的,一旦断开SSH链接或者终止shell进程,k3s server就停止运行了,因此我们给他配置一个systemd服务,用以像管理系统服务一样管理k3s server节点。

创建文件/lib/systemd/system/k3s-server.service,内容为:

[Unit]
Description=Lightweight Kubernetes
Documentation=https://k3s.io
After=network-online.target[Service]
Type=notify
EnvironmentFile=/etc/systemd/system/k3s.service.env
ExecStart=/usr/local/bin/k3s-arm64 server --docker
KillMode=process
Delegate=yes
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
TimeoutStartSec=0
Restart=always
RestartSec=5s[Install]
WantedBy=multi-user.target

然后设置服务开机自启:

# systemctl enable k3s-server

CTRL+C结束在前台执行的命令,我们看到服务文件中引用了一个环境变量文件/etc/systemd/system/k3s.service.env,这个文件并不存在需要先创建一个然后才能启动服务:

# touch /etc/systemd/system/k3s.service.env
# systemctl start k3s-server

查看服务状态:

$ systemctl status k3s-server
● k3s-server.service - Lightweight KubernetesLoaded: loaded (/lib/systemd/system/k3s-server.service; enabled; vendor preset: enabled)Active: active (running) since Thu 2020-05-14 09:27:15 CST; 31min agoDocs: https://k3s.ioMain PID: 6827 (k3s-server)Tasks: 0CGroup: /system.slice/k3s-server.service└─6827 /usr/local/bin/k3s-arm64 server --docker5月 14 09:48:47 face-desktop k3s-arm64[6827]: I0514 09:48:47.461392    6827 controller.go:107] OpenAPI Aggregatio
5月 14 09:49:47 face-desktop k3s-arm64[6827]: I0514 09:49:47.493009    6827 controller.go:107] OpenAPI Aggregatio
5月 14 09:50:47 face-desktop k3s-arm64[6827]: I0514 09:50:47.511674    6827 controller.go:107] OpenAPI Aggregatio
5月 14 09:51:47 face-desktop k3s-arm64[6827]: I0514 09:51:47.543578    6827 controller.go:107] OpenAPI Aggregatio
5月 14 09:52:47 face-desktop k3s-arm64[6827]: I0514 09:52:47.566575    6827 controller.go:107] OpenAPI Aggregatio
5月 14 09:53:47 face-desktop k3s-arm64[6827]: I0514 09:53:47.589274    6827 controller.go:107] OpenAPI Aggregatio
5月 14 09:54:47 face-desktop k3s-arm64[6827]: I0514 09:54:47.623797    6827 controller.go:107] OpenAPI Aggregatio
5月 14 09:55:47 face-desktop k3s-arm64[6827]: I0514 09:55:47.650076    6827 controller.go:107] OpenAPI Aggregatio
5月 14 09:56:47 face-desktop k3s-arm64[6827]: I0514 09:56:47.668509    6827 controller.go:107] OpenAPI Aggregatio
5月 14 09:57:47 face-desktop k3s-arm64[6827]: I0514 09:57:47.698423    6827 controller.go:107] OpenAPI Aggregatio
lines 1-19/19 (END)

提醒:如果出现错误,可以通过journalctl -u k3s-server查看日志。

部署k3s agent节点

在server节点部署完成之后,在server节点的/var/lib/rancher/k3s/server/目录下面生成一个node-token文件,该文件存储了k3s agent节点加入集群时所需的token。

在Server节点上,获取token:

# cat node-token 
K106c55585781217aa70d30fc30bad4ad5db27863a7849a5380107b4e0210866f51::server:7cc3052b9957cb3d34e3c4f5753b7d37

在作为k3s agent节点的系统中,以root用户执行下面的命令启动k3s agent节点,但是,因为我们采用了Docker作为Agent节点的容器运行时,所以我们先将离线镜像导入到Docker中:

# docker load -i k3s-airgap-images-arm64.tar 
225df95e717c: Loading layer [==================================================>]  336.4kB/336.4kB
8b229224d9be: Loading layer [==================================================>]  42.13MB/42.13MB
Loaded image: rancher/coredns-coredns:1.6.3
dadbfa900fbf: Loading layer [==================================================>]  20.73MB/20.73MB
53e5ec09abb1: Loading layer [==================================================>]    104MB/104MB
5a274a584f7e: Loading layer [==================================================>]  5.632kB/5.632kB
Loaded image: rancher/klipper-helm:v0.2.3
Loaded image: rancher/klipper-lb:v0.1.2
d357e9c10ce8: Loading layer [==================================================>]    236kB/236kB
5b52354aa0b8: Loading layer [==================================================>]  2.008MB/2.008MB
27ca7adf84a7: Loading layer [==================================================>]  81.39MB/81.39MB
Loaded image: rancher/library-traefik:1.7.19
5e0d81111355: Loading layer [==================================================>]   5.59MB/5.59MB
290c5da5dffb: Loading layer [==================================================>]  29.39MB/29.39MB
Loaded image: rancher/local-path-provisioner:v0.0.11
932da5156413: Loading layer [==================================================>]  3.062MB/3.062MB
e3b5c4b90500: Loading layer [==================================================>]  36.49MB/36.49MB
Loaded image: rancher/metrics-server:v0.3.6
Loaded image: rancher/pause:3.1

然后在作为agent的Tx2上执行下面的命令安装k3s-agent节点。

# k3s-arm64 agent \
--docker \
--server https://192.168.111.177:6443 \
--token K106c55585781217aa70d30fc30bad4ad5db27863a7849a5380107b4e0210866f51::server:7cc3052b9957cb3d34e3c4f5753b7d37 \
--node-label asrole=worker

参数说明:
–docker:k3s agent以docker作为容器运行时。
–server:k3s server节点监听的url,必选参数。
–token:k3s server安装时生成的token,必选参数。
–node-ip:k3s agent节点的IP地址,非必选参数。
–node-label:同样给k3s agent节点打上一个asrole=worker的标签,非必选参数。

稍等一会儿,在server节点上查看agent节点是否已经加入到了集群中:

# k3s-arm64 kubectl get node
NAME           STATUS   ROLES    AGE   VERSION
face-desktop   Ready    master   3d    v1.17.5+k3s1
ubuntu-tx2     Ready    <none>   11m   v1.17.5+k3s1

可以看到节点已经成功加入到了集群中。
如果想Agent节点配置成systemd可以管理的系统服务,可以参照配置server节点作为系统服务的过程。

rancher导入k3s

登陆rancher页面
在这里插入图片描述
点击导入,输入集群名称然后点击创建
在这里插入图片描述
复制第三条命令,在server的终端中运行即可将节点加入rancher。
如果没有在系统中安装kubectl,则要在命令的kubectl前加上k3s-arm64
在这里插入图片描述
大约过了10s就能在rancher中看到导入的集群信息了。
在这里插入图片描述

这篇关于k3s部署Tx2集群的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/849781

相关文章

Nginx分布式部署流程分析

《Nginx分布式部署流程分析》文章介绍Nginx在分布式部署中的反向代理和负载均衡作用,用于分发请求、减轻服务器压力及解决session共享问题,涵盖配置方法、策略及Java项目应用,并提及分布式事... 目录分布式部署NginxJava中的代理代理分为正向代理和反向代理正向代理反向代理Nginx应用场景

linux部署NFS和autofs自动挂载实现过程

《linux部署NFS和autofs自动挂载实现过程》文章介绍了NFS(网络文件系统)和Autofs的原理与配置,NFS通过RPC实现跨系统文件共享,需配置/etc/exports和nfs.conf,... 目录(一)NFS1. 什么是NFS2.NFS守护进程3.RPC服务4. 原理5. 部署5.1安装NF

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践

Nginx部署HTTP/3的实现步骤

《Nginx部署HTTP/3的实现步骤》本文介绍了在Nginx中部署HTTP/3的详细步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前提条件第一步:安装必要的依赖库第二步:获取并构建 BoringSSL第三步:获取 Nginx

redis-sentinel基础概念及部署流程

《redis-sentinel基础概念及部署流程》RedisSentinel是Redis的高可用解决方案,通过监控主从节点、自动故障转移、通知机制及配置提供,实现集群故障恢复与服务持续可用,核心组件包... 目录一. 引言二. 核心功能三. 核心组件四. 故障转移流程五. 服务部署六. sentinel部署

Redis中哨兵机制和集群的区别及说明

《Redis中哨兵机制和集群的区别及说明》Redis哨兵通过主从复制实现高可用,适用于中小规模数据;集群采用分布式分片,支持动态扩展,适合大规模数据,哨兵管理简单但扩展性弱,集群性能更强但架构复杂,根... 目录一、架构设计与节点角色1. 哨兵机制(Sentinel)2. 集群(Cluster)二、数据分片

Linux部署中的文件大小写问题的解决方案

《Linux部署中的文件大小写问题的解决方案》在本地开发环境(Windows/macOS)一切正常,但部署到Linux服务器后出现模块加载错误,核心原因是Linux文件系统严格区分大小写,所以本文给大... 目录问题背景解决方案配置要求问题背景在本地开发环境(Windows/MACOS)一切正常,但部署到

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

MySQL 主从复制部署及验证(示例详解)

《MySQL主从复制部署及验证(示例详解)》本文介绍MySQL主从复制部署步骤及学校管理数据库创建脚本,包含表结构设计、示例数据插入和查询语句,用于验证主从同步功能,感兴趣的朋友一起看看吧... 目录mysql 主从复制部署指南部署步骤1.环境准备2. 主服务器配置3. 创建复制用户4. 获取主服务器状态5

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序