pod篇:

pod环节:

pod是k8s中最小的资源管理组件

pod也是最小化运行容器化的应用的资源对象

pod是一个抽象的概念,可与理解为一个或者多个容器化应用的集合

在一个pod当中运行一个容器是最常用的方式。

再一个pod当中可以同时运行多个容器,在一个pod当中可以同时封装几个需要耦合的互相协作的容器。

这些多个容器时共享资源,也可以互相协作组成要给service单位。

不论运行一个容器还是多个容器,k8s管理的都是pod而不是容器。

一个pod内的容器,必须都运行在同一节点。基于现代容器技术的要求,一个pod运行一个容器,一个容器只运行一个进程,横向扩展,方便扩缩容。

解耦,一个pod内运行 多个容器,耦合度太高,一旦一个进程失败,整个pod将全部失败,实现解耦,基于pod可以创建多个副本,实现高可用和负载均衡。 管理方便,简单直观。

pod内的容器共享资源,共享机制:pause底层基础容器来提供共享的机制。

pause容器是基础容器,也可以成为父容器,作用就是管理pod内容器的共享操作。

pause还可以管理容器的生命周期。

k8s提供了pause容器

1、为pod内的所有容器提供一个统一的命名空间

2、启动容器的pid命名空间,每个pod中都作为pid为1的进程(init进程)还可以回收僵尸进程。

3、创建pod时先创建pause父进程,然后再拉取镜像生成容器,形成pod,pause来管理这些容器进程c'd

pause是pod内所有的父进程。pod里面是容器,容器运行的是进程,pid是从pause来的 pause为1 ,会在pod内部管理这些容器的进程。

kubelet来管理生命周期,kubelet先创建pause,kubelet才会拉去镜像,形成容器,容器形成pod,pause来给容器进程形成pod,

pause来回收pod进程,kubelet来杀死pause,pod的内部由pause管理

1、master节点发出指令,pod使用的镜像nginx,pod的副本数,2、kube-scheduler来分配执行的node节点 3、node节点的kubelet收到master的指令,先拉pause,在拉nginx的镜像,指定创建几个副本,4、pause容器先启动,提供命名空间,进程管理pid1,为pod内容器提供共享服务以及容器的进程管理 (pause就是初始化容器)

pause总结

pause容器共享两种资源(网络资源和存储资源)

网络:每一个pod都会被配分配一个集群内部的唯一ip地址,pod内的容器共享网络,就是pod再集群内部的ip地址和他的端口

pod内部容器可以使用localhost互相通信,pod的中容器与外部通信时,从共享资源进行分配。宿主机的端口映射。

pod和容器共享一个ip地址。

存储

pod可以指定多个共享的volume,pod内的容器共享这些volume,volume可以实现数据的持久化,防止pod重新构建后文件消失

总结

每个pod都有一个基础pause容器,pause容器对应的镜像属于k8s集群的一部分,创建集群就会有pause基础镜像,每个pod包含了一个或者多个紧密相关容器(应用)

kube-controller-manager来给pod分配ip地址

1、pod内部有一组容器,挂了一个,整个pod失效了吗?引入pause机制,代表整个容器的组的状态

可以解决对pod内部容器整体进行状态的一个判断

2、核心作用 pod内的容器共享ip,共享volume挂载卷,解决了容器内网络通信的问题,也解决了容器内部文件共享的问题。

pod的分类

自主式pod:这个pod不会自我修复,如果pod内容器的进程终止或者删除或者因为缺少资源被驱逐,这个pod没有办法自愈,不是基于deployment daomanset控制器创建都是自主式pod。

基于控制器创建的就是控制器管理pod:滚动升级、可以自愈,可以管理pod的数量以及pod的扩缩容。

**pod的生命周期**

**pod的状态:**

**1、pending 挂起状态, pod已被创建,但是尚未被分配到运行的node节点 (可能式节点上资源不够,需要等待其他pode的调度)**

**2、running:运行状态,pod已经被分配到节点,而且正在运行,pod内所有容器都已经启动,运行状态正常、稳定**

**3、complete:容器内部的进程运行完毕正常退出,没有发生错误**

**successded:容器内部的进程运行完毕正常退出,没有发生错误**

**4、faild:表示pod中容器非正常退出,发生了错误,需要通过查看日志或者详情定位问题。**

**5、unkown:由于某些原因,k8s集群无法获取pod的状态,APIserver出了问题**

**6、terminating:表示终止中,pod正在被删除,里面的容器正在终止,终止过程中。资源回收,垃圾清理,以及终止过程中需要执行的命令。**

**pod的生命周期**

创建pod的容器分类:

1、基础容器:pause

2、init容器(初始化容器):

3、业务容器(应用容器)

只有再基础容器和init容器过程中,pod状态就是init:0/?,基础容器和init容器都启动之后,才会到业务容器。

init容器的作用:环境变量

1、可以在创建的过程中为业务容器定制好相关的代码和工具,

2、init容器独立于业务容器,是单独构建的以镜像,对业务容器部产生任何安全影响。

3、init容器能以不同于pod内应用容器的文件系统视图运行有secrets的权限。应用容器无法访问secrets的权限。

总结:init容器提供课应用容器运行之前的先决条件,提供了一种阻塞(延迟)机制来控制应用容器的启动,只有前置条件满足,才会创建pod内的应用容器

这是k8s的一种机制

实验deployment的重启策略apiVersion: apps/v1
kind: Deployment
metadata:name: centos1labels:wqb: test
spec:replicas: 1selector:matchLabels:wqb: testtemplate:metadata:labels:wqb: testspec:containers:- name: centos1image: centos:7command: ["echo", "123"]

