你的第一次轻量级K8S体验 —— 记一次Rancher 2.2 + K3S集成部署过程

此文章为 Rancher+K3S 部署指南 系列中的一篇文章,更多教程请点击 >>

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

  • 业务弹性需求较大,反复安装卸载修改配置文件会对环境造成极大破坏,甚至需要重装系统以清理环境
  • 将业务迁移到Docker架构,但使用传统的Docker CLI (Docker命令行) 方式进行管理,效率低下还容易误操作
  • 将业务迁移到K8S架构,但因为K8S过于占用系统资源,往往在开发环境或者小型的生产环境,K8S刚跑起来系统就没可用性能资源了
  • K8S手动部署起来一路尽是无底深坑,好不容易配好了稍稍改动下配置文件整个集群全炸了
  • 需要个简单直观管理工具,能够简单快速的管理各个K8S集群,灵活创建Pod

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

2019年2月26日,业界领先的容器管理软件提供商Rancher Labs(以下简称Rancher)宣布推出轻量级Kubernetes发行版 K3S 。这对于一些小型的开发/生产环境、边缘计算节点甚至性能极其有限的设备(比如树莓派3)来讲无疑是福音。

但问题来了,K3S相对于K8S,精简了不少功能。那么如何正确的对接Rancher 2和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.list
apt-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.list
apt-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

然后等待几分钟,喝杯82年的雪碧压压惊(划掉),之后访问你的Server IP即可进入Rancher Server的首次配置界面。

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

  • 修改启动命令行:

    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

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

    docker run -d -v /data/docker/rancher-server/var/lib/rancher/:/var/lib/rancher/ --restart=unless-stopped --name rancher-server -p 9080:9080 -p 9443:9443 rancher/rancher:stable
  • 启动Rancher Server容器
  • 执行命令,确认Rancher Server容器的Container ID,本例中的容器ID为 31aa94998b75

    docker ps | grep "rancher/rancher:stable"
  • 执行命令,切入到Rancher Server容器的Bash Shell中(TTY):

    docker exec -it 31aa94998b75 bash

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

    root@31aa94998b75:/var/lib/rancher#

    这时候你控制的就是Rancher Server的容器,如果你能够成功切入Shell,那么请继续下一步,如果未能切入,请使用 docker logs 31aa94998b75 来确认容器发生了什么奇怪的事情。

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

    #!/bin/bash
    set -e
    
    exec tini -- rancher --http-listen-port=80 --https-listen-port=443 --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} "${@}"
  • 执行命令,替换默认的端口:

    sed -i "s/80/9080/g" /usr/bin/entrypoint.sh
    sed -i "s/443/9443/g" /usr/bin/entrypoint.sh
  • 执行后看下变成了什么样子:

    #!/bin/bash
    set -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容器:

    docker restart 31aa94998b75
  • 之后使用新的端口访问Rancher Server的UI(下面的连接为例子):
    访问会提示SSL证书无效,无视错误继续即可。

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

    1559176134336.png

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

    1559176304769.png

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

    1559176520773.png

  • 之后我们会来到主界面,如果对英文操作看着头疼的话,右下角可以切换语言。
    具体方法是点击右下角的 English ,然后下拉选择 简体中文(zh-hans) 即可。
    汉化设置会跟随你的Cookies走,所以不换电脑或者不重装系统的话应该不会自动换回英语。

    1559176671939.png

  • 我们接下来在Rancher中创建一个新的集群,点击页面上的 创建集群 按钮,开始创建一个新的K8S/K3S集群。
    注意:在这里请选择 导入现有的Kubernetes集群 (Import) ,而不是其他的新建选项!

    1559176852965.png

  • 下方的集群名称随意输入一个即可,反正以后可以随意改。
    成员角色目前无需改动,直接点击 创建 完成向导。

    1559176990814.png

  • 完成后我们会得到导入K3S集群所需的命令,请保存好第三条命令以备后用。
    为什么不是第二条?因为目前访问HTTPS API使用的是自签证书,直接用第二条会产生证书不信任的报错。

    1559177084801.png

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

    1559177232193.png

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

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

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

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

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

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.1
docker 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.1
docker 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.1
docker 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.1
docker 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 Kubernetes
Documentation=https://k3s.io
After=network-online.target

[Service]
Type=notify
EnvironmentFile=/etc/systemd/system/k3s.service.env
ExecStartPre=-/sbin/modprobe br_netfilter
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/usr/local/bin/k3s server
KillMode=process
Delegate=yes
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
TimeoutStartSec=0
Restart=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     VERSION
k3s01.ilemonrain.io   Ready    <none>   3m34s   v1.14.1-k3s.4

