乐趣区

关于rancher:轻松上手-使用国内资源安装-K3s-全攻略

作者:
王海龙,SUSE Rancher 中国社区技术经理,Linux Foundation APAC Evangelist,负责 Rancher 中国技术社区的保护和经营。领有 8 年的云计算畛域教训,经验了 OpenStack 到 Kubernetes 的技术改革,无论底层操作系统 Linux,还是虚拟化 KVM 或是 Docker 容器技术都有丰盛的运维和实践经验。

近期,常常有小伙伴在 K3s 社区中征询对于应用国内资源装置 K3s 的问题,本文将对此进行具体介绍。

K3s 装置和启动流程

K3s 是一个轻量级的 Kubernetes 发行版,非常简单易用而且轻量。只须要一个简略的装置脚本即可把 K3s 装置到主机。

以下是应用官网装置脚本的执行过程:

# curl -sfL https://get.k3s.io | sh -
[INFO]  Finding release for channel stable
[INFO]  Using v1.25.3+k3s1 as release
[INFO]  Downloading hash https://github.com/k3s-io/k3s/releases/download/v1.25.3+k3s1/sha256sum-amd64.txt
[INFO]  Downloading binary https://github.com/k3s-io/k3s/releases/download/v1.25.3+k3s1/k3s
[INFO]  Verifying binary download
...
...
[INFO]  systemd: Starting k3s

如果从国内环境装置 K3s 可能会遇到装置速度特地迟缓或者 time out 的状况,从以上的装置过程能够剖析出以下几个起因:

  • K3s 的装置脚本  存储在国外的服务器,从国内环境拜访可能呈现无法访问的状况。
  • K3s 默认装置 stable 版本,stable 对应的具体 K3s 版本是通过 https://update.k3s.io/v1-rele… 解析来的,而这个地址也是运行在一个国外的服务器上。
  • 当通过 channel 解析出对应 K3s 的版本为:v1.25.3+k3s1,此时须要到 github 上拉取对应的 K3s 二进制文件。尽管这个二进制文件才几十兆,但国内环境拜访 github 常常会呈现无法访问的状况。
# kubectl get pods -A
NAMESPACE     NAME                                      READY   STATUS              RESTARTS   AGE
kube-system   helm-install-traefik-crd-7k9rw            0/1     ContainerCreating   0          10m
kube-system   helm-install-traefik-8q69g                0/1     ContainerCreating   0          10m
kube-system   coredns-75fc8f8fff-hlx2w                  0/1     ContainerCreating   0          10m
kube-system   metrics-server-5c8978b444-xz6vx           0/1     ContainerCreating   0          10m
kube-system   local-path-provisioner-5b5579c644-8g2kn   0/1     ImagePullBackOff    0          10m

另外,要残缺运行 K3s,还依赖一些零碎的服务,这些零碎服务 (例如:coredns、traefik) 都是以容器的形式运行;而这些零碎服务依赖的零碎镜像默认是从 DockerHub 去拉取。同样从国内拜访偶然会呈现无法访问或拉取镜像迟缓的状况。

以上,就是在国内环境应用 K3s 的一些痛点。

应用国内资源装置 K3s

为了解决以上问题,K3s 社区曾经将所需的 K3s 资源都同步到了国内的服务器上,这样咱们就能够应用这些国内资源在国内环境上装置 K3s,岂但晋升了装置速度也晋升了装置的稳定性。

该站点由 K3s 社区保护,同步资源到国内服务器有可能呈现延后或脱漏状况,如发现延后或脱漏状况欢送反馈到中文论坛。

K3s 社区都同步了哪些资源到国内?

  • K3s 装置脚本
  • Channel 解析文件
  • K3s 的二进制文件
  • K3s 依赖零碎镜像

接下来,再来看下应该如何使用国内的资源装置 K3s:

# curl –sfL \
     https://rancher-mirror.oss-cn-beijing.aliyuncs.com/k3s/k3s-install.sh | \
     INSTALL_K3S_MIRROR=cn sh -s - \
     --system-default-registry "registry.cn-hangzhou.aliyuncs.com"


