学习k8s竟然可以如此简单——原理篇

了解k8s及工作原理

  • 什么是K8S
  • Kubernetes特性
  • K8S集群分为两类节点
    • master相关组件
    • worker-node相关组件
  • 工作原理流程图
  • 三种部署方法
  • 常用的资源对象
      • pod最小调度单元
      • 资源标签
      • 标签选择器
      • Pod控制器(centroller)
      • 服务资源(Service)
      • 存储卷
      • Name和Namespace
      • Annotation
      • Ingress

什么是K8S

Kubernetes是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。
k8s是一个编排容器的工具,其实也是管理应用的全生命周期的一个工具,从创建应用,应用的部署,应用提供服务,扩容缩容应用,应用更新,都非常的方便,而且可以做到故障自愈,例如一个服务器损坏,可以自动将这个服务器上的服务调度到另外一个主机上进行运行,无需进行人工干涉。k8s可以更快的更新新版本,打包应用,更新的时候可以做到不用中断服务,服务器故障不用停机,从开发环境到测试环境到生产环境的迁移极其方便,一个配置文件搞定,一次生成image,到处运行。

Kubernetes特性

Kubernetes是一种用于在一组主机上运行和协同容器化应用程序的系统,旨在提供可预测性、可扩展性与高可用的性的方法来完全管理容器化应用程序和服务的生命周期的平台。它具有以下几个重要的特性

  1. 自动化部署: yaml部署到k8s,会根据应用程序计算资源需求。自动分配到node。
  2. 系统自愈:当成功部署到k8s中,node节点宕机,k8s会重新将pod调度到可用节点。
  3. 水平扩展:HPA周期调整RC的副本数量,将用户定义的resource值匹配。
  4. 服务发现和负载均衡:内置服务发现功能,为每个容器分配IP,service代理。
  5. 自动更新和回滚:监控应用状态,不会同时杀掉应用。 更新出错,自动恢复到原先状态。
  6. 弹性伸缩:实时根据服务器的并发情况,增加或缩减容器数量

K8S集群分为两类节点

Kubernetes使用共享网络将多个物理机或虚拟机汇集到一个集群中,在各服务器之间进行通信,该集群是配置Kubernetes的所有组件、功能和工作负载的物理平台。集群中一台服务器(或高可用部署中的一组服务器)用作Master,负责管理整个集群(管理端-对内 --管理员&运维工程师),余下的其他机器用作Worker Node–提供服务(开放给用户),它们是使用本地和外部资源接收和运行工作负载的服务器。

Master
Master是集群的网关和中枢,负责诸如为用户和客户端暴露API(功能接口 apiserver)、跟踪其它服务器的健康状态、以最优方式调度工作负载,以及编排其他组件之间的通信等任务,它是用户或客户端与集群之间的核心联络点,并负责Kubernetes系统的大多数集中式管控逻辑。

Node
Node是Kubernetes集群的工作节点,负责接收来自Master的工作指令并根据指令相应的创建或删除Pod对象(k8s集群最小的单位 - 可以是1或者多个docker),以及调整网络规则以合理地路由和转发流量等。

master相关组件

kube-apiserver
• Kubernetes API,集群的统一入口,各组件协调者,以 RESTful API提供接口服务,所有对象资源的增删改查和监听 操作都交给APIServer处理后再提交给Etcd存储。
kube-controller-manager
• 处理集群中常规后台任务,一个资源对应一个控制器,而ControllerManager就是负责管理这些控制器的。
kube-scheduler
• 根据调度算法为新创建的Pod选择一个Node节点,可以任意 部署,可以部署在同一个节点上,也可以部署在不同的节点上。
etcd
• 分布式键值存储系统。用于保存集群状态数据,比如Pod、 Service等对象信息。

worker-node相关组件

Kubelet
• kubelet是Master在Node节点上的Agent,管理本机运行容器 的生命周期,比如创建容器、Pod挂载数据卷、下载secret、获 取容器和节点状态等工作。kubelet将每个Pod转换成一组容器。
kube-proxy
• 在Node节点上实现Pod网络代理,维护网络规则和四层负载均衡工作。
docker或rocket
• 容器引擎,运行容器。

