公众号关注 「奇妙的 Linux 世界」

设为「星标」,每天带你玩转 Linux !

完整的 Kubernetes 集群往往非常复杂,需要较高的资源,往往我们在开发期间需要一个完整的 Kubernetes 来运行我们的应用,但是并不要求达到生产级别的集群,本文我们将探讨几种本地轻松配置 Kubernetes 集群的方法。

本地 Kubernetes 集群

我们先来回顾几种适合在我们自己的电脑上运行 Kubernetes 集群的方案。

Minikube

Minikube 是 Kubernetes 项目文档中建议使用的一种解决方案,它用一个单节点集群部署一个虚拟机,我们需要付出虚拟化的代价,主机的最低要求 2CPU、2G内存、20G 存储空间。这是一种简单有效的学习 kubectl 命令的方法,但是单节点会有一些的不方便的地方,但 Minikube 团队最近引入了多节点作为实验性功能,来帮助解决这个问题。

Kind

Kind 是 Kubernetes SIG 的另一种用于本地部署集群的方法。他的核心实现是让整个集群运行在 Docker 容器中。因此,它比 Minikube 更容易设置和更快启动。它支持单个节点或多 master 以及多工作节点。Kind 是为一致性测试和用于 CI 管道而创建的,提供了一些不错的功能,比如可以直接在集群内部加载 Docker 镜像,而不需要推送到外部镜像仓库。

k3s / k3d

K3s 是一个轻量级的集群,为了实现这种极简主义,做了一些取舍。

  • 集群的默认存储是使用 SQLite 而不是 Etcd

  • 所有的控制平面组件都封装在一个单一的二进制中

  • 控制外部依赖的数量

K3d 是一个允许我们在 Docker 容器内运行 k3s 的工具,就像 Kind 一样。

应该选哪个?

我个人的需求是:

  • 集群要快速启动和停止

  • 不同的集群可以并排运行

  • 集群必须使用最少的系统资源

对我来说,最适合的是 k3d,因为它很容易配置,它在 Docker 中运行,消耗的资源很少,而且开箱即用功能齐全。现在让我们来看看如何使用 k3d 建立一个集群。

使用 k3d 启动集群

首先先获取 k3d,通过 https://github.com/rancher/k3d#get 获取安装方式。

创建新的 k3d 集群

直接运行下面的命令即可创建一个新的集群:

$ k3d cluster create devcluster \
--api-port 127.0.0.1:6443 \
-p 80:80@loadbalancer \
-p 443:443@loadbalancer \
--k3s-server-arg "--no-deploy=traefik"
INFO[0000] Created network 'k3d-devcluster'
INFO[0000] Created volume 'k3d-devcluster-images'
INFO[0001] Creating node 'k3d-devcluster-server-0'
INFO[0016] Pulling image 'docker.io/rancher/k3s:v1.18.9-k3s1'
INFO[0040] Creating LoadBalancer 'k3d-devcluster-serverlb'
INFO[0056] Pulling image 'docker.io/rancher/k3d-proxy:v3.1.3'
INFO[0064] (Optional) Trying to get IP of the docker host and inject it into the cluster as 'host.k3d.internal' for easy access
INFO[0066] Successfully added host record to /etc/hosts in 2/2 nodes and to the CoreDNS ConfigMap
INFO[0066] Cluster 'devcluster' created successfully!
INFO[0066] You can now use it like this:
kubectl cluster-info

上面的创建集群命令有几个需要注意的地方:

  • 我们将本地主机的80和443端口映射到 k3s 虚拟负载均衡器上,这可以让我们能够直接从本地主机上访问到 ingress 资源。

  • 群集的部署没有使用默认的 Traefik Ingress 控制器。

为什么要禁用 Traefik?因为我们可能想使用另一个 Ingress 控制器,或者因为 k3s 默认是与 Traefik 1 绑定在一起的,后面我们会安装Traefik 2 版本。

获取凭证

运行下面的命令获取你的凭证,将其保存在文件中并导出到你的环境中:

$ mkdir -p $HOME/k3d
$ k3d kubeconfig get devcluster > $HOME/k3d/kubeconfig
$ export KUBECONFIG=$HOME/k3d/kubeconfig

通过运行一个简单的 Kubectl 命令来测试你是否可以访问集群。

