k3d+k3s+kubecm 本地快速搭建与管理集群-阿里云开发者社区

开发者社区> 阿里云MVP> 正文

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

简介: 使用 k3d 在本地快速搭建轻量级 k8s 集群 - k3s,并使用 kubecm 管理所有集群。

前言

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

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

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

安装 k3d

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

使用脚本安装

直接使用 wgetcurl 安装

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

安装指定版本

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 安装:

brew install k3d

其他

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

创建 k3s 集群

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

$ 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 集群虽然拉起来很快,但因为拉不到镜像,集群组件都无法正常拉起。

$ 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 页面 下载指定版本的镜像,这里我们下载最新的 v1.17.2+k3s1 镜像。

image

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

运行离线镜像

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

$ 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 集群组件启动状态:

$ 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,将 k3s 的 kubeconfig 与现有 kubeconfig 合并。

kubecm add -f $(k3d get-kubeconfig --name='k3s-local') -n k3s -c

切换集群,选择 k3s。

$ 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 快速切换集群。

结语

image

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

版权声明:本文中所有内容均属于阿里云开发者社区所有,任何媒体、网站或个人未经阿里云开发者社区协议授权不得转载、链接、转贴或以其他方式复制发布/发表。申请授权请邮件developerteam@list.alibaba-inc.com,已获得阿里云开发者社区协议授权的媒体、网站,在转载使用时必须注明"稿件来源:阿里云开发者社区,原文作者姓名",违者本社区将依法追究责任。 如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:developer2020@service.aliyun.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
+ 订阅

阿里云最有价值专家,是专注于帮助他人充分了解和使用阿里云技术的意见领袖。

官方博客
官网链接
精彩专题