理解 Pod 和容器设置模式(一)|学习笔记

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 快速学习理解 Pod 和容器设置模式(一)

开发者学堂课程【Kubernetes 入门 理解 Pod 和容器设置模式(一)】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/51/detail/1010


理解 Pod 和容器设置模式(一)


 内容介绍

一、为什么我们需要 Pod?

二、Pod 的实现机制

三、详解容器设计模式

 

一、为什么我们需要 Pod?

先回顾一下容器的基本概念

1、容器的本质是?

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

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

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

2、那么 Kubernetes 呢?

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

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

3、再来看一个真实操作系统里的例子

举例: helloworld 程序

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

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

4、思考

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

l 容器=进程(Linux 线程)

l Pod = ?

l 进程组(Linux 线程组)

5、“进程组”

举例:

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

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

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

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

l 容器是“单进程”模型!

l 除非:

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

l 或者,容器的 PID=1进程改成 systemd

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

6、Pod =“进程组

Pod:一个逻辑单位,多个容器的组合

Kubernetes 的原子调度单位

$spstree -p

|-helloworld,3062l

|-{api} ,3063

|-{main} ,3064

|-{ 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

7、来自 Google Borg 的思考

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

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

8、为什么 Pod 必须是原子调度单位?

1、举例:两个容器紧密协作

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

l LogCollector:转发日志文件到 ElasticSearch 中

2、内存要求:

l App: 1G

l LogCollector: 0.5G

3、当前可用内存:

l Node_A: 1.25G

l Node_B: 2G

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

5、Task co-scheduling 问题

l Mesos:资源囤积(resource hoarding) :

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

l 调度效率损失和死锁

6、Google Omega︰乐观调度处理冲突︰

l 复杂

7、Kubernetes: Pod

l 再次理解 Pod

l 亲密关系-调度解决

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

l 超亲密关系- Pod 解决

l 会发生直接的文件交换

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

l 会发生非常频繁的 RPC 调用

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

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
6月前
|
存储 Kubernetes Linux
pod介绍之 容器分类与重启策略
pod介绍之 容器分类与重启策略
|
6月前
|
Kubernetes API 数据库
容器服务 Pod 处于 CrashLoopBackOff的原因及解决方法
"CrashLoopBackOff" 是 Kubernetes 中 Pod 进入的一种错误状态,通常是由于容器不断崩溃(失败)而触发的重启策略所导致的。以下是 Pod 处于 CrashLoopBackOff 状态的原因及相应的解决方法: ### 原因: 1. **应用错误:** - 容器内部的应用程序崩溃,导致容器退出。 - 应用程序可能因为异常、未捕获的错误、配置问题、依赖缺失等原因导致崩溃。 2. **错误的启动命令:** - Pod 的启动命令或入口点设置错误,导致容器无法正确启动。 3. **资源限制:** - Pod 可能受到内存或 CPU 资源限制,
2009 0
|
11月前
|
Kubernetes 应用服务中间件 nginx
k8s教程(pod篇)-初始化容器
k8s教程(pod篇)-初始化容器
160 0
|
消息中间件 Kubernetes 搜索推荐
容器与 Pod 的区别和联系
容器与 Pod 的区别和联系
|
Kubernetes Cloud Native 网络协议
理解 Pod 和容器设计 | 学习笔记
快速学习理解 Pod 和容器设计
理解 Pod 和容器设计 | 学习笔记
|
设计模式 存储 Kubernetes
理解 Pod 和容器设置模式(二)|学习笔记
快速学习理解 Pod 和容器设置模式(二)
115 0
理解 Pod 和容器设置模式(二)|学习笔记
|
安全 网络协议 Shell
容器运行时的保护(二)| 学习笔记
快速学习容器运行时的保护。
容器运行时的保护(二)| 学习笔记
|
Kubernetes Shell Perl
文档解读 | K8S中的Pod和容器配置(一)
如何给运行在Kubernetes(K8S) Pod中的容器定义环境变量、命令行和参数? 给运行在Kubernetes Pod中的容器定义环境变量 开始之前 必须有一个Kubernets集群,和一个能和集群沟通的kubectl命令行工具。
5693 0
|
机器学习/深度学习 存储 安全
容器运行时的保护(一)| 学习笔记
快速学习容器运行时的保护。
|
存储 弹性计算 运维
阿里云容器如何实现 1000Pod/min 一键启动
随着云原生和容器编排技术的发展,阿里云容器服务 Kubernetes 版受到越来越多用户的青睐,但同时也存在非常多的问题,例如弹性、安全、稳定、运维等。面对这些问题,阿里云是如何思考的呢?在 QCon 全球软件开发大会(2021)北京站上,阿里云高级技术专家王志凌分享了阿里云在 Serverless 容器场景下的探索和实践。我们整理了他的演讲,以期帮你更好地使用容器服务。(下文以王志凌老师第一人称叙述)
356 0
阿里云容器如何实现 1000Pod/min 一键启动
下一篇
无影云桌面