【学习笔记】Kubernetes入门

《Kubernetes从入门到实践》学习笔记
【学习笔记】Kubernetes入门_第1张图片

文章目录

  • 前言
  • 一、基础知识
    • 第一章 容器的发展史
      • 1.开发过程的发展
      • 2. 应用架构的发展
      • 3.部署/打包的发展
    • 第二章 Kubernetes的核心概念
      • 1 Kubernetes的设计架构
      • 2 Kubernetes的核心对象
      • 2.3 本章小结
  • 二、应用
    • 第3章 Kubernetes的安装与部署
      • 3.1 Master与Node都要安装的基础组件
      • 3.2 Master的安装与配置
      • 3.3 Node的安装与配置
      • 3.4 本章小结
    • 第四章 Pod——Kubernetes的基本单位
    • 第五章 控制器——Pod的管理
    • 第六章 Sercice和Ingress——发布Pod提供的服务
    • 第七章 存储与配置
    • 第八章 Kubernetes资源的管理及调度
  • 三、进阶
  • 四、实践
  • 总结


前言

容器技术将应用程序与程序依赖都打包到镜像中,供开发者复制、分发。使用容器技术,不仅提高了打包的速度,还拥有更高的资源利用率。最重要的是,能保持运行环境的一致性,真正做到“一次构建,随处运行”(build once, run anywhere)。这为开发人员、运维人员与测试人员带来了极大的便利,大大提高了效率,降低了运维成本。
基于基础的容器技术,Kubernetes是一套容器集群管理系统,是一个开源平台,可以实现容器集群的自动化部署、自动扩缩容、维护等功能,充分发挥容器技术的潜力,给企业带来真正的便利。Kubernetes拥有自动包装、自我修复、横向缩放、服务发现、负载均衡、自动部署、升级回滚、存储编排等特性


一、基础知识

第一章 容器的发展史

1.开发过程的发展

1.1瀑布式开发
【学习笔记】Kubernetes入门_第2张图片
1.2 敏捷式开发
【学习笔记】Kubernetes入门_第3张图片
1.3 DevOps

2. 应用架构的发展

应用架构大致经历了单体架构、多层架构和微服务架构3个阶段.
微服务架构
【学习笔记】Kubernetes入门_第4张图片
使用Kubernetes能充分对承载微服务的容器进行管理,对其进行动态扩容和缩容、版本控制、容灾处理、服务注册与发现、监控、动态调节CPU与内存等。对于微服务的应用来说,Kubernetes这样的平台是必需的。

3.部署/打包的发展

3.1 物理机vs虚拟机
3.2 虚拟机vs容器
3.3 容器和k8s
容器技术本身只是单机版的应用,并没有解决容器的编排问题。例如,容器没有Web管理界面,也无法实现任务调度策略、监控报警等。随着越来越多的开发者使用了容器技术,编排平台的重要性日益突出。所有人都翘首以盼能使用优秀的容器平台,直到Kubernetes开源,才圆了开发人员的梦。

3.4 容器的舵手——Kubernetes
Kubernetes项目由Google公司在2014年启动。Kubernetes建立在Google公司超过10多年的运维经验基础之上,Google所有的应用都运行在容器上,然后与社区中最好的想法和实践相结合。
Kubernetes是一套容器集群管理系统,是一个开源平台,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。Kubernetes拥有自动包装、自我修复、横向缩放、服务发现、负载均衡、自动部署、升级回滚、存储编排等特性。

第二章 Kubernetes的核心概念

1 Kubernetes的设计架构

【学习笔记】Kubernetes入门_第5张图片

1.1 Master
【学习笔记】Kubernetes入门_第6张图片

(1) API Server进程
Kubernetes API Server的核心功能是提供Kubernetes各类资源对象(如Pod、RC、Service等)的增、删、改、查及Watch(监控)等
对资源的任何操作都要经过apiserver
对于用户来说,访问API Server进程有3种方式。

  • 直接通过REST Request的方式来访问
  • 通过官方提供的客户端库文件来访问,本质上,通过编程方式,转换为对API Server进程的REST API调用
  • 通过命令行工具kubectl客户端来访问。kubectl客户端将把命令行转换为对API Server进程的REST API调用

(2)etcd
可以将etcd理解为Kubernetes的“数据库”,用于保存集群中所有的配置和各个对象的状态信息

(3)调度器(kube-scheduler)
调度负责Pod调度,用于监听最近创建但还未分配Node的Pod资源,会为Pod自动分配相应的Node

(4)控制器管理器(kube-controller-manager)

  • Node 控制器:负责在Node出现故障时做出响应。
  • Replication控制器:负责对系统中的每个ReplicationController对象维护正确数量的Pod。
  • Endpoint 控制器:负责生成和维护所有Endpoint对象的控制器。Endpoint控制器用于监听Service和对应的Pod副本的变化。
  • ServiceAccount及Token 控制器:为新的命名空间创建默认账户和API访问令牌。

负责对象管理

