Kubernetes 学习 day 01

Kubernetes 是什么?

  1. Kubernetes 是什么
  2. Kubernetes 的核心功能
  3. Kubernetes 的核心概念

Kubernetes 的核心功能包括:

  • 服务发现和负载均衡:不需要修改应用程序去适配一些服务发现的机制。在 Kubernetes 里面可以给应用的每
    个 Pod 分配一个 IP 地址,然后这些 Pod 前面挂一个 DNS 就可以实现负载均衡了。最重要的是,这些在
    Kubernetes 里面实现起来非常的简单。
  • 自动装箱(Automatic bin packing):可以根据容器的描述定义(资源需求和限制,比如 CPU、内存、存储
    等)将容器自动打包成一个调度单元,并通过特定的调度算法,将其调度到集群的某一台机器上运行。
  • 自动修复(Self-healing):Kubernetes 会帮助我们做一系列的 failover 的处理工作,以达到自动恢复的目的。
    比如当容器 fail 的时候进行重启,nodes (也就是主机节点)挂掉的时候将其上面的容器重新调度到其他 node
    上,当容器不影响预先定义的健康检测时重启容器。
  • 存储编排(Storage orchestration):Kubernetes 支持多种存储,比如本地存储、云产商(GCP 或者 AWS)
    提供的云存储或者远端存储(NFS,Ceph 等)。我们只需要在配置文件中指定存储类型,Kubernetes 就会自
    动帮助我们做存储的编排,并保证存储和应用的生命周期一致。
    应用自动发布和回滚(Automated rollouts and rollbacks):Kubernetes 提供了应用自动发布和回滚的机制。
    回滚的版本可以支持保存多个版本。
  • 配置管理(Secret and configuration managerment):secret 是 kubernetes 中提供的用于管理敏感信息的一
    种 API 对象,我们可以将容器的配置保存为这种配置对象,从而和镜像进行解耦。
    批任务执行(Batch execution):Kubernetes 诞生之初对于 Long-running 的服务支持良好,后来慢慢提供对
    批任务执行的支持,在 Kubernetes 中这种对象叫 Job。
  • 弹性伸缩(Horizontal Scaling):Kubernetes 可以对应用进行弹性伸缩,包括手动和自动的方式。

3. Kubernetes 的核心概念

下面介绍几个 Kubernetes 的核心概念,包括:
Pod
Deployment
Service
Configmap
Namespace
Pod

  • Pod 是 Kubernetes 中的最小调度单元,一个 Pod 可以由多个容器组成,同一个 Pod 内的容器之间没有进行隔
    离。容器和 Pod 的关系可以类比进程和进程组的关系,这个也是 Kubernetes 借鉴于 Google 内部调度系统 Borg
    的设计。
    Pod 内的每个容器可以定义自己需要的资源大小,比如 CPU、内存,同时 Pod 内可以包含一些其他的资源,比如
    说 Volume 数据卷等。
    Pod 是 Kubernetes 的精髓所在,在没有 Pod 之前,如果我们要将两个有依赖关系的容器调度到同一个节点上需要
    调度器做很多复杂的工作。使用 Pod 之后,我们只需要将 Pod 作为一个单元进行调度就可以了。
  • Deployment
    我们的应用会启动在一个 Pod 里面,有时候为了系统的高可用或者应对大流量的时候,需要启动多个应用实例,
    也就是启动多个相同的 Pod。这个时候就需要 Deployment 了,Deployment 可以理解为一组 Pod 的管理器。可以
    通过 Deployment 定义 Pod 的一些元信息,比如资源使用限制等,还可以定义一组 Pod 的副本数量。
    实际上我们真正的应用管理都是通过 Deployment 来做的,这样应用不管有几个副本我们都只需要管理一个
    Deployment 对象即可。Deployment 管理 Pod 在 Kubernetes 里面是通过控制器的方式管理的,控制器会不断的检
    测 Pod 的状态,比如 Pod 的健康检测是否正常,副本数是否正常,一旦出现异常情况,Deployment 就会通过控制
    器去做一些操作,比如重启 Pod,以达到期望的状态。
    通过 Deployment 我们还可以对应用做到滚动升级、版本回滚等发布运维相关的操作。
  • Service
    我们前面说到 Kubernetes 的核心功能的时候提到服务发现和负载均衡就是通过 Service 来做的。举个例子,在
    Kubernetes 中,我们通过 Deployment 管理多个 Pod,每个 Pod 对应一个应用实例,比如 Web 服务。每个 Pod
    都有一个 IP,但是我们并不希望用户直接去访问 Pod 的 IP,一是这样用户需要自己管理 Pod 的 IP 列表,并实现
    自己的负载均衡策略;二是 Pod 可能重启,重启之后 Pod 的 IP 会发生变化。对于这种情况就可以通过 Service 来
    处理。
    在 Kubernetes 中 Service 也是一个对象,Service 后面可以关联一组 Pod。Service 对象创建成功之后会映射到一
    个域名和固定的 IP,这样这个 IP 相当于一个 VIP,用户只需要访问这个固定的 IP 就可以访问的后端的 Pod 中运
    行的应用了。
    Kubernetes 中的 Service 有多种实现,比如 ClusterIP、NodePort、LoadBalancer 和 Ingress 等,这个后面会有专
    门的章节进行讲解。
  • Configmap
    一个正规的开发流程中会包括多个环境,比如开发环境、预发环境和线上生产环境。这些不同环境中使用的代码还
    是同一套,区别在于配置不同。使用同一套代码保证了我们的 Pod 中使用的镜像是同一个,对于配置,在
    Kubernetes 中可以通过一个叫 Configmap 的对象来管理和创建。这样就将配置和应用进行了解耦。
  • Namespace
    Namespace 这个词在很多地方都有使用,比如编程语言中的命名空间。在 Kubernetes 中,Namespace 可以理解
    为一个资源的逻辑空间,包括鉴权(rbac)、资源管理等。Kubernetes 中的每个资源,比如刚才 Pod、
    Deployment、Service 等都有一个 Namespace 属主,不同 Namespace 的资源不能跨 Namespace 访问。另外一个
    Namespace 内的资源要求命名具有唯一性。
posted @ 2022-10-27 11:33  MIRyu  阅读(18)  评论(0编辑  收藏  举报