热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

不同方式实现集群的可行性&&部分不建议踩的坑

路标1.Systemhasnotbeenbootedwithsystemdasinitsystem(PID1).Can’toperate.2.CannotconnecttotheD

路标

1.System has not been booted with systemd as init system (PID 1). Can’t operate.
2.Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
3.Package virtualbox is not available, but is referred to by another package. This may mean that the package is missing, has been obsoleted, or is only available from another source E: Package ‘virtualbox’ has no installation candidate

  1. grep -E –color ‘vmx|svm’ /proc/cpuinfo 返回 0

结论

无论学习docker swarms还是minikubes,如果你碰到了以上的报错信息,并且检索到这篇文章,很遗憾的说,这是一条死路(有点深的坑),别(不建议)浪费时间了………

背景

从docker swarms向k8s过渡时,我碰到了很多坑,最终被docker for mac捞出来。这期间我一共使用了以下模式来探索可行性:

  1. 直接放弃了windows系统…….
  2. windows内通过VirtualBox安装ubuntu系统,失败:不支持二次虚拟化
  3. windows内通过串联主机搭建docker swarms集群节点,成功:参见我另一篇blog

    Docker Swarms 跨主机集群搭建

    只是针对docker swarms的解决方案,为了学习minikube继续探索

  4. 尝试使用WSL搭建集群,失败:支持虚拟化,报(PID 1)的问题

    这一条有替代解决方案,后续会给出。

  5. 尝试使用AliCloud的ECS搭建集群,失败:不支持二次虚拟化
  6. Mac for docker。docker swarms成功,k8s成功

中间碰到的问题大致归结为3类

  1. 众所周知的网络原因(tizi 或 换镜像源)
  2. 不支持二次虚拟化
  3. WSL,非线程1 (PID 1)

分析

将以上情形,根据所使用宿主系统的结构方式差异,我大致将接触docker swarms和minukube的方式大致分了2类:

  1. 常规模式

    • windows操作系统
    • linux操作系统
    • Mac的OS操作系统
  2. 非常规模式

    • windows的linux内核:WSL
    • 在宿主系统内安装linux系统虚拟机
    • 使用云服务商的ECS

逐条解释:

  1. windows操作系统:……
  2. linux操作系统

推荐,此处说的linux操作系统是指直接安装在物理设备上、作为宿主系统的linux系统,而不是在虚拟机安装的linux系列系统。对于前者,建议安装双系统,对于后者,替代解决方案参见:Docker Swarms 跨主机集群搭建

  1. Mac的OS操作系统

推荐,docker for mac还是很方便的,尤其在装k8s的时候,由于某些众所周知的原因,我被卡了一个星期也跑不起来minikube,但是使用docker for mac和内置k8s安装器,非常轻松的完成了k8s的安装。

下面开始几乎都是死路

  1. WSL:windows subsystem for linux

不想装虚拟机的用户win用户可能会想到这条路,但是会报出以下错误:

System has not been booted with systemd as init system (PID 1). Can't operate.

大致意思就是WSL并非系统id为1的线程,无法完成你想要进行的操作。这是一条“死路“,但并非完全不可解,国外有位大佬想到一条替代解决方案:将docker安装在win系统,连接windows的docker与WSL。Running Docker containers on Bash on Windows,如果有感兴趣的可以尝试。

  1. 在宿主系统内安装linux系统虚拟机
  2. 使用云服务商的ECS

以上两个情形的问题一样,都是不支持”二次虚拟化“,也即不能在虚拟机里再装虚拟机。

无论是docker swarms还是minikube,仔细观察会发现他们都是在宿主系统的虚拟软件中创建了新的虚拟机(通过命令行)

《不同方式实现集群的可行性 && 部分不建议踩的坑》

其中,myvm1、myvm2为docker swarms节点

minikube为minikbe主节点

是否支持二次虚拟化的判断标准很简单,在当前系统(linux为例)命令行中执行以下指令即可:(其他系统参见kubernetes document)

grep -E --color 'vmx|svm' /proc/cpuinfo

如果无返回或返回0,则不支持虚拟化
若返回具体数字如4 or 8,则表示可虚拟化

以上

后记

对于云服务商的ECS不可二次虚拟这点我初始是有些惊讶的,因为如果使用ECS的用户想要搭建集群该怎么办呢?在我和其中一个云服务商的工程师联系后,得到了的回复是:CES和云虚拟主机都不支持二次虚拟化,裸金属主机支持。云服务商也有单独的集群相关产品,但是实现方式无法透露,他们只在使用中提供技术支持。

最后贴上最低配的弹性裸金属服务器的性能和价格截图:
《不同方式实现集群的可行性 && 部分不建议踩的坑》

要获取更多Haytham原创文章,请关注公众号”许聚龙”:
《不同方式实现集群的可行性 && 部分不建议踩的坑》


推荐阅读
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 在Ubuntu 16.04 LTS上配置Qt Creator开发环境
    本文详细介绍了如何在Ubuntu 16.04 LTS系统中安装和配置Qt Creator,涵盖了从下载到安装的全过程,并提供了常见问题的解决方案。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 本文详细介绍了如何通过RPM包在Linux系统(如CentOS)上安装MySQL 5.6。涵盖了检查现有安装、下载和安装RPM包、配置MySQL以及设置远程访问和开机自启动等步骤。 ... [详细]
  • CentOS 6.5 上安装 MySQL 5.7.23 的详细步骤
    本文详细介绍如何在 CentOS 6.5 系统上成功安装 MySQL 5.7.23,包括卸载旧版本、下载安装包、配置文件修改及启动服务等关键步骤。 ... [详细]
  • 目录一、salt-job管理#job存放数据目录#缓存时间设置#Others二、returns模块配置job数据入库#配置returns返回值信息#mysql安全设置#创建模块相关 ... [详细]
  • CentOS 7.6环境下Prometheus与Grafana的集成部署指南
    本文旨在提供一套详细的步骤,指导读者如何在CentOS 7.6操作系统上成功安装和配置Prometheus 2.17.1及Grafana 6.7.2-1,实现高效的数据监控与可视化。 ... [详细]
  • 本文详细介绍如何使用arm-eabi-gdb调试Android平台上的C/C++程序。通过具体步骤和实用技巧,帮助开发者更高效地进行调试工作。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 本文介绍如何从JSON格式的文件中提取数据并将其分配给Bash脚本中的变量。我们将探讨具体的命令和工具,帮助你高效地完成这一任务。 ... [详细]
  • 通常情况下,修改my.cnf配置文件后需要重启MySQL服务才能使新参数生效。然而,通过特定命令可以在不重启服务的情况下实现配置的即时更新。本文将详细介绍如何在线调整MySQL配置,并验证其有效性。 ... [详细]
  • 本文详细介绍了如何在云服务器上配置Nginx、Tomcat、JDK和MySQL。涵盖从下载、安装到配置的完整步骤,帮助读者快速搭建Java Web开发环境。 ... [详细]
  • NFS(Network File System)即网络文件系统,是一种分布式文件系统协议,主要用于Unix和类Unix系统之间的文件共享。本文详细介绍NFS的配置文件/etc/exports和相关服务配置,帮助读者理解如何在Linux环境中配置NFS客户端。 ... [详细]
author-avatar
漫漫瞹fyS-1908
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有