专栏首页Haytham的原创技术文章不同方式实现集群的可行性 && 部分不建议踩的坑
原创

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

路标

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集群节点,成功:参见我另一篇blogDocker Swarms 跨主机集群搭建
> 只是针对docker swarms的解决方案,为了学习minikube继续探索尝试使用WSL搭建集群,失败:支持虚拟化,报(PID 1)的问题这一条有替代解决方案,后续会给出。尝试使用AliCloud的ECS搭建集群,失败:不支持二次虚拟化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 跨主机集群搭建
  3. Mac的OS操作系统 推荐,docker for mac还是很方便的,尤其在装k8s的时候,由于某些众所周知的原因,我被卡了一个星期也跑不起来minikube,但是使用docker for mac和内置k8s安装器,非常轻松的完成了k8s的安装。

下面开始几乎都是死路 4. 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和云虚拟主机都不支持二次虚拟化,裸金属主机支持。云服务商也有单独的集群相关产品,但是实现方式无法透露,他们只在使用中提供技术支持。

最后贴上最低配的弹性裸金属服务器的性能和价格截图:

弹性裸金属服务器

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Docker Swarms 跨主机集群搭建

    JerryWangSAP --- 错误消息 This computer doesn't have VT-X/AMD-v enabled

    HaythamXu
  • 《Flask Web开发 基于Python的Web应用开发实战》简评

    《Flask Web开发 基于Python的Web应用开发实战》,O'Reilly"动物书系列"的"狗书",应该是很多Flask初学者被推荐使用的入门书,但是这...

    HaythamXu
  • Haytham个人博客开发日志 -- Flask+Vue基于token的登录状态与路由管理

    这是一篇个人博客搭建的记录博客,也是一篇关于Flask和Vue的简单"工具书",最后的代码会包含Web开发中常用的功能。(不全,只是使用频率相对高的)

    HaythamXu
  • Docker 远程 python API 操作容器一例

    Docker-py 作为官方推出的客户端API,功能可以满足我们大部分操作需求,本文介绍如何通过DockerFile创建一个WEB服务的镜像,再通过远程API对...

    刘天斯
  • docker的安装

    yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的

    小小咸鱼YwY
  • Docker安装与启动

    Docker官方建议在Ubuntu中安装,因为Docker是基于Ubuntu发布的,而且一般Docker出现的问题Ubuntu是最先更新或者打补丁的。在很多版本...

    cwl_java
  • 一文搞定 Linux 常用高频命令

    本文列举了测试工程师最常用的 Linux/Shell 高频命令。对于任何一个命令的详细解释都可以使用 –help 查看使用帮助,如 top –help。对于英语...

    霍格沃兹测试开发
  • Docker(一)——环境配置

    官方提供的安装教程地址:https://docs.docker.com/install/linux/docker-ce/centos/#os-requireme...

    羊羽shine
  • docker系统学习之docker界面管理

    老梁
  • docker安装篇,第二篇 在Ubuntu18.04上开启RESTful API接口,HTTP与HTTPS接口访问

    https://docs.docker.com/install/linux/linux-postinstall/#next-steps

    cn華少

扫码关注云+社区

领取腾讯云代金券