kind部署K8S集群并将“修仙业务“部署到kind集群

文章目录

  • [1. 基础环境](#1. 基础环境)
  • [2. 安装kubectl客户端](#2. 安装kubectl客户端)
  • [3. 安装kind](#3. 安装kind)
  • [4. kind创建k8s集群](#4. kind创建k8s集群)
  • [5. 部署修仙业务](#5. 部署修仙业务)
  • [6. 踩坑记录](#6. 踩坑记录)
    • [6.1 loadFlannelSubnetEnv failed: open /run/flannel/subnet.env: no such file or directory](#6.1 loadFlannelSubnetEnv failed: open /run/flannel/subnet.env: no such file or directory)
    • [6.2 pod拒绝连接](#6.2 pod拒绝连接)

1. 基础环境

  • 虚拟机:类红帽系统
  • 内存:至少4g
  • 处理器:4c
  • 有docker环境
  • yum install -y lvm2

2. 安装kubectl客户端

  • 编写yum下载源-k8s,使用阿里云源:[kubernetes镜像_kubernetes下载地址_kubernetes安装教程-阿里巴巴开源镜像站](https://developer.aliyun.com/mirror/kubernetes?spm=a2c6h.13651102.0.0.560a1b11oZq8XJ)
shell 复制代码
cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/repodata/repomd.xml.key
EOF

setenforce 0

yum install -y  kubectl
# kubeadm kubelet 
systemctl enable kubectl && systemctl start kubectl
  • 设置软链接:ln -s /usr/bin/kubectl /usr/local/bin/kubectl

3. 安装kind

  • kind的github官网:[kubernetes-sigs/kind: Kubernetes IN Docker - local clusters for testing Kubernetes](https://github.com/kubernetes-sigs/kind)
  • 下载kind 1.19
shell 复制代码
[root@jumpserver ~]# chmod +x kind-linux-amd64 
[root@jumpserver ~]# mv kind-linux-amd64 /usr/local/bin/
  • k8s集群启动文件:kind-1c3w.yaml
  • mkdir -p /etc/kind
  • vim /etc/kind/kind-1c3w.yaml
yaml 复制代码
# kind-1c3w.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
  - role: control-plane # 控制平面节点
    extraPortMappings:
    - containerPort: 31000
      hostPort: 31000
  - role: worker        # 工作节点 1
  - role: worker        # 工作节点 2
  - role: worker        # 工作节点 3

4. kind创建k8s集群

  • 命令:kind-linux-amd64 create cluster --name 1c3w-cluster --config /etc/kind/kind-1c3w.yaml

5. 部署修仙业务

  • 修仙业务配置文件:oldboyedu-network-cni-test.yaml 链接: https://pan.baidu.com/s/1nuqifEZwkD5b0NC_Gmcd7w?pwd=cypu 提取码: cypu

  • kind自带kindnet,类似于flannel,无需再次安装flannel插件;安装后会有bug,请看踩坑记录

  • 查看k8s节点:

shell 复制代码
[root@jumpserver ~]# kubectl get nodes
NAME                         STATUS   ROLES           AGE   VERSION
1c3w-cluster-control-plane   Ready    control-plane   37m   v1.27.1
1c3w-cluster-worker          Ready    <none>          37m   v1.27.1
1c3w-cluster-worker2         Ready    <none>          37m   v1.27.1
1c3w-cluster-worker3         Ready    <none>          37m   v1.27.1
  • 修改业务配置文件,将节点名称该为当前worker节点名称:
shell 复制代码
[root@jumpserver ~]# cat oldboyedu-network-cni-test.yaml
apiVersion: v1
kind: Pod
metadata:
  name: xiuxian-v1
spec:
  nodeName: 1c3w-cluster-worker #修改此处
  containers:
  - image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1 
    name: xiuxian

---

apiVersion: v1
kind: Pod
metadata:
  name: xiuxian-v2
spec:
  nodeName: 1c3w-cluster-worker2 #修改此处
  containers:
  - image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v2
    name: xiuxian
  • 运行pod:
shell 复制代码
kubectl delete -f oldboyedu-network-cni-test.yaml
kubectl apply -f oldboyedu-network-cni-test.yaml 
[root@jumpserver ~]# kubectl get pods 
NAME         READY   STATUS    RESTARTS   AGE
xiuxian-v1   1/1     Running   0          13m
xiuxian-v2   1/1     Running   0          13m
  • 端口映射:
    • kubectl port-forward po/xiuxian-v1 --address=0.0.0.0 80:80
    • kubectl port-forward po/xiuxian-v2 --address=0.0.0.0 81:80

6. 踩坑记录

6.1 loadFlannelSubnetEnv failed: open /run/flannel/subnet.env: no such file or directory

  • 查看当前容器信息:kubectl describe pod xiuxian-v1
plaintext 复制代码
  Warning  FailedCreatePodSandBox  6m24s                 kubelet  Failed to create pod sandbox: rpc error: code = Unknown desc = failed to setup network for sandbox "7a3053da30112cf3509a53d0376a1a1ad58c604c16248833d9d162f21c3842ee": plugin type="flannel" failed (add): loadFlannelSubnetEnv failed: open /run/flannel/subnet.env: no such file or directory
  • 原因:
plaintext 复制代码
之前尝试安装过 Flannel,但安装不完整或失败了,导致集群的 CNI 配置指向了 Flannel,而 Flannel 需要的配置文件 (/run/flannel/subnet.env) 却不存在.
  • 解决方案:
plaintext 复制代码
# 删除flannel插件
kubectl delete -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
# 如果url访问失败,可以从浏览器下载该yml文件,再上传至服务器
kubectl delete -f kube-flannel.yml 

# 删除容器内flannel文件
for i in `docker ps --filter "label=io.x-k8s.kind.cluster" --format "{{.Names}}"`; do    docker exec $i rm -rf /etc/cni/net.d/*flannel* /etc/cni/net.d/10-flannel.conflist ; done

# 重启容器中kubectl
for i in `docker ps --filter "label=io.x-k8s.kind.cluster" --format "{{.Names}}"`; do docker exec $i systemctl restart kubelet ; done

# 删除启动的pod 
kubectl delete -f oldboyedu-network-cni-test.yaml

# 启动pod
kubectl apply -f oldboyedu-network-cni-test.yaml

6.2 pod拒绝连接

plaintext 复制代码
[root@jumpserver ~]# kubectl get pods -o wide
NAME         READY   STATUS    RESTARTS   AGE    IP           NODE                  NOMINATED NODE   READINESS GATES
xiuxian-v1   1/1     Running   0          3m9s   10.244.3.3   1c3w-cluster-worker   <none>           <none>
[root@jumpserver ~]# curl 10.244.3.3
curl: (7) Failed to connect to 10.244.3.3 port 80: 拒绝连接
  • 解决方案:
shell 复制代码
# 进入pod内部
kubectl exec -it xiuxian-v1 -- /bin/sh
# curl 127.0.0.1
# 在容器内部发现curl成功
  • 需要端口映射,见上面部署业务
shell 复制代码
[root@jumpserver ~]# kubectl apply -f oldboyedu-network-cni-test.yaml 
pod/xiuxian-v1 created
pod/xiuxian-v2 created
[root@jumpserver ~]# kubectl get pods
NAME         READY   STATUS    RESTARTS   AGE
xiuxian-v1   1/1     Running   0          7s
xiuxian-v2   1/1     Running   0          7s
[root@jumpserver ~]# kubectl get pods -o wide
NAME         READY   STATUS    RESTARTS   AGE   IP           NODE                   NOMINATED NODE   READINESS GATES
xiuxian-v1   1/1     Running   0          10s   10.244.3.6   1c3w-cluster-worker    <none>           <none>
xiuxian-v2   1/1     Running   0          10s   10.244.1.3   1c3w-cluster-worker2   <none>           <none>
[root@jumpserver ~]# curl 10.244.3.6
curl: (7) Failed to connect to 10.244.3.6 port 80: 拒绝连接
[root@jumpserver ~]# kubectl exec -it xiuxian-v1 sh
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
/ # curl 127.0.0.1
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8"/>
    <title>yinzhengjie apps v1</title>
    <style>
       div img {
          width: 900px;
          height: 600px;
          margin: 0;
       }
    </style>
  </head>

  <body>
    <h1 style="color: green">凡人修仙传 v1 </h1>
    <div>
      <img src="1.jpg">
    <div>
  </body>

</html>
相关推荐
爱吃番茄鼠骗3 分钟前
Linux操作系统———守护进程
linux
企微自动化10 分钟前
企业微信自动化系统稳定性优化实战
运维·自动化·企业微信
Nerd Nirvana11 分钟前
IPv6组播在DLMS协议中的应用——基础知识掌握
linux·运维·服务器·网络·网络协议·ipv6·dlms协议
Lethehong12 分钟前
【探索实战】Kurator分布式云原生平台快速上手与实战指南
分布式·云原生
福尔摩斯张15 分钟前
TCP/IP网络编程深度解析:从Socket基础到高性能服务器构建(超详细)
linux·运维·服务器·开发语言·网络·网络协议·tcp/ip
Sleepy MargulisItG15 分钟前
【Linux网络编程】传输层协议:TCP
linux·网络·tcp/ip
卡布叻_星星16 分钟前
Docker之Windows与Linux不同架构部署理解
linux·windows·docker
北北~Simple21 分钟前
解析百度分享链接,到自己服务器上
运维·服务器·dubbo
Cat God 00727 分钟前
基于 CentOS 7.6 的 MySQL 8.0 主从复制
linux·服务器·mysql·centos
百以国际食品有限公司36 分钟前
奶茶原料珍珠粉圆供应商
云原生