[INFO]  Finding release for channel stable
[INFO]  Using v1.25.3+k3s1 as release
[INFO]  Downloading hash rancher-mirror.oss-cn-beijing.aliyuncs.com/k3s/v1.25.3-k3s1/sha256sum-amd64.txt
[INFO]  Downloading binary rancher-mirror.oss-cn-beijing.aliyuncs.com/k3s/v1.25.3-k3s1/k3s
[INFO]  Verifying binary download
...
...
[INFO]  systemd: Starting k3s

确认零碎镜像是否从阿里云镜像仓库拉取:

# kubectl get pods -n kube-system
NAME                                     READY   STATUS      RESTARTS   AGE
coredns-7c855cf8c6-x6d77                 1/1     Running     0          7m55s


# kubectl describe pods coredns-7c855cf8c6-x6d77 -n kube-system
Events:
  Type    Reason     Age    From               Message
  ----    ------     ----   ----               -------
  Normal  Scheduled  7m44s  default-scheduler  Successfully assigned kube-system/coredns-7c855cf8c6-x6d77 to k3s3
  Normal  Pulling    7m40s  kubelet            Pulling image "registry.cn-hangzhou.aliyuncs.com/rancher/mirrored-coredns-coredns:1.9.1"
  Normal  Pulled     7m6s   kubelet            Successfully pulled image "registry.cn-hangzhou.aliyuncs.com/rancher/mirrored-coredns-coredns:1.9.1" in 34.050826086s
  Normal  Created    7m6s   kubelet            Created container coredns
  Normal  Started    7m6s   kubelet            Started container coredns

首先,装置 K3s 应用的是存储在阿里云对象存储上的 K3s 装置脚本,并且应用存储在国内 channel 去解析对应的 K3s 版本。

其次,通过 INSTALL_K3S_MIRROR=cn 环境变量来指定 K3s 的二进制文件从国内的阿里云对象存储下来拉取。

最初,通过  --system-default-registry  参数来指定 K3s 的零碎镜像从国内的阿里云镜像仓库(registry.cn-hangzhou.aliyuncs.com) 去拉取。

如果你的带宽短缺,一分钟之内即可实现 K3s 的装置和零碎服务的启动。

K3s 配置 Mirror

以上这些步骤只是为了减速 K3s 的装置和启动。启动 K3s 后你可能会在 K3s 上部署本人的业务(例如 nginx),而这些镜像默认也是从 DockerHub 拉取。如果应用 docker 容器运行时,你可能会在 docker 上配置 mirror 来减速镜像的拉取。

K3s 默认应用的 containerd 容器运行时。而且,能够通过 K3s 的参数来设置 containerd 的 mirror,设置形式如下:

cat >> /etc/rancher/k3s/registries.yaml <<EOFmirrors:  "docker.io":    endpoint:      - "https://docker.mirrors.ustc.edu.cn" # 可依据需要替换 mirror 站点      - "https://registry-1.docker.io"EOFsystemctl restart k3s

通过以上配置后,通过 K3s 拉取的镜像如果在配置的 mirror 站点中存在,那么将会从该站点拉取镜像。如果不存在,将会从默认的 docker.io 中拉取镜像。

如果你想确认 containerd 的 mirror 是否失效,你能够应用 crictl info 查看:

# crictl info
    "registry": {"configPath": "","mirrors": {"docker.io": {"endpoint": ["https://docker.mirrors.ustc.edu.cn","https://registry-1.docker.io"],"rewrite": null
        }
      },

通过 Rancher Manager 创立 K3s 集群

从 Rancher v2.6 开始,反对从 Rancher Manager 创立 K3s 集群。通过 Rancher Manager 创立 K3s 集群和默认的 K3s 集群装置有所不同,前者创立集群次要依赖一些镜像实现,这些镜像默认是从 DockerHub 拉取。

同样,能够在 Rancher Manager 批改创立 K3s 集群的参数来实现应用国内资源装置 K3s 集群。只须要在创立 K3s 集群时导航到 Registries,抉择 Pull images for Rancher from a private registry 并设置 Registry hostname for Rancher images 的值为阿里云镜像仓库的地址 “registry.cn-hangzhou.aliyuncs.com” 即可,如下图:

后 记

通过以上形式装置 K3s 根本能满足国内环境应用 K3s 的各种需要,而且装置和启动速度也更快。

如果应用以上形式装置 K3s 呈现问题或疑难,或者有其余需要,欢送大家通过中文论坛进行反馈。

退出移动版