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

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
存储 人工智能 开发工具
什么是集群极速部署工具FastGPU
FastGPU是一套阿里云推出的人工智能计算极速部署工具。您可以通过其提供的便捷的接口和自动工具,实现人工智能训练和推理任务在阿里云IaaS资源上的快速部署。
|
Kubernetes 应用服务中间件 开发工具
|
存储 消息中间件 Kubernetes
云原生时代消息中间件Pulsar(介绍、集群安装部署、管理页面安装部署) 2
云原生时代消息中间件Pulsar(介绍、集群安装部署、管理页面安装部署)
1317 0
|
缓存 Kubernetes 网络协议
搭建k8s集群!!!
搭建k8s集群!!!
174 0
|
消息中间件 存储 缓存
云原生时代消息中间件Pulsar(介绍、集群安装部署、管理页面安装部署) 1
云原生时代消息中间件Pulsar(介绍、集群安装部署、管理页面安装部署)
531 0
|
存储 弹性计算 Prometheus
阿里云注册集群+Prometheus 解决多云容器集群运维痛点
面对跨区跨云厂商容器集群混用场景,我们该如何借助Prometheus+Grafana实现容器集群监控?立刻查看本文吧!
阿里云注册集群+Prometheus 解决多云容器集群运维痛点
|
Kubernetes Linux 网络安全
k8s集群的搭建安装(V1.18.0)
k8s集群的搭建安装(V1.18.0)
k8s集群的搭建安装(V1.18.0)
|
缓存 负载均衡 网络协议
Hapoxy-集群服务搭建
Hapoxy-集群服务搭建
156 1
Hapoxy-集群服务搭建
|
SQL 存储 关系型数据库
mysql集群搭建部署
应用场景 数据存储在mysql中,单节点存储如果数据量十分大,数据就很可能存不下。因此我们需要搭建部署mysql的集群模式,增加数据的存储量,而且提到数据库访问的并发。
2637 0
|
Kubernetes 负载均衡 Java
简单了解一下K8S,并搭建自己的集群
文章前半段会简单的介绍一下K8S,后半段会介绍如何从零开始慢慢的搭建集群。