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 在开发侧的作用也会越来越大,使云原生应用的开发更加的便利。

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
存储 运维 负载均衡
MFS详解(二)——MFS原理和架构
MFS详解(二)——MFS原理和架构
941 0
|
存储 Kubernetes 关系型数据库
在Kubernetes中,helm是什么?如何使用?
【4月更文挑战第9天】在Kubernetes中,helm是什么?如何使用?
1497 5
|
存储 Kubernetes 关系型数据库
|
9月前
|
人工智能 自然语言处理 运维
起飞啦,太easy啦!!!小白的神级AI辅助工具,一句话即可搭建超50个节点的工作流~~~~
n8n-MCP是专为n8n打造的AI智能中间件,让大模型“读懂”节点与属性,通过自然语言自动生成复杂工作流。支持541个节点、2700+模板,兼容Claude、Cursor等AI工具,显著降低自动化门槛,提升构建效率,助力技术与非技术人员高效协作。
792 0
|
弹性计算 监控 网络协议
香港云服务器访问速度慢?阿里云精品BGP线路EIP一键提速方案
香港云服务器因默认BGP线路访问不稳定,尤其中国大陆用户面临高延迟与丢包问题。本文详解问题根源,并介绍阿里云国际站推出的精品BGP线路EIP解决方案,通过直连优化显著降低延迟,提升稳定性,助力企业实现高效跨境网络访问。
|
人工智能 Docker 容器
AI思维导图工具跨领域学习的好帮手
AI思维导图工具跨领域学习的好帮手
|
存储 Cloud Native 关系型数据库
【云原生】rancher2.6部署MySQL—2023.03
【云原生】rancher2.6部署MySQL—2023.03
934 0
|
运维 网络协议 Linux
Linux与Windows下追踪网络路由:traceroute、tracepath与tracert命令详解
Linux与Windows下追踪网络路由:traceroute、tracepath与tracert命令详解
4864 0
|
Linux Docker 容器
【Docker】3. 配置阿里云镜像加速
【Docker】3. 配置阿里云镜像加速
【Docker】3. 配置阿里云镜像加速
|
机器学习/深度学习 人工智能 编解码
【AI系统】SqueezeNet 系列
本文概述了SqueezeNet及其后续版本SqueezeNext,两者均致力于设计轻量级的神经网络模型。SqueezeNet通过引入Fire模块,显著减少了模型参数量,实现了与AlexNet相当的精度,但参数量仅为后者1/50。SqueezeNext则进一步优化,不仅减少了参数量,还提升了模型运行速度和能效,特别适合在资源受限的设备上部署。文中详细介绍了这两个模型的核心设计理念、关键组件以及其实现方式,为理解和应用轻量化模型提供了宝贵资料。
542 5

热门文章

最新文章