【AICon】硅谷视野+中国实践,汇聚全球顶尖技术的 AI 科技盛会 >>> 了解详情
写点什么

Step by Step!Rancher 2.2+K3s 集成部署实践教程

  • 2020-05-16
  • 本文字数:6059 字

    阅读完需:约 20 分钟

Step by Step!Rancher 2.2+K3s集成部署实践教程

在生产环境中,很多时候我们都会有这样的需求:


  • 业务弹性需求较大,反复安装卸载修改配置文件会对环境造成极大破坏,甚至需要重装系统以清理环境

  • 将业务迁移到 Docker 架构,但使用传统的 Docker CLI (Docker 命令行) 方式进行管理,效率低下还容易误操作

  • 将业务迁移到 K8s 架构,但因为 K8s 过于占用系统资源,往往在开发环境或者小型的生产环境,K8s 刚跑起来系统就没可用性能资源了

  • K8s 手动部署起来一路尽是无底深坑,历尽千辛终于配好了,稍稍改动下配置文件整个集群开始出现问题

  • 需要个简单直观管理工具,能够简单快速的管理各个 K8s 集群,灵活创建 Pod


在我接触 K8S 架构之初,也遇到了类似的问题:使用 Rancher2.x+K8s 这样的架构,在一台 1C2G 的阿里云上面部署,部署完成后发现系统内存早就被吃得一干二净,业务部署更是无从谈起;使用传统的 Docker Swarm,感觉用起来没有 K8S 那样顺手舒服。


2019 年 2 月 26 日,业界领先的容器管理软件提供商 Rancher Labs 推出了轻量级Kubernetes发行版 K3s ,这款产品专为在资源有限的环境中运行 Kubernetes 的研发和运维人员设计。这对于一些小型的开发/生产环境、边缘计算节点甚至性能极其有限的设备(比如树莓派 3)来讲无疑是福音。


但问题来了,K3s 相对于 K8s,精简了不少功能。那么如何正确的对接 Rancher 2.x 和 K3s 呢?思考了许久,也在自己的时间环境埋头研究了一周,终于做出来一套完整的部署教程。好东西当然要共享,也为那些部署 Rancher+K3s 架构的同好们提供一些常见问题的解决思路。


那么,教程,现在开始。

Step 0: 配置环境要求

虽然 K3S 是 K8S 的轻量版,但也不能无视配置要求。官方配置要求如下:


  • 系统内核版本:Linux 3.10+ (CentOS 7, Debian 8/9, Ubuntu 14.04+)

  • K3S Server 端最低内存要求:512 MB

  • K3S Agent 端内存最低要求:75MB

  • 磁盘空间最低要求:200 MB

  • 支持的硬件架构:x86_64, ARMv7, ARM64


相对于 K8S 那种性能杀手,K3S 可以轻量到部署在大多数虚拟机上(比如常见的 1C512M,不过如果部署在生产环境,建议 1C2G 及以上以保证稳定性)。如果你还要再同一台 Server 上同时跑 Rancher 2.x Server 的话,我建议最低配置要求如下:


  • 系统内核版本:Linux 3.10+ (CentOS 7, Debian 8/9, Ubuntu 14.04+)

  • CPU 最低核心数:1 核心

  • Rancher 2.x Server + K3S Server + K3S Agent 端最低内存要求:2 GB

  • 磁盘空间最低要求:5 GB

  • 建议使用的硬件架构:x86_64


虽然 K3S 足够轻量,但也请不要忘记,Rancher Server 本身也是需要占用掉大量内存的。所以如果是为了做成 AIO (All In One)的效果,建议按照上述的配置要求准备 Server。

Step 1: 安装 Docker 环境

虽然 K3S 默认集成的是 Containerd,但出于多方面原因,为了后续部署方便起见,这里我们将 Containerd 换成 Docker。具体的原因我会在下文解释。


本文以 Debian 9 x64 系统作为示例,Ubuntu 可以直接照搬 Debian 的安装过程,CentOS 用户我会特殊标注操作步骤。