工作原理流程图

学习k8s竟然可以如此简单——原理篇_第1张图片

三种部署方法

Minikube是由kubernetes社区维护的单机版的kubernetes集群,非常适合作为kubernetes入门,或是开发测试环境使用。Minikube实际是跑在本地的虚拟机中,所以,需要先安装一套Hypervisor。
部署地址:https://kubernetes.io/docs/tasks/tools/

Kubeadm:纯粹的二进制文件部署非常复杂和麻烦,kubeadm部署工具的选用逻辑也很简单,kubeadm是官方提供和推荐的,因此可以认为kubeadm是可用而且可靠的,文档也足够全面。
部署地址:https://kubernetes.io/docs/reference/setup-tools/kubeadm/

二进制:项目致力于让有意向使用原生kubernetes集群的企业或个人,可以方便的、系统的使用二进制的方式手工搭建kubernetes高可用集群。并且让相关的人员可以更好的理解kubernetes集群的运作机制。
下载地址:https://github.com/kubernetes/kubernetes/releases

常用的资源对象

pod最小调度单元

Kubernetes并不直接运行容器,而是使用一个抽象的资源对象来封装一个或者多个容器,这个抽象即为Pod,它是Kubernetes的最小调度单元。同一Pod中的容器共享网络名称空间和存储资源,这些容器可经由本地回环接口lo直接通信,但彼此之间又在Mount、User及PID等名称空间上保持了隔离。

资源标签

标签(Label)是将资源进行分类的标识符,资源标签其实就是一个键值型(key/values)数据。标签旨在指定对象(如Pod等)辨识性的属性,这些属性仅对用户存在特定的意义,对Kubernetes集群来说并不直接表达核心系统语意。

标签选择器

标签选择器(Selector)全称为”Label Selector“,它是一种根据Label来过滤符合条件的资源对象的机制。

Pod控制器(centroller)

尽管Pod是kubernetes的最小调度单元,但用户通常并不会直接部署及管理Pod对象,而是要借助于另一类抽象——控制器(Controller)对其进行管理。用于工作负载的控制器是一种管理Pod生命周期的资源抽象,它们是kubernetes上的一类对象,而非单个资源对象。

服务资源(Service)

Service是建立在一组Pod对象之上的资源抽象,它通过标签选择器选定一组Pod对象,并为这组Pod对象定义一个统一的固定访问入口(通常是一个IP地址),若Kubernetes集群存在DNS附件,它就会在Service创建时为其自动配置一个DNS名称以便客户端进行服务发现。

存储卷

存储卷(Volume)是独立于容器文件系统之外的存储空间,常用于扩展容器的存储空间并为它提供持久存储能力。Kubernetes集群上的存储卷大体可以分为临时卷、本地卷和网络卷。临时卷和本地卷都位于Node本地,一旦Pod被调度至其他Node,此种类型的存储卷将无法访问到,因此临时卷和本地卷通常用于数据缓存,持久化的数据则需要放置于持久卷(persistent volume)之上(网络卷)。

Name和Namespace

名称(Name)是Kubernetes集群中资源对象的标识符,它们的作用域通常是名称空间(Namespace),因此名称空间是名称的额外的限定机制。在同一名称空间中,同一类型资源对象的名称必须具有唯一性。名称空间通常用于实现租户或项目的资源隔离,从而形成逻辑分组。

Annotation

Annotation(注释)是另一种附加在对象之上的键值类型的数据,但它拥有更大的数据容量。Annotation常用于将各种非标识型元数据(metadata)附加到对象上,但它不能用于标识和选择对象,通常也不会被Kubernetes直接使用,其主要目的是方便工具或用户的阅读和查找等。

Ingress

Kubernetes将Pod对象和外部网络环境进行了隔离,Pod和Service等对象间的通信都使用其内部专用地址进行,如若需要开放某些Pod对象提供给外部用户访问,则需要为其请求流量打开一个通往Kubernetes集群内部的通道,除了Service之外,Ingress也是这类通道的实现方式之一。

k8s详细博客:http://docs.kubernetes.org.cn/

你可能感兴趣的:(K8s,k8s,kubernetes)