当前位置: 首页 > news >正文

【模块一】kubernetes容器编排进阶实战之pod的调度流程,pause容器及init容器

pod的调度流程及常见状态

pod的调度流

pod的常见状态

Unschedulable:#Pod不能被调度,kube-scheduler没有匹配到合适的node节点
PodScheduled:#pod正处于调度中,在kube-scheduler刚开始调度的时候,还没有将pod分配到指定的node,在筛选出合适的节点后就会更新etcd数据,将pod分配到指定的node
Pending: #正在创建Pod但是Pod中的容器还没有全部被创建完成=[处于此状态的Pod应该检查Pod依赖的存储是否有权限挂载等。
Failed: #Pod中有容器启动失败而导致pod工作异常。  
Unknown: #由于某种原因无法获得pod的当前状态,通常是由于与pod所在的node节点通信错误。
Initialized:#所有pod中的初始化容器已经完成了
ImagePullBackOff: #Pod所在的node节点下载镜像失败
Running: #Pod内部的容器已经被创建并且启动。
Ready: #表示pod中的容器已经可以提供访问服务
Error: #pod 启动过程中发生错误
NodeLost: #Pod 所在节点失联
Waiting: #Pod 等待启动
Terminating: #Pod 正在被销毁
CrashLoopBackOff:#pod崩溃,但是kubelet正在将它重启InvalidImageName:#node节点无法解析镜像名称导致的镜像无法下载
ImageInspectError:#无法校验镜像,镜像不完整导致
ErrImageNeverPull:#策略禁止拉取镜像,镜像中心权限是私有等
RegistryUnavailable:#镜像服务器不可用,网络原因或harbor宕机
ErrImagePull:#镜像拉取出错,超时或下载被强制终止
CreateContainerConfigError:#不能创建kubelet使用的容器配置
CreateContainerError:#创建容器失败
RunContainerError:#pod运行失败,容器中没有初始化PID为1的守护进程等
ContainersNotInitialized:#pod没有初始化完毕
ContainersNotReady:#pod没有准备完毕
ContainerCreating:#pod正在创建中
PodInitializing:#pod正在初始化中
DockerDaemonNotReady:#node节点decker服务没有启动
NetworkPluginNotReady:#网络插件没有启动

pause容器及init容器 

pause容器简介-宿主机的namespace

  • Pause 容器,又叫 Infra 容器,是pod的基础容器,镜像体积只有几百KB 左右,配置在kubelet中,主要的功能是一个pod中多个容器的网络通信。

  • Infra 容器被创建后会初始化 Network Namespace,之后其它容器就可以加入到 Infra 容器中共享Infra 容器的网络了,因此如果一个 Pod 中的两个容器 A 和 B,那么关系如下 :

1.A容器和B容器能够直接使用 localhost 通信;
2.A容器和B容器可以可以看到网卡、IP与端口监听信息。
3.Pod 只有一个 IP 地址,也就是该 Pod 的 Network Namespace 对应的 IP 地址(由Infra 容器初始化并创建)。
4.k8s环境中的每个Pod有一个独立的IP地址(前提是地址足够用),并且此IP被当前 Pod 中所有容器在内部共享使用。
5.pod删除后Infra 容器随机被删除,其IP被回收。Pause容器共享的Namespace:
1.NET Namespace:Pod中的多个容器共享同一个网络命名空间,即使用相同的IP和端口信息。
2.IPC Namespace:Pod中的多个容器可以使用System V IPC或POSIX消息队列进行通信。
3.UTS Namespace:pod中的多个容器共享一个主机名。MNT Namespace、PID Namespace、User Namespace未共享。

pause容器简介-namespace验证

