Kubernetes 容器类型 Init - pause - sidecar - app容器

news2024/12/28 10:31:53

目录

Kubernetes 的容器类型

Init 初始化容器

参考文档:Init 容器 | Kubernetes

使用 Init 容器的情况

案例:定义了一个具有 2 个 Init 容器的简单 Pod

你通过运行下面的命令启动 Pod:

发现两个Init容器都没有运行成功 

查看更多详细信息:

查看 Pod 内 Init 容器的日志:

如下为创建这些 Service 的配置文件:

创建 mydb 和 myservice 服务的命令:

这样你将能看到这些 Init 容器执行完毕,随后 my-app 的 Pod 进入 Running 状态:

Pause容器 

参考文档:K8S学习笔记之九-pause容器 - 南昌拌粉的成长 - 博客园 (cnblogs.com)

运行顺序:

pause容器--》把pod的公用的命名空间都创建好--》init容器---》app容器

Pause容器作用:

Sidecar容器

Sidecar 容器通常用于以下几个方面:

使用边车容器运行日志代理

参考文档:日志架构 | Kubernetes

传输数据流的边车容器

logrotate日志轮转

日志轮转的好处:

App容器

应用程序容器 --》 用于跑业务代码的容器 


Kubernetes 的容器类型

Init 初始化容器

参考文档:Init 容器 | Kubernetes

初始化(init)容器像常规应用容器一样,只有一点不同:初始化(init)容器必须在应用容器启动前运行完成。

Init 容器的运行顺序:一个初始化(init)容器必须在下一个初始化(init)容器开始前运行完成。

与普通容器不同之处:Init 容器不支持 lifecycle、livenessProbe、readinessProbe 和 startupProbe(探针类型), 因为它们必须在 Pod 就绪之前运行完成。

就像 --》兵马未动粮草先行

应用容器运行前必须先运行完成的一个或多个初始化容器。 

使用 Init 容器的情况

案例:定义了一个具有 2 个 Init 容器的简单 Pod

下面的例子定义了一个具有 2 个 Init 容器的简单 Pod。 第一个等待 myservice 启动, 第二个等待 mydb 启动。 一旦这两个 Init 容器都启动完成,Pod 将启动 spec 节中的应用容器。

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app.kubernetes.io/name: MyApp
spec:
  containers:
  - name: myapp-container
    image: busybox:1.28
    command: ['sh', '-c', 'echo The app is running! && sleep 3600']
  initContainers:
  - name: init-myservice
    image: busybox:1.28
    command: ['sh', '-c', "until nslookup myservice.$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace).svc.cluster.local; do echo waiting for myservice; sleep 2; done"]
  - name: init-mydb
    image: busybox:1.28
    command: ['sh', '-c', "until nslookup mydb.$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace).svc.cluster.local; do echo waiting for mydb; sleep 2; done"]

两个 2 个 Init 容器目的是解析某个域名,并输出,如果一直没有解析到会一直运行两个 Init 容器,如果能将这两个都解析出来,说明这个容器的基础工作就做好了。

你通过运行下面的命令启动 Pod:

[root@master pod]# vim init_service.yaml
[root@master pod]# kubectl apply -f init_service.yaml 
pod/myapp-pod created

发现两个Init容器都没有运行成功 

[root@master pod]# kubectl get pod -o wide
NAME                       READY   STATUS     RESTARTS   AGE    IP            NODE    NOMINATED NODE   READINESS GATES
my-nginx-575db987b-5h7xn   1/1     Running    0          166m   10.244.1.10   node1   <none>           <none>
my-nginx-575db987b-nwl5h   1/1     Running    0          166m   10.244.3.10   node3   <none>           <none>
my-nginx-575db987b-vqngh   1/1     Running    0          166m   10.244.2.10   node2   <none>           <none>
myapp-pod                  0/1     Init:0/2   0          25s    10.244.1.11   node1   <none>           <none>
redis                      1/1     Running    0          8h     10.244.2.5    node2   <none>           <none>
scnginx                    1/1     Running    0          21h    10.244.2.3    node2   <none>           <none>
[root@master pod]# 