$ kubectl cluster-info
Kubernetes master is running at [https://127.0.0.1:6443](https://127.0.0.1:6443/)
CoreDNS is running at [https://127.0.0.1:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy](https://127.0.0.1:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy)
Metrics-server is running at [https://127.0.0.1:6443/api/v1/namespaces/kube-system/services/https:metrics-server:/proxy](https://127.0.0.1:6443/api/v1/namespaces/kube-system/services/https:metrics-server:/proxy)  To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

安装 Traefik 2

我们可以直接使用 Helm 来快速安装 Traefik 2:

$ helm repo add traefik https://containous.github.io/traefik-helm-chart
"traefik" has been added to your repositories
$ helm repo list
NAME    URL
traefik https://containous.github.io/traefik-helm-chart
$ helm install traefik traefik/traefik
NAME: traefik
LAST DEPLOYED: Sun Oct 18 01:18:16 2020
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None

部署完成后检查 Traefik 是否正常工作,我们可以通过 port-forward  dashboard 来验证:

$ kubectl port-forward $(kubectl get pods --selector "app.kubernetes.io/name=traefik" --output=name) --address 0.0.0.0 9000:9000

然后在浏览器中访问 http://localhost:9000/dashboard/,正常可以访问到 traefik 的 dashboard 页面。


部署应用

接下来部署一个简单的应用程序来验证我们的 Ingress Controller 是否正确配置了,这里我们使用 whoami 应用程序:

$ kubectl create deploy whoami --image containous/whoami
deployment.apps/whoami created
$ kubectl expose deploy whoami --port 80
service/whoami exposed

然后我们定义一个 Ingress 规则来使用我们新的 Traefik,Traefik 既能读取自己的 CRD IngressRoute,也能读取传统的 Ingress 资源。

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:  name: whoami  annotations:  traefik.ingress.kubernetes.io/router.entrypoints: web,websecure  traefik.ingress.kubernetes.io/router.tls: "true"
spec:  rules:  - http:  paths:  - path: /  backend:  serviceName: whoami  servicePort: 80

在这个例子中,我们在 HTTP 和 HTTPs 两个入口点上暴露了 whoami 服务,每一个 URL 都会被发送到该服务上,我们可以在 Traefik Dashboard 上看到新的路由器。

要测试这个应用我们可以直接在浏览器中访问:https://localhost/  即可,这是因为上面我们安装 Traefik 的时候自动创建了一个 LoadBalancer 的 Service 服务。

$ kubectl get svc
NAME         TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)                      AGE
kubernetes   ClusterIP      10.43.0.1     <none>        443/TCP                      13m
traefik      LoadBalancer   10.43.32.29   172.19.0.2    80:31005/TCP,443:31507/TCP   7m25s
whoami       ClusterIP      10.43.98.9    <none>        80/TCP                       4m5s

总结

从上面示例可以看出创建一个开发级别的集群是非常简单的,而且还有更多的功能可以挖掘,包括 k3s 的 Helm charts 自动部署或者使用 Golang API 来管理啊 Kind 的集群,快使用用一个功能齐全的 Kubernetes 集群取代你的老式 Docker-compose 吧。

原文链接:https://codeburst.io/creating-a-local-development-kubernetes-cluster-with-k3s-and-traefik-proxy-7a5033cb1c2d

本文转载自:「k8s技术圈」,原文:https://tinyurl.com/yyqa9dq3,版权归原作者所有。欢迎投稿,投稿邮箱: editor@hi-linux.com。

你可能还喜欢

点击下方图片即可阅读

两款超好用的 Kubernetes 实时日志查看工具

点击上方图片,打开小程序,加入「玩转 Linux」圈子

更多有趣的互联网新鲜事,关注「奇妙的互联网」视频号全了解!

巧用 K3s 和 Traefik 快速搭建本地 Kubernetes 集群相关推荐

  1. 使用Minikube部署本地Kubernetes集群(二十九)

    前言 使用Minikube部署本地k8s集群相对比较简单,非常推荐将其用于本地k8s开发环境,唯一麻烦点的仅仅是网络问题. 在本篇教程中,我们使用了国内的镜像来完成本地k8s集群的搭建.如果搭建过程中 ...

  2. Harbor快速部署到Kubernetes集群及登录问题解决

    2019独角兽企业重金招聘Python工程师标准>>> Harbor(https://goharbor.io)是一个功能强大的容器镜像管理和服务系统,用于提供专有容器镜像服务.随着云 ...

  3. 如何低成本的搭建一个真实的Kubernetes集群

    引言:kubernetes作为当前事实上的容器编排标准,其势头可谓是如日中天,然而,kubernetes一直以来被人诟病的就是其复杂的搭建成本,作为个人,除了用miniKube等工具在个人电脑上模拟一 ...

  4. 云图说 | 快速创建一个kubernetes集群

    随着应用程序开发向基于容器的方向发展,编排和管理资源的需求变得越来越重要.Kubernetes是一个开源的.功能强大的容器编排系统,用于管理容器化应用和服务,它提供了应用部署.规划.更新.维护的一种机 ...

  5. K3S - 轻量级Kubernetes集群

    K3S 是 Rancher 为物联网(IoT)和边缘计算环境开发的轻量级 Kubernetes 发行版本.相比原生的 Kubernetes,其移除了很多非必要的组件,例如云控制管理器(CCM).内置的 ...

  6. Amazon ElastiCache 飞速搭建缓存服务集群,这才叫快

    前言 我们平时工作中,缓存服务这个词出现频率不低,Redis.Memcached 是我们经常用到的缓存服务. 运维人员.测试人员.研发人员.实施人员,是否都有过对集群服务搭建.部署及管理的烦恼,常常捣 ...

  7. Kubernetes 集群基于 Rook 搭建 Ceph 分布式存储系统

    文章目录 1.Rook & Ceph 介绍 1.1.Rook 1.2.Ceph 2.环境.软件准备 3.Kubernetes HA 集群搭建 4.部署 Rook Operator 5.配置 R ...

  8. k8s:概念以及搭建高可用集群

    一.k8s概念和架构 1.k8s概述 k8s是谷歌在2014年开源的容器化集群管理系统 使用k8s进行容器化应用部署 使用k8s利于应用扩展 k8s目标实施让容器化应用程序更加简洁高效 2.特性 (1 ...

  9. docker mysql 操作_[Docker] Docker 快速搭建本地MySQL开发环境

    [Docker] Docker 快速搭建本地MySQL开发环境 关于 Docker 的安装使用本文不再赘述,有兴趣的可以通过官网或是浏览我的专栏文章了解.今天着重给大家介绍下如何利用Docker快速搭 ...

最新文章

  1. 五大常用算法之二:动态规划算法
  2. mybatis 实现oracle主键自增的机制
  3. js字符串的操作方法
  4. 70 周岁快乐 | 盛世华诞,每一刻都值得铭记
  5. jQuery基本语法
  6. LeetCode 162. 寻找峰值(二分查找)
  7. oracle控制文件
  8. VueRouter源码分析
  9. JAVA无法加载此类文件,ORA-00376: 此时无法读取文件问题处理
  10. 关于文章cisco漏洞4786
  11. IAR基础教程之函数跳转
  12. iapp软件库源码分享
  13. 菜鸟的Java基础知识学习
  14. docker修改redis配置文件
  15. c语言最短线性路径算法,巧用Excel规划求解最短路径
  16. 怎么查看自己宽带是公网ip还是内网ip?
  17. php 验证码一直不对,php验证码错误
  18. php 网站访问统计插件,帝国CMS教程_网站访问统计插件使用教程_好特教程
  19. 遥感影像去背景 之 数据裁剪
  20. 三步搞定 vscode 代码格式化

热门文章

  1. 迭代硬阈值类算法总结||IHT/NIHT/CGIHT/HTP
  2. 安装Docker并配置阿里云镜像加速器
  3. CF821 E. Okabe and El Psy Kongroo 矩阵快速幂
  4. 网站虚拟服务器1核1g速度,云服务器1核1g打开速度
  5. 品牌出海,海外社媒营销有哪些?
  6. 2021-10-09 学习笔记 什么是SR锁存器?(举例)
  7. (一)Activiti 数据库25张表——流程历史记录表22(ACT_HI_PROCINST)
  8. elasticsearch全文搜索
  9. pip升级亲测有效 及其他包快速安装
  10. 男孩写给女友的经典情书