#进入到容器
[root@k8s-master1 case1-pod]#kubectl exec -it nginx sh
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN qlen 1000link/ipip 0.0.0.0 brd 0.0.0.0
4: eth0@if56: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP link/ether a6:c3:b1:0c:36:41 brd ff:ff:ff:ff:ff:ffinet 10.200.107.233/32 scope global eth0valid_lft forever preferred_lft foreverinet6 fe80::a4c3:b1ff:fe0c:3641/64 scope link valid_lft forever preferred_lft forever
/ # cat /sys/class/net/eth0/iflink
56
或者
bash-4.4# apk  add ethtoolbash-4.4# ethtool -S eth0NIC statistics:peer_ifindex: 56#到pod所在的宿主机验证网卡: 
[root@k8s-node3 ~]#ip link show5: tunl0@NONE: <NOARP,UP,LOWER_UP> mtu 1480 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000link/ipip 0.0.0.0 brd 0.0.0.0
56: calic440f455693@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default link/ether ee:ee:ee:ee:ee:ee brd ff:ff:ff:ff:ff:ff link-netns cni-1683a021-919d-faa3-c0db-b814c55bb0f1[root@k8s-node3 ~]#ls /run/netns/
cni-1683a021-919d-faa3-c0db-b814c55bb0f1  cni-90ab4d6e-e15c-6c33-5d87-b33e2ed54e0d
cni-76dbc694-93ae-3c07-bd07-0b9c721f5344
[root@k8s-node3 ~]#nsenter --net=/run/netns/cni-1683a021-919d-faa3-c0db-b814c55bb0f1 ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000link/ipip 0.0.0.0 brd 0.0.0.0
4: eth0@if56: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether a6:c3:b1:0c:36:41 brd ff:ff:ff:ff:ff:ff link-netnsid 0inet 10.200.107.233/32 scope global eth0valid_lft forever preferred_lft foreverinet6 fe80::a4c3:b1ff:fe0c:3641/64 scope link valid_lft forever preferred_lft foreverroot@k8s-node2:~# sudo nsenter --net=/run/netns/cni-80955d5c-421a-a0ad-9889-a5bb5bf934d9  ifconfig #containerd、主机名解析 
root@k8s-node2:~# sudo nsenter --net=/run/docker/netns/5593316039dd  ifconfig  #dodcker
pause容器-配置示例
1.在有docker或者containerd主机测试,准备nginx配置文件,并配置动静分离:
[root@jenkins test-nginx]#pwd
/root/test-nginx
[root@jenkins test-nginx]#cat nginx.conf
error_log stderr;
events { worker_connections  1024; }
http {access_log /dev/stdout;server {listen 80 default_server;server_name localhost;location / {index index.html index.php;root /usr/share/nginx/html;}location ~ \.php$ {root           /usr/share/nginx/html;fastcgi_pass   127.0.0.1:9000;fastcgi_index  index.php;fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;include        fastcgi_params;}}}2.部署pause容器
[root@jenkins ~]nerdctl  pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.8
[root@jenkins ~]nerdctl  run -d  -p 80:80 --name pause-container-test \ registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.83.准备测试web页面:
[root@jenkins html]#ll
total 8
-rw-r--r-- 1 root root 35 Nov 23 15:31 index.html
-rw-r--r-- 1 root root 26 Nov 23 15:30 index.php
[root@jenkins html]#cat *
<h1>pause container web test</h1><?phpphpinfo();
?>4.部署nginx 容器,并使用paush容器网络:
[root@jenkins html]#
docker run -d --name nginx-container-test \
-v `pwd`/nginx.conf:/etc/nginx/nginx.conf \
-v `pwd`/html:/usr/share/nginx/html \
--net=container:pause-container-test \
nginx
5.部署php容器,并使用paush容器网络:
[root@jenkins html]#
docker  run -d --name php-container-test \
--net=container:pause-container-test \
-v `pwd`/html:/usr/share/nginx/html \
php:5.6.40-fpm
pause容器-验证:

init容器-简介

  • init容器的作用:

    1.可以为业务容器提前准备好业务容器的运行环境,比如将业务容器需要的配置文件提前生成并放在指定位置、检查数据权限或完整性、软件版本等基础运行环境。。 2.可以在运行业务容器之前准备好需要的业务数据,比如从OSS下载、或者从其它位置copy。

    3.检查依赖的服务是否能够访问。

  • init容器的特点: 1.一个pod可以有多个业务容器还能在有多个init容器,但是每个init容器和业务容器的运行环境都是隔离的。 2.init容器会比业务容器先启动。 3.init容器运行成功之后才会继续运行业务容器。 4.如果一个pod有多个init容器,则需要从上到下逐个运行并且全部成功,最后才会运行业务容器。 5.init容器不支持探针检测(因为初始化完成后就退出再也不运行了)。

