kubernetes(k8s)介绍

kubernetes(k8s)介绍

  • 简述
  • 组件
    • 主(Master)组件
      • API服务器
      • ETCD
      • kube-controller-manager
      • 云控制器管理器-cloud-controller-manager
      • 调度器-kube-scheduler
      • 插件 addons
      • DNS
      • 用户界面
      • 容器资源监测
      • 集群层面日志
    • 节点(Node)组件
      • kubelet
      • kube-proxy
      • docker
      • RKT
      • supervisord
      • fluentd
  • 对象
    • 理解对象
    • 描述对象
  • 搭建

简述

kubernetes,简称K8s,是用8代替8个字符“ubernete”而成的缩写。
Kubernetes 是一个跨主机集群的 开源的容器调度平台,它可以自动化应用容器的部署、扩展和操作 , 提供以容器为中心的基础架构。

通过Kubernetes你可以:

  • Pod 提供复合应用并保留一个应用一个容器的容器模型,
  • 挂载外部存储,
  • Secret管理,
  • 应用健康检查,
  • 副本应用实例,
  • 横向自动扩缩容,
  • 服务发现,
  • 负载均衡,
  • 滚动更新,
  • 资源监测,
  • 日志采集和存储,
  • 支持自检和调试,
  • 认证和鉴权.

组件

主(Master)组件

Master组件提供集群的管理控制中心。

Master 组件对集群做出全局性决策(例如:调度),以及检测和响应集群事件(副本控制器的replicas字段不满足时,启动新的副本)。

Master 组件可以在集群中的任何节点上运行。然而,为了简单起见,设置脚本通常会启动同一个虚拟机上所有 Master 组件,并且不会在此虚拟机上运行用户容器。请参阅构建高可用性群集示例对于多主机 VM 的设置。

API服务器

kube-apiserver对外暴露了Kubernetes API。它是的 Kubernetes 前端控制层。它被设计为水平扩展,即通过部署更多实例来缩放。

ETCD

etcd 用于 Kubernetes 的后端存储。所有集群数据都存储在此处,始终为您的 Kubernetes 集群的 etcd 数据提供备份计划。

kube-controller-manager

kube-controller-manager运行控制器,它们是处理集群中常规任务的后台线程。逻辑上,每个控制器是一个单独的进程,但为了降低复杂性,它们都被编译成独立的可执行文件,并在单个进程中运行。

这些控制器包括:

  • 节点(Node)控制器。
  • 副本(Replication)控制器:负责维护系统中每个副本中的pod。
  • 端点(Endpoints)控制器:填充Endpoints对象(即连接Services&Pods)。
  • Service Account和Token控制器:为新的Namespace 创建默认帐户访问API Token。

云控制器管理器-cloud-controller-manager

cloud-controller-manager 是用于与底层云提供商交互的控制器。云控制器管理器可执行组件是 Kubernetes v1.6 版本中引入的 Alpha 功能。

cloud-controller-manager 仅运行云提供商特定的控制器循环。您必须在 kube-controller-manager 中禁用这些控制器循环,您可以通过在启动 kube-controller-manager 时将 --cloud-provider 标志设置为external来禁用控制器循环。

cloud-controller-manager 允许云供应商代码和 Kubernetes 核心彼此独立发展,在以前的版本中,Kubernetes 核心代码依赖于云提供商特定的功能代码。在未来的版本中,云供应商的特定代码应由云供应商自己维护,并与运行 Kubernetes 的云控制器管理器相关联。

以下控制器具有云提供商依赖关系:

  • 节点控制器: 用于检查云提供商以确定节点是否在云中停止响应后被删除
  • 路由控制器: 用于在底层云基础架构中设置路由
  • 服务控制器: 用于创建,更新和删除云提供商负载平衡器
  • 数据卷控制器: 用于创建,附加和装载卷,并与云提供商进行交互以协调卷

调度器-kube-scheduler

kube-scheduler 监视新创建没有分配到Node的Pod,为Pod选择一个Node。

插件 addons

插件是实现集群功能的 Pod 和 Service。 Pods 可以通过 Deployments,ReplicationControllers 管理。插件对象本身是受命名空间限制的,被创建于 kube-system 命名空间。

Addon 管理器用于创建和维护附加资源.

