【问题标题】:What is hyperkube?什么是超库?
【发布时间】:2016-03-01 09:53:23
【问题描述】:

我正在尝试在 aws 中设置 kubernetes 并按照 https://github.com/kubernetes/kubernetes/blob/master/docs/getting-started-guides/docker-multinode 的指南进行操作

我不明白 hyperkube 是什么意思。有人可以向我解释一下它是什么以及它是如何工作的吗?

我还有一个问题是在运行命令时

sudo docker run \
    --volume=/:/rootfs:ro \
    --volume=/sys:/sys:ro \
    --volume=/dev:/dev \
    --volume=/var/lib/docker/:/var/lib/docker:rw \
    --volume=/var/lib/kubelet/:/var/lib/kubelet:rw \
    --volume=/var/run:/var/run:rw \
    --net=host \
    --privileged=true \
    --pid=host \
    -d \
    gcr.io/google_containers/hyperkube:v${K8S_VERSION} \
    /hyperkube kubelet \
      --api-servers=http://localhost:8080 \
      --v=2 --address=0.0.0.0 --enable-server \
      --hostname-override=127.0.0.1 \
      --config=/etc/kubernetes/manifests-multi \
      --cluster-dns=10.0.0.10 \
      --cluster-domain=cluster.local

默认启动一个 pod。从命令文档来看,它看起来像是从 --config=/etc/kubernetes/manifests-multi 属性获取 pod 清单。但是我的主机中不存在此目录。有人可以告诉我从哪里得到这个 pod manifest 吗?

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    我自己开始了我的 kubernetes 之旅,但是如果您查看 github 上的源代码,您将了解 hyperkube 的来源。它内置在 kubernetes 的核心中 - https://github.com/kubernetes/kubernetes/blob/master/cmd/hyperkube/hyperkube.go

    Kubernetes 旨在将容器提升到一个全新的水平,并将它们包装在谷歌所谓的 pod 中。 hyperkube - 如果我错了,请纠正我是构成 pod 的容器的调度、创建和管理的 arch/krux/backbone,它本质上是运行节目,因此命名为“hyperkube”。此外,hyperkube 可以快速响应事件,并且能够即时做出有关您的服务/堆栈/容器/主机健康状况的决策。

    如果您想以一种简单的方式开始使用 kubernetes,我建议您尝试一下 rancher(而不是 rancherOS),因为 rancherlabs 刚刚在其内置堆栈中实现了 kubernetes 部署——rancher 也使用 docker-compose 以及它所调用的内容rancher-compose - 当您创建堆栈/服务时,您可以查看构成该堆栈/服务的元素以及该堆栈中 yml 格式的容器 - 这将有助于您更好地理解组成该堆栈/服务的元素您正在运行的服务和堆栈,还可以帮助您解决手动部署的问题 - 它基于 gui,但是您可以将主机添加到任何牧场主服务器,放入一些日志堆栈,如 kabana 或 sysdig,如果您从 cli 工作 -只要主机在 Rancher 注册(不,我根本不为他们工作) - 您可以通过添加主机并指定自定义来向 Rancher 注册任何主机。此外,rancher 实际上可以跨托管平台管理 kubernetes / 堆栈 / 卷 - 这太棒了。这是可视化和查看 docker 主机正在发生的事情的好方法。

    我希望这能回答一些问题,并引导您朝着正确的方向前进。

    它是 Kubernetes 集群的决策者和生命赋予者。

    【讨论】:

    • 感谢您的回答。但是您能否解释一下默认 pod 定义从哪里加载以及 hyperkube 是如何启动 pod 的?
    【解决方案2】:

    如果您更关心在 AWS 中运行集群,而不是亲身体验每个组件的体验(除非您是为了学习而这样做,否则您不应该为此烦恼),我' d 强烈建议使用交钥匙脚本来创建 AWS 集群,如 documented here

    对于查看此问题/答案的其他人,有一个 page in the docs on how to choose a cluster creation method that fits your needs

    关于你关于 hyperkube 的问题,配置文件是内置在 hyperkube docker 镜像中的,如果你好奇的话,可以从its Dockerfile 看到。

    【讨论】:

      【解决方案3】:

      Kubernetes 是一组守护进程/二进制文件:

      • kube-apiserver(又名大师),
      • kubelet(启动/停止容器,同步配置),
      • kube-scheduler(资源经理)
      • kube-controller-manager(监控RC,并保持所需状态)
      • kube-proxy(在每个节点上公开服务)
      • kubectl (CLI)

      hyperkube 二进制文件是一个多合一二进制文件(与busybox 类似),它结合了所有以前独立的二进制文件。

      以下命令:

      hyperkube kubelet \
        --api-servers=http://localhost:8080 \
        --v=2 \
        --address=0.0.0.0 \
        --enable-server \
        --hostname-override=127.0.0.1 \
        --config=/etc/kubernetes/manifests-multi \
        --cluster-dns=10.0.0.10 \
        --cluster-domain=cluster.local
      

      运行守护进程kubelet

      【讨论】:

      • 这可能是公认的答案。简短、相关、切中要害。
      【解决方案4】:

      Kubernetes 是一组二进制文件

      1. kube-apiproxy
      2. kube 调度器
      3. kube-control-manager
      4. kubelet
      5. kube 代理

      hyperkube 是所有这些二进制文件的包装器。所以一旦你部署了 hyperkube,它就会安装所有的二进制文件。 无需单独安装这些二进制文件。

      【讨论】:

        【解决方案5】:

        Hyperkube 是所有 API 服务器二进制文件的封装,Kubernetes 的运行方式是使用hyperkube 调用 API 服务器、调度程序、控制器管理器、kube-proxy 和 kubelet。

        现在所有这些定义主节点的二进制文件都使用 YAML 清单来定义上述服务。您始终可以根据您的部署方案选择部署类型是在容器内还是在主机上。

        这些服务的 pod 清单实际上定义了您的服务所需的状态,这些状态存储在 etcd 中,从那里首先准备 api 服务器。

        现在,一旦定义了 pod 清单,您就可以使用 hyperkube 将这些服务配置为在容器内或主机上运行。

        所以hyperkube 简而言之是所有服务的核心,hyperkube 的唯一目的是管理 Kubernetes 集群内的所有服务,从而简化部署。

        【讨论】:

          猜你喜欢
          • 2012-10-30
          • 2022-01-19
          • 2012-02-22
          • 1970-01-01
          • 1970-01-01
          • 2020-08-31
          • 2016-03-12
          相关资源
          最近更新 更多