[root@k8s-master1 case1-init-container]#cat 1-init-container.yaml 
kind: Deployment
#apiVersion: extensions/v1beta1
apiVersion: apps/v1
metadata:labels:app: myserver-myapp name: myserver-myapp-deployment-namenamespace: myserver
spec:replicas: 1 selector:matchLabels:app: myserver-myapp-frontendtemplate:metadata:labels:app: myserver-myapp-frontendspec:containers:- name: myserver-myapp-containerimage: nginx:1.20.0 #imagePullPolicy: AlwaysvolumeMounts:- mountPath: "/usr/share/nginx/html/myserver"name: myserver-data- name: tz-configmountPath: /etc/localtimeinitContainers:- name: init-web-dataimage: centos:7.9.2009command: ['/bin/bash','-c',"for i in `seq 1 10`;do echo '<h1>'$i web page at $(date +%Y%m%d%H%M%S) '<h1>' >> /data/nginx/html/myserver/index.html;sleep 1;done"]volumeMounts:- mountPath: "/data/nginx/html/myserver"name: myserver-data- name: tz-configmountPath: /etc/localtime- name: change-data-ownerimage: busybox:1.28command: ['/bin/sh','-c',"/bin/chmod 644 /data/nginx/html/myserver/* -R"]volumeMounts:- mountPath: "/data/nginx/html/myserver"name: myserver-data- name: tz-configmountPath: /etc/localtimevolumes:- name: myserver-datahostPath:path: /tmp/data/html- name: tz-confighostPath:path: /etc/localtime ---
kind: Service
apiVersion: v1
metadata:labels:app: myserver-myapp-servicename: myserver-myapp-service-namenamespace: myserver
spec:type: NodePortports:- name: httpport: 80targetPort: 80nodePort: 30080selector:app: myserver-myapp-frontend

Health Check

由发起者对容器进行周期性健康状态检测。

周期检测相当于人类的周期性体检

每次检测相当于人类每次体检的内容

[root@k8s-master1 case2-docker-container-healthy-check]#cat 1.docker-compose.yaml 
version: '3.6'
services:nginx-service:image: nginx:1.20.2 container_name: nginx-web1expose:- 80- 443ports:- "80:80"- "443:443"restart: alwayshealthcheck: #添加服务健康状态检查test: ["CMD", "curl", "-f", "http://localhost"]interval: 5s #健康状态检查的间隔时间,默认为30stimeout: 5s #单次检查的失败超时时间,默认为30sretries: 3 #连续失败次数默认3次,当连续失败retries次数后将容器置为unhealthy状态start_period: 60s #60s后每间隔interval的时间检查一次,连续retries次后才将容器置为unhealthy状态, 但是start_period时间内检查成功就认为是检查成功并装容器置于healthy状态
[root@k8s-master1 case2-docker-container-healthy-check]#cat 2.Dockerfile 
FROM nginx:1.20.2maintainer "jack 2973707860@qq.com"HEALTHCHECK --interval=5s --timeout=2s --retries=3 \CMD curl --silent --fail localhost:80 || exit 1

 

 

相关文章:

【模块一】kubernetes容器编排进阶实战之pod的调度流程,pause容器及init容器

pod的调度流程及常见状态 pod的调度流 pod的常见状态 Unschedulable&#xff1a;#Pod不能被调度&#xff0c;kube-scheduler没有匹配到合适的node节点 PodScheduled&#xff1a;#pod正处于调度中&#xff0c;在kube-scheduler刚开始调度的时候&#xff0c;还没有将pod分配…...

PySpark3:pyspark.sql.functions常见的60个函数

目录 一、常见的60个函数 1、col 2、lit 3、sum 4、avg/mean 5、count 6、max 7、min 8、concat 9、substring 10、lower 11、upper 12、trim 13、ltrim 14、rtrim 15、split 16、explode 17、collect_list 18、collect_set 19、asc 20、desc 21、when 2…...

Python操作neo4j库py2neo使用之创建和查询(二)

