手记

【学习打卡】第1天《Kubernetes基础:开启云原生之门》笔记

课程名称:Kubernetes基础:开启云原生之门

课程章节: 全部

主讲老师:Tonybai


课程内容

1. 云原生模式

- 随着容器技术的出现以及应用面临的外部环境的变化,云原生逐渐成为一种应用云化开发、部署和运行的主流方式

- 基础前提:应用的容器化和微服务化。容器作为,应用部署、运行和管理的基本单元;

- 核心:借助容器管理自动化平台进行动态编排和资源优化利用。

2. CNCF

为应用云安全地采用云原生模式提供了更稳、更快、更安全的解决方案,其核心是 Kubernetes。

- 从众多强大对手中脱颖而出,Kubernetes 为云原生模式下应用的部署、运行和管理提供了可移植的、云厂商无关的事实标准。

3. K8S

以 Google 内部容器编排管理平台 Borg 为原型的开源实现

- 一个容器编排管理平台

- 以 Pod(容器组)为基本的编排和调度单元以及声明式的对象配置模型(控制器、configmap、secrt 等)

- 资源配额与分配管理

- 健康检查、自愈、伸缩与滚动升级

- 一个微服务支撑平台

- 服务发现、服务编排与内部路由支持

- 服务快速不和自动负载均衡

- 提供对“有状态”服务的支持等

- 一个可移植的“云平台”

- 新一代应用云化的事实标准,成为面向云原生应用的新可移植层——云平台

- 为用户提供简单且一致的容器化应用部署、伸缩和管理机制,形成新的、通用的云化模型

- 云厂商锁定的问题得以解决,云应用支持跨云迁移。

4. 集群初体验-演示

没办法实践

5. K8S 架构与组件

6. Master 组件——集群大脑

集群大脑,控制平南:

- 所有集群的控制命令都传递给 Master 组件并在其上执行

- 每个 Kubernetes 集群至少有一套 Master 组件(默认一个,多个保证高可用)

- 每套 master 组件包括三个核心组件(apiserver、scheduler和controller-manager)以及集群数据配置中心 etcd。

API Server

- 集群控制的唯一入口,是提供 Kubernetes 集群控制 RESTful API 的核心组件

- 集群内各个组件之间数据交互和通信的中枢

- 提供集群控制的安全机制(身份认证、授权以及 admission control)

Scheduler:

- 通过 API Server 的Watch 接口监听新建 Pod 副本信息,并通过调度算法为该 Pod 选择一个最合适的 Node

- 支持自定义调度算法 provider

- 默认调度算法内置预先策略和优选策略,决策考量资源需求、服务质量、软硬件约束、亲缘性、数据局部性等指标参数。

ControllerManager

- 各种资源的核心管理者

- 针对每一种具体资源,都有相应的 Controller

- 保证其下管理的每个 Controller 所对应的资源始终处于“期望状态”。

> 每个 Controller 的逻辑:

for {    获取资源期望状态    获取资源当前状态    改变:当前状态 → 期望状态 }

ETCD:

- 集群的主数据库,存储着所有资源对象以及状态

- 默认与 Master 组件不是在一个 Node 上

Etcd 的数据变更都是通过 API Server 进行

7. Node 组件

工作负载节点,K8S 中真正的工作负载节点

- 集群由多个 Node 共同承担工作负载,Pod 被分配到某个具体的 Node 上执行

- K8S通过 node controller 对 node 资源进行管理。支持动态在集群中添加或删除 Node。

- 每个集群 Node 上都会部署 Kubelet 和 Kube-proxy 两个组件。

组件:Kubelet

- 位集群中每个 Node 上的非容器形式的服务进程组件,Master 和 Node 之间的桥梁

- 处理 Master 下发到本 Node 上的 Pod 创建、启停等管理任务;向 API Server 注册 Node 信息。

- 监控本 Node 上容器和节点资源情况,并定期向 Master 回报节点资源占用情况

组件:Kube-proxy

运行在每个 Node

- Service 抽象概念的实现,将 Service 的请求按策略(负载均衡)算法发到后端 Pod(Endpoint)上

- 默认使用 iptables mode 实现

- 支持 nodeport 模式,实现从外部访问集群内的 service

8. K8S 对象

一种持久化的、用于表示集群状态的实体

- 一种声明式的意图的记录,一般使用 yaml 文件描述对象

- Kubernets 集群使用 Kubernetes对象来表示集群的状态

