前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >k3d+k3s+kubecm 本地快速搭建与管理集群

k3d+k3s+kubecm 本地快速搭建与管理集群

作者头像
郭旭东
发布2020-12-30 11:21:38
2.3K0
发布2020-12-30 11:21:38
举报
文章被收录于专栏:云原生工具箱

前言

k3s 是由 Rancher Labs 于2019年年初推出的一款轻量级 Kubernetes 发行版,满足在边缘计算环境中运行在 x86、ARM64 和 ARMv7 处理器上的小型、易于管理的 Kubernetes 集群日益增长的需求。

k3s 除了在边缘计算领域的应用外,在研发侧的表现也十分出色。我们可以快速在本地拉起一个轻量级的 k8s 集群,而 k3d 则是 k3s 社区创建的一个小工具,可以在一个 docker 进程中运行整个 k3s 集群,相比直接使用 k3s 运行在本地,更好管理和部署。

在日常工作中,时长要在本地集群和多个远程集群之间切换来完成运维工作,这时使用 kubecm 快速将 k3s 集群的 kubeconfig 与现有集群的 kubeconfig 合并,并可快速切换集群,开发运维两不误。

安装 k3d

k3d 提供了多种安装方式,十分方便。

使用脚本安装

直接使用 wgetcurl 安装

代码语言:javascript
复制
wget -q -O - https://raw.githubusercontent.com/rancher/k3d/master/install.sh | bash
# 或
curl -s https://raw.githubusercontent.com/rancher/k3d/master/install.sh | bash

安装指定版本

代码语言:javascript
复制
wget -q -O - https://raw.githubusercontent.com/rancher/k3d/master/install.sh | TAG=v1.3.4 bash
# 或
curl -s https://raw.githubusercontent.com/rancher/k3d/master/install.sh | TAG=v1.3.4 bash

使用 Homebrew 安装

MacOS 或安装了 Homebrew 的 Linux 可以使用 brew 安装:

代码语言:javascript
复制
brew install k3d

其他

还可以直接前往 release 页面[1] 下载二进制可执行文件,或者直接使用 go install github.com/rancher/k3d 安装。

创建 k3s 集群

创建 k3s 集群也十分简单,一行命令就可拉起,速度非常快。

代码语言:javascript
复制
$ k3d create -n k3s-local
INFO[0000] Created cluster network with ID facae4a046b169721805f93ec21ba1acb65b9efb8cf35866529178cb0fba75a9
INFO[0000] Created docker volume  k3d-k3s-local-images
INFO[0000] Creating cluster [k3s-local]
INFO[0000] Creating server using docker.io/rancher/k3s:v1.0.1...
INFO[0000] SUCCESS: created cluster [k3s-local]
INFO[0000] You can now use the cluster with:

export KUBECONFIG="$(k3d get-kubeconfig --name='k3s-local')"
kubectl cluster-info

但是一般情况下,如果没有梯子的话,k3s 集群虽然拉起来很快,但因为拉不到镜像,集群组件都无法正常拉起。

代码语言:javascript
复制
$ export KUBECONFIG="$(k3d get-kubeconfig --name='k3s-local')"
$ kubectl get pod -n kube-system
NAME                                      READY   STATUS              RESTARTS   AGE
helm-install-traefik-8wxmr                0/1     ContainerCreating   0          3m30s
metrics-server-6d684c7b5-j4sc7            0/1     ContainerCreating   0          3m30s
coredns-d798c9dd-j6lpw                    0/1     ContainerCreating   0          3m30s
local-path-provisioner-58fb86bdfd-wv7sw   0/1     ContainerCreating   0          3m30s
$ kubectl describe pod coredns-d798c9dd-j6lpw -n kube-system
...
Events:
  Type     Reason                  Age                 From                           Message
  ----     ------                  ----                ----                           -------
  Normal   Scheduled               <unknown>           default-scheduler              Successfully assigned kube-system/coredns-d798c9dd-j6lpw to k3d-k3s-local-server
  Warning  FailedCreatePodSandBox  7s (x7 over 4m30s)  kubelet, k3d-k3s-local-server  Failed create pod sandbox: rpc error: code = Unknown desc = failed to get sandbox image "k8s.gcr.io/pause:3.1": failed to pull image "k8s.gcr.io/pause:3.1": failed to pull and unpack image "k8s.gcr.io/pause:3.1": failed to resolve reference "k8s.gcr.io/pause:3.1": failed to do request: Head https://k8s.gcr.io/v2/pause/manifests/3.1: dial tcp 64.233.189.82:443: i/o timeout

