菜鸟学K8S之初步入门

  • Kubernetes初步入门
    • 什么是Kubernetes
    • 为什么用Kubernetes
    • Kubernetes重要概念
      • Cluster(集群)
      • Master(主控)
        • 1. Kubernetes API Server(Kubernetes API服务器)
        • 2. Kubernetes Controller Manager(Kubernetes控制器管理器)
        • 3. Kubernetes Scheduler(Kubernetes调度器)
        • 4. Etcd
      • Node(节点)
        • 1. Kubelet
        • 2. Kube-proxy
        • 3. Docker引擎
      • Pod
      • 服务
      • 命名空间

Kubernetes初步入门

什么是Kubernetes

Kubernetes是一套自动化容器运维的开源平台,包括部署、调度和节点集群的扩展。可以将Docker看作是Kubernetes内部使用的低级别的组件,而Kubernetes则是管理Docker容器的工具。

为什么用Kubernetes

Kubernetes是一个自动化部署、具有可伸缩性的用于操作应用程序容器的开源平台,使用Kubernetes,可以:

  • 快速精准部署应用程序
  • 即时伸缩应用程序
  • 无缝展示新特性
  • 控制硬件用量

使用Kubernetes可以让开发者从以主机为中心的架构跃升至以容器为中心的架构,真正的以容器为中心的开发环境。而且Kubernetes满足了一系列产品内运行程序的普通需求,例如:

  • 协调辅助进程,协助应用程序整合,维护一对一“程序——镜像”模型
  • 挂在存储系统
  • 分布式机密信息
  • 检查程序状态
  • 复制应用实例
  • 负载均衡
  • 滚动更新
  • 资源监控
  • 访问并读取日志
  • 程序调试
  • 提供验证与授权

Kubernetes重要概念

Cluster(集群)

在K8s中,Cluster(集群)是计算、存储和网络资源的集合。K8s利用这些基础资源来运行各种应用程序。因此Cluster是K8S的基础环境。

Master(主控)

Master是指集群的控制节点。每个K8S集群中,都至少有一个Master节点来负责整个集群的管理和控制。几乎所有的集群控制命令都是在Master上执行的。因此,Master是整个集群的大脑。另外为了实现高可用,用户还可以部署多个Master节点。当然,Master节点可以是物理机,也可以是虚拟机。

1. Kubernetes API Server(Kubernetes API服务器)

Kubernetes API Server的进程名称为kube-apiserver。Kubernetes API Server提供了Kubernetes各类资源对象的增删改查的HTTP Rest接口,是整个系统的数据总线和数据中心。Kubernetes API Server提供了集群管理的Rest API接口,包括认证授权、数据校验以及集群状态变更,提供了其他模块之间的数据交换和通信的枢纽,是资源配额控制的入口,有完善的集群安全机制。

2. Kubernetes Controller Manager(Kubernetes控制器管理器)

Kubernetes Controller Manager作为集群内部的管理控制中心,负责集群内的Node节点、Pod副本、服务端点(Endpoint)、命名空间(Namespace)、服务账号(ServiceAccount)、资源配额(ResourceQuota)的管理。当某个Node意外宕机时,Controller Manager会及时发现并执行自动化修复流程,确保集群始终处于预期的工作状态。

3. Kubernetes Scheduler(Kubernetes调度器)

Kubernetes Scheduler的作用是根据特定的调度算法把Pod调度到指定的工作节点(Node)上,该过程叫做绑定(Bind)。Scheduler的输入为需要调度的Pod和可以被调度的节点的信息,输出为调度算法选择的Node节点,并将该Pod绑定到这个Node节点。

4. Etcd

Etcd是Kubernetes集群中一个十分重要的组件,用于保存集群所有的网络配置和对象的状态信息。

Node(节点)

在K8S中,除了Master,其他的节点都称为Node节点。Node节点是Kuberneters中的承担主要计算功能的工作节点。整个K8S集群中的Node节点协同工作,Master会根据实际情况将某些负载分配给各个Node节点。当某个Node节点出现故障,其他Node节点会顶上。
Node节点上运行的主要进程:

1. Kubelet

在K8S中,每个Node节点都会启动kubelet进程,用来处理Master节点下发到本节点的任务,管理Pod和其中的容器。kubelet会在API Server上注册节点信息,定期向Master汇报节点资源的使用情况,并通过cAdvisor监控容器和节点资源。可以把kubelet理解成是一个代理进程,是Node节点上的Pod管家。

2. Kube-proxy

Kube-proxy运行在所有的Node节点上,它监听每个节点上Kubernetes API中定义的服务变化情况,并创建路由规则来进行服务负载均衡。

3. Docker引擎

Docker引擎,负责容器的创建和管理等。

Pod

Pod是K8s最基本的操作单元,一个Pod中可以包含一个或多个密切相关的容器,一个Pod可以被一个容器化的环境看作应用层的逻辑宿主机,一个Pod中的多个容器应用通常是紧密耦合的,Pod在Node节点上被创建、启动或者销毁。每个Pod中运行着一个特殊的被称之为Pause的容器,其他容器则为业务容器。这些业务容器共享Pause容器的网络栈和Volume挂在卷,因此它们之间的通信和数据交换更为高效,在设计时我们可以充分利用这一特性将一组密切相关的服务进程放入同一个Pod中。

同一个Pod里的容器之间仅需通过localhost就能互相通信。同一个Pod中的业务容器共享Pasue容器的IP地址,共享Pasue容器挂在的存储卷。
Pod是K8S调度的基本工作单元,Master节点会以Pod为单位,将其调度到Node节点上。

服务

在K8S集群中,虽然每个Pod都会分配一个单独的IP地址,但这个IP地址会随着Pod的销毁而销毁。那么如果有一组Pod组成一个集群来提供佛那个服务,那么如何访问它呢?通过服务即可。
一个服务可以看作一组提供相同服务的Pod的对外访问接口,服务作用于哪些Pod是通过标签选择器来定义的。服务通常拥有以下特点:

  • 拥有一个指定的名字,比如mysql-server。
  • 拥有一个虚拟IP地址和端口号,销毁之前不会改变,只能内网访问。
  • 能够提供某种远程服务能力
  • 被映射到了提供这种服务能力的一组容器应用上。

如果服务要提供外网服务,就需要指定公共IP和Node端口,或外部负载均衡器。

默认情况下容器的数据都是非持久化的。所以Docker提供了卷机制以便将数据持久化存储。类似的,Kubernetes提供了强大的卷机制和丰富的插件,解决了容器数据持久化和容器间共享数据的问题。

与Docker不同,Kubernetes卷的生命周期与Pod绑定。容器宕掉后Kubelet再次重启容器时,卷的数据依然还在,而Pod被删除时,卷才会清理。数据是否丢失取决于具体的卷类型。持久化存储卷为独立于计算资源的一种物理存储资源,不属于任何一个Node节点。因此,在Pod被删除时,不会丢失数据,除非人工将其删除。

命名空间

通过将系统内部的对象分配到不同的命名空间中,形成逻辑上的不同项目、小组或用户组,从而使得在共享使用整个集群的资源的同时还能分配管理它们。

Kubernetes集群在启动后,会创建一个名为default的默认命名空间,如果不特别指定命名空间,那么用户创建的Pod、RC、服务都会被系统创建到默认的命名空间中。默认情况下,相同命名空间中的对象将具有相同的访问控制策略。

至此,我们已经了解了什么是K8S,以及K8S的基本概念。下面介绍Kuberneters的安装。

更多推荐

【Kubernetes】菜鸟学K8S之初步入门