深度对比docker和kubernetes的区别和联系( 三 )

Node Components: Node组件运行在每个节点上 , 负责维护运行的pods并为它们提供Kubernetes运行时环境 。

  • kubelet: kubelet 接收一组通过各类机制提供给它的 PodSpecs , 确保这些 PodSpecs 中描述的容器处于运行状态且健康 。kubelet 不会管理不是由 Kubernetes 创建的容器 。
  • kube-proxy: Kube-proxy是集群中每个节点上运行的网络代理 。kube-proxy 维护节点上的网络规则 。这些网络规则允许从集群内部或外部的网络会话与 Pod 进行网络通信 。如果操作系统提供了数据包过滤层并可用的话 , kube-proxy会通过它来实现网络规则 。否则 , kube-proxy 仅转发流量本身 。
  • Container runtime: Container runtime是负责运行容器的软件 。Kubernetes 支持多个容器运行环境: Docker、 containerd、cri-o、 rktlet 以及任何实现 Kubernetes CRI (容器运行环境接口)的软件 。但近年来 , Docker 已发展成为默认的容器运行环境 。
2.3 Kubernetes的优势
Kubernetes 为您提供:
  • 服务发现和负载均衡
  • Kubernetes 可以使用 DNS 名称或自己的 IP 地址公开容器 , 如果到容器的流量很大 , Kubernetes 可以负载均衡并分配网络流量 , 从而使部署稳定 。
  • 存储编排
  • Kubernetes 允许您自动挂载您选择的存储系统 , 例如本地存储、公共云提供商等 。
  • 自动部署和回滚
  • 您可以使用 Kubernetes 描述已部署容器的期待状态 , 它可以以受控的速率将实际状态更改为所需状态 。例如 , 您可以自动化 Kubernetes 来为您的部署创建新容器 , 删除现有容器并将它们的所有资源用于新容器 。
  • 自动二进制打包
  • Kubernetes 允许您指定每个容器所需 CPU 和内存(RAM) 。当容器指定了资源请求时 , Kubernetes 可以做出更好的决策来管理容器的资源 。
  • 自我修复
  • Kubernetes 可以重新启动失败的容器、替换容器、杀死不响应用户定义的运行状况检查的容器 , 并且在准备好服务之前不将其通告给客户端 。
  • 密钥与配置管理
  • Kubernetes 允许您存储和管理敏感信息 , 例如密码、OAuth 令牌和 ssh 密钥 。您可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置 , 也无需在应用配置中暴露密钥 。
三、Kubernetes和Docker比较谈到 Kubernetes 与 Docker 的比较时 , 往往会落入“非此即彼”的陷阱:应该使用 Kubernetes 还是 Docker?
事实上 , 不必进行选择 , Kubernetes 和 Docker 基本上是不同的两种技术 。事实上 , 如果一定要比较 , 将 Kubernetes 与 Docker Swarm 进行比较更为恰当 。
Kubernetes 与 Docker 之间的根本区别在于 , Kubernetes 旨在跨群集运行 , 而 Docker 在单个节点上运行 。Docker让你只需编写一次代码即可在任何地方运行;而 Kubernetes 则让你可从单一控制界面协调和管理所有容器资源 。这有助于跨运行容器的所有 Kubernetes 节点实现联网、负载均衡、安全性和缩放 。Kubernetes 还具有命名空间等内置隔离机制 , 使你可以按访问权限等对容器资源进行分组 。这些结构使 IT 部门更易于为开发人员提供自助式资源访问权限 , 并且即使在最复杂的微服务体系结构上 , 开发人员也可以在不模拟其开发环境中的整个应用程序的情况下进行协作 。
简而言之 , 结合使用 Kubernetes 和 Docker 可以:
  • 使你的基础结构更加可靠 , 并使应用程序更具高可用性 。
  • 使你的应用程序更具可缩放性 。如果你的应用开始逐渐产生越来越多的负载 , 并且需要横向扩展才能提供更好的用户体验 , 则只需启动更多容器或向 Kubernetes 群集添加更多节点即可 。
参考资料:
https://kubernetes.io/docs/concepts/overview/components/
https://azure.microsoft.com/zh-cn/topic/kubernetes-vs-docker/

【深度对比docker和kubernetes的区别和联系】


推荐阅读