离线安装

如果没有梯子的话,就只能选择使用离线安装。

下载离线镜像

前往 release 页面[2] 下载指定版本的镜像,这里我们下载最新的 v1.17.2+k3s1[3] 镜像。

下载到 ~/airgap 目录中,并进行解压,将解压后的目录重命名为 1.17.2

运行离线镜像

这里再次运行 k3d,部署 k3s 集群。这里要注意的是,挂载离线镜像的话,必须使用 -i flag 来指定镜像版本,这里我们使用的是 v1.17.2+k3s1[4] 版本,而镜像的 tag 则是 v1.17.2-k3s1,如果不确定 tag,可以去 DockerHub[5] 上查看。

代码语言:javascript
复制
$ k3d create -n k3s-local -i rancher/k3s:v1.17.2-k3s1  -v $(pwd)/airgap/v1.17.2/:/var/lib/rancher/k3s/agent/images/
INFO[0000] Created cluster network with ID 10b3fca995fcb491ae1fe1c901672bf6f0a0fd6f51785ba8403947d2773ebd43
INFO[0000] Created docker volume  k3d-k3s-local-images
INFO[0000] Creating cluster [k3s-local]
INFO[0000] Creating server using docker.io/rancher/k3s:v1.17.2-k3s1...
INFO[0000] SUCCESS: created cluster [k3s-local]
INFO[0000] You can now use the cluster with:

export KUBECONFIG="$(k3d get-kubeconfig --name='k3s-local')"
kubectl cluster-info

查看 k3s 集群组件启动状态:

代码语言:javascript
复制
$ export KUBECONFIG="$(k3d get-kubeconfig --name='k3s-local')"
$ kubectl get pod -A -w
NAMESPACE     NAME                                      READY   STATUS              RESTARTS   AGE
kube-system   local-path-provisioner-58fb86bdfd-7jzbw   0/1     ContainerCreating   0          6m35s
kube-system   coredns-d798c9dd-jhmds                    1/1     Running             0          6m35s
kube-system   metrics-server-6d684c7b5-4x2cd            1/1     Running             0          6m35s
kube-system   traefik-6787cddb4b-9v7r4                  0/1     ContainerCreating   0          16s
kube-system   svclb-traefik-fzrqj                       0/2     ContainerCreating   0          15s
kube-system   helm-install-traefik-h8k2j                0/1     Completed           0          6m35s
kube-system   svclb-traefik-fzrqj                       2/2     Running             0          21s

使用 kubecm

在 k3s 集群启动成功后,使用 kubecm[6],将 k3s 的 kubeconfig 与现有 kubeconfig 合并。

代码语言:javascript
复制
kubecm add -f $(k3d get-kubeconfig --name='k3s-local') -n k3s -c

切换集群,选择 k3s。

代码语言:javascript
复制
$ kubecm s
Use the arrow keys to navigate: ↓ ↑ → ←  and / toggles search
Select Kube Context
  ? k3s(*)
    prod-tg
    test
↓   banma

--------- Info ----------
Name:           k3s
Cluster:        cluster-485d6mhcfm
User:           user-485d6mhcfm

现在就可以在本地使用 k3s 集群进行开发工作,而有运维工作的时候,使用 kubecm switch 快速切换集群。

结语

k3s 同时支持 x86_64ARM64ARMv7 架构,它可以十分灵活地跨任何边缘基础架构工作。不提 k3s 在边缘计算领域的应用,与之前使用的 minikube[7] 相比,k3s 裁剪掉了许多用不到的功能,并且安装更简单,启动更快,空间占用也更小。相信 k3s 在开发侧的作用也会越来越大,使云原生应用的开发更加的便利。

References

[1] release 页面: https://github.com/rancher/k3d/releases [2] release 页面: https://github.com/rancher/k3s/releases [3] v1.17.2+k3s1: https://github.com/rancher/k3s/releases/tag/v1.17.2%2Bk3s1 [4] v1.17.2+k3s1: https://github.com/rancher/k3s/releases/tag/v1.17.2%2Bk3s1 [5] DockerHub: https://hub.docker.com/r/rancher/k3s/tags [6] kubecm: https://github.com/sunny0826/kubecm [7] minikube: https://github.com/kubernetes/minikube

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云原生之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 安装 k3d
    • 使用脚本安装
      • 使用 Homebrew 安装
        • 其他
        • 创建 k3s 集群
          • 离线安装
            • 下载离线镜像
              • 运行离线镜像
              • 使用 kubecm
              • 结语
                • References
                相关产品与服务
                容器服务
                腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档