阿里云《云原生》公开课笔记 第三章 kubernetes核心概念

课程文字:https://edu.aliyun.com/lesson_1651_16894?spm=5176.10731542.0.0.3d8220beFhpCJW#_16894

Kubernetes概念

名称来源
  • 工业级的容器编排平台。
  • 负责应用的部署、应用的弹性以及应用的管理,基于容器的。
  • Kubernetes 这个单词是希腊语,它的中文翻译是“舵手”或者“飞行员”。在一些常见的资料中也会看到“ks”这个词,也就是“k8s”,它是通过将8个字母“ubernete ”替换为“8”而导致的一个缩写。
核心功能
  • 服务的发现与负载的均衡
  • 容器的自动装箱,我们也会把它叫做 scheduling,就是“调度”,把一个容器放到一个集群的某一个机器上
  • Kubernetes 会帮助我们去做存储的编排,让存储的声明周期与容器的生命周期能有一个连接
  • Kubernetes 会帮助我们去做自动化的容器的恢复。在一个集群中,经常会出现宿主机的问题或者说是 OS 的问题,导致容器本身的不可用,Kubernetes 会自动地对这些不可用的容器进行恢复
  • Kubernetes 会帮助我们去做应用的自动发布与应用的回滚
  • 与应用相关的配置密文的管理;
  • 对于 job 类型任务,Kubernetes 可以去做批量的执行
  • 为了让这个集群、这个应用更富有弹性,Kubernetes 支持水平的伸缩

Kubernetes架构

二层架构
  • 二层架构和 server-client 架构。Master 作为中央的管控节点,会去与 Node 进行一个连接。
    image
主要组件
  • API Server:顾名思义是用来处理 API 操作的,Kubernetes 中所有的组件都会和 API Server 进行连接,组件与组件之间一般不进行独立的连接,都依赖于 API Server 进行消息的传送;
    • 内部部署的API Server是可以水平扩展的!
  • Controller:是控制器,它用来完成对集群状态的一些管理。自动对容器进行修复、容器数量的水平扩张,都是由 Kubernetes 中的 Controller 来完成的;
    • 可以进行热备的部署组件,只有一个active;对应一个调度组件
  • Scheduler:是调度器,“调度器”顾名思义就是完成调度的操作,对一个用户提交的 Container,依据它对 CPU、对 memory 请求大小,找一台合适的节点,进行放置;
  • etcd:是一个分布式的一个存储系统,API Server 中所需要的这些原信息都被放置在 etcd 中,etcd 本身是一个高可用系统,通过 etcd 保证整个 Kubernetes 的 Master 组件的高可用性。
Node节点

image

  • 一个 Pod 中运行的一个或者多个容器,真正去运行这些 Pod 的组件的是叫做 kubelet,也就是 Node 上最为关键的组件,它通过 API Server 接收到所需要 Pod 运行的状态,然后提交到 Container Runtime 组件中。
  • 在 OS 上去创建容器所需要运行的环境,最终把容器或者 Pod 运行起来,也需要对存储跟网络进行管理。Kubernetes 并不会直接进行网络存储的操作,他们会靠 Storage Plugin 或者是网络的 Plugin 来进行操作。用户自己或者云厂商都会去写相应的 Storage Plugin 或者 Network Plugin,去完成存储操作或网络操作。
  • 在 Kubernetes 自己的环境中,也会有 Kubernetes 的 Network,它是为了提供 Service network 来进行搭网组网的。(等一下我们也会去介绍“service”这个概念。)真正完成 service 组网的组件的是 Kube-proxy,它是利用了 iptable 的能力来进行组建 Kubernetes 的 Network,就是 cluster network。
pod的调度过程

image

  • 用户可以通过 UI 或者 CLI 提交一个 Pod 给 Kubernetes 进行部署,这个 Pod 请求首先会通过 CLI 或者 UI 提交给 Kubernetes API Server,下一步 API Server 会把这个信息写入到它的存储系统 etcd,之后 Scheduler 会通过 API Server 的 watch 或者叫做 notification 机制得到这个信息:有一个 Pod 需要被调度。
  • Scheduler 会根据它的内存状态进行一次调度决策,在完成这次调度之后,它会向 API Server report 说:“这个 Pod 需要被调度到某一个节点上。”
  • API Server 接收到这次操作之后,会把这次的结果再次写到 etcd 中,然后 API Server 会通知相应的节点进行这次 Pod 真正的执行启动。相应节点的 kubelet 会得到这个通知,kubelet 就会去调 Container runtime来真正去启动配置这个容器和这个容器的运行环境,去调度 Storage Plugin 来去配置存储,network Plugin 去配置网络。

Kubernetes核心概念和API

pod
  • Pod 是 Kubernetes 的一个最小调度以及资源单元。用户可以通过 Kubernetes 的 Pod API 生产一个 Pod,让 Kubernetes 对这个 Pod 进行调度,也就是把它放在某一个 Kubernetes 管理的节点上运行起来。一个 Pod 简单来说是对一组容器的抽象,它里面会包含一个或多个容器
  • 可以指定资源(Volume、CPU、内存等)
  • 定义容器的运行方式(运行容器的command以及环境变量)
  • 可以共享运行环境(网络为例:pod内部,可以用localhost直接连接;pod之间是有网络隔离的)
volume
  • 卷,管理k8s的存储,声明pod的容器可以访问文件目录,一个卷可以被挂载在 Pod 中一个或者多个容器的指定路径下面。
  • 一个 Volume 可以去支持多种的后端的存储。比如说 Kubernetes 的 Volume 就支持了很多存储插件,它可以支持本地的存储,可以支持分布式的存储,比如说像 ceph,GlusterFS ;它也可以支持云存储,比如说阿里云上的云盘、AWS 上的云盘、Google 上的云盘等等。
