【公开课】理解 Pod 和容器设计模式|学习笔记

简介: 快速学习【公开课】理解 Pod 和容器设计模式

开发者学堂课程【理解 Pod 和容器设计模式公开课】理解 Pod 和容器设计模式】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/826/detail/13946


【公开课】理解 Pod 和容器设计模式


内容介绍:

一、为什么我们需要 Pod


一、为什么我们需要 Pod

Pod 是 Kubernetes 项目中一个重要的概念,是一个非常最要的原子

1.容器的基本概念

容器的本质:

一个视图被隔离、资源受限的进程

容器里 PID =1 的进程就是应用本身

管理虚拟机=管理基础设施;管理容器=直接管理应用本身

是不可变基础设施最佳的体现

那么 Kubernetes 呢?

Kubernetes 就是云时代的操作系统!

以此类推,容器镜像其实就是:这个操作系统的软件安装包

2.真实操作系统案例

举例: helloworld 程序

helloworld 程序实际上是由一组进程(Linux 里的线程)组成

$ pstree -p

...

|helloworld,3062l

|  |-{api},3063

|  |-{main} ,3064l

|  |-{log} ,3065

|  、-{ compute} ,3133

进程等同于 Linux 里的线程

在 Linux 里查看 helloworld 里面的 pstree

有四个线程组成,api、main、log、compute

这4个进程共享 helloworld 程序的资源,相互协作,完成 helloworld 程序的工作

思考

Kubernetes =操作系统(比如:Linux)

容器=进程(Linux 线程)

Pod = ?

进程组(Linux 线程组)

在真实的操作系统中,一个程序往往是由进程组进行管理

将 Kubernetes 类比为操作系统,如 Linux,也可以类比为进程,容器也可以类比为进程,也就是 Linux 线程,而 Pod 即为进程组,也就是 Linux 线程组这样一个类比关系

3.进程组

举例:

helloworld 程序由4个进程组成,这些进程之间共享某些文件

问题: helloworld 程序如何用容器跑起来呢?

解法一:启动一个 Docker 容器中,启动这4个进程

疑问∶容器 PID= 1的进程就是应用本身比如 main 进程,那么“谁"来负责管理剩余的3个进程?

核心问题:容器是“单进程"模型!

由于容器等于应用等于进程,只能管理 PID=1的进程

除非:

应用进程本身具备"进程管理"能力〈这意味着: helloworld 程序需要具备 systemd 的能力)

或者,容器的 PID=1进程改成 systemd,或者在容器运行 systemd

这会导致:管理容器=管理 systemd !=直接管理应用本身

由于容器实际是一个单进程模型,如果在容器里启动多个进程,只有其中一个可以作为 PID=1的进程,如果 PID=1的进程失败退出了,其他三个进程无法管理和回收资源

如果在容器里运行一个 systemd,用 systemd 来管理其他进程,会出现没办法直接管理应用,应用被 systemd 接管,应用状态的生命周期不等于容器的生命周期

4.Pod=“进程组”

$ pstree -p

...

|helloworld,3062l

|  |-{api},3063

|  |-{main} ,3064l

|  |-{log} ,3065

|  、-{ compute} ,3133

apiVersion: v1

kind: Pod

metadata:

name: helloworld

spec: .

containers:

- name: api

image: api

ports:

- containerPort: 80

- name: main

image: main

- name: log

image: log

volumeMounts:

- name: log-storage

name: compute

image: compute

volumeMounts:

- name: data-storage

image.png

Kubernetes 里面,Pod 实际上是 Kubernetes 项目抽象出来一个可以类比为进程组的概念。四个进程共同组织的一个应用 helloworld,在 Kubernetes 里面实际上会被定义为一个拥有四个容器的 Pod。有四个进程,有四个职责不同相互协作的进程要需要放在容器里运行。

在 Kubernetes 里,并不会他们一起放入一个容器里,在 Kubernetes 中,把四个独立的进程分别用四个独立的容器启动起来,然后定义在一个 Pod 中。当Kubernetes helloworle 运行起来时,实际上会看到四个容器。他们共享某些资源,这些资源都属于 PodPod Kubernetes 中只是一个逻辑单位,没有一个真实的东西对应这个P od。物理上存在的是四个容器,这四个容器的组合成为 Pod,Pod 是 Kubernetes 分配资源的一个单位。因为这些容器它要共享资源,所以 Pod是多个容器的组合 Kubernetes 的原子调度单位

