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

路标

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
4. grep -E --color ‘vmx|svm’ /proc/cpuinfo 返回 0linux

结论

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

背景

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

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

    Docker Swarms 跨主机集群搭建
    只是针对docker swarms的解决方案,为了学习minikube继续探索ubuntu

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

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

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

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

  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操做系统:…svg

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

  3. 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,仔细观察会发现他们都是在宿主系统的虚拟软件中建立了新的虚拟机(经过命令行)

在这里插入图片描述

其中,myvm一、myvm2为docker swarms节点
minikube为minikbe主节点

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

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

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

以上

后记

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

最后贴上最低配的弹性裸金属服务器的性能和价格截图:
在这里插入图片描述

要获取更多Haytham原创文章,请关注公众号"许聚龙":
在这里插入图片描述