如果你的服务器在中国大陆境内:


curl -fsSL "https://mirrors4.tuna.tsinghua.edu.cn/docker-ce/linux/debian/gpg" | apt-key add -echo "deb [arch=amd64] https://mirrors4.tuna.tsinghua.edu.cn/docker-ce/ stretch stable" < /etc/apt/sources.list.d/docker.listapt-get update && apt-get install -y docker-ce
复制代码


如果你的服务器在海外:


curl -fsSL "https://download.docker.com/linux/debian/gpg" | apt-key add -echo "deb [arch=amd64] https://download.docker.com/linux/debian stretch stable" > /etc/apt/sources.list.d/docker.listapt-get update && apt-get install -y docker-ce
复制代码


CentOS 系统或者以上方法无法安装的,请使用官方安装脚本:


curl -fsSL get.docker.com | sh
复制代码


也许会有人问,安装的时候为什么去掉了 --no-install-recommends 参数?


因为需要用到里面的 cgroup 支持,当然,你也可以加上这个参数,来只安装基础的 Docker 组件,同样能够支持运行。


在安装完成后,如果你的服务器位于中国大陆境内,你很有可能需要一个 Docker 镜像加速器。国内提供 Docker 镜像加速器的服务商很多,这里我们以阿里云的镜像加速服务为例:


  • 打开 https://cr.console.aliyun.com ,并登录你的阿里云账户

  • 点击左方的【镜像中心 - 镜像加速器】,然后在下方会有一个操作文档,复制其中的命令,粘贴到你的 SSH 窗口中即可完成镜像源的更换。


如果报错误 sudo: command not found ,只需要去掉每行命令中的 sudo 即可 (前提是你的当前登录用户为 root)

Step 2: 安装 Rancher Server

此部分可以参考教程:

https://www.cnrancher.com/quick-start


Rancher Server 名字听起来感觉像是又要装很多东西,其实并非如此。Rancher Server 只是一个 Docker 镜像,整个 Rancher 的程序都使用 Docker 打包起来了。所以相对来讲配置很简单,只需要一条命令:


docker run -d -v /data/docker/rancher-server/var/lib/rancher/:/var/lib/rancher/ --restart=unless-stopped --name rancher-server -p 80:80 -p 443:443 rancher/rancher:stable
复制代码


然后等待几分钟,之后访问你的 Server IP 即可进入 Rancher Server 的首次配置界面。


如果你不想让 Rancher 占用你的 80/443 端口(比如前端要放个 Caddy 反代),只需要按照以下步骤操作:


  • 修改启动命令行:

  • 将里面的 80 和 443,替换为你需要的端口(注意:请不要占用 Kubernetes 的 6443 端口,这一步很容易翻车!),换完的效果大概是这样:

  • 启动 Rancher Server 容器

  • 执行命令,确认 Rancher Server 容器的 Container ID,本例中的容器 ID 为 31aa94998b75:

  • 执行命令,切入到 Rancher Server 容器的 Bash Shell 中(TTY):

  • 此时你会发现你的提示符变成了这个样子:

  • 这时候你控制的就是 Rancher Server 的容器,如果你能够成功切入 Shell,那么请继续下一步,如果未能切入,请使用 docker logs 31aa94998b75 来确认容器是否出现故障。

  • 我们先看下要改的文件长什么样子:

  • 执行命令,替换默认的端口:

  • 执行后看下变成了什么样子