查看更多详细信息:

[root@master pod]# kubectl describe -f init_service.yaml 

查看 Pod 内 Init 容器的日志:

kubectl logs myapp-pod -c init-myservice # 查看第一个 Init 容器
kubectl logs myapp-pod -c init-mydb      # 查看第二个 Init 容器

说明不能解析出来‘myservice.default.svc.cluster.local’

在这一刻,Init 容器将会等待至发现名称为 mydb 和 myservice 的服务。

如下为创建这些 Service 的配置文件:

---
apiVersion: v1
kind: Service
metadata:
  name: myservice
spec:
  ports:
  - protocol: TCP
    port: 80
    targetPort: 9376
---
apiVersion: v1
kind: Service
metadata:
  name: mydb
spec:
  ports:
  - protocol: TCP
    port: 80
    targetPort: 9377

创建 mydb 和 myservice 服务的命令:

[root@master pod]# kubectl apply -f service.yaml
service/myservice created
service/mydb created
[root@master pod]# 

这样你将能看到这些 Init 容器执行完毕,随后 my-app 的 Pod 进入 Running 状态:

[root@master pod]# kubectl get -f init_service.yaml 
NAME        READY   STATUS    RESTARTS   AGE
myapp-pod   1/1     Running   0          15m
[root@master pod]# 
[root@master pod]# kubectl get pod -o wide
NAME                       READY   STATUS    RESTARTS   AGE    IP            NODE    NOMINATED NODE   READINESS GATES
my-nginx-575db987b-5h7xn   1/1     Running   0          3h2m   10.244.1.10   node1   <none>           <none>
my-nginx-575db987b-nwl5h   1/1     Running   0          3h2m   10.244.3.10   node3   <none>           <none>
my-nginx-575db987b-vqngh   1/1     Running   0          3h2m   10.244.2.10   node2   <none>           <none>
myapp-pod                  1/1     Running   0          16m    10.244.1.11   node1   <none>           <none>
redis                      1/1     Running   0          8h     10.244.2.5    node2   <none>           <none>
scnginx                    1/1     Running   0          21h    10.244.2.3    node2   <none>           <none>
[root@master pod]# 

Pause容器 

参考文档:K8S学习笔记之九-pause容器 - 南昌拌粉的成长 - 博客园 (cnblogs.com)

Pause容器 全称infrastucture container(又叫infra)基础容器,作为init pod存在,其他pod都会从pause 容器中fork出来 ,在创建一个pod的时候,最先创建的容器

1、每个Pod里运行着一个特殊的被称之为Pause的容器,其他容器则为业务容器,这些业务容器共享Pause容器的网络栈和Volume挂载卷


2、因此他们之间通信和数据交换更为高效,在设计时我们可以充分利用这一特性将一组密切相关的服务进程放入同一个Pod中。


3、同一个Pod里的容器之间仅需通过localhost就能互相通信。

运行顺序:

pause容器--》把pod的公用的命名空间都创建好--》init容器---》app容器

Pause容器作用:

  1. 在单个Pod中协调多个容器之间的生命周期。当一个Pod中有多个容器时,这些容器可以通过"Pause"容器来实现同步启动、重启和关闭等操作。"Pause"容器的运行状态会直接影响整个Pod的生命周期。

  2. 通过"Pause"容器实现网络和命名空间的共享。Kubernetes中的Pod共享相同的网络和命名空间,这要求容器在同一个网络和命名空间中运行。"Pause"容器充当了这个角色,确保Pod中的其他容器能够正确地共享网络和命名空间。

Sidecar容器

Sidecar 容器是指与主要应用容器共享同一个 Pod 的辅助容器(app容器的配角)。它提供了额外的功能和资源,以增强或扩展主要应用容器的功能。