- 通过 API/Kubectl 管理 Kubernetes 对象

对象模型

9. 常用 Metadata

Name 和 UID

- Kubernetes 集群中所有对象都通过 name 和 UID 明确标识

- API 的对象访问路径。/api/{version}/namespaces/{namespace}/{object-kind}/name

- 在 Kubernetes 集群的整个生命周期内创建的每个对象实例都具有不同的 UID。

Namespace,不仅是属性,本身也是 object

- 用于将物理集群划分为多个虚拟集群

- 完全隔离,常被用来隔离不同的用户(及权限)

- 内置三个 Namespaces:default、kube-system 和 kube-public,Node 和 PersistentVolume 不属于任何 namespace。

Label(标签)

用于建立集群对象之间灵活的、松耦合的多维关联关系

- 一个 label 是一个键值对,其中 k、v 均由用户自定义

- label 可以附在任何对象上,每个对象也可以有任意个标签。标签可以在对象定义时附加上。也可以通过命令动态管理标签

- Label 可以将有组织目的结构映射到集群对象上,从而形成一个与现实世界管理结构同步对应松耦合的、多维的对象管理结构。

Annotations(注解)

可以将任意非标识性元数据附加在对象上

- Annotations 也可以以剪枝对形式呈现

- 工具和库可以检索到并使用这些 Annotations 元数据

- 将数据作为 Annotation 附着在对象上,有利于创建一些用于不是、管理和做内部检查的共享工具或客户端。

10. 对象分类

Pod:集群调度基本单元,一个特定关系的容器集合

- 集群中可以创建和部署的最小且最简的 Kubernetes 对象单元

- 也是一种封装。封装了应用容器,存储资源、独立的网络 IP以及决定容器如何运行的策略选项

- 每个 Pod 中预置一个 Pause 容器,其名字空间、IPC资源、网络和存储资源被 Pod 内其它容器共享。Pod 中的所有容器紧密协作,并作为一个整体被管理、调度和运行

Pod 生命周期,一个非持久性实体,四种状态

11. Service

与云原生应用中“微服务”概念一一对应

- Kubernetes 集群为每个 Service 分配一个集群唯一的 IP 地址,在 Service 的生命周期内,该 IP 地址不变;在内部 DNS的支持下实现服务发现

- 通过 label selector 关联到实际支撑业务运行的 Pod 上,并通过集群内置的服务负载均衡将服务请求分发到后端 Pod

- 通过 nodeport 或设置 loadbalancer 机制实现集群外部对 service 的访问

12. Controllers

- 用于保证集群内一组 Pod 能始终按照某种期望的状态(desired state)正常运行

- 状态包括:Pod 副本数量、节点选择、资源约束、持久化数据维持等。

- 支持多种 Controller,常用的 Deployment、replicaset、statefulset、daemonset等

13. RepicaSet

确保健康 Pod 副本数始终满足用户定义的数量

- 前身是 ReplicationController(rc)

- 相比 rc,增加集合式 label selector 的支持

- 支持单独使用,但更多隐藏在 Deployment 控制器后面,有 deployment 自动管理。

14. Deployment

为 Pod 和 ReplicaSet 提供了声明式的定义(declarative)

- 用户在 deployment 文件中描述期望状态,Deployment Controller 就会自动将 Pod 和 Replica Set 的实际状态改变到期望状态

- 支持 Pod 的 RollingUpdate,并自动管理背后的 ReplicaSet

- 支持将 Pod rollback 到之前的任意 revision(限于 pod-template 模板改动)

15. StatefulSet

提供对有状态的应用的部署和控制的支持,1.9 版本 GA

- 适用场景:稳定的持久化存储、稳定的网络标志、有序部署有序扩展、有序收缩有序删除、有序自动滚动升级等。

- Pod 的存储必须由 PersistenVolume Provisioner 根据请求的 Storage Class 进行配置,或由管理员预先配置好

- 考虑数据安全性,伸缩或删除 StatefulSet 不会删除关联的存储;另外 StatefulSet 目前要求 Headless Service 负责 Pod 的网络身份,用户有责任创建此服务。



课程收获

主要讲的 K8S 的组件概念、架构设计和一些组件之间的应用逻辑,之前看了尚硅谷的 K8S 实操性很强,这个课理论比较扎实,可以互补。

(好像是第一次听这个老师的课,点进手记发现这个老师有个专栏,大佬啊)


一些课程截图:



0人推荐
随时随地看视频
慕课网APP