searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

使用kind快速创建多个kubernetes集群

2023-08-23 07:03:18
183
0
在多kubernetes集群业务开发测试过程中,kubernetes集群作为最基本、最重要的基础资源,在使用过程中存在着以下问题:
1、kubernetes集群数量需求大
开发测试过程涉及到:相同版本的多个kubernetes集群对同一功能的表现一致性,不同版本的多个kubernetes集群对同一功能的兼容性。因此需要创建较多的kubernetes集群
 
2、计算节点资源有限
社区推荐的kubernetes集群搭建方式为通过kubeadm搭建,此方式搭建的kubernetes集群kubelet组件以二进制方式运行在节点(物理机或虚拟机)中,一整台服务器(物理机或虚拟机)只能用作kubernetes集群的一个节点,高可用场景下kubernetes集群往往需要 3 master节点+ 2 worker节点共计5台服务器(物理机或虚拟机)资源。开发测试环境资源池的服务器数量、cpu内存等资源有限,难以满足需求
 
3、kubernetes集群使用程度较轻
业务开发、功能测试时,如operator开发、监控套件部署、日志采集器开发、自定义调度器开发、webhook开发等等,只需要往集群中部署几个工作负载、service、configmap、secret、rbac等相关资源,对kubernetes集群使用程度较轻,容易造成集群资源闲置和浪费
 
4、多人使用同一kubernetes集群时互相干扰
为了解决问题3资源浪费,往往会出现多人使用同一套kubernetes环境情况。各自开发的功能可能会互相干扰
 
以上问题可归结为一个难题:如何在有限的计算资源下尽可能多地创建kubernetes集群
答案是kind。使用kind可以快速创建多个kubernetes集群,使用完毕后亦可快速彻底地清理
 
kind介绍:
kind又称kinD,全称kubernetes in Docker,使用docker或podman容器来模拟kubernetes集群节点,只需docker环境即可低成本搭建一套kubernetes集群。特别地,kind可在同一服务器(物理机、虚拟机)上创建多套不同版本的轻量级kubernetes集群,每套kubernetes集群通过一个端口暴露kube-apiserver服务,通过服务器IP+不同的端口访问不同的kubernetes集群,充分利用服务器资源
 
kind原理:
kind使用容器来模拟每一个kubernetes节点,并在容器里面运行systemd。容器里的systemd托管了kubelet和containerd,然后容器内部的kubelet把其它kubernetes组件:kube-apiserver、etcd、CNI等组件运行起来
kind内部使用了kubeadm工具来做集群的部署,包括高可用集群也是借助kubeadm提供的特性来完成的。在高用集群下还会额外部署一个Nginx来提供负载均衡VIP
 
环境依赖:
docker环境
kubectl(复制到$PATH目录下,如/bin/kubectl,用于连接kubernetes集群apiserver,管理集群资源)
 
kind安装:
可通过kind官方github release下下载最新版本的kind二进制工具
 
所需镜像:
#可使用不同版本的镜像进行不同版本kubernetes集群创建
kindest/node:v1.23.3

 

kind创建kubernetes集群
方法一:
通过命令行创建,此方式适合使用默认配置快速创建kubernetes集群
 
创建的集群默认名称为kind
kind create cluster
 
可以使用参数--name指定创建集群的名称
kind create cluster --name kind-2

 

可以使用参数--image 指定本地或外网镜像,在创建时指定kubernetes集群版本
# default
kind create cluster --name kind-latest --image kindest/node:latest
# 1.17.0
kind create cluster --name kind-17 --image kindest/node:v1.17.0

 

方法二:
通过配置文件创建,此方式适合定制化配置kubernetes集群
 
1、先创建kind集群配置文件
vim kind-cluster-config.yaml
# 单master节点
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
networking:
  apiServerAddress: "198.20.6.54"  # 本机ip
  apiServerPort: 7444  # 不与其他端口冲突的apiserver端口
#单master多node
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
networking:
  apiServerAddress: "198.20.6.54"  # 本机ip
  apiServerPort: 7444  # 不与其他端口冲突的apiserver端口
nodes:
  - role: control-plane
  - role: worker
  - role: worker

 

2、创建kind kubernetes集群
kind create cluster --name kind-7 --image registry-vpc.guizhouDev.ccr.ctyun.com:32099/library/kindest/node:v1.23.3 --config ./kind-cluster-config.yaml

 

kind管理kubernetes集群

查看kind创建的kubernetes集群列表
kind get clusters
kind
kind2
kind-default
kind-17
kind-7
 
切换集群
# 切换到集群`kind`
kubectl cluster-info --context kind-kind
# 切换到集群`kind-2`
kubectl cluster-info --context kind-kind-2

 

删除集群
kind delete cluster --name kind-2

 

导入镜像
由于kind使用docker容器来模拟kubernetes集群节点,无法使用服务器本身的镜像,因此在往kind创建的kubernetes集群中部署工作负载时,需要事先导入镜像
kind load docker-image --name kind-7 registry-vpc.guizhouDev.ccr.ctyun.com:32099/library/nginx:1.26.0

 

访问kubernetes集群

使用kubectl访问和管理kubernetes集群,操作时需注意当前操作的是哪套kubernetes集群
kubectl get nodes
NAME                 STATUS   ROLES    AGE     VERSION
kind-control-plane   Ready    master   7m51s   v1.19.1
 
0条评论
0 / 1000
梁肖剑
1文章数
0粉丝数
梁肖剑
1 文章 | 0 粉丝
梁肖剑
1文章数
0粉丝数
梁肖剑
1 文章 | 0 粉丝
原创