Sidecar 容器通常用于以下几个方面:

  1. 日志收集和处理:Sidecar 容器可以负责将主要应用容器生成的日志进行收集、聚合、格式化等操作,并将其发送到集中式的日志存储或处理系统中,以便进行监控和分析。

  2. 监控和指标收集:Sidecar 容器可以负责收集主要应用容器的性能指标、运行状态等信息,并将其发送到监控系统中,以进行实时监控和告警。

  3. 身份验证和授权:Sidecar 容器可以提供身份验证和授权服务,对主要应用容器进行访问控制和权限管理,确保只有经过认证和授权的请求能够访问主要应用容器。

  4. 代理和负载均衡:Sidecar 容器可以充当主要应用容器的代理,处理网络请求的转发和负载均衡,实现流量管理和请求分发的功能。

通过使用 Sidecar 容器,我们可以将不同的功能模块独立部署在不同的容器中,使得应用的各个组件可以独立于彼此进行扩展、更新和维护。同时,Sidecar 容器还可以提供更好的可观察性和可靠性,以及更灵活的部署和管理方式。

使用边车容器运行日志代理

参考文档:日志架构 | Kubernetes

你可以通过以下方式之一使用边车(Sidecar)容器:

  • 边车容器将应用程序日志传送到自己的标准输出。
  • 边车容器运行一个日志代理,配置该日志代理以便从应用容器收集日志。

传输数据流的边车容器

利用边车容器,写入到自己的 stdout 和 stderr 传输流, 你就可以利用每个节点上的 kubelet 和日志代理来处理日志。 边车容器从文件、套接字或 journald 读取日志。 每个边车容器向自己的 stdout 和 stderr 流中输出日志。

这种方法允许你将日志流从应用程序的不同部分分离开,其中一些可能缺乏对写入 stdout 或 stderr 的支持。重定向日志背后的逻辑是最小的,因此它的开销不大。 另外,因为 stdout 和 stderr 由 kubelet 处理,所以你可以使用内置的工具 kubectl logs

logrotate日志轮转

logrotate 日志轮转工具: linux系统自带这个程序不是一直在内存运行的守护进程

[root@node2 log]# vim /etc/logrotate.conf 

logrotate.conf 是logrotate的配置文件,它是通过计划任务定时启动logrotate去进行日志轮转

[root@scnode2 log]# cd /etc/logrotate.d/
[root@scnode2 logrotate.d]# ls
bootlog  chrony  firewalld  syslog  wpa_supplicant  yum
[root@scnode2 logrotate.d]# vim bootlog 

bootlog 配置文件的作用就是告诉logrotate按照它的要求去进行日志轮转

[root@scnode2 logrotate.d]# cat bootlog 
/var/log/boot.log
{
    missingok
    daily      #每台轮转
    copytruncate   
    rotate 7      #轮转保持7个
    notifempty
    #下面是添加项:
    dateext  #在日志文件的后面添加日期
    compress #在轮转的时候,进行压缩,节约磁盘空间
}
[root@scnode2 logrotate.d]# 

日志轮转的好处:


       防止一个日志文件过大,在对日志进行分析的时候,我们读取里面的某天的日志,就会很难去定位,并且需要查找的数据量特别大。

       因此我们是使用了日志轮转可以控制日志文件大小、方便管理和分析日志文件、并且降低日志读写的性能开销。我们网络传输日志文件也会比较快(日志文件比较小)。

App容器

应用程序容器 --》 用于跑业务代码的容器 

App容器是指承载应用程序的容器,也称为应用容器。它是一种虚拟化技术,用于隔离和管理应用程序及其依赖环境。

常见的App容器技术包括Docker、Kubernetes、OpenShift等。它们在云原生、微服务架构容器编排领域得到广泛应用,为应用程序的开发、部署和运行提供了便利和灵活性

       

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一些行业报告--From 艾瑞咨询

