热门标签 | 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原创文章,请关注公众号”许聚龙”:
《不同方式实现集群的可行性 && 部分不建议踩的坑》


推荐阅读
  • 大华股份2013届校园招聘软件算法类试题D卷
    一、填空题(共17题,每题3分,总共51分)1.设有inta5,*b,**c,执行语句c&b,b&a后,**c的值为________答:5 ... [详细]
  • Kubernetes 1.9.0 Alpha.1 发布公告 [Kubernetes 最新动态]
    近日,Kubernetes 社区发布了两个新版本:1.8.0 RC.1 和 1.9.0 Alpha.1。这是 k8s 1.9.0 的首次发布,自 v1.8.0 Alpha.3 以来进行了大量更新,共提交了 279 次。 ... [详细]
  • 我有一个从C项目编译的.o文件,该文件引用了名为init_static_pool ... [详细]
  • PHP 各版本对比:标准版与最新顶级版的详细分析 ... [详细]
  • SecureCRT是一款功能强大的终端仿真软件,支持SSH1和SSH2协议,适用于在Windows环境下高效连接和管理Linux服务器。该工具不仅提供了稳定的连接性能,还具备丰富的配置选项,能够满足不同用户的需求。通过SecureCRT,用户可以轻松实现对远程Linux系统的安全访问和操作。 ... [详细]
  • 本文详细介绍了如何在ARM架构的目标设备上部署SSH服务端,包括必要的软件包下载、交叉编译过程以及最终的服务配置与测试。适合嵌入式开发人员和系统集成工程师参考。 ... [详细]
  • php日期处理函数(php处理时间的常用函数) ... [详细]
  • 2019-2020学年 20174325 叶竞蔚 《网络对抗技术》实验六:Metasploit基础应用
    本实验旨在掌握Metasploit框架的基本应用方法,重点学习三种常见的攻击方式及其实施思路。实验内容包括一次主动攻击(如MS08-067)、一次针对浏览器的攻击(如MS11-050)以及一次针对客户端的攻击(如Adobe漏洞利用)。此外,还包括成功应用一个辅助模块。 ... [详细]
  • centos 7.0 lnmp成功安装过程(很乱)
    下载nginx[rootlocalhostsrc]#wgethttp:nginx.orgdownloadnginx-1.7.9.tar.gz--2015-01-2412:55:2 ... [详细]
  • 解决CLion无法检测到已安装CMake的问题
    本文详细探讨了在Windows系统上安装CMake并将其添加到环境变量后,CLion仍然无法检测到CMake的原因及解决方案。 ... [详细]
  • 高端存储技术演进与趋势
    本文探讨了高端存储技术的发展趋势,包括松耦合架构、虚拟化、高性能、高安全性和智能化等方面。同时,分析了全闪存阵列和中端存储集群对高端存储市场的冲击,以及高端存储在不同应用场景中的发展趋势。 ... [详细]
  • 过去查询Mysql的时候,都见3306对所有端口开放着,感觉不安全。netstat -anlp | grep mysqltcp 0&am ... [详细]
  • Ping 命令的高级用法与技巧
    本文详细介绍了 Ping 命令的各种高级用法和技巧,帮助读者更好地理解和利用这一强大的网络诊断工具。 ... [详细]
  • 在使用Eclipse进行调试时,如果遇到未解析的断点(unresolved breakpoint)并显示“未加载符号表,请使用‘file’命令加载目标文件以进行调试”的错误提示,这通常是因为调试器未能正确加载符号表。解决此问题的方法是通过GDB的`file`命令手动加载目标文件,以便调试器能够识别和解析断点。具体操作为在GDB命令行中输入 `(gdb) file `。这一步骤确保了调试环境能够正确访问和解析程序中的符号信息,从而实现有效的调试。 ... [详细]
  • 在Linux系统中,通过命令行查询计算机硬件配置是一项重要的技能。本文介绍了多种实用的命令和技巧,帮助用户高效地获取硬件信息。例如,可以通过 `cat /proc/cpuinfo | grep "physical id"` 命令来查看物理CPU的数量。此外,文章还涵盖了其他关键硬件组件的查询方法,如内存、磁盘和网络设备等。这些命令不仅适用于系统管理员,也适合普通用户了解自己的系统配置。 ... [详细]
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社区 版权所有