Python操作neo4j库py2neo使用之创建和查询&#xff08;二&#xff09; py2neo 创建操作 1、连接数据库 from py2neo import Graph graph Graph("bolt://100.100.20.55:7687", auth(user, pwd), nameneo4j)2、创建Node from py2neo import Node, Subgraph # 创建…...

力扣11.23

1964. 找出到每个位置为止最长的有效障碍赛跑路线 你打算构建一些障碍赛跑路线。给你一个 下标从 0 开始 的整数数组 obstacles &#xff0c;数组长度为 n &#xff0c;其中 obstacles[i] 表示第 i 个障碍的高度。 对于每个介于 0 和 n - 1 之间&#xff08;包含 0 和 n - 1&…...

golang实现TCP服务器与客户端的断线自动重连功能

1.服务端 2.客户端 生成服务端口程序: 生成客户端程序: 测试断线重连: 初始连接成功...

数据结构 (6)栈的应用举例

1. 递归调用 递归函数在执行时&#xff0c;会将每一层的函数调用信息&#xff08;包括局部变量、参数和返回地址&#xff09;存储在栈中。当递归函数返回时&#xff0c;这些信息会从栈中弹出&#xff0c;以便恢复之前的执行状态。栈的后进先出&#xff08;LIFO&#xff09;特性…...

谁的年龄最小(结构体专题)

题目描述 设计一个结构体类型&#xff0c;包含姓名、出生日期。其中出生日期又包含年、月、日三部分信息。输入n个好友的信息&#xff0c;输出年龄最小的好友的姓名和出生日期。 输入描述 首先输入一个整数n(1<n<10)&#xff0c;表示好友人数&#xff0c;然后输入n行&…...

【论文笔记】LLaVA-KD: A Framework of Distilling Multimodal Large Language Models

Abstract 大语言模型(Large Language Models, LLM)的成功&#xff0c;使得研究者为了统一视觉和语言的理解去探索多模态大预言模型(Multimodal Large Language Models, MLLM)。 但是MLLM庞大的模型和复杂的计算使其很难应用在资源受限的环境&#xff0c;小型MLLM(s-MLLM)的表现…...

M|大脑越狱

rating: 7.0 豆瓣: 7.6 上映时间: “2015” 类型: M悬疑 导演: 约瑟夫怀特 Joseph White 主演: 亚历山大欧文 Alexander Owen爱德华富兰克林 Edward Franklin 国家/地区: 英国 片长/分钟: 20分钟 M&#xff5c;大脑越狱 想法不错&#xff0c;但是逻辑比较一般。属于…...

数据库编程(sqlite3)

一&#xff1a;数据库分类 常用的数据库 大型数据库 &#xff1a;Oracle商业、多平台、关系型数据库功能最强大、最复杂、市场占比最高的商业数据库 中型数据库 &#xff1a;Server是微软开发的数据库产品&#xff0c;主要支持windows平台 小型数据库 : mySQL是一个小型关系型…...

【C语言】关键字详解

【C语言】关键字详解 文章目录 [TOC](文章目录) 前言一、char1.定义字符串类型2.定义字符类型 二、short三、int四、long五、signed六、unsigned七、float八、double九、struct、union、enum十、void1.void用于函数声明&#xff0c;没有返回值的函数&#xff0c;其类型为 void。…...

什么是计算机网络

什么是计算机网络&#xff1f; 计算机网络的定义计算机网络的分类按覆盖范围分类按拓扑结构分类按通信传输介质分类按信号频带占用方式分类 计算机网络的功能信息交换资源共享分布式处理 计算机网络的组成计算机网络的定义计算机网络的分类按覆盖范围分类按拓扑结构分类按通信传…...

【大数据学习 | Spark-Core】Spark的分区器(HashPartitioner和RangePartitioner)

之前学过的kv类型上面的算子 groupby groupByKey reduceBykey sortBy sortByKey join[cogroup left inner right] shuffle的 mapValues keys values flatMapValues 普通算子&#xff0c;管道形式的算子 shuffle的过程是因为数据产生了打乱重分&#xff0c;分组、排序、join等…...

CSS3_BFC(十二)