一些行业报告--From 艾瑞咨询 1 介绍2 机械臂行业研究 [From 艾瑞咨询 -- 中国工业机器人行业研究报告&#xff08;2023&#xff09;2.1 发展历程2.2 中国工业机器人相关政策2.3 产业链2.4 三大部分六大系统2.5 伺服&控制器 主要玩家 及 关键指标及难点2.6 减速机 主要玩家…

mysql中根据已有的表来创建新表的三种方式

mysql根据现有表创建新表 1、语法1&#xff1a;CREATE TABLE new_tbl LIKE orig_tbl; 1、1 根据departments表创建新表departments1 departments 表结果和表数据库如下 创建departments1如下 使用命令&#xff1a; CREATE TABLE departments1 LIKE departments; 这种语法&…

GEE:在地图上添加时间滑动条,以交互式可视化不同年份影像

作者:CSDN @ _养乐多_ 本文将介绍在Google Earth Engine(GEE)平台上的地图显示区域创建一个交互式界面,可以为用户添加一个时间滑动条,通过滑动条可以选择显示不同年份的遥感影像。 结果如下图所示, 文章目录 一、代码二、代码链接一、代码 // 使用滑块从图像集合中选…

Auto-Rig Pro 手指控制器骨骼(IK-FK)

选中手指控制器骨骼,在tool面板里看到snap IK-FK, IK-FK,还有snap all to IK 和 FK: 这些都是Auto-Rig Pro提供的一些工具&#xff0c;可以让您在IK&#xff08;反向动力学&#xff09;和FK&#xff08;正向动力学&#xff09;之间切换和同步。IK和FK是两种不同的绑定方式&…

43. 间断连续登录用户问题

文章目录 题目需求思路一实现一题目来源 题目需求 现有各用户的登录记录表&#xff08;login_events&#xff09;如下&#xff0c;表中每行数据为&#xff1a;一个用户何时登录了平台。 现要求统计各用户最长的连续登录天数&#xff0c;间断一天也算作连续&#xff0c;例如&a…

git安装及初步使用

git的安装 &#xff1a; 在CentOS 7.6环境下可以使用一条语句就能安装git yum -y install git如果上面命令包以下错误&#xff0c;说明权限不够 [leijiefl ~]$ yum -y install git Loaded plugins: fastestmirror You need to be root to perform this command.可以转换成ro…

神经网络学习小记录74——Pytorch 设置随机种子Seed来保证训练结果唯一

神经网络学习小记录74——Pytorch 设置随机种子Seed来保证训练结果唯一 学习前言为什么每次训练结果不同什么是随机种子训练中设置随机种子 学习前言 好多同学每次训练结果不同&#xff0c;最大的指标可能会差到3-4%这样&#xff0c;这是因为随机种子没有设定导致的&#xff0…

电源频率检测器/采用555时基电路的过流检测器电路设计

电源频率检测器 对于某些电子仪器和电气设备&#xff0c;对见六电源的频率有着一定的要求&#xff0c;电源频率高于或低于 50Hz&#xff0c;都会影响设备的正常工作&#xff0c;甚至造成仪器和设备的损坏。因此&#xff0c;对于此类设备需要装设电源频率检测装置&#xff0c;当…

Linux开发工具之【vim】

Linux开发工具之【vim】 文章目录&#xff1a; Linux开发工具之【vim】1. Linux软件包管理器yum1.1 查看软件1.2. 下载软件1.3 卸载软件 2. vim编辑器的使用2.1 vim常用模式2.2 vim基本操作2.3 vim命令模式命令集2.3.1 移动光标2.3.2 删除文字2.3.3 复制文本内容2.3.4 替换文本…

Openpose原理总结

Openpose是一种开源的实时多人姿态估计库&#xff0c;由卡耐基梅隆大学开发。它通过分析图像或视频中的人体关键点来估计人体的姿态&#xff0c;识别身体的各个部分&#xff0c;并推断出人体的姿势信息。 Openpose能够同时检测和跟踪多个人的姿态&#xff0c;可以用于人机交互、…

二.《泽诺尼亚》明文CALL

了解发包函数 1.一款网络游戏,必定是会发包的,对于PC端而言,想要进行网络通讯,就拿最简单的CS架构而言势必会调用win32 API函数或底层函数 2.这里列举出常用的API如:send sendto wsasend wspsend 3.有一些正向开发经验的同学,肯定是见过这几个函数的 4.接下来我们来看看这款…

JavaEE——介绍并简单使用线程池

文章目录 一、 什么是线程池二、Java中线程池的运用1. 创建线程池中的问题2. 标准库中线程池的使用 三、自主实现一个简单的线程池 一、 什么是线程池 所谓线程池&#xff0c;其实和字符串常量池&#xff0c;数据库连接池十分相似&#xff0c;就是设定一块区域&#xff0c;提前…

打印机常见故障解决参考方法

1、首先检查打印机电源线连接是否可靠或电源指示灯是否点亮&#xff0c;然后再次打印文件&#xff0c;仍不能打印&#xff0c;请看下一步。 2、检查打印机与计算机之间的信号传输线是否可靠连接&#xff0c;检查并重新连接&#xff0c;如果打印机仍不能打印&#xff0c;请看下一…

Java线程Thread类常用方法

文章目录 1. start()&#xff1a;启动线程&#xff0c;使其执行run()方法中的代码。2. run()&#xff1a;线程的执行逻辑&#xff0c;需要在该方法中定义线程要执行的代码。3. sleep(long millis)&#xff1a;使当前线程暂停指定的毫秒数&#xff0c;进入阻塞状态。4. join()&a…

【C++】红黑树封装map和set

文章目录 一、map和set源码剖析二、红黑树的迭代器1.begin()与end()2.operator()与operator--() 三、set的模拟实现四、map的模拟实现五、完整代码实现1.RBTree.h2.set.h3.map.h5.Test.cpp 一、map和set源码剖析 我们知道&#xff0c;map和set的底层是红黑树&#xff0c;但是我…

如何用Python快速搭建一个文件传输服务

当我的朋友需要把他电脑上面的文件从他的电脑传递到我电脑上的时候&#xff0c;我只需要启动服务 启动服务&#xff01; 他打开web界面 就能把文件传递到我电脑上&#xff08;还能够实时显示进度&#xff09; 文件就已经在我电脑上的uploads文件夹里面了 项目结构如下 templat…

python浮点运算不准确

1.问题 1.12.2的最后结果并不等于3.3 2. 解决方法 错误示范 引入了Decimal计算&#xff0c;但是计算类型是float型&#xff0c;依然计算不准确 正确解决方法 把类型转化为字符串引入计算

动手实战 | 使用 Transformers 包进行概率时间序列预测

最近使用深度学习进行时间序列预测而不是经典方法涌现出诸多创新。本文将为大家演示一个基于 HuggingFace Transformers 包构建的概率时间序列预测的案例。 概率预测 通常&#xff0c;经典方法针对数据集中的每个时间序列单独拟合。然而&#xff0c;当处理大量时间序列时&…

spring中的扩展点解析以及实践使用

文章目录 1、ApplicationContextInitializer2、BeanDefinitionRegistryPostProcessor3、BeanFactoryPostProcessor4、InstantiationAwareBeanPostProcessor5、SmartInstantiationAwareBeanPostProcessor6、BeanFactoryAware7、ApplicationContextAwareProcessor8、BeanNameAwar…

查找文件所在的具体位置

Linux Command 命令: find – walk a file hierarchy (遍历文件层次结构) ;DESCRIPTION 描述: 在指定目录下查找文件和目录, 可以使用不同的选项来过滤和限制查找的结果 ; Grammar Format $ find <在哪个路径下查找> <可选参数…> 常用选项 -name <pattern>…