#!/bin/bashset -e
exec tini -- rancher --http-listen-port=9080 --https-listen-port=9443 --audit-log-path=${AUDIT_LOG_PATH} --audit-level=${AUDIT_LEVEL} --audit-log-maxage=${AUDIT_LOG_MAXAGE} --audit-log-maxbackup=${AUDIT_LOG_MAXBACKUP} --audit-log-maxsize=${AUDIT_LOG_MAXSIZE} "${@}""
复制代码


  • 确认修改成功后,使用 exit 命令退出容器的 Bash Shell,之后执行命令重新启动 Rancher Server 容器:

  • 之后使用新的端口访问 Rancher Server 的 UI(下面的连接为例子):

  • 访问会提示 SSL 证书无效,无视错误继续即可

  • https://rancher.example.com:9443/


  • 此时我们会来到 Rancher 的初始化部署页面,在此页面输入默认的全局管理员密码,创建全局管理员账户。


  • 这一步输入我们的 Rancher API Endpoint,注意这里输入的 URL 一定要保证整个集群内的所有节点都可以正常连接。


  • 之后我们会来到主界面,如果对英文操作看着头疼的话,右下角可以切换语言。

  • 具体方法是点击右下角的 English ,然后下拉选择 简体中文(zh-hans) 即可。

  • 汉化设置会跟随你的 Cookies 走,所以不换电脑或者不重装系统的话应该不会自动换回英语。


  • 我们接下来在 Rancher 中创建一个新的集群,点击页面上的【创建集群】按钮,开始创建一个新的 K8S/K3S 集群。


注意:在这里请选择 导入现有的 Kubernetes 集群 (Import) ,而不是其他的新建选项!