BFC MDN对BFC的解释&#xff1a;块格式化上下文&#xff08;Block Formating Context, BFC&#xff09;是web页面的可视CSS渲染的一部分&#xff0c;是块盒子的布局过程发生的区域&#xff0c;也是浮动元素与其他元素交互的区域。 1、开启BFC flow-root对内容的影响是最低的&am…...

C0032.在Clion中使用MSVC编译器编译opencv的配置方法

使用MSVC编译器编译opencv的配置方法...

微信小程序中会议列表页面的前后端实现

题外话&#xff1a;想通过集成腾讯IM来解决即时聊天的问题&#xff0c;如果含语音视频&#xff0c;腾讯组件一年5万起步&#xff0c;贵了&#xff01;后面我们改为自己实现这个功能&#xff0c;这里只是个总结而已。 图文会诊需求 首先是个图文列表界面 同个界面可以查看具体…...

WEB攻防-通用漏洞文件上传二次渲染.htaccess变异免杀

知识点&#xff1a; 1、文件上传-二次渲染 2、文件上传-简单免杀变异 3、文件上传-.htaccess妙用 4、文件上传-PHP语言特性 1、上传后门时&#xff0c;文件内容带.就不行 这时可以上传一个转换后的ip地址&#xff0c;ip地址对应网站包含后门代码 转换后的int会在访问的时候…...

vue实现列表滑动下拉加载数据

一、实现效果 二、实现思路 使用滚动事件监听器来检测用户是否滚动到底部&#xff0c;然后加载更多数据 监听滚动事件。检测用户是否滚动到底部。加载更多数据。 三、案例代码 <div class"drawer-content"><div ref"loadMoreTrigger" class&q…...

全面解析:HTML页面的加载全过程(四)--浏览器渲染之样式计算

主线程遍历得到的 DOM 树&#xff0c;依次为树中的每个节点计算出它最终的样式&#xff0c;称之为 Computed Style。 通过前面生成的DOM 树和 CSSOM 树&#xff0c;遍历 DOM 树&#xff0c;为每一个 DOM 节点&#xff0c;计算它的所有 CSS 属性&#xff0c;最后会得到一棵带有…...

#Verilog HDL# 谈谈代码中如何跨层次引用

目录 一 先谈作用问题 二 再谈跨层次问题 2.1 向下引用 2.2 向上引用 一 先谈作用问题 大多数编程语言都有一个称为作用域(scope)的特征,它定义了代码的某些部分对于变量和方法的可见性。作用域定义了一个命名空间,以避免同一命名空间内不同对象名称之间的冲突。 V…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

【网络安全】开源系统getshell漏洞挖掘

审计过程&#xff1a; 在入口文件admin/index.php中&#xff1a; 用户可以通过m,c,a等参数控制加载的文件和方法&#xff0c;在app/system/entrance.php中存在重点代码&#xff1a; 当M_TYPE system并且M_MODULE include时&#xff0c;会设置常量PATH_OWN_FILE为PATH_APP.M_T…...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...

(一)单例模式

一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...

群晖NAS如何在虚拟机创建飞牛NAS

套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...

VisualXML全新升级 | 新增数据库编辑功能

VisualXML是一个功能强大的网络总线设计工具&#xff0c;专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑&#xff08;如DBC、LDF、ARXML、HEX等&#xff09;&#xff0c;并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...

【Linux】Linux安装并配置RabbitMQ

目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的&#xff0c;需要先安…...

在golang中如何将已安装的依赖降级处理,比如:将 go-ansible/v2@v2.2.0 更换为 go-ansible/@v1.1.7

在 Go 项目中降级 go-ansible 从 v2.2.0 到 v1.1.7 具体步骤&#xff1a; 第一步&#xff1a; 修改 go.mod 文件 // 原 v2 版本声明 require github.com/apenella/go-ansible/v2 v2.2.0 替换为&#xff1a; // 改为 v…...

大数据驱动企业决策智能化的路径与实践

&#x1f4dd;个人主页&#x1f339;&#xff1a;慌ZHANG-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 一、引言&#xff1a;数据驱动的企业竞争力重构 在这个瞬息万变的商业时代&#xff0c;“快者胜”的竞争逻辑愈发明显。企业如何在复杂环…...