轻量级k8s解决方案kind
一、背景
当前k8s几乎是各个公司的标配了,如果因为想学习,而去搭建原生的k8s集群或者购买云厂商的k8s集群,成本会很高。现在主流的就minikube与kind二种解决方案。下面是二者的对比,本文着重介绍kind解决方案的搭建
二、轻量级k8s解决方案对比
知乎——轻量级k8s解决方案对比
https://zhuanlan.zhihu.com/p/2030058354882654863
三、kind集群的匹配要求
1. 官方最低要求2核2G;
2. 如果你创建单节点集群,4 GB 内存 是非常舒适的运行环境。
3. 如果你通过配置文件创建多节点集群(例如模拟 3 个控制平面 + 3 个工作节点),内存消耗会线性增加,此时建议宿主机至少有 8 GB 或 16 GB 内存
四、搭建步骤
-
安装docker环境
-
安装kubectl命令 本人是manjaro,直接在manjaro的应用市场就能下载。下面是linux所有发行版都通用的安装方式
# 1. 下载最新版本 (amd64 架构)
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
# 2. 赋予执行权限
chmod +x kubectl
# 3. 移动到系统 PATH 路径下
sudo mv kubectl /usr/local/bin/
3. 安装kind
# Linux (通用方法)
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.29.0/kind-linux-amd64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind
4. 创建k8s集群的配置文件
下面是1主2worker的3个节点的集群的配置
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
kubeadmConfigPatches:
- |
kind: InitConfiguration
nodeRegistration:
kubeletExtraArgs:
node-labels: "ingress-ready=true"
extraPortMappings:
- containerPort: 80
hostPort: 80
protocol: TCP
- containerPort: 443
hostPort: 443
protocol: TCP
- role: worker
- role: worker
5. 根据kind的k8s配置文件,创建k8s集群
# config-file.yaml是上一步创建的配置文件
kind create cluster --config config-file.yaml
#如果要更改k8s配置,要先删除。上面创建时没指定k8s集群的名字默认为kind。这里删除没指定集群名字,默认删除的是kind
kind delete cluster
# 删除时,指定集群名
kind delete cluster --name my-multi-node-cluster
6. 安装ingress
(2)替换国内镜像
将 Controller 镜像
registry.k8s.io/ingress-nginx/controller:v1.11.2 (版本号可能不同)
替换为
registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:v1.11.2
(3)创建的ingress,默认是使用load balance的,要修改成nodeport。可以使用kubuord之类的工具编辑,也可以直接修改deploy.yaml文件

添加图片注释,不超过 140 字(可选)
(4)如果是多节点集群,可能会随机指定一个节点通过nodeport将端口映射到宿主机,但上面的kind的配置,仅主节点(control-plane)配置了宿主机的端口映射,因此这里通过node selector指定ingress-controller部署在主节点上
#由于集群是多节点,只能有一个节点绑定到宿主机。否则会导致端口冲突
kubectl patch -n ingress-nginx deployment/ingress-nginx-controller --type json \
-p='[{"op": "add", "path": "/spec/template/spec/nodeSelector", "value": {"node-role.kubernetes.io/control-plane": ""}}]'
7. 可以通过访问 localhost,看看配置是否成功。正常会返回404
五、常见问题
-
安装ingress controller,镜像下载不下来。可以替换成阿里云的镜像
将 Controller 镜像
registry.k8s.io/ingress-nginx/controller:v1.11.2 (版本号可能不同)
替换为
registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:v1.11.2
2. 多节点k8s集群,部署ingress controller,无法访问
(1)在创建k8s集群时,没有将k8s集群的节点端口映射到宿主机上。需要通过extraPortMappings指定端口映射到宿主机上
(2)ingress controller是service是load balance类型,要指定为nodeport类型
(3)ingress controller的deployment可能随机分布在k8s的节点上,要通过node selector指定节点(这个节点在k8s集群创建时通过extraPortMappings指定映射)
3. 部署时,下载镜像下载不了
(1)方法1:手工将镜像导入k8s集群
kind load-images aaa:v1
(2)方法2:集群
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
containerdConfigPatches:
- |-
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["https://docker.1ms.run"]
六、云上搭建kind集群建议
-
如果仅想学习k8s,建议直接购买阿里云轻量级服务器即可,2核2G 68元/年;
-
如果既想搭建k8s环境,也想在k8s上部署一些服务,那建议购买京东云,4核16G 658/年
云小站_专享特惠_云产品推荐-阿里云
https://www.aliyun.com/minisite/goods?userCode=nz4rlhu7


添加图片注释,不超过 140 字(可选)
更多推荐
所有评论(0)