![](https://static001.infoq.cn/resource/image/7a/f0/7ae60b34a03665856b3dcd87bedda2f0.png)
复制代码


  • 下方的集群名称随意输入一个即可,反正以后可以随意改。


成员角色目前无需改动,直接点击【创建】完成向导。


![](https://static001.infoq.cn/resource/image/bb/19/bba01a6115171d14fc0419f4fd5e4819.png)
复制代码


  • 完成后我们会得到导入 K3S 集群所需的命令,请保存好第三条命令以备后用。

  • 为什么不是第二条?因为目前访问 HTTPS API 使用的是自签证书,直接用第二条会产生证书不信任的报错。


  • 如果你一不小心关掉了窗口,可以在首页点击右侧的三个点,然后点击升级,就可以看到上面的集群导入命令。


  • 到这一步,我们已经完成了 Rancher Server 端的准备工作。接下来,我们将着手准备部署 K3S 集群。

Step 3: 安装 K3S 集群 - 国内服务器的准备工作

如果你的服务器中国大陆境内,请参考下面的步骤执行;如果你的服务器在海外,请直接跳到 Step 4。


鉴于国内拉取 AWS S3 Bucket 的速度,以及 k8s.gcr.io 被墙的无奈,我在这里额外增加了针对中国大陆境内服务器的步骤。如果你使用的是海外的服务器,这一步你无需操作,请继续下面的教程。


首先,我们下载 K3S 所需的 Binary 到本地服务器(或者在服务器端挂 VPN 进行下载):


https://github.com/rancher/k3s/releases/download/v0.5.0/k3s-arm64


之后上传此 Binary 到服务器端的 /usr/local/bin/k3s,并赋予可执行属性:


chmod +x /usr/local/bin/k3s
复制代码


这一步完成后,我们来着手解决最头疼的问题:pause 镜像被墙无法拉取。


这个镜像对于很多刚接触 K8S 的用户来讲非常头疼,我也是在这里卡了好久最后才算弄出来个解决方案。


出于大家的部署方便考虑,我将这份镜像制成了多份副本并分发出来,大家可以根据自己的需求选择最佳的解决方案。


阿里云北京镜像分流:


docker pull registry.cn-beijing.aliyuncs.com/ilemonrain/pause-amd64:3.1docker tag registry.cn-beijing.aliyuncs.com/ilemonrain/pause-amd64:3.1 k8s.gcr.io/pause:3.1
复制代码


阿里云上海镜像分流:


docker pull registry.cn-shanghai.aliyuncs.com/ilemonrain/pause-amd64:3.1docker tag registry.cn-shanghai.aliyuncs.com/ilemonrain/pause-amd64:3.1 k8s.gcr.io/pause:3.1
复制代码


阿里云广州镜像分流:


docker pull registry.cn-shenzhen.aliyuncs.com/ilemonrain/pause-amd64:3.1docker tag registry.cn-shenzhen.aliyuncs.com/ilemonrain/pause-amd64:3.1 k8s.gcr.io/pause:3.1
复制代码


Google Mirror 分流 (Docker Hub):


docker pull mirrorgooglecontainers/pause:3.1docker tag mirrorgooglecontainers/pause:3.1 k8s.gcr.io/pause:3.1
复制代码


本地镜像分流 (tar 包格式):


wget -qO- https://download.ilemonrain.com/Kubernetes/pause-amd64/pause.tar | docker load
复制代码


完成镜像导入后确认是否导入成功:


docker images | grep "k8s.gcr.io/pause"
复制代码


如果出现类似于这样的结果:


k8s.gcr.io/pause 3.1     da86e6ba6ca1  17 months ago  742kB
复制代码


则说明导入成功,可以继续接下来的步骤。

Step 4: 安装 K3S 集群

接下来,我们开始 K3S 集群的部署。


官方提供了很好用的一键安装脚本,我们只需要使用一键脚本即可完成 K3S 环境的安装:


curl -sfL https://get.k3s.io | sh -
复制代码


安装完成后,我们需要调整下 K3S 的服务配置文件,以将 K3S 的默认容器引擎从 Containerd 切换到 Docker。


修改 K3S 服务的配置文件:


vim /etc/systemd/system/multi-user.target.wants/k3s.service
复制代码


文件内容如下:


[Unit]Description=Lightweight KubernetesDocumentation=https://k3s.ioAfter=network-online.target
[Service]Type=notifyEnvironmentFile=/etc/systemd/system/k3s.service.envExecStartPre=-/sbin/modprobe br_netfilterExecStartPre=-/sbin/modprobe overlayExecStart=/usr/local/bin/k3s serverKillMode=processDelegate=yesLimitNOFILE=infinityLimitNPROC=infinityLimitCORE=infinityTasksMax=infinityTimeoutStartSec=0Restart=always
[Install]WantedBy=multi-user.targe
复制代码


在这里我们需要修改 ExecStart 的值,将其修改为:


/usr/local/bin/k3s server --docker --no-deploy traefik
复制代码


之后保存退出,执行命令重新加载新的服务配置文件:


systemctl daemon-reload
复制代码


完成后重启 K3S 服务:


service k3s restart
复制代码


稍等数十秒,之后通过命令确认 K3S 集群是否就绪:


k3s kubectl get node
复制代码


如果得到类似如下的结果:


NAME                  STATUS   ROLES    AGE     VERSIONk3s01.ilemonrain.io   Ready    <none>   3m34s   v1.14.1-k3s.4
复制代码


则说明 K3S 集群启动成功。

Step 5: 导入 K3S 集群到 Rancher

还记得在 Step 2 中保存好的导入命令么?是时候该派上用场了。


现在的 Rancher Server 上,显示集群状态为 Pending,就像这样:



这是因为我们还未导入集群,这一步我们将导入集群,并建立 Rancher Server 与 K3S 集群的联系。


在 K3S 的主控节点(一般情况下,第一个节点都是主控制器,也叫 Server 节点)上,执行命令,导入集群:


curl --insecure -sfL https://10.248.21.2/v3/import/jr42wvdhk4w94htxxtf5hv424rsjjz6hzq9vl2lj8q9dnb8dgcwgzn.yaml | kubectl apply -f -
复制代码


注意:每个集群的导入命令都不一样,请不要直接照搬教程中的导入命令!


之后 Shell 中会返回一下信息,说明集群导入配置成功:


namespace/cattle-system createdserviceaccount/cattle createdclusterrolebinding.rbac.authorization.k8s.io/cattle-admin-binding createdsecret/cattle-credentials-7c9ef0a createdclusterrole.rbac.authorization.k8s.io/cattle-admin createddeployment.extensions/cattle-cluster-agent createddaemonset.extensions/cattle-node-agent created
复制代码


回到 Rancher 界面,稍微等数十秒,我们会发现 Pending 状态变成了 Waiting 状态:



出现这个提示说明 Rancher 已经收到 K3S 的注册请求,正在完成 K3S 集群的注册工作,再等数十秒种的时间即可完成 K3S 集群的导入工作:



到这里,我们成功完成了 Rancher 2.x 和 K3S 的对接工作,可以像操作 K8S 集群那样操作 K3S 集群了。

Step X: 一点小小的总结

为什么我会用 K3S 来取代 K8S,主要是因为自己手里的服务器配置不太够,如果贸然上 K8S 的话,会导致系统资源全被 K8S 吃光,从而没有资源再去跑其他的业务。谨以此文,希望能够做各位运维、开发、Geeker 前行路上的指路明灯,为大家扫清前进的障碍,加速业务容器化的迁移进程。


作者:iLemonrain


来源:https://blog.ilemonrain.com/docker/rancher-with-k3s.html


2020-05-16 17:174520

评论

发布
暂无评论
发现更多内容

华为云会议智能会议室助力财通证券加速数字化

科技怪咖

Kubernetes Nginx配置热加载

CTO技术共享

开源 签约计划第三季

华为云桌面说“高清”的时候,究竟在说什么

科技云未来

AIRIOT答疑第9期|AIRIOT平台服务于哪些客户?

AIRIOT

低代码 物联网 低代码,项目开发

企业搭建知识库的重要性,你了解多少?

Geek_da0866

2022各互联网大厂面经及总结+大厂Java岗面试真题解析(进大厂必看攻略)

程序知音

Java 程序员 Java 面试 后端技术 八股文

在Rust和C之间传递字符串,有 7 种方法!

非凸科技

c rust

Kubernetes服务的注册与发现

CTO技术共享

签约计划第三季

华为云会议,用高效联接推进工业企业数字化转型

sofiya

网红50万卖微信号被判交易无效:如何监管互联网账号交易市场

石头IT视角

华为云安全云脑,让企业云化运营更放心

IT资讯搬运工

如何用紧凑型语音表征打造高性能语音合成系统

小红书技术REDtech

深度学习 语音合成 自编码器 表征学习 语音表征

华为云桌面说“流畅”的时候,究竟在说什么

科技云未来

RocketMQ高可用设计之异步刷盘

急需上岸的小谢

8月月更

Kubernetes 核心组件

CTO技术共享

开源 签约计划第三季

​五大不良 coding 习惯,你占了几样?

SEAL安全

Code 代码规范 CODING

政企视频会议首选,华为云OneMeeting全场景视频会议解决方案正式发布

sofiya

游族马寅龙:常见信息安全风险及应对方案

声网

网络安全 创业讲堂

华为云主机安全助力企业种出“金葫芦”

IT资讯搬运工

沟通不受限,审批不堆积 深大智能通过华为云WeLink+OA实现办公提速

神奇视野

微信小程序开发速览

乌龟哥哥

8月月更

2022 Gartner RPA魔力象限,弘玑Cyclone位置飞跃国产RPA进击全球

王吉伟频道

RPA 机器人流程自动化 Gartner RPA魔力象限 弘玑Cyclone

IPv6中的隧道技术

穿过生命散发芬芳

ipv6 8月月更 隧道技术

用户权限-Linux系统用户管理

Albert Edison

Linux centos 运维 用户权限 8月月更

金融和科创深化合作,常熟农商银行与博云签署战略合作协议

BoCloud博云

云计算 容器 云原生

ITIL服务支持5个运营级流程简单介绍

阿泽🧸

ITIL 8月月更

3000人无缝连接,WeLink助力华荣科技全场景数字化办公

神奇视野

沉浸感拉满!这样的电影杀约起来

科技云未来

华为发布IdeaHub S2系列,与华为云会议结合更强大!

科技怪咖

每日一R「10」数据结构(一)智能指针

Samson

8月日更 ​Rust

创建知识库使您的客户能够体验自助服务

Geek_da0866

Step by Step!Rancher 2.2+K3s集成部署实践教程_文化 & 方法_Rancher_InfoQ精选文章