当前位置: 首页 > news >正文

使用虚拟机搭建简易K8s实验环境的一种方法

1 容器集群配置信息

      本实验环境基于 Rocky Linux 9.3 搭建简易 Kubernetes (以下简称K8s)集群,一主两从结构,节点配置统一。

1.1 节点信息

节点名称

IP地址

角色

配置

Master-01

192.168.15.12

控制节点

4核4GB 100GB

Node-03

192.168.15.11

计算节点

4核4GB 100GB

Node-04

192.168.15.13

计算节点

4核4GB 100GB

       集群采用一主两从的架构,通过iKuai软件路由器实现外部网络通信。

1.2 虚拟机配置

本机操作系统:Win11

虚拟机操作系统:Linux(CentOS 8  64位)

NIC:2块(仅主机+NAT:后续关闭)

CD/DVD(IDE):Rocky-9.3-x86_64-minimal.iso

存储分配:

                 /boot:800MB

                 swap分区:4GB(swap分区后续关闭,模拟真实生产环境)

                 /(根目录):剩余

RockyLinux官方下载地址:

https://rockylinux.org/download
1.3 网络拓扑

图1-3 容器集群网络拓扑

2 容器集群部署流程

2.1 部署软件及方式

虚拟机软件:VMware WorkStation 17.0.0

SSH连接软件:XShell 8、Xftp 8

安装方式:docker-ce + cri-docker 0.3.9 + kubeadm 1.2.9(安装源详见附录)

网络工具:iKuai8_x32_3.7.19.iso(生产环境中采用64位) + calico插件

2.2 主要安装步骤及注意事项

1.安装Rocky Linux时需要允许SSH登录

2.NetworkManager目录下有两张网卡,小的那张是仅主机模式(如下图所示,ens160是小的那张网卡),后面部署K8s时需要暂时关闭大的那张NAT网卡:

3.虚拟机初始化设置:

(1)进行初始化:替换当前yum源为阿里云

(2)建立对应缓存

(3)关闭防火墙

(4)安装iptables的用户态