1.2 Node
Node的组成如图2-3所示。Node主要由3个部分组成,分别是kubelet、kube-proxy和容器运行时(container runtime)
【学习笔记】Kubernetes入门_第7张图片
(1)kubectl
kubelet是在每个Node上都运行的主要代理进程。kubelet以PodSpec为单位来运行任务,PodSpec是一种描述Pod的YAML或JSON对象。kubelet会运行由各种机制提供(主要通过API Server)的一系列PodSpec,并确保这些PodSpec中描述的容器健康运行。kubelet负责维护容器的生命周期,同时也负责存储卷(volume)等资源的管理。
Kubernetes 使用名为 kubectl 的命令行实用程序与集群 API 服务器通信

(2)kub-proxy
负责服务发现
kube-proxy主要用于管理Service的访问入口,包括从集群内的其他Pod到Service的访问,以及从集群外访问Service。

(3)容器进行时
容器运行时是负责运行容器的软件。Kubernetes支持多种运行时,包括Docker、containerd、cri-o、rktlet以及任何基于Kubernetes CRI(容器运行时接口)的实现。

1.3组件间的基本交互过程
以创建pod为例
【学习笔记】Kubernetes入门_第8张图片
(1)kubectl命令将转换为对API Server的调用。
(2)API Server验证请求并将其保存到etcd中。
(3)etcd通知API Server。
(4)API Server调用调度器。
(5)调度器决定在哪个节点运行Pod,并将其返回给API Server。
(6)API Server将对应节点保存到etcd中。
(7)etcd通知API Server。
(8)API Server在相应的节点中调用kubelet。
(9)kubelet与容器运行时API发生交互,与容器守护进程通信以创建容器。
(10)kubelet将Pod状态更新到API Server中。
(11)API Server把最新的状态保存到etcd中。

2 Kubernetes的核心对象

Kubernetes的基本对象模型
【学习笔记】Kubernetes入门_第9张图片

2.1pod
Pod是Kubernetes处理的最基本单元。容器本身并不会直接分配到主机上,而是会封装到名为Pod的对象中。Pod通常表示单个应用程序,由一个或多个关系紧密的容器构成,如图所示
【学习笔记】Kubernetes入门_第10张图片

2.2控制器
一般来说,用户不会直接创建Pod,而是创建控制器,让控制器来管理Pod。

1.ReplicationController和ReplicaSet控制器
ReplicationController可定义Pod模板,并可以设置相应控制参数以实现水平伸缩,以调节正在运行的相同的Pod数。
ReplicationController负责保证在集群中部署的Pod数量与配置中的Pod数量一致。如果Pod或主机出现故障,ReplicationController会自动启用新的Pod进行补充。
ReplicationController还可以执行滚动更新,将一组Pod逐个切换到最新版本,从而最大限度地减少对应用程序可用性的影响。

ReplicaSet控制器可以看作ReplicationController的另一种版本,其Pod识别功能使它在Pod管理上更具灵活性。由于ReplicaSet控制器具有副本筛选功能,因此ReplicaSet控制器才有逐渐取代ReplicationController的趋势,但ReplicaSet控制器无法实现滚动更新,无法像ReplicationController那样在后端轮流切换到最新版本。

“滚动升级”(Rolling Update),比如在当前系统中有10个对应的旧版本的Pod,则最佳的系统升级方式是旧版本的Pod每停止一个,就同时创建一个新版本的Pod,在整个升级过程中此消彼长,而运行中的Pod数量始终是10个,几分钟以后,当所有的Pod都已经是新版本时,系统升级完成。

2.Deployment控制器
Deployment控制器以ReplicaSet控制器为基础,是更高级的概念,增加了更灵活的生命周期管理功能。
Deployment控制器是一种高级对象,旨在简化Pod的生命周期管理。只要简单更改Deployment控制器的配置文件,Kubernetes就会自动调节ReplicaSet控制器,管理应用程序不同版本之间的切换,还可以实现自动维护事件历史记录及自动撤销功能,如图所示。正是由于这些强大的功能,Deployment控制器可能是使用频率最高的对象。
【学习笔记】Kubernetes入门_第11张图片

3.StatefulSet控制器

4.DaemonSet控制器

5.Job控制器和CronJob控制器

2.3服务与存储
1.service组件和Ingress
services是内部负载均衡器的一种组件,会将相同功能的Pod在逻辑上组合到一起
2.存储卷和持久存储卷

2.4 资源划分
1.命名空间
【学习笔记】Kubernetes入门_第12张图片

2.标签和注解

2.3 本章小结

二、应用

第3章 Kubernetes的安装与部署

3.1 Master与Node都要安装的基础组件

docker
Kubernetes关键组件

3.2 Master的安装与配置

3.2.1 如何解决CPU数量不够的问题
3.2.2 如何解决不支持交换内存的问题
3.2.3 如何解决网络连接错误的问题

3.3 Node的安装与配置

3.4 本章小结

第四章 Pod——Kubernetes的基本单位

第五章 控制器——Pod的管理

第六章 Sercice和Ingress——发布Pod提供的服务

第七章 存储与配置

第八章 Kubernetes资源的管理及调度

三、进阶

四、实践


总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

你可能感兴趣的:(kubernetes)