则说明K3S集群启动成功。

此教程目前只做单机K3S集群的部署讲解,后续教程会讲如何组建多机K3S集群,以及通过一个Rancher控制多个K3S集群。

Step 5: 导入K3S集群到Rancher

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

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

1559179636850.png

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

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

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

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

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

namespace/cattle-system created
serviceaccount/cattle created
clusterrolebinding.rbac.authorization.k8s.io/cattle-admin-binding created
secret/cattle-credentials-7c9ef0a created
clusterrole.rbac.authorization.k8s.io/cattle-admin created
deployment.extensions/cattle-cluster-agent created
daemonset.extensions/cattle-node-agent created

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

1559179824562.png

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

1559179926951.png

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

Step X: 一点小小的总结

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

本文章欢迎各大平台转载使用,但请注明出处。

目前此文章已由Rancher Labs官方微信公众号转载,传送门 >>

我的联系方式:

站务相关E-mail: ilemonrain@ilemonrain.com
工作生活相关E-mail: ilemonrain@foxmail.com
Telegram: https://t.me/ilemonrain
Telegram Chatbot: https://t.me/ilemonrain_chatbot

最后修改:2019 年 08 月 14 日 08 : 13 PM
搞技术/肝文章不易,恳请打赏 OwO

31 条评论

  1. Trojx

    [root@VM_0_6_centos ~]# curl --insecure -sfL https://49.235.*.*/v3/import/4l9db4whmngwktqk4884pgxnv6p7jmbv9jn2m6hxp65z7sbrspfmmj.yaml | kubectl apply -f -
    clusterrole.rbac.authorization.k8s.io/proxy-clusterrole-kubeapiserver unchanged
    clusterrolebinding.rbac.authorization.k8s.io/proxy-role-binding-kubernetes-master unchanged
    namespace/cattle-system unchanged
    serviceaccount/cattle unchanged
    clusterrolebinding.rbac.authorization.k8s.io/cattle-admin-binding unchanged
    secret/cattle-credentials-db1a75f unchanged
    clusterrole.rbac.authorization.k8s.io/cattle-admin unchanged
    unable to recognize "STDIN": no matches for kind "Deployment" in version "extensions/v1beta1"
    unable to recognize "STDIN": no matches for kind "DaemonSet" in version "extensions/v1beta1"

    最后一步,导入Rancher时,出现的错误,控制面板里的集群一直是Pending状态。请问有遇到过吗?

    1. Trojx
      @Trojx

      找到原因了,是版本兼容性的问题,最终可用的版本分别是:
      docker: 18.06.3
      k3s:v0.10.0
      rancher: latest (stable版本的镜像因为还不支持k8s 1.16,会出现上述问题,见https://github.com/rancher/rancher/pull/22457)

      1. iLemonrain
        @Trojx

        如果确实是兼容性问题的话,其实可以稍微改动下,就可以给K3s降级:
        首先,备份当前版本的K3s Binary(比如 mv /usr/local/bin/k3s /usr/local/bin/k3s.old)
        然后下载上一个Stable版本的K3s(比如 wget -O /usr/local/bin/k3s https://github.com/rancher/k3s/releases/download/v0.9.1/k3s && chmod +x usr/local/bin/k3s)
        然后重新启动Docker和K3s,理论上就可以降级成功。
        如果降级失败的话,可以尝试删除 /root/.kube 、/etc/rancher/k3s 和 /etc/kubernetes 以重置环境。(建议重置前先行备份这几个文件夹)

    2. iLemonrain
      @Trojx

      我看这个IP地址好像是国内的腾讯云?

      如果是的话,请参考Step 3,切换K3s的Runtime为Docker(默认containerd会因为某些原因导致无法连接到k8s.gcr.io),之后向Docker中导入K8s的pause image,这些都完成后,service docker restart && service k3s restart ,之后再执行导入命令完成导入工作。

      顺便,你可以先使用service k3s stop,停止K3s的守护进程,之后使用 k3s server --docker 命令,让K3s在前台跑起来,这样方便观察出现了哪些错误(ERROR标记的日志)

      1. Trojx
        @iLemonrain

        是的,我的Rancher装在了腾讯云上, docker和k3s部署在阿里云上。
        您说的排错方法学习了,感谢!
        另外,不知何时能出如何组建多机K3S集群的后续教程呀?因为我目前的情况就是各种云服务商里都有一些零散的低配的服务器,十分想用rancher+k3s的方式把它们组成一个集群都利用起来。今天照着官网的方法试了一下,发现worker节点总是连不上master....
        >>>
        [root@iZbp138tf0alwm8zly6gz2Z ~]# k3s agent --server https://47.106.*.*:6443 --token K10f78402495645b4c39ada21e696e57c28f9578a8ebfaf5a5cade144b36a57576c::node:7effba8e6a9565bf97b96e4f51c4e6cc
        INFO[2019-10-30T17:36:42.292118920+08:00] Starting k3s agent v0.10.1 (7d650d32)
        INFO[2019-10-30T17:36:42.294750918+08:00] Running load balancer 127.0.0.1:40424 -> [192.168.1.126:6443 47.106.100.137:6443]
        ERRO[2019-10-30T17:37:02.296532661+08:00] failed to get CA certs at https://127.0.0.1:40424/cacerts: Get https://127.0.0.1:40424/cacerts: read tcp 127.0.0.1:41194->127.0.0.1:40424: read: connection reset by peer
        INFO[2019-10-30T17:37:05.986894678+08:00] Logging containerd to /var/lib/rancher/k3s/agent/containerd/containerd.log
        INFO[2019-10-30T17:37:05.987111741+08:00] Running containerd -c /var/lib/rancher/k3s/agent/etc/containerd/config.toml -a /run/k3s/containerd/containerd.sock --state /run/k3s/containerd --root /var/lib/rancher/k3s/agent/containerd
        INFO[2019-10-30T17:37:06.000230477+08:00] module br_netfilter was already loaded
        INFO[2019-10-30T17:37:06.000286315+08:00] module overlay was already loaded
        INFO[2019-10-30T17:37:06.000296139+08:00] module nf_conntrack was already loaded
        INFO[2019-10-30T17:37:06.137028773+08:00] Connecting to proxy url="wss://192.168.1.126:6443/v1-k3s/connect"
        >>>
        最后就卡住了 日志最后一行里的192.168.1.126是server的局域网ip,这里的worker不知道为什么连接的不是master的公网ip。(我的master和worker节点不在一个局域网内)

        1. iLemonrain
          @Trojx

          一般情况下如果是异地组建K3S集群的话,可以有以下几种方案:
          1. 使用异地局域网组建软件(比如ZeroTier、N2N等),将分散各地的服务器,全部拉入一个虚拟局域网中,然后部署时填写虚拟局域网IP即可。
          2. K3S Server端启动参数中,指定bind-address值为0.0.0.0(参数写法是 --bind-address 0.0.0.0 ,也就是监听公网请求,不过此时请做好相应的安全防护规则,防止K3s被非法用户搞掉)

          如果Rancher里面显示的是服务器的内网IP的话,有个小技巧可以手动指定eip:
          1. 首先,记录下你的公网IP (可以通过命令 curl -4 ip.sb 获得),然后保存好备用;
          2. 将以下内容,以你喜欢的方式保存并设为开机启动(可以是One-Shot一次性启动项,也可以附加在网卡配置的post-up中):
          post-up /sbin/ip link add dm-eip type dummy
          post-up /sbin/ip addr add [你的公网IP地址]/32 dev dm-eip
          post-up /sbin/ip link set dm-eip up
          3. 修改K3s Server/Agent 的启动参数,加上 --node-ip [你的公网IP地址] ,之后重新启动K3s Server/Agent,即可以公网IP注册K3s集群。

  2. gold

    卡在第四步,k3s文件已下载也给了权限,执行curl -sfL https://get.k3s.io | sh -时候还是卡在了下载k3s那里,并没有自动检测文件并跳过,这是什么原因?

    1. iLemonrain
      @gold

      确认下你传到服务器上的的版本,是否是 https://github.com/rancher/k3s/releases 上的 latest release
      (比如目前是 0.9.1 版本,那你实际应该下载的文件应该是 https://github.com/rancher/k3s/releases/download/v0.9.1/k3s )

  3. Richie

    请教两个问题:
    1. 安装k3s helm-install-traefik-tgk9d 这个pod一直处于CrashLoopBackOff。查看log 以下贴出log:
    [storage/driver] 2019/10/14 09:53:08 list: failed to list: Get https://10.43.0.1:443/api/v1/namespaces/kube-system/secrets?labelSelector=OWNER%3DTILLER: dial tcp 10.43.0.1:443: connect: no route to host
    Error: Get https://10.43.0.1:443/api/v1/namespaces/kube-system/secrets?labelSelector=OWNER%!D(MISSING)TILLER: dial tcp 10.43.0.1:443: connect: no route to host
    + LINE=
    ++ echo
    ++ cut -f1 -d,
    + INSTALLED_VERSION=
    ++ echo
    ++ cut -f2 -d,
    + STATUS=
    + '[' -e /config/values.yaml ']'
    + '[' install = delete ']'
    + '[' -z '' ']'
    + '[' -z '' ']'
    + helm install --name traefik https://10.43.0.1:443/static/charts/traefik-1.77.1.tgz --set-string kubernetes.ingressEndpoint.useDefaultPublishedService=true --set-string metrics.prometheus.enabled=true --set-string rbac.enabled=true --set-string ssl.enabled=true
    Error: failed to download "https://10.43.0.1:443/static/charts/traefik-1.77.1.tgz" (hint: running `helm repo update` may help)

    2.上面那个pod没成功感觉不影响我导入rancher。导入之后cattle-cluster-agent-785fb7964f-rws7x这个pod也是一直处于CrashLoopBackOff。查看log:ERROR: https://192.168.1.185:9443/ping is not accessible (Failed to connect to 192.168.1.185 port 9443: No route to host) 明明是通的 为什么说我不通呢 我用的虚拟机搭建的rancher-server在我本地上网页可以完全ok。不知道哪里出了问题 请教下大佬

    1. iLemonrain
      @Richie

      你这个我感觉IP撞段的可能性非常大,也可能是网络路由表出了问题。
      试着重新配置下网络,或者换个网段试试?
      (ps: 请尽可能躲开 10.42.0.0/16 10.43.0.0/16 这两个网段)

      1. Richie
        @iLemonrain

        [root@bogon ~]# kubectl get pod -n cattle-system
        NAME READY STATUS RESTARTS AGE
        cattle-node-agent-xrnfl 1/1 Running 0 6m35s
        cattle-cluster-agent-6b6c8b7f9f-8nzkc 0/1 CrashLoopBackOff 5 6m35s
        [root@bogon ~]# kubectl logs cattle-cluster-agent-6b6c8b7f9f-8nzkc -n cattle-system
        INFO: Environment: CATTLE_ADDRESS=10.42.0.4 CATTLE_CA_CHECKSUM=70abc15783d521224fea0add9bf54aaeb1be0134f9a9d5604a553747f5a3a748 CATTLE_CLUSTER=true CATTLE_INTERNAL_ADDRESS= CATTLE_K8S_MANAGED=true CATTLE_NODE_NAME=cattle-cluster-agent-6b6c8b7f9f-8nzkc CATTLE_SERVER=https://127.0.0.1
        INFO: Using resolv.conf: nameserver 10.43.0.10 search cattle-system.svc.cluster.local svc.cluster.local cluster.local options ndots:5
        ERROR: https://127.0.0.1/ping is not accessible (Failed to connect to 127.0.0.1 port 443: Connection refused)

        请教下大佬 我换了一个新的网段也是不行 并且还把rancher-server和k3s放在了一台宿主机上 求指导

        1. iLemonrain
          @Richie

          如果你是K3S是和Rancher进行绑定的话,在Rancher注册集群前,先去检查下 系统设置 - server-url 一项中地址是否正确指向Rancher本身(如果是局域网内部署的话,不太推荐写 127.0.0.1 ,这样的话部分环境会导致K3S找不到Rancher端口)

      2. Richie
        @iLemonrain

        10.42.0.0/16 10.43.0.0/16 如果你说撞段的话这个可能性有 因为在我的局域网内已经有了k8s集群 网络路由表应该没有问题 请教下我该怎么去更改k3s默认网段

        1. iLemonrain
          @Richie

          改段的话,可以试下修改 k3s.service (开机启动项),后面加上 --cluster-cidr 和 --service-cidr 试试

  4. xxiong

    请问下作者,我现在执行到第四步,一直卡在下载的地方,请问下是什么地方没配置正确吗?

    1. iLemonrain
      @xxiong

      是使用的国内服务器部署K3S么?
      一般情况下都是卡在下载K3S可执行文件这一步上了
      你可以前往 https://github.com/rancher/k3s/releases 获取最新的 k3s 文件
      (比如最新的为 https://github.com/rancher/k3s/releases/download/v0.9.1/k3s )
      之后使用FTP/SFTP工具,上传到 /usr/local/bin/ 目录中
      并执行命令 chmod +x /usr/local/bin/k3s ,为k3s增加可执行权限
      之后重新开始Step 4,在安装过程中当检测到已存在的K3S文件,会自动跳过下载

  5. hangox

    请问一下作者,rancher server 和 k3s 能是同一台机器吗?我试了一下,rancher sever会报错

    1. iLemonrain
      @hangox

      可以是同一台机器(同时扮演Rancher主控制器、K3S主控制器和K3S客户端角色),如果有报错的话,可以把日志贴在 https://paste.ubuntu.com/ 上面,然后追加评论即可

  6. hangox

    作者写的东西让我茅塞顿开,非常好

  7. moqi

    在 Step 3: 安装K3S集群 - 国内服务器的准备工作 中的 下载K3S..上传到服务器端的 /usr/local/bin/k3s,并赋予可执行属性
    这一步不是很明白
    下载下来的文件是 k3s-arm64 需要改名成 k3s? /k3s应该是不是路径吧 因为在后面执行安装时 会提示.../k3s 是个文件夹,似乎不是错误但是后面的下载卡住了
    我是这样操作的 把 sh安装命令中 的 下载 https://github.com/rancher/k3s/releases/download/v0.9.0/k3s  单独下载了下来 放到了 /usr/local/bin 中 在执行赋权操作
    嗯..开始好像也没导入成功 我又下载了 kubectl 放进去后 (/usr/local/bin 中有 k3s-arm64 、k3s、 kubectl 这三个文件)
    还更改了 导入命令 curl xxxxxxxxxxxxx |  k3s kubectl apply -f - 才导入成功∠( ᐛ 」∠)_
    不是专业运维 我就一顿下操作 导入成功了..细节 还大佬帮忙看一看

    1. iLemonrain
      @moqi

      1. 如果你使用的是云服务器的话,你应该选择amd64的那个;如果你使用的是各种派(树莓派,香橙派等),才需要选择arm64。
      如果不清楚自己当前环境架构的话,可以执行 arch 命令来确认当前架构。(amd64的话会显示x86_64)
      2. /usr/local/bin/k3s 是个文件,而不是文件夹;如果你的服务器在国内,下载GitHub上的内容可能会相对吃力,这时你可以先将文件下载到本地,然后FTP/SFTP传到服务器指定位置即可(记得给可执行权限)

      1. moqi
        @iLemonrain

        谢谢 了解了

  8. sunshine

    您好,我想请问一下,容器内修改的文件的名称是什么

    1. iLemonrain
      @sunshine

      是指Rancher Server内entrypoint的名称么?
      修改这个文件 /usr/bin/entrypoint.sh
      使用 docker exec -it [容器名称或ID] bash ,之后去修改 --http-listen-port=80 --https-listen-port=443 这部分,修改完成后保存退出,之后使用 docker restart [容器名称或ID] 即可。
      不用担心改动会丢失,如果你不删除(docker rm)容器的话,数据是不会丢失的。

  9. tao.py

    请教两个疑问:
    1、将里面的80和443,替换为9080和9443。如果按下面这种方式直接修改端口映射,不是更方便吗:
    docker run -d -v /data/docker/rancher-server/var/lib/rancher/:/var/lib/rancher/ --restart=unless-stopped --name rancher-server -p 9080:80 -p 9443:443 rancher/rancher:stable
    为何需要进入容器,修改文件,再重启重启?

    2、文中提到把默认容器引擎从 Containerd 切换到 Docker,请问这里的 Containerd 是一个类似 Docker 的产品吗?小白之前没有听说过这个,是否能简单科普一下?

    谢谢

    1. iLemonrain
      @tao.py

      1. 保证内外端口相同,这样在配置Rancher Server URL时候,不会因为内外端口不一致导致某些不可预料的问题。而且,只要不执行 docker rm 删除容器,容器内的数据就会一直保留。
      2. Containerd也是一种容器引擎,和Docker类似,从Containerd更换为Docker的原因主要是因为国内服务器无法在基于Containerd的环境下部署(无法连接到镜像服务器下载所需镜像)

      1. tao.py
        @iLemonrain

        谢谢

  10. fsword

    为什么将K3S的默认容器引擎从Containerd切换到Docker?这个原因还是没说

    1. iLemonrain
      @fsword

      因为K8S默认把镜像源硬编码成了 k8s.gcr.io ,而且这个地址在国内被墙,无法修改镜像源,所以建议国内使用Docker进行部署,国外两者都可以

  11. 殆己

    墨鱼路过插眼OωO

  12. ysicing

    真香警告,已经上车了୧(๑•̀⌄•́๑)૭

发表评论