k3d - 3分钟创建一个生产级k8s集群
本标题可能有歧义,此集群只用于本地测试,请勿用于生产(我想也没人会这么干)
当我们谈论到容器编排技术时,Kubernetes(简称K8s)无疑是一个家喻户晓的名字。
但是,对于想要学习Kubernetes的人来说,搭建一个本地环境却往往是一件头疼的事情。从安装各种依赖到配置繁琐的集群,这一过程常常让人望而却步。
这个时候,就需要 k3d
闪亮登场啦。k3d可以说是k8s本地环境的”最佳拍档”。它使用了轻量级的k3s发行版,并借助Docker容器技术,让我们仅通过一个命令,就可以拥有一个多节点的k8s集群环境,省去了繁琐的安装和配置过程。
虽然我们也有 Minikube 和 Kind ,但k3d天生支持多节点集群,可以快速启动多master或多worker节点。而 Minikube 和 Kind 就更加麻烦了。
环境
首先我们需要安装好 docker
和 kubectl
。
docker是一种容器运行时环境,k3d会运行在docker之上 ,kubectl是kubernetes的命令行工具
kubectl的安装教程请参考官网。
安装
这里以
v5.5.2
版本作为演示,最新版本请到 官网 查看
安装完成后,我们看一下k3d的版本
➜ ~ k3d version
k3d version v5.5.2
k3s version v1.27.4-k3s1 (default)
创建集群
由于k3d在非root权限下创建集群总会出现奇奇怪怪的问题,本教程采用root权限创建集群。
创建了一个包含1个服务器节点和2个代理节点的k3d集群,API端口设置为6550,通过8180映射到容器端口80(负载均衡器)
我们查看一下集群信息
你会看到server-0,agent-0 和 agent-1。这样,我们的第一个k8s集群就已经创建好了,就相当于我们有1台server控制节点,2台agent工作节点了。
关于权限
由于我们使用root权限创建了k3d集群,往后我们的kubectl命令都要添加sudo
,这很麻烦,我们让普通用户也可以执行kubectl。
- 如果你使用root用户,那你可以不用做这个操作。
- 注意,这个操作会覆盖你的
~/.kube/config
配置文件,请确认这个文件不存在再操作。 然后去掉sudo
命令查看一下集群节点。
部署第一个应用
创建Deployment
Deployment相当于一个蓝图,它描述了我们想要运行的应用程序长什么样子。比如说,我们要运行3个Tomcat容器,每个容器的版本是10,对外暴露8080端口,这就是我们定义在Deployment里的内容。
集群创建好了,我们部署一个nginx试试。
查看部署状态,等待部署完成。
查看一下Pod状态,我们应该可以看到启动了3个tomcat
将Tomcat服务暴露出来
创建Service
Service是把多个Pod组合在一起,给它们分配一个统一的入口地址。这样,我们就可以通过这个地址访问到任意一个Pod提供的服务了。Service有点像是这些Pod的”代理”和”负载均衡器”。
创建Ingress
打开你的浏览器,访问 http://<你的机器ip>:8180/
。
Wow! 熟悉的Tomcat 404界面他来了。
清理
一个命令删除我们的测试集群,纯净无残留~