1、在pod的启动过程中,容器时按照初始化容器先启动,每个容器都必须在下一个容器启动之前,要成功退出。

2、如果运行失败,会按照容器重启策略进行指定动作,restartPolicy Always、Never、onFailure(非正常退出非0,才会重启)默认是Always

3、所有init容器没有成功之前,pod是不会进入ready状态的,init端口跟service无关,不能对外提供访问

4、如果重启pod所有init容器一定会重新执行

5、如果修改init容器的spec(参数),只限制于他的镜像image,其他的修改字段都不生效(基于deployment)

6、在pod中的每个容器的名称都要唯一不能重复。

pod的重启策略apiVersion: v1
kind: Pod
metadata:name: centos
spec:restartPolicy: OnFailure
#k8s的pod的重启策略(基于容器的状态)
#Always只要容器退出,总是重启,无论容器的状态码是否正常这是默认策略可以
不加,Never:只要容器退出,不论是否正常都不重启,OnFailure:只有状态码非0时候才会重启,正常退出是不重启。containers:
#定义的业务容器
#定义了两个init容器,创建完pause之后分别运行centos和centos1之后才会拉起nginx- name: centosimage: centos:7command: ["echi", "I am ready"]

总结:

1、pause容器:底层容器/基础容器

提供pod内的容器的网络和存储共享以及pod内容器退出后资源回收

2、init容器:是认为设定的,业务容器(应用容器),启动之前的必要条件

3、pod的生命周期

pause基础容器>init容器(全部成功退出)>业务容器

poststart prestop 容器的钩子

启动时命令和退出时的命令

4、探针:探测容器的健康状态,将伴随pod的整个生命周期(除了启动探针)

总结:pod就是封装容器的,业务是容器服务也是容器端口也是容器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/317978.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Mybatis】深入学习MyBatis:CRUD操作与动态SQL实战指南

🍎个人博客:个人主页 🏆个人专栏: Mybatis ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 一基本用法 1 CRUD操作 1. 增加(Create) 2. 查询(Read) 3. 更新&#x…

深度思考,AI项目的人工智能到底引领的是什么?

项目深度思考,人工智能到底引领的是什么? 人工智能引领技术之舞:项目深度思考项目背景:人工智能的魔法时代技术选择的深度思考:AI大决战团队协作的深度思考:AI联盟大会用户体验的深度思考:AI之光…

学习Go语言Web框架Gee总结--http.Handler(一)

学习Go语言Web框架Gee总结--http.Handler http-base/go.modhttp-base/main.gohttp-base/gee/gee.gohttp-base/gee/go.mod 网站学习来源:Gee 代码目录结构: http-base/go.mod //指定当前模块的名称为 "example" module example//指定当前模…

AttributeError: module ‘torch‘ has no attribute ‘rfft‘

解决报错:AttributeError: module ‘torch‘ has no attribute ‘irfft‘_attributeerror: module torch has no attribute-CSDN博客文章浏览阅读230次。再在当前文件页面搜索 torch.rfft 和 torch.irfft 将其改为 rfft 和 irfft 也就是把torch.去掉,再运…

ASP.NET Core基础之图片文件(一)-WebApi访问静态图片

阅读本文你的收获: 学会在WebApi项目中访问静态图片了解静态文件中间件UseStaticFiles的用法 系统中免不了要去处理图片文件,比如上传商品的图片、显示商品的图片,访问系统中的图片等等,根据微软官网描述: 静态文件&a…

SpringBoot的基础配置

问题导入 入门案例中没有引入spring-webmvc等依赖包,没有配置Tomcat服务器,为什么能正常启动?我们没有配置端口号,为什么端口是8080? 起步依赖 starter SpringBoot中常见项目名称,定义了当前项目使用的所…

Docker学习(一)

注:此为笔者学习狂神说Docker的笔记,其中包含个人的笔记和理解,仅做学习笔记之用,更多详细资讯请出门左拐B站:狂神说!!! Docker 一、Docker入门 1. Docker 为什么会出现 2.Docker 文档地址: https://docs.docker.co…

Ribbon相关面试及答案(2024)

1、Ribbon是什么,它在微服务架构中扮演什么角色? Ribbon是一个客户端负载均衡器,它在微服务架构中扮演着关键性的角色。Ribbon的设计理念是在客户端进行服务发现和负载均衡,这种方式不同于传统的通过中心化的负载均衡器&#xff…

【webstorm中通过附加方式打开一个项目,这个项目本身有git,但是却看不到git的解决方法】

1、如图所示 设置-》版本控制-》未注册的根,选中后,再点加号,就可以了 2、如图所示 版本控制-》直接点加号-》选中项目路径,vcs选择git,点击确定就可以了

力扣每日一题99:恢复二叉搜索树

题目 给你二叉搜索树的根节点 root ,该树中的 恰好 两个节点的值被错误地交换。请在不改变其结构的情况下,恢复这棵树 。 示例 1: 输入:root [1,3,null,null,2] 输出:[3,1,null,null,2] 解释:3 不能是 1 …

Oracle-数据库迁移之后性能变慢问题分析

问题背景: ​一套Oracle11.2.0.4的RAC集群,通过Dataguard switchover方式迁移到新机器之后,运行第一天应用报障说应用性能慢,需要进行性能问题排查 问题分析: 首先,登陆到服务器,用TOP看一眼两个…

常用Java Lambda表达式示例

文章目录 1. **实现Runnable接口**:2. **事件监听器**(如Swing中的ActionListener):3. **集合遍历**(使用forEach方法):4. **过滤集合**(使用Stream API):5. …