Pod:一个逻辑单位,多个容器的组合 Kubernetes 的原子调度单位

5.来自 Google Borg 的思考

Google 的工程师们发现,在 Borg 项目部署的应用,往往都存在着类似于“进程和进程组”的关系。更具体地说,就是这些应用之间有着密切的协作关系,使得它们必须部署在同一台机器上并且共享某些信息

是进程组的概念,也是 Pod 的用法

- Large-scale cluster management at Google with Borg, EuroSys'15

6.为什么 Pod 必须是原子调度单位

举例:两个容器紧密协作

App:业务容器,写日志文件

LogCollector:转发日志文件到 ElasticSearch 中

内存要求:

App: 1G

LogCollector: 0.5G

当前可用内存:

Node_A: 1.25G

Node_B: 2G

如果 App 先被调度到了 Node_A 上,会怎么样?

LogCollector 无法调度到了 Node_A 上,因为资源不够

整个应用本身出现问题

Task co-scheduling 问题

Mesos:资源囤积(resource hoarding) :

所有设置了 Affinity 约束的任务都达到时,才开始统一进行调度

调度效率损失和死锁

Google Omega:乐观调度处理冲突:

先不管这些冲突,而是通过精心设计回轨机制在出现了冲突之后解决问题

复杂

Kubernetes: Pod

7.再次理解Pod

亲密关系-调度解决

两个应用需要运行在同一台宿主机上

image.png

超亲密关系-Pod 解决

会发生直接的文件交换

使用 localhost 或者 Socket 文件进行本地通信

会发生非常频繁的 RPC 调用

会共享某些 Linux Namespace (比如,一个容器要加入另一个容器的Network Namespace)

image.png


相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
XML C# 数据格式
掌握了在Windows平台上查看DLL依赖的方法
掌握了在Windows平台上查看DLL依赖的方法
4096 4
|
测试技术
McCabe度量法
McCabe度量法
823 0
|
7月前
|
存储 人工智能 前端开发
以无头 CMS 为核心构建适配全场景的内容中台
内容中台是品牌内容的数字家园,但只有具备灵活性、可扩展性和用户中心性才能发挥价值。无头CMS为搭建这样的内容中台提供了坚实基础,让团队摆脱传统平台的束缚,专注于核心——创作能引发共鸣、驱动成果的内容。
494 113
|
9月前
|
JSON 安全 生物认证
WhatWeb-网站安全扫描指纹识别
WhatWeb 是一款网站指纹识别工具,用于快速识别目标网站的 Web 服务器类型、CMS、脚本语言、中间件及可能存在的漏洞信息,常用于渗透测试与安全审计。
502 1
|
数据采集 人工智能 机器人
RPA与爬虫:自动化工具的本质差异与选择指南
本文深入解析RPA与爬虫的本质差异,帮助企业根据业务需求明智选型。RPA侧重内部流程自动化,爬虫专注外部数据采集。内容涵盖技术原理、应用场景、优劣势对比及主流RPA工具介绍,助力把握自动化趋势,提升效率。
2289 0
|
数据安全/隐私保护
5分钟注册一个可用Gemini的谷歌邮箱账号
5分钟注册一个可用Gemini的谷歌邮箱账号
7473 24
5分钟注册一个可用Gemini的谷歌邮箱账号
|
存储 C语言
一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
749 5
|
机器学习/深度学习 自然语言处理 数据可视化
揭秘深度学习模型中的“黑箱”:理解与优化网络决策过程
【5月更文挑战第28天】 在深度学习领域,神经网络因其卓越的性能被广泛应用于图像识别、自然语言处理等任务。然而,这些复杂的模型往往被视作“黑箱”,其内部决策过程难以解释。本文将深入探讨深度学习模型的可解释性问题,并提出几种方法来揭示和优化网络的决策机制。我们将从模型可视化、敏感性分析到高级解释框架,一步步剖析模型行为,旨在为研究者提供更透明、可靠的深度学习解决方案。
|
JavaScript 前端开发 API
Vue 2 vs Vue 3: 深入浅出的优势剖析
Vue 2 vs Vue 3: 深入浅出的优势剖析