1. 什么是K8S?

Kubernetes是一个Google开源的容器集群编排管理系统,是一个多容器管理解决方案。

2.K8S和Docker的关系

Docker:

  • 是一个开源的应用容器引擎;
  • 对应用进程进行封装隔离;
  • 独立于宿主机和其他进程;
  • 提供容器的生命周期管理;
  • 具有快速部署,可移植性,环境隔离等特点;
  • Docker镜像构建运行时容器;
  • 优点: 可移植性. 将软件和依赖包打包到一个容器中。

Kubernetes

  • 用于关联和编排在多个主机上运行的容器;
  • 是一个跨多主机的容器编排平台;
  • 是一个开源容器集群编排管理系统;
  • 是一个多容器管理解决方案。

3.K8S相关基础概念

  • Master : (etcd, api-server, control-manager, scheduler)
  • Node: (docker, kubelet,kube-proxy)
  • Pod: 运行于Node节点上,若干相关容器的组合。Pod内包含的容器运行在同一宿主机上,使用相同的网络命名空间、IP地址和端口,能够通过localhost进行通信。Pod是Kurbernetes进行创建、调度和管理的最小单位,它提供了比容器更高层次的抽象,使得部署和管理更加灵活。一个Pod可以包含一个容器或者多个相关容器。
  • Label: key/Value键值对,可附加到各种资源对象上, K8S可以通过Label Selector(标签选择器)查询和筛选资源对象;
  • ReplicaSet:是 Pod 副本的抽象,管理Pod副本,保证集群中存在指定数量的Pod副本. 是实现弹性伸缩,动态扩容和滚动升级的核心. 是下一代 ReplicationController, 支持新的基于集合的标签选择算符。 它主要被 Deployment 用来作为一种编排 Pod 创建、删除及更新的机制。 请注意,我们推荐使用 Deployment 而不是直接使用 ReplicaSet.
  • Deployment: 在内部使用ReplicaSet 来实现,可以通过 Deployment 来生成相应的 ReplicaSet 完成 Pod 副本的创建;
  • HPA: Pod的横向自动扩容,通过追踪分析RC控制的所有Pod目标的负载变化情况,来确定是否需要针对性的调整Pod副本数量。
  • Service: Service定义了Pod的逻辑集合和访问该集合的策略,是真实服务的抽象。Service提供了一个统一的服务访问入口以及服务代理和发现机制,关联多个相同Label的Pod,用户不需要了解后台Pod是如何运行。
  • Volume: Volume是Pod中能够被多个容器访问的共享目录,Kubernetes中的Volume是定义在Pod上,可以被一个或多个Pod中的容器挂载到某个目录下。
  • Namespace : Namespace用于实现多租户的资源隔离,可将集群内部的资源对象分配到不同的Namespace中,形成逻辑上的不同项目、小组或用户组,便于不同的Namespace在共享使用整个集群的资源的同时还能被分别管理。

4.K8S的核心功能

  1. 自我修复: 保证预期的副本数量,杀死健康检查失败的容器.
  2. 弹性伸缩: 保证应用业务高峰并发时的高可用性,业务低峰时回收资源,以最小成本运行服务.
  3. 自动部署和回滚: k8s采用滚动更新策略更新应用
  4. 存储编排: 挂载外部存储系统
  5. 服务发现和负载均衡
  6. 机密和配置管理
  7. 资源监控和资源配额管理
  8. 提供认证和授权: 角色访问控制(RBAC)认证授权策略.

5.K8S架构组成

5.1 Master

  • 负责资源调度,控制副本,和提供统一访问集群的入口。

1. Kube-apiserver:
集群统一入口,所有对象资源增删改查和监听操作交给apiserver处理后再提交给etcd存储。
2. Kube-controller-manager: 负责管理所有控制器。
3. Kube-scheduler: 根据调度算法为新创建的Pod选择一个Node节点。
4. Etcd: 分布式键值存储系统.用于保存集群状态数据。

5.2 Node

Node由Master管理,并汇报容器状态给Master,同时根据Master要求管理容器生命周期。
1. Kubelet: kubelet是Master在Node节点上的Agent,管理本机运行容器的生命周期。
2. Kube-proxy: 在Node节点上实现Pod网络代理,维护网络规则和四层负载均衡工作。
3.Docker: docker或者rocket,containerd, 容器引擎和运行容器。

5.3 Etcd

1.简述etcd及特点?
etcd是CoreOS团队开源项目,负责管理配置信息和服务发现. 提供一个高可用的分布式键值数据库,基于Go语言实现。
特点:

  • 简单:支持 REST 风格的 HTTP+JSON API。
  • 安全:支持 HTTPS 方式的访问。
  • 快速:支持并发 1k/s 的写操作。
  • 可靠:支持分布式结构,基于 Raft 的一致性算法,Raft 是一套通过选举主节点来实现分布式系统一致性的算法。

2.etcd适用场景

  • 服务发现
  • 消息发布与订阅
  • 负载均衡: etcd分布式架构存储的信息访问支持负载均衡.etcd集群中的每个节点都可以处理用户请求。
  • 分布式通知与协调: 通过注册和异步通知机制,实现分布式环境下不同系统之间的通知与协调。
  • 分布式锁: etcd使用Raft算法保持了数据的强一致性,锁服务有两种使用方式,1是保持独占,2是控制时序。
  • 集群监控与Leader 竞选:通过etcd 来进行监控实现起来非常简单并且实时性强。

5.4 K8S单Master架构图

K8S单Master架构图

5.5 K8S多Master架构图

K8S多Master架构图

5.6 K8S系统组件图

K8S系统组件图

5.7 理解容器编排系统

理解容器编排系统

6.K8S应用场景

  1. K8S主要优势,适应场景及特点?

优势:

  • 容器编排
  • 轻量级
  • 开源
  • 弹性伸缩
  • 负载均衡

K8S常见场景:

  • 快速部署和扩展应用
  • 无缝对接新的应用功能
  • 节省资源,优化硬件资源使用。

K8S特点:

  • 可移植: 支持公有云,私有云,混合云.
  • 可扩展: 模块化,、插件化、可挂载、可组合
  • 自动化: 自动部署、自动重启、自动复制、自动伸缩/扩展。
Logo

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

更多推荐