【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

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:174482

评论

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

科普压单双大小正规平台

不服气别放弃

科普单双大小平台app

不服气别放弃

科普网上买大小平台赚钱

不服气别放弃

科普大发单双大小的平台

不服气别放弃

web3钱包进阶!从入门到精通,Bitget实现逆袭

EOSdreamer111

我想 Debug 容器运行时

黑客不够黑

Containerd 容器运行时

科普单双大小官方平台

不服气别放弃

科普乐发单双大小平台

不服气别放弃

科普大发旗下有哪些平台

不服气别放弃

科普猜单双大小赚钱平台

不服气别放弃

在数字化转型的旷野中,企业需要明确的方向

脑极体

AI

科普单双大小正规平台推荐

不服气别放弃

神奇的 lua

黑客不够黑

lua Lua脚本

你不知道的WEB3钱包!你绝对不想错过的bitget钱包

威廉META

科普大发系统靠谱的平台

不服气别放弃

科普正规的单双大小平台

不服气别放弃

百科/压单双大小赚钱平台

不服气别放弃

科普大发旗下最稳定的平台

不服气别放弃

科普大发单双大小平台

不服气别放弃

科普大发在哪个平台玩好

不服气别放弃

科普单双大小靠谱的平台

不服气别放弃

科普网上买单双大小平台

不服气别放弃

科普大发全网最高信誉平台

不服气别放弃

技术写作最佳实践与策略指南

小万哥

最佳实践 程序人生 软件工程 后端开发 技术写作

一款电压检测LVD

智趣匠

科普大发那个台子最稳定

不服气别放弃

通过与 Team Finance 整合,Casper Network 让 Token 的创建、部署更加高效

股市老人

科普玩大发哪个平台靠谱

不服气别放弃

科普单双大小平台有哪些

不服气别放弃

你不知道的WEB3钱包!你绝对不想错过的bitget钱包

股市老人

终端闲思录(1)- k8s 日志引发的联想

黑客不够黑

终端

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