DNS

虽然其他插件并不是必需的,但所有 Kubernetes 集群都应该具有Cluster DNS,许多示例依赖于它。

Cluster DNS 是一个 DNS 服务器,和您部署环境中的其他 DNS 服务器一起工作,为 Kubernetes 服务提供DNS记录。

Kubernetes 启动的容器自动将 DNS 服务器包含在 DNS 搜索中。

用户界面

dashboard 提供了集群状态的只读概述。

容器资源监测

容器资源监控将关于容器的一些常见的时间序列度量值保存到一个集中的数据库中,并提供用于浏览这些数据的界面。

集群层面日志

集群层面日志 机制负责将容器的日志数据保存到一个集中的日志存储中,该存储能够提供搜索和浏览接口。

节点(Node)组件

节点组件运行在Node,提供Kubernetes运行时环境,以及维护Pod。

kubelet

kubelet是主要的节点代理,它会监视已分配给节点的pod,具体功能:

  • 安装Pod所需的volume。
  • 下载Pod的Secrets。
  • Pod中运行的 docker(或experimentally,rkt)容器。
  • 定期执行容器健康检查。
  • Reports the status of the pod back to the rest of the system, by creating a mirror pod if necessary.
  • Reports the status of the node back to the rest of the system.

kube-proxy

kube-proxy通过在主机上维护网络规则并执行连接转发来实现Kubernetes服务抽象。

docker

docker用于运行容器。

RKT

rkt运行容器,作为docker工具的替代方案。

supervisord

supervisord是一个轻量级的监控系统,用于保障kubelet和docker运行。

fluentd

fluentd是一个守护进程,可提供cluster-level logging.。

对象

主要说明 Kubernetes 对象在 Kubernetes API 中是如何表示的,以及如何在 .yaml 格式的文件中表示。

理解对象

在 Kubernetes 系统中,Kubernetes 对象 是持久化的实体。Kubernetes 使用这些实体去表示整个集群的状态。特别地,它们描述了如下信息:

  • 哪些容器化应用在运行(以及在哪个 Node 上)
  • 可以被应用使用的资源
  • 关于应用运行时表现的策略,比如重启策略、升级策略,以及容错策略

Kubernetes 对象是 “目标性记录” —— 一旦创建对象,Kubernetes 系统将持续工作以确保对象存在。通过创建对象,本质上是在告知 Kubernetes 系统,所需要的集群工作负载看起来是什么样子的,这就是 Kubernetes 集群的 期望状态(Desired State)。

操作 Kubernetes 对象 —— 无论是创建、修改,或者删除 —— 需要使用 Kubernetes API。比如,当使用 kubectl 命令行接口时,CLI 会执行必要的 Kubernetes API 调用,也可以在程序中直接调用 Kubernetes API。为了实现该目标,Kubernetes 当前提供了一个 golang 客户端库 ,其它语言库(例如Python)也正在开发中。

描述对象

当创建 Kubernetes 对象时,必须提供对象的规约,用来描述该对象的期望状态,以及关于对象的一些基本信息(例如名称)。 当使用 Kubernetes API 创建对象时(或者直接创建,或者基于kubectl),API 请求必须在请求体中包含 JSON 格式的信息。 大多数情况下,需要在 .yaml 文件中为 kubectl 提供这些信息。 kubectl 在发起 API 请求时,将这些信息转换成 JSON 格式。

必需字段
在想要创建的 Kubernetes 对象对应的 .yaml 文件中,需要配置如下的字段:

  • apiVersion - 创建该对象所使用的 Kubernetes API 的版本
  • kind - 想要创建的对象的类型
  • metadata - 帮助识别对象唯一性的数据,包括一个 name 字符串、UID 和可选的 namespace

也需要提供对象的 spec 字段。对象 spec 的精确格式对每个 Kubernetes 对象来说是不同的,包含了特定于该对象的嵌套字段。

本文内容整理自 https://kubernetes.io

搭建

理论知识了解了以后就动手实践一下吧,尝试搭建一个k8s集群,可参考博文
kubeadm搭建Kubernetes(K8s)1.15.3单主集群:https://blog.csdn.net/weixin_45417347/article/details/101055424

你可能感兴趣的:(Kubernetes)