kind搭建k8s集群用于测试

安装kind 需要先安装go kind基于go开发

#第一种安装方式

#修改go源加快下载速度
go env -w GOPROXY=https://goproxy.cn,direct
#直接下载安装kind最新版本
go install sigs.k8s.io/kind@latest
#进入GOPATH目录找到bin目录下kind执行程序 移动到环境变量里
mv ./kind /usr/local/bin/

#第二种安装方式
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.11.1/kind-linux-amd64
chmod +x ./kind
mv ./kind /usr/local/bin/kind

#提前下载k8s镜像
docker pull kindest/node:v1.22.0
#启动 如不指定镜像 则下载最新版本镜像安装
kind create cluster --name=dev1
kind create cluster --image=kindest/node:v1.22.0 --name=dev2
#查看
kind get clusters
#通过名字删除集群
kind delete cluster --name=dev
#使用集群需要进入容器内执行kubectl命令查看使用
#或者在服务器上安装kubectl组件 安装方式如下
#1.用以下命令下载最新发行版
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
#2.安装
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
#3.测试
kubectl version --client
#4.在服务器上使用kubectl命令需要添加创建的k8s集群名称“kubectl --context kind-kind-2”
kubectl --context kind-kind-2 get pods -A
#5.修改.bashrc文件 增加别名方便使用
vim .bashrc
#5.增加如下内容
alias k='kubectl --context kind-kind-2'
#6.让配置生效
source .bashrc
#7 测试
k get pod -A
#导入镜像 
#不能直接使用主机上的镜像,需要导入到kind的节点(容器中)
#此处的name为创建集群时的name
kind load docker-image nginx:latest --name kind-2
#查看是否导入 62781c26d15c 是镜像ID
docker exec -it 62781c26d15c crictl images
#创建pod测试
k run nginx-pod --image=nginx:latest --port=8082
#查看集群开启的端口 先查看node的ip 然后查看服务开启的node端口 用node的ip加端口访问
kubectl get node -o wide

如果使用yam文件创建 镜像不能使用latest tag,只能使用kind里存在的镜像 因为kind内使用的docker不能拉取镜像
使用docker exec -it 62781c26d15c crictl images 查找到的镜像 添加到配置文件的镜像里 例如:

apiVersion: v1
kind: Pod
metadata:
 name: nginx-pod2
 namespace: default
spec:
 containers:
 - name: nginx-containers
 	#使用kind里存在的镜像
   image: docker.io/library/nginx:latest

搭建一主三从

#创建配置文件
vim  multi-node-config.yaml
#内容如下
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
- role: worker
- role: worker
#创建集群
kind create cluster --config multi-node-config.yaml --image=kindest/node:v1.22.0 --name=dev4
#切换集群
kubectl cluster-info --context kind-dev4

出现的问题及解决办法:
如果报如下错误:

[root@192 ~]# kind create cluster --image=kindest/node:v1.22.0 --name=dev
Creating cluster "dev" ...
 ✓ Ensuring node image (kindest/node:v1.22.0) 🖼
 ✗ Preparing nodes 📦  
Deleted nodes: ["dev-control-plane"]
ERROR: failed to create cluster: command "docker run --name dev-control-plane --hostname dev-control-plane --label io.x-k8s.kind.role=control-plane --privileged --security-opt seccomp=unconfined --security-opt apparmor=unconfined --tmpfs /tmp --tmpfs /run --volume /var --volume /lib/modules:/lib/modules:ro -e KIND_EXPERIMENTAL_CONTAINERD_SNAPSHOTTER --detach --tty --label io.x-k8s.kind.cluster=dev --net kind --restart=on-failure:1 --init=false --cgroupns=private --volume /dev/mapper:/dev/mapper --publish=127.0.0.1:33059:6443/TCP -e KUBECONFIG=/etc/kubernetes/admin.conf kindest/node:v1.22.0" failed with error: exit status 125
Command Output: WARNING: Your kernel does not support cgroup namespaces.  Cgroup namespace setting discarded.
a416609b76ef8e1bf4fdac66c159a0f1396841464aec2c8cc6e667fc83be83fe
docker: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: cgroup namespaces aren't enabled in the kernel: unknown.

原因是内核不支持cgroup 解决办法: 升级内核
注意:升级前做好备份

#1 更新系统,确保所有安装的包都是最新的
sudo yum update
#2安装 elrepo 仓库,该仓库提供了最新的稳定内核
sudo rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
sudo yum install -y https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
#3 安装新的内核(例如,最新的稳定版本是 kernel-ml)
sudo yum --enablerepo=elrepo-kernel install kernel-ml -y
#4 更新GRUB引导菜单
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
#5 修改默认引导顺序,使新内核成为默认引导
sudo grub2-set-default 0
#6 重新启动系统,确认新内核成功安装并生效
sudo reboot

如果报如下错误:

 ✗ Starting control-plane 🕹️ 
Deleted nodes: ["dev-control-plane"]
ERROR: failed to create cluster: failed to init node with kubeadm: command "docker exec --privileged dev-control-plane kubeadm init --skip-phases=preflight --config=/kind/kubeadm.conf --skip-token-print --v=6" failed with error: exit status 1
Command Output: I0902 06:53:10.761763     172 initconfiguration.go:255] loading configuration from "/kind/kubeadm.conf"

处理办法 大概率是版本问题 因为下载的是最新版kind与系统匹配不好
解决办法:从新下载低版本kind例如:v0.11.1版 即可解决

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Prometheus是一种流行的开源监控解决方案,它可以监控各种服务和服务器,包括Kubernetes集群。以下是在Kubernetes集群搭建Prometheus的步骤: 1. 创建一个新的命名空间: ``` kubectl create namespace prometheus ``` 2. 下载Prometheus的配置文件: ``` wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.44.0/deploy/prometheus/manifests/prometheus-prometheus.yaml ``` 3. 修改Prometheus配置文件中的服务端口: ``` apiVersion: v1 kind: Service metadata: name: prometheus-operated namespace: prometheus annotations: prometheus.io/scrape: 'true' prometheus.io/port: '9090' spec: type: ClusterIP ports: - name: web port: 9090 targetPort: web protocol: TCP selector: app: prometheus release: prometheus ``` 4. 应用Prometheus配置文件: ``` kubectl apply -f prometheus-prometheus.yaml -n prometheus ``` 5. 创建一个Ingress资源: ``` apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: prometheus-ingress namespace: prometheus annotations: nginx.ingress.kubernetes.io/ssl-redirect: "false" spec: rules: - host: prometheus.example.com http: paths: - path: / pathType: Prefix backend: service: name: prometheus-operated port: name: web ``` 6. 配置DNS解析将prometheus.example.com指向集群的Ingress IP地址。 7. 访问prometheus.example.com即可访问Prometheus的UI界面。 注意事项: - 在Prometheus配置文件中,需要将prometheus.io/scrape和prometheus.io/port注释添加到Service资源的元数据中,以便Prometheus可以在该端口上抓取指标。 - 在Ingress资源中,需要将host字段设置为您的域名,并将backend.service.name设置为Prometheus Service资源的名称。 - 在访问Prometheus UI之前,需要先通过kubectl port-forward命令将Prometheus Service暴露到本地端口上。例如,kubectl port-forward -n prometheus svc/prometheus-operated 9090:9090。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值