暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

单节点Rancher离线安装的关键一步

Rancher by SUSE 2021-05-18
511

作者简介


王海龙,SUSE/Rancher中国社区技术经理,负责Rancher中国技术社区的维护和运营。拥有7年的云计算领域经验,经历了OpenStack到Kubernetes的技术变革,无论底层操作系统Linux,还是虚拟化KVM或是Docker容器技术都有丰富的运维和实践经验。


前言


Rancher 从 v2.5.x 开始,单节点 Rancher Server 内置了 K3s 作为 local 集群,该 local 集群除了支撑 Rancher Server 运行以外,还将运行 fleet、rancher-webhook、gitjob、coredns 等组件。下图为 Rancher v2.5.8 内置 K3s 集群默认启动的组件和所需的镜像:



其中,docker.io/rancher/coredns-coredns 和 docker.io/rancher/pause 为 Rancher Server 内置的镜像,其他镜像需要在 Rancher Server 启动后到 dockerhub 去在线下载。


如果你的环境是离线环境,并且是通过 docker run 的方式启动 Rancher Server,会报一些镜像下载失败的日志:


    E0511 08:39:56.060906      28 pod_workers.go:191] Error syncing pod d0f83155-f023-4ff6-9164-11b6b63ef4d6 ("helm-operation-t8mtl_cattle-
    system(d0f83155-f023-4ff6-9164-11b6b63ef4d6)"), skipping: [failed to "StartContainer" for "helm" with ImagePullBackOff: "Back-
    off pulling image \"rancher/shell:v0.1.6\"", failed to "StartContainer" for "proxy" with ImagePullBackOff: "Back-off pulling image \"rancher/shell:v0.1.6\""]

    官网文档单节点离线安装 Rancher Server(http://docs.rancher.cn/docs/rancher2.5/installation/other-installation-methods/air-gap/install-rancher/_index/#单节点安装)章节中指出了可以通过CATTLE_SYSTEM_DEFAULT_REGISTRY参数指定从私有镜像仓库去获取 Rancher Server 所需的镜像,但如果你的私有镜像仓库是启用 TLS有认证的情况,CATTLE_SYSTEM_DEFAULT_REGISTRY是无法满足你的需求的。


    针对上述场景,我们可以将内置 k3s 集群的/etc/rancher/k3s/registries.yaml 映射到宿主机上,然后通过修改registries.yaml来实现启用 TLS或有认证 等更复杂的场景,关于 k3s 配置私有仓库,可参考k3s 官网(http://docs.rancher.cn/docs/k3s/installation/private-registry/_index/).


    单节点 Rancher Server 配置私有镜像仓库


    以下章节将指导大家如何通过私有镜像仓库在离线环境下安装单节点 Rancher Server,针对镜像仓库类型的不同,分为以下几种场景:


    • 私有仓库为 SSL 证书颁发机构颁发的证书(https),有认证

    • 私有仓库为自签名证书(https),有认证

    • 私有仓库不使用 SSL(使用 http),有认证


    私有仓库为 SSL 证书颁发机构颁发的证书(https),有认证


    私有仓库中已经提前上传了 Rancher Server 所需要的镜像,如何同步镜像到私有镜像仓库可以参考官方文档(http://docs.rancher.cn/docs/rancher2.5/installation/other-installation-methods/air-gap/populate-private-registry/_index).


    1.配置 K3s registries.yaml


      root@ip-172-31-14-159:~# cat opt/registries.yaml
      mirrors:
      # 私有仓库域名
      harbor.kingsd.top:
      endpoint:
      - "https://harbor.kingsd.top"
      configs:
      "harbor.kingsd.top":
      auth:
      username: admin # 这是私有镜像仓库的用户名
      password: Password # 这是私有镜像仓库的密码


      2.启动单节点 Rancher Server


        root@ip-172-31-14-159:~# docker run -itd --privileged \
        > --restart=unless-stopped \
        > -p 80:80 -p 443:443 \
        > -e CATTLE_SYSTEM_DEFAULT_REGISTRY=harbor.kingsd.top \ # 设置私有仓库域名
        > -v opt/registries.yaml:/etc/rancher/k3s/registries.yaml \ # 将宿主机`registries.yaml`映射到容器内
        > rancher/rancher:v2.5.8


        3.验证


        等待 Rancher Server 启动成功后,我们可以 exec 到容器内确认所需要的组件是否启动:


          root@3fd636aa513e:/var/lib/rancher# kubectl get pods -A
          NAMESPACE NAME READY STATUS RESTARTS AGE
          cattle-system helm-operation-5w49g 0/2 Completed 0 3m21s
          cattle-system helm-operation-gclkp 0/2 Completed 0 3m3s
          cattle-system helm-operation-jt948 0/2 Completed 0 3m13s
          cattle-system helm-operation-l76g6 0/2 Completed 0 3m41s
          cattle-system helm-operation-zmm6f 0/2 Completed 0 3m28s
          cattle-system rancher-webhook-58b8d9f6c6-bxmns 1/1 Running 0 3m24s
          fleet-system fleet-agent-7c7d457b6d-x4kvf 1/1 Running 0 2m33s
          fleet-system fleet-controller-5ddfd96f5c-lxbnt 1/1 Running 0 3m10s
          fleet-system gitjob-7b4ddfcbf7-6hx52 1/1 Running 0 3m10s
          kube-system coredns-66c464876b-hfjqk 1/1 Running 0 4m1s
          rancher-operator-system rancher-operator-5cbfb5d6d7-kq29z 1/1 Running 0 3m32s


          root@3fd636aa513e:/var/lib/rancher# k3s crictl images
          IMAGE TAG IMAGE ID SIZE
          docker.io/rancher/coredns-coredns 1.6.9 4e797b3234604 43.3MB
          docker.io/rancher/pause 3.1 da86e6ba6ca19 746kB
          harbor.kingsd.top/rancher/fleet-agent v0.3.5 2a0c55d5db357 55.9MB
          harbor.kingsd.top/rancher/fleet v0.3.5 981b7123a405f 23.9MB
          harbor.kingsd.top/rancher/gitjob v0.1.15 dac9b6c58fe07 24.8MB
          harbor.kingsd.top/rancher/rancher-operator v0.1.4 c18d03bea7c6f 14.5MB
          harbor.kingsd.top/rancher/rancher-webhook v0.1.0 aec2ca2e747d7 12.6MB
          harbor.kingsd.top/rancher/shell v0.1.6 2e550736e6a49 46.8MB


          可以看到,除了 Rancher Server 内置的 rancher/coredns-coredns  rancher/pause 镜像以外,其他的镜像都是从 harbor.kingsd.top 拉取。


          私有仓库为自签名证书(https),有认证


          Rancher Server 连接自签名证书的私有仓库和 SSL 证书颁发机构的私有仓库配置的区别主要在于连接自签名证书的私有仓库时需要在 k3s 的registries.yaml中指定私有镜像仓库的自签名证书。


          1.配置 K3s registries.yaml


            root@ip-172-31-14-159:~# cat opt/registries.yaml
            mirrors:
            # 私有仓库域名
            harbor.kingsd.top:
            endpoint:
            - "https://harbor.kingsd.top"
            configs:
            "harbor.kingsd.top":
            auth:
            username: admin # 这是私有镜像仓库的用户名
            password: Password # 这是私有镜像仓库的密码
            tls:
            ca_file: opt/certs/ca.crt # 镜像仓库中使用的ca文件的路径。
            cert_file: opt/certs/harbor.kingsd.top.cert # 镜像仓库中使用的cert文件的路径。
            key_file: opt/certs/harbor.kingsd.top.key # 镜像仓库中使用的key文件的路径。


            2.启动单节点 Rancher Server


              root@ip-172-31-14-159:~# docker run -itd --privileged \
              > --restart=unless-stopped \
              > -p 80:80 -p 443:443 \
              > -e CATTLE_SYSTEM_DEFAULT_REGISTRY=harbor.kingsd.top \ # 设置私有仓库域名
              > -v opt/registries.yaml:/etc/rancher/k3s/registries.yaml \ # 将宿主机`registries.yaml`映射到容器内
              > -v opt/certs:/opt/certs \ # 将证书映射到容器内
              > rancher/rancher:v2.5.8


              3.验证


              等待 Rancher Server 启动成功后,我们可以 exec 到容器内确认所需要的组件是否启动:


                root@381b5d2c26d9:/var/lib/rancher# kubectl get pods -A
                NAMESPACE NAME READY STATUS RESTARTS AGE
                cattle-system helm-operation-b5mvm 0/2 Completed 0 6m27s
                cattle-system helm-operation-cdlc8 0/2 Completed 0 5m57s
                cattle-system helm-operation-hcxmj 0/2 Completed 0 5m47s
                cattle-system helm-operation-vqz9z 0/2 Completed 0 6m4s
                cattle-system helm-operation-wqgz9 0/2 Completed 0 6m12s
                cattle-system rancher-webhook-58b8d9f6c6-z68ps 1/1 Running 0 6m18s
                fleet-system fleet-agent-7c7d457b6d-zznvd 1/1 Running 0 5m25s
                fleet-system fleet-controller-5ddfd96f5c-kcqmq 1/1 Running 0 5m53s
                fleet-system gitjob-7b4ddfcbf7-99l46 1/1 Running 0 5m53s
                kube-system coredns-66c464876b-mflfv 1/1 Running 0 6m49s
                rancher-operator-system rancher-operator-5cbfb5d6d7-prsqh 1/1 Running 0 6m9s


                root@381b5d2c26d9:/var/lib/rancher# k3s crictl images
                IMAGE TAG IMAGE ID SIZE
                docker.io/rancher/coredns-coredns 1.6.9 4e797b3234604 43.3MB
                docker.io/rancher/pause 3.1 da86e6ba6ca19 746kB
                harbor.kingsd.top/rancher/fleet-agent v0.3.5 2a0c55d5db357 55.9MB
                harbor.kingsd.top/rancher/fleet v0.3.5 981b7123a405f 23.9MB
                harbor.kingsd.top/rancher/gitjob v0.1.15 dac9b6c58fe07 24.8MB
                harbor.kingsd.top/rancher/rancher-operator v0.1.4 c18d03bea7c6f 14.5MB
                harbor.kingsd.top/rancher/rancher-webhook v0.1.0 aec2ca2e747d7 12.6MB
                harbor.kingsd.top/rancher/shell v0.1.6 2e550736e6a49 46.8MB


                可以看到,除了 Rancher Server 内置的 rancher/coredns-coredns 和 rancher/pause 镜像以外,其他的镜像都是从 harbor.kingsd.top 拉取。


                私有仓库不使用 SSL(使用 http),有认证


                针对 HTTP 的私有仓库,只需要将 registries.yaml 里的 mirrors.endpoint 配置修改为http 开头即可。


                1.配置 K3s registries.yaml


                  root@ip-172-31-14-159:~# cat cat /opt/registries.yaml
                  cat: cat: No such file or directory
                  mirrors:
                  # 私有仓库IP
                  3.96.56.137:
                  endpoint:
                  - "http://3.96.56.137"
                  configs:
                  "3.96.56.137":
                  auth:
                  username: admin # 这是私有镜像仓库的用户名
                  password: Password # 这是私有镜像仓库的密码


                  2.启动单节点 Rancher Server


                    root@ip-172-31-14-159:~# docker run -itd --privileged \
                    > --restart=unless-stopped \
                    > -p 80:80 -p 443:443 \
                    > -e CATTLE_SYSTEM_DEFAULT_REGISTRY=3.96.56.137 \ # 设置私有仓库IP
                    > -v /opt/registries.yaml:/etc/rancher/k3s/registries.yaml \ # 将宿主机`registries.yaml`映射到容器内
                    > rancher/rancher:v2.5.8


                    3.验证


                      root@cb018bb70446:/var/lib/rancher# kubectl get pods -A
                      NAMESPACE NAME READY STATUS RESTARTS AGE
                      cattle-system helm-operation-44tb7 0/2 Completed 0 77s
                      cattle-system helm-operation-cwpvz 0/2 Completed 0 66s
                      cattle-system helm-operation-f898m 0/2 Completed 0 58s
                      cattle-system helm-operation-fc4tj 0/2 Completed 0 51s
                      cattle-system helm-operation-qq4kz 0/2 Completed 0 42s
                      cattle-system rancher-webhook-c49756c7f-rjwdj 1/1 Running 0 63s
                      fleet-system fleet-agent-55865c8959-rz8p2 1/1 Running 0 21s
                      fleet-system fleet-controller-797ff98bfd-xj48k 1/1 Running 0 47s
                      fleet-system gitjob-58bdfc4c69-mp84z 1/1 Running 0 47s
                      kube-system coredns-66c464876b-dbm8v 1/1 Running 0 96s
                      rancher-operator-system rancher-operator-578b4c64d4-4ptq9 1/1 Running 0 69s


                      root@cb018bb70446:/var/lib/rancher# k3s crictl images
                      IMAGE TAG IMAGE ID SIZE
                      3.96.56.137/rancher/fleet-agent v0.3.5 2a0c55d5db357 55.9MB
                      3.96.56.137/rancher/fleet v0.3.5 981b7123a405f 23.9MB
                      3.96.56.137/rancher/gitjob v0.1.15 dac9b6c58fe07 24.8MB
                      3.96.56.137/rancher/rancher-operator v0.1.4 c18d03bea7c6f 14.5MB
                      3.96.56.137/rancher/rancher-webhook v0.1.0 aec2ca2e747d7 12.6MB
                      3.96.56.137/rancher/shell v0.1.6 2e550736e6a49 46.8MB
                      docker.io/rancher/coredns-coredns 1.6.9 4e797b3234604 43.3MB
                      docker.io/rancher/pause 3.1 da86e6ba6ca19 746kB


                      可以看到,除了 Rancher Server 内置的 rancher/coredns-coredns 和 rancher/pause 镜像以外,其他的镜像都是从 3.96.56.137 拉取。


                      后记


                      单节点 Rancher Server 连接私有仓库其实就是内置的 K3s 集群连接私有仓库,关于更多 k3s 私有镜像仓库配置可以参考 k3s 官网(http://docs.rancher.cn/docs/k3s/installation/private-registry/_index)。


                      推荐阅读

                      入门教程:5步创建K8S Job,搞定批处理

                      Kubernetes网络概念初探

                      一文带你理解14个K8S必备基本概念


                      点击上方卡片关注公众号并设为星标✨

                      即可及时获取K8S干货哟


                      About SUSE Rancher


                      Rancher是一个开源的企业级Kubernetes管理平台,实现了Kubernetes集群在混合云+本地数据中心的集中部署与管理。Rancher一向因操作体验的直观、极简备受用户青睐,被Forrester评为“2020年多云容器开发平台领导厂商”以及“2018年全球容器管理平台领导厂商”,被Gartner评为“2017年全球最酷的云基础设施供应商”。


                      目前Rancher在全球拥有超过三亿的核心镜像下载量,并拥有包括中国联通、中国平安、中国人寿、上汽集团、三星、施耐德电气、西门子、育碧游戏、LINE、WWK保险集团、澳电讯公司、德国铁路、厦门航空、新东方等全球著名企业在内的共40000家企业客户。


                      2020年12月,SUSE完成收购RancherLabs,Rancher成为了SUSE “创新无处不在(Innovate Everywhere)”企业愿景的关键组成部分。SUSE和Rancher共同为客户提供了无与伦比的自由和所向披靡的创新能力,通过混合云IT基础架构、云原生转型和IT运维解决方案,简化、现代化并加速企业数字化转型,推动创新无处不在。


                      当前,SUSE及Rancher在中国大陆及港澳台地区的业务,均由数硕软件(北京)有限公司承载。SUSE在国内拥有优秀的研发团队、技术支持团队和销售团队,将结合Rancher领先的云原生技术,为中国的企业客户提供更加及时和可信赖的技术支撑及服务保障。


                      文章转载自Rancher by SUSE,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                      评论