使用kind快速创建多个kubernetes集群

2023-08-23 07:03:18
183
0
在多kubernetes集群业务开发测试过程中,kubernetes集群作为最基本、最重要的基础资源,在使用过程中存在着以下问题:
1、kubernetes集群数量需求大
开发测试过程涉及到:相同版本的多个kubernetes集群对同一功能的表现一致性,不同版本的多个kubernetes集群对同一功能的兼容性。因此需要创建较多的kubernetes集群
 
2、计算节点资源有限
社区推荐的kubernetes集群搭建方式为通过kubeadm搭建,此方式搭建的kubernetes集群kubelet组件以二进制方式运行在节点(物理机或虚拟机)中,一整台服务器(物理机或虚拟机)只能用作kubernetes集群的一个节点,高可用场景下kubernetes集群往往需要 3 master节点+ 2 worker节点共计5台服务器(物理机或虚拟机)资源。开发测试环境资源池的服务器数量、cpu内存等资源有限,难以满足需求
 
3、kubernetes集群使用程度较轻
业务开发、功能测试时,如operator开发、监控套件部署、日志采集器开发、自定义调度器开发、webhook开发等等,只需要往集群中部署几个工作负载、service、configmap、secret、rbac等相关资源,对kubernetes集群使用程度较轻,容易造成集群资源闲置和浪费
 
4、多人使用同一kubernetes集群时互相干扰
为了解决问题3资源浪费,往往会出现多人使用同一套kubernetes环境情况。各自开发的功能可能会互相干扰
 
以上问题可归结为一个难题:如何在有限的计算资源下尽可能多地创建kubernetes集群
答案是kind。使用kind可以快速创建多个kubernetes集群,使用完毕后亦可快速彻底地清理
 
kind介绍:
kind又称kinD,全称kubernetes in Docker,使用docker或podman容器来模拟kubernetes集群节点,只需docker环境即可低成本搭建一套kubernetes集群。特别地,kind可在同一服务器(物理机、虚拟机)上创建多套不同版本的轻量级kubernetes集群,每套kubernetes集群通过一个端口暴露kube-apiserver服务,通过服务器IP+不同的端口访问不同的kubernetes集群,充分利用服务器资源
 
kind原理:
kind使用容器来模拟每一个kubernetes节点,并在容器里面运行systemd。容器里的systemd托管了kubelet和containerd,然后容器内部的kubelet把其它kubernetes组件:kube-apiserver、etcd、CNI等组件运行起来
kind内部使用了kubeadm工具来做集群的部署,包括高可用集群也是借助kubeadm提供的特性来完成的。在高用集群下还会额外部署一个Nginx来提供负载均衡VIP
 
环境依赖:
docker环境
kubectl(复制到$PATH目录下,如/bin/kubectl,用于连接kubernetes集群apiserver,管理集群资源)
 
kind安装:
可通过kind官方github release下下载最新版本的kind二进制工具
 
所需镜像:
#可使用不同版本的镜像进行不同版本kubernetes集群创建
kindest/node:v1.23.3

 

kind创建kubernetes集群
方法一:
通过命令行创建,此方式适合使用默认配置快速创建kubernetes集群
 
创建的集群默认名称为kind
kind create cluster
 
可以使用参数--name指定创建集群的名称
kind create cluster --name kind-2

 

可以使用参数--image 指定本地或外网镜像,在创建时指定kubernetes集群版本
# default
kind create cluster --name kind-latest --image kindest/node:latest
# 1.17.0
kind create cluster --name kind-17 --image kindest/node:v1.17.0

 

方法二:
通过配置文件创建,此方式适合定制化配置kubernetes集群
 
1、先创建kind集群配置文件
vim kind-cluster-config.yaml
# 单master节点
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
networking:
  apiServerAddress: "198.20.6.54"  # 本机ip
  apiServerPort: 7444  # 不与其他端口冲突的apiserver端口
#单master多node
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
networking:
  apiServerAddress: "198.20.6.54"  # 本机ip
  apiServerPort: 7444  # 不与其他端口冲突的apiserver端口
nodes:
  - role: control-plane
  - role: worker
  - role: worker

 

2、创建kind kubernetes集群
kind create cluster --name kind-7 --image registry-vpc.guizhouDev.ccr.ctyun.com:32099/library/kindest/node:v1.23.3 --config ./kind-cluster-config.yaml

 

kind管理kubernetes集群

查看kind创建的kubernetes集群列表
kind get clusters
kind
kind2
kind-default
kind-17
kind-7
 
切换集群
# 切换到集群`kind`
kubectl cluster-info --context kind-kind
# 切换到集群`kind-2`
kubectl cluster-info --context kind-kind-2

 

删除集群
kind delete cluster --name kind-2

 

导入镜像
由于kind使用docker容器来模拟kubernetes集群节点,无法使用服务器本身的镜像,因此在往kind创建的kubernetes集群中部署工作负载时,需要事先导入镜像
kind load docker-image --name kind-7 registry-vpc.guizhouDev.ccr.ctyun.com:32099/library/nginx:1.26.0

 

访问kubernetes集群

使用kubectl访问和管理kubernetes集群,操作时需注意当前操作的是哪套kubernetes集群
kubectl get nodes
NAME                 STATUS   ROLES    AGE     VERSION
kind-control-plane   Ready    master   7m51s   v1.19.1
 
文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
0
0