Kubernetes 简介

1、什么是Kubernetes

根据文档中的定义,Kubernetes 是一种便携式、可扩展、开源的平台,该平台可管理容器化的任务负载以及服务,有助于声明式配置以及自动化运维管理。

Kubernetes 又缩写为 k8s,因为k与最后一个s之间有8个字母。

Kubernetes 是一个被Google用于容器编排的工具。由于很多公司的服务由单体架构迁移至微服务架构,容器化技术(例如docker)变得越来越受欢迎。 Kubernetes 被用于管理容器化的应用,它能实现:

  • 构建高可用应用
  • 扩展应用程序
  • 易于实现负载均衡
  • 控制资源的消耗

以及其他功能,例如管理版本、以及密钥。

2、Kubernetes组建

一个Kubernetes集群包含一个控制平面 以及 多个 工作节点。

2.1 控制平面 (control plane)

控制平面是集群中的决策者,负责编排用于运行、调度、管理应用的进程。控制平面可以安装在任何节点上。但在实践中, 最好是不要将控制平面安装在工作节点上。

  • kube-apiserver

Api server 是控制平面的一个组件,该组件将对外暴露 Kubernetes 的API

  • Etcd

Etcd是一个强一致性、高可用、分布式的kv键值存储。Kubernetes使用ectd来备份集群的所有数据。

  • kube-scheduler

监控新创建的、还未分配节点的pod,并选择一个节点来运行该pod。

  • kube-controller-manager

    kube-controller-manager是控制平面中运行控制器进程的组件。

    逻辑上,每个控制器都是一个独立的进程,但是为了减少复杂性,这些控制器都被编译到一个二进制文件,并在一个进程中运行。

    一些控制器:

    • 节点控制器(node controller): 负责在节点宕机时进行通知以及响应。
    • 作业控制器(job controller):监控代表一次性任务的对象,然后创建一些pod来完成这些任务。
    • 端点控制器(Endpoints controller): 填充Endpoint 对象,即加入到services、pods中。
    • 服务帐户和令牌控制器(Service Account & Token controllers):为新命名空间创建默认帐户和 API 访问令牌。
  • 云控制器管理器-cloud-controller-manager

    控制平面嵌入了针对云的控制逻辑。云控制器管理器允许您将集群链接到云提供商的 API,并将与该云平台交互的组件与仅与您的集群交互的组件分开。

    cloud-controller-manager 仅运行特定于您的云提供商的控制器。如果您在自己的场所运行 Kubernetes,或者在您自己 PC 内的学习环境中运行 Kubernetes,则集群没有云控制器管理器。

    与 kube-controller-manager 一样,cloud-controller-manager 将几个逻辑上独立的控制循环组合成一个二进制文件,您可以将其作为单个进程运行。您可以水平扩展(运行多个副本)以提高性能或帮助容忍故障。

    以下控制器可以具有云提供商依赖项:

    节点控制器:用于检查云提供商,以确定节点停止响应后,该节点是否已在云中删除。
    路由控制器:用于在底层云基础设施中设置路由。
    服务控制器:用于创建、更新和删除云提供商的负载均衡器。

2.2 节点组件 (Node Component)

节点组件运行在每个节点上,用于维护正在运行的pod, 并提供Kubernetes运行时的环境(runtime environment)。

  • kubelet

    kubelet是运行在集群中节点上的代理。它确保容器是在pod上运行。

    kubelet 采用一组通过各种机制提供的 PodSpec,并确保这些 PodSpec 中描述的容器运行且健康。 kubelet 不管理非 Kubernetes 创建的容器。

  • kube-proxy

    kube-proxy 是运行在集群中每个节点上的网络代理。实现了部分Kubernetes服务概念。

    kube-proxy 在节点上维护网络规则。 这些网络规则允许从集群内部或外部的网络会话与 Pod 进行网络通信。

    kube-proxy 使用操作系统包过滤层(如果有并且可用)。 否则,kube-proxy 会自行转发流量。

  • 容器运行环境(Container runtime)

    Container runtime时是负责运行容器的软件。

2.3 插件(Addons)

插件使用 Kubernetes 资源(DaemonSet、Deployment 等)来实现集群功能。 因为这些提供集群级别的功能,所以插件的命名空间资源属于 kube-system 命名空间。

有关插件可以参考插件列表

  • DNS

    虽然其他插件不是严格需要的,但所有 Kubernetes 集群都应该有集群 DNS,因为许多视示例都依赖它。

    除了您环境中的其他 DNS 服务器之外,集群 DNS 是一个 DNS 服务器,它为 Kubernetes 服务提供 DNS 记录。

    由 Kubernetes 启动的容器会自动在其 DNS 搜索中包含此 DNS 服务器。

  • Web UI(Dashboard)

    Dashboard 是用于 Kubernetes 集群的通用、基于 Web 的 UI。 用户通过它可以对集群中运行的应用程序以及集群本身进行管理和故障排除。

  • Container Resource Monitoring

    Container Resource Monitoring 在中央数据库中记录有关容器的通用时间序列指标,并提供用于浏览该数据的 UI。

  • Cluster-level Logging

    集群级别的日志机制负责将容器日志保存到具有搜索、浏览界面的中央日志存储中。

系列:1、Kubernetes 简介 (本文)

系列:2、创建Kubernetes集群

系列:3、Kubectl 的使用

系列:4.1、Kubernetes 对象

系列:4.2、Kubernetes 工作负载

系列:4.3、Kubernetes 服务

系列:4.4、Kubernetes 存储

系列:4.5、Kubernetes 配置对象

系列:5、Kubernetes中的调度

系列:6、Kubernetes 的升级与部署策略

系列:7、 Kubernetes 安全性

系列:8、部署一个全栈应用

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