(5)开启用户态,iptables -L查看规则,iptables -F清空:

    (6)禁用Selinux

    (7)设置时区

    (8)利用VMware建立快照

      4.iKuai软件路由器设置:

      如图所示,选择【其他】版本,1核1GB,磁盘8GB即可,使用仅主机网络模式,磁盘类型默认为IDE,选择官网下载的iKuai镜像。听到蜂鸣声后表示iKuai安装成功。

      之后设置LAN1地址,注意要选同一网段下的空闲IP,这里选择192.168.15.200,然后在浏览器上输入设置的LAN1地址,进行登录:

      默认的用户名密码都是admin,之后会要求设置自己的密码,要保证有大小写字母和数字。然后可通过【网络设置】->【内外网设置】查看接口连接状态,将外网接口设置为iKuai虚拟机的另一块NAT网卡:

      5.网络配置

      打开ens160.nmconnection可能出现如下图情况,直接按【Enter】继续即可。注意物理机仅主机网卡的网段为15,要设置成一样的,否则连不上。

      按下【Insert】进入编辑模式:

      在ipv4下添加两行:

      method=manual           #ipv4工作方案由自动改为手动

      address1=192.168.15.11/24  #15的网段和物理机保持一致,不然连不上

      #/24表示默认网关255.255.255.0

      设置完成后,按【ESC】退出INSERT模式,转为命令模式,输入:wq

      保存并退出。

      由于Pod间通过calico网络的物理网卡获取网络访问能力,我们需要先将一主两从的第二张网卡关闭,防止Pod访问错网卡,等待初始化完成后再开启。

      之后在XShell中进入NetworkManager将网关设置为iKuai的IP地址,同时设置dns=114.114.114.114;8.8.8.8;之后在ens192里添加一行开机自启为false。

      6.其他设置

      (1)关闭swap分区,修改主机名。注意要使用XShell的全部会话,节省时间。

      swapoff -a
      sed -i 's:/dev/mapper/rl-swap:#/dev/mapper/rl-swap:g' /etc/fstab

      (2)将配置复制发送给node:

      (3)ping测试连接:

      (4)安装ipvs:

      (5)开启路由转发:

        (6)加载 bridge:yum install -y bridge-utils

        8.安装容器及插件:

        (1)使用阿里巴巴的Docker-CE源进行安装:

        sudo yum install -y yum-utils device-mapper-persistent-data lvm2sudo yum-config-manager--add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.reposudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.reposudo yum -y install docker-ce

        (2)配置 daemon.:

        cat > /etc/docker/daemon.json <<EOF
        {"data-root": "/data/docker","exec-opts": ["native.cgroupdriver=systemd"],"log-driver": "json-file","log-opts": {"max-size": "100m","max-file": "100"},"insecure-registries": ["harbor.xinxainghf.com"],"registry-mirrors": ["https://kfp63jaj.mirror.aliyuncs.com"]
        }
        EOF

        (3)重启docker服务:

        systemctl enable docker

        (4)ping一下百度:

        (5)安装K8s:

        使用docker的容器管理引擎安装K8s时,需要cri-docker这个中介,因为kubernetes目前已不再维护docker了。将下载好的压缩包通过Xftp放到虚拟机目录下,并进行解压缩:

        (6)增加可执行权限:

        chmod a+x /usr/bin/cri-dockerd

          (7)配置cri-docker服务:

          cat <<"EOF" > /usr/lib/systemd/system/cri-docker.service
          [Unit]
          Description=CRI Interface for Docker Application Container Engine
          Documentation=https://docs.mirantis.com
          After=network-online.target firewalld.service docker.service
          Wants=network-online.target
          Requires=cri-docker.socket
          [Service]
          Type=notify
          ExecStart=/usr/bin/cri-dockerd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.8
          ExecReload=/bin/kill -s HUP $MAINPID
          TimeoutSec=0
          RestartSec=2
          Restart=always
          StartLimitBurst=3
          StartLimitInterval=60s
          LimitNOFILE=infinity
          LimitNPROC=infinity
          LimitCORE=infinity
          TasksMax=infinity
          Delegate=yes
          KillMode=process
          [Install]
          WantedBy=multi-user.target
          EOF

          (8)添加套接字:

          cat <<"EOF" > /usr/lib/systemd/system/cri-docker.socket
          [Unit]
          Description=CRI Docker Socket for the API
          PartOf=cri-docker.service
          [Socket]
          ListenStream=%t/cri-dockerd.sock
          SocketMode=0660
          SocketUser=root
          SocketGroup=docker
          [Install]
          WantedBy=sockets.target
          EOF

          (9)启动cri-docker相关服务:

          (10)安装kubeadm:

          然后分别到两个node去执行安装命令,并在三个节点都设置开机自启动。

          此时如果使用docker run --restart=always只能保证开机自启动时执行一次唤醒命令,但无法保证K8s组件的正常工作。所以此时我们使用kubelet启动K8s组件。

          (11)初始化主节点,注意IP和K8s版本要设置对:

          kubeadm init --apiserver-advertise-address=192.168.15.12 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version 1.29.2 --service-cidr=10.10.0.0/12 --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=all --cri-socket unix:///var/run/cri-dockerd.sock

          此处出现error,通过journalctl -xeu kubelet命令查询日志发现错误:

          E0524 17:23:21.959731 6340 run.go:74] "command failed" err="failed to run Kubelet: failed to create kubelet: misconfiguration: kubelet cgroup driver: \"cgroupfs\" is different from docker cgroup driver: \"systemd\""

          翻译过来就是kubelet 使用的是 cgroupfs 驱动,而 Docker(cri-dockerd)使用的是 systemd 驱动。这两者必须一致,否则 kubelet 无法启动。

          那此时我们将将 kubelet 的 cgroup driver 设置为 systemd:

          通过查看YAML文件发现就是systemd:

          进一步排查,可能原因是我中间重启了一次master节点,可能导致swap分区又被打开了,所以关闭swap,再次查看kubelet状态,这次正常了。

          成功,接下来根据打印出来的命令提示去执行:

          在node中输入以下命令来添加worker,注意要设置成自己master节点的IP:

          kubeadm join 192.168.15.12:6443 --token 53kc9i.xxpnzk2gqamaj66a \--discovery-token-ca-cert-hash sha256:c7852850f34ad505326ed08690e12eb4527cba92ac14ac89e98a6f276a768b03 --cri-socket unix:///var/run/cri-dockerd.sock

            (12)部署网络插件,解压后传递到各节点,各自执行一遍:

            附录

            1.Rocky Linux下载源:
            https://mirrors.aliyun.com/rockylinux/9/isos/x86_64/?spm=a2c6h.25603864.0.0.29696621VzJej5
            2.docker-ce yum 源: 
            https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
            3.cri-docker 源:
            https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.9/cri-dockerd-0.3.9.amd64.tgz
            4.kubeadm yum 源:
            https://pkgs.K8s.io/core:/stable:/v1.29
            5.容器镜像网站:
            https://docker.aityp.com/

            http://www.dtcms.com/a/596483.html

            相关文章:

          1. 构建下一代临床AI诊断系统:基于CPC-Bench基准的工程化路线图(上)
          2. Electron 原理浅析
          3. Git 命令全攻略:从入门到实战
          4. React底层原理
          5. tensorflow 图像分类 之四
          6. GEO优化:针对生成式AI内容分发逻辑的四大维度优化策略
          7. 做a手机视频在线观看网站网页程序开发采购
          8. USP-Ulysses+Ring-Attention技术原理
          9. mirage 接口mock 拦截
          10. flash网站设计教程北京建设网上银行
          11. 高端网站建设设计公司有哪些wordpress网站迁移后插件
          12. redis进阶 - 底层数据结构
          13. 【自然语言处理】语料库:自然语言处理的基石资源与发展全景
          14. Rust: 量化策略回测与简易线程池构建、子线程执行观测
          15. 基于systemd的系统负载控制与检测方案
          16. 闲谈-三十而已
          17. LangChain 是一个 **大语言模型(LLM)应用开发框架**
          18. 从RAM/ROM到Redis:项目架构设计的存储智慧
          19. 高中课程免费教学网站网页塔防游戏排行榜
          20. Access导出带图表的 HTML 报表:技术实现详解
          21. 郑州上海做网站的公司嘉兴网站建设有前途吗
          22. 学习JavaScript进阶记录(二)
          23. 优化用户体验的小点:乐观更新链路 双数据库查询
          24. C++—list:list的使用及模拟实现
          25. EasyExcel 与 Apache POI 版本冲突导致的 `NoSuchMethodError` 异常
          26. WebServer04
          27. 品牌网站建设技术网站搜索引擎优化诊断
          28. 优秀企业网站设计WordPress评论楼层
          29. 卡索(CASO)汽车调查:新能源时代如何精准度量用户体验?
          30. 手动模拟Spring(简易版)