Deployment
  • Deployment 是在 Pod 这个抽象上更为上层的一个抽象,它可以定义一组 Pod 的副本数目、以及这个 Pod 的版本。Deployment 这个抽象来做应用的真正的管理,而 Pod 是组成 Deployment 最小的单元。
  • Kubernetes 是通过 Controller维护 Deployment 中 Pod 的数目,也会帮助 Deployment 自动恢复失败的 Pod。
    • 比如:可以定义一个 Deployment,这个 Deployment 里面需要两个 Pod,当一个 Pod 失败的时候,控制器就会监测到,它重新把 Deployment 中的 Pod 数目从一个恢复到两个,通过再去新生成一个 Pod。
    • 通过控制器,可以实现发布策略。比如说进行滚动升级,进行重新生成的升级,或者进行版本的回滚。
Service
  • Service 提供了一个或者多个 Pod 实例的稳定访问地址。
  • 一个 Deployment 可能有两个甚至更多个完全相同的 Pod。对于一个外部的用户来讲,访问哪个 Pod 其实都是一样的,所以它希望做一次负载均衡,在做负载均衡的同时,我只想访问某一个固定的 VIP,也就是 Virtual IP 地址,而不希望得知每一个具体的 Pod 的 IP 地址。把所有 Pod 的访问能力抽象成一个第三方的一个 IP 地址,实现这个的 Kubernetes 的抽象就叫 Service。
Namesapce
  • Namespace 是用来做一个集群内部的逻辑隔离的,它包括鉴权、资源管理等。Kubernetes 的每个资源,Pod、Deployment、Service 都属于一个 Namespace,同一个 Namespace 中的资源需要命名的唯一性,不同的 Namespace 中的资源可以重名。
Kubernetes的API
  • Kubernetes API 是由 HTTP+JSON 组成的:用户访问的方式是 HTTP,访问的 API 中 content 的内容是 JSON 格式的。
    image
    • 对于这个 Pod 类型的资源,它的 HTTP 访问的路径,就是 API,然后是 apiVesion: V1, 之后是相应的 Namespaces,以及 Pods 资源,最终是 Podname,也就是 Pod 的名字。
    • 提交一个 Pod,或者 get 一个 Pod 的时候,它的 content 内容都是用 JSON 或者是 YAML 表达的
Yaml文件
  • API 的 version。比如 V1,描述在操作哪个资源;
  • kind 如果是 pod,在 Metadata 中,就写上这个 Pod 的名字;比如说 nginx,可以打一些 label。
  • Metadata
    • annotation,也就是对资源的额外的一些用户层次的描述。
    • label 是一组 KeyValuePair。通过label,API 层就可以对这些资源进行一个筛选。
      • label 比如是一个 color 等于 red,即它的颜色是红颜色。也可以加其他 label,比如说 size: big 就是大小,定义为大的,它可以是一组 label。这些 label 是可以被 selector。这实际上跟sql 类型的 select 语句非常相似。
      • Deployment,它可能是代表一组的 Pod,它是一组 Pod 的抽象,一组 Pod 就是通过 label selector 来表达的。
      • 一个 service 要对应一个或者多个的 Pod,来对它们进行统一的访问,这个描述也是通过 label selector 来选取的一组 Pod。
  • Spec:希望 Pod 达到的一个预期的状态。
    • 比如:内部需要有哪些 container 被运行
    • image 是什么?
    • 它暴露的 port 是什么?
    • 当我们从 Kubernetes API 中去获取这个资源的时候,一般来讲在 Spec 下会有一个项目叫 status,它表达了这个资源当前的状态;比如说一个 Pod 的状态可能是正在被调度、或者是已经 running、或者是已经被 terminates,就是被执行完毕了。(kubectl get pods)

k8s指令实操

  • 查看deployments的资源变化情况:kubectl get --watch deployments
  • 查看deployments的状态: kubectl describe deployment deploymentName
  • 增删查改deployments: kubectl apply/replace/delete -f xx.yaml

自测

k8s的主要功能不包括哪些? EF
  • A. Service discovery and load balancing 服务发现和负载均衡
  • B. Automatic bin packing 自动装箱
  • C. Storage orchestration 存储编排
  • D. Self-healing 自我恢复
  • E. Continuous integration 持续集成(X)
  • F. Canary Analysis 金丝雀分析(属于k8s的部署策略X)
  • G. Automated rollouts and rollbacks 自动更新和回滚
  • H. Secret and configuration management 秘钥和配置集成
  • I. Horizontal scaling 水平扩展
  • J. Batch execution 批次执行

附录

热备
  • 主数据中心用来承担用户的业务,而备份数据中心是为了备份主数据中心的数据,配置等。
  • 备份数据中心分为三种,热备,冷备和多备。
    • 热备主要是对主数据中心进行实时性的备份,进而在主数据中心出现故障后可以及时的替代,让用户不受影响的继续使用。
    • 冷备时,仍然是主数据中心担任用户的业务服务,但是冷备情况时,备份中心是不会对主数据中心进行实时性的备份,也就是说如果主数据中心出现故障,用户的业务也就中断了。
    • 双活数据中心主要的目的是让主备数据中心一同工作,既不浪费资源,又会让用户的业务不被轻易的中断,工作时仍然是主数据中心负载多点,备数据中心起到防御的工作,占少一半。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值