k8s:实现一个pod两个容器

# 制作两个容器的镜像

通过以下Dockerfile创建一个镜像

cd /chz/install/docker
vim Dockerfile
<<<< 内容如下:
FROM centosRUN sed -i -e "s|mirrorlist=|#mirrorlist=|g" /etc/yum.repos.d/CentOS-*
RUN sed -i -e "s|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g" /etc/yum.repos.d/CentOS-*
RUN yum install -y epel-release
RUN yum install -y net-tools telnet wget vim nginxRUN echo "alias ll='ls -al'" >> /etc/profileRUN mkdir -p /install/java
RUN cd /install/java && wget https://download.java.net/java/GA/jdk22.0.1/c7ec1332f7bb44aeba2eb341ae18aca4/8/GPL/openjdk-22.0.1_linux-x64_bin.tar.gz
RUN cd /install/java && tar zxvf openjdk-22.0.1_linux-x64_bin.tar.gz
RUN echo 'export JAVA_HOME=/install/java/jdk-22.0.1' >> /etc/profile
RUN echo 'export PATH=$JAVA_HOME/bin:$PATH' >> /etc/profileENTRYPOINT ["nginx", "-g", "daemon off;"]
>>>>

创建镜像,注意这个镜像的【nginx】端口默认是【80】

docker build -t my-centos-nginx-80 .

上传镜像

docker tag my-centos-nginx-80 192.168.44.228:5000/my-centos-nginx-80
docker push 192.168.44.228:5000/my-centos-nginx-80

下面制作一个【nginx】端口为【8080】的镜像
先通过【192.168.44.228:5000/my-centos-nginx-80】镜像启动一个容器

docker run -p80:80 --rm --name=my-centos-nginx-80 192.168.44.228:5000/my-centos-nginx-80

注意上面的【–rm】参数很重要,没有这个参数可能会影响到后面pod的创建
连接上这个容器

docker exec -it my-centos-nginx-80 bash

修改容器里面的nginx的配置文件,将默认修改为【8080】

vim /etc/nginx/nginx.conf
<<<< 修改以下两行,将端口从【80】修改为【8080】
listen       8080 default_server;
listen       [::]:8080 default_server;
>>>>

不要关闭【80】端口的那个【docker run】进程,新开一个窗口,执行以下命令将该容器提交成一个新的镜像:

docker commit my-centos-nginx-80 my-centos-nginx-8080

上传镜像

docker tag my-centos-nginx-8080 192.168.44.228:5000/my-centos-nginx-8080
docker push 192.168.44.228:5000/my-centos-nginx-8080

# 部署k8s的deployment

生成deployment的yaml文件

cd /chz/install/k8s/oneDeployTwoPod
vim deploy.yaml
<<<< 内容如下
apiVersion: apps/v1
kind: Deployment
metadata:name: my-centos-deploy
spec:replicas: 1selector:matchLabels:app: my-centostemplate:metadata:labels:app: my-centosspec:containers:- name: my-centos-nginx-80image: 192.168.44.228:5000/my-centos-nginx-80        # 80端口的镜像ports:- containerPort: 80hostPort: 80volumeMounts:- name: my-centos-logs mountPath: /chz_logs- name: my-centos-nginx-8080image: 192.168.44.228:5000/my-centos-nginx-8080      # 8080端口的镜像ports:- containerPort: 8080hostPort: 8080volumeMounts:- name: my-centos-logs mountPath: /chz_logsvolumes:- name: my-centos-logsemptyDir: {}
>>>>

部署deployment

kubectl apply -f deploy.yaml

查看这个pod的容器是否正常
执行【kubectl get pod】
在这里插入图片描述

执行【docker ps | grep -i my-centos-nginx】
在这里插入图片描述

有点奇怪,镜像显示都是【192.168.44.228:5000/my-centos-nginx-8080】,但后面的测试会显示两个容器是正常的,先不管它。

# 测试这两个容器

连接【my-centos-nginx-80】

docker exec -it cb398b2f85cf bash

执行

netstat -lnp

在这里插入图片描述

可以看到【8080】那个进程也在这里。可以用【curl http://localhost:80】和【curl http://localhost:8080】去测试他们,可以发现同一个pod下的多个容器网络是相通的。
进入目录【/】创建一个文件【80.log】

cd /
echo 1 >> 80.log

在这里插入图片描述

进入目录【/chz_logs】创建一个文件【80.log】

cd /chz_logs
echo 1 >> 80.log

在这里插入图片描述

下面进入【my-centos-nginx-8080】看能不能看到这两个文件:

cd /
ls -al

在这里插入图片描述

在【/】目录下没有【my-centos-nginx-80】容器里面创建的【/80.log】文件

cd /chz_logs
ls -al

在这里插入图片描述

在【/chz_logs】目录下可以看到【my-centos-nginx-80】容器里面创建的【/chz_logs/80.log】文件。
这是因为【/】目录是两个容器各自内部的目录,而【/chz_logs】目录两个容器都是通过【my-centos-logs】volume mount过来的(注意看yaml文件)

# 总结

当一个pod里面创建多个容器里面,多个容器的网络是相通的,但是存储是各自独立的。
但是通过将多个容器mount到同一个volume的方式可以让多个容器访问到同一个物理目录的文件。
我们可以利用这一点,让一个pod里面其中一个容器是主任务容器,产生日志文件到mount的目录里面。另一个容器是一个filebeat容器扫描主任务容器产生日志文件的目录(mount同一个volume),这样就可以采集pod里面的日志到elk里面了。

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

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

相关文章

Spring Boot框架基础

文章目录 1 Spring Boot概述2 Spring Boot入门2.1 项目搭建2.2 入门程序 3 数据请求与响应3.1 数据请求3.2 数据响应 4 分层解耦4.1 三层架构4.2 控制反转4.3 依赖注入 5 参考资料 1 Spring Boot概述 Spring是Java EE编程领域的一个轻量级开源框架&#xff0c;是为了解决企业级…

Python 机器学习 基础 之 处理文本数据 【处理文本数据/用字符串表示数据类型/将文本数据表示为词袋】的简单说明

Python 机器学习 基础 之 处理文本数据 【处理文本数据/用字符串表示数据类型/将文本数据表示为词袋】的简单说明 目录 Python 机器学习 基础 之 处理文本数据 【处理文本数据/用字符串表示数据类型/将文本数据表示为词袋】的简单说明 一、简单介绍 二、处理文本数据 三、用…

IDEA2023.1.4配置springboot项目

新建“Spring Initializr”项目 勾选以下三个依赖项即可。 springboot分为代码层、资源层和测试层。 代码层 根目录&#xff1a;src/main/java 入口启动类及程序的开发目录。在这个目录下进行业务开发、创建实体层、控制器层、数据连接层等。 资源层 根目录&#xff1a;src…

喜讯!云起无垠入选《LLM驱动数字安全2024—AI安全系列报告》

近日&#xff0c;国内领先的数字化领域第三方服务机构数世咨询&#xff0c;发布了《LLM驱动数字安全2024—AI安全系列报告》。该报告深入统计分析了国内在LLM研发或应用方面具有实力的数字安全供应商&#xff0c;并通过报告和雷达图的形式&#xff0c;直观展示了这些供应商在数…

vue2的form利用插槽修改错误提示UI

1. 需求 很多时候我们使用el-form想修改下错误提示的UI&#xff0c;比如table中使用form校验这类场景下错误提示的UI调整就非常重要。 2. 了解文档 Form-Item Scoped Slot name说明error自定义表单校验信息的显示方式&#xff0c;参数为 { error } 3.实际使用 html里使用…

抽象,自定义函数,递归

6.1懒惰是一种美德 如果你 在一个地方编写了一些代码&#xff0c;但需要在另一个地方再次使用&#xff0c;该如何办呢&#xff1f; 假设你编写了一段代码&#xff0c;它计算一些斐波那契数&#xff08;一种数列&#xff0c;其中每个数都是前两个数的和&#xff09;。 现在的…

笔记96:前馈控制 + 航向误差

1. 回顾 对于一个 系统而言&#xff0c;结构可以画作&#xff1a; 如果采用 这样的控制策略&#xff0c;结构可以画作&#xff1a;&#xff08;这就是LQR控制&#xff09; 使用LQR控制器&#xff0c;可以通过公式 和 构建一个完美的负反馈系统&#xff1b; a a 但是有上…

解密智慧校园解决方案:赋能数字化教育的未来

在当今数字化时代&#xff0c;智慧校园解决方案正以惊人的速度改变着教育界的面貌。随着科技的快速发展&#xff0c;数字化教育已经逐渐成为现代教育的核心。智慧校园解决方案作为一个集技术、教育和创新于一体的综合性项目&#xff0c;为学校提供了许多机遇和挑战。本文将揭示…

遇见桂林山水画廊,深层互联自动讲解耳机走进漓江

遇见山水&#xff0c;听懂山水。由深层互联独家打造&#xff0c;桂林漓江山水画廊导览工程&#xff0c;于不久前正式启动&#xff0c;声情并茂的真人语音引导着游客&#xff0c;走进有声有色的山水画卷中。 桂林山水甲天下&#xff0c;得天独厚的自然景观&#xff0c;奇幻瑰丽…

掌握4种常见电脑视频压缩方法,轻松解决空间危机

在现今数字化的时代&#xff0c;视频成为我们生活和工作中不可或缺的一部分。然而&#xff0c;随着高清、超高清视频的普及&#xff0c;视频文件的大小也随之增大&#xff0c;给存储、传输和分享带来了一定的挑战。为了克服这一问题&#xff0c;电脑视频压缩成为一项关键的技术…

SwiftUI获取用户的位置信息(CLLocationManager,CLLocationManagerDelegate)

本篇文章将会介绍一下在SwiftUI中如何通过CorLocation框架获取用户的位置信息&#xff0c;因为获取位置信息属于用户的隐私信息&#xff0c;所以需要在Info.plist文件里面加上访问位置权限的说明。 关于位置信息&#xff0c;可以请求两种级别的许可&#xff1a;always和when i…

视频剪辑去水印软件推荐 视频剪辑去水印方法

不会去水印&#xff0c;很难做好视频剪辑。选对软件、掌握去水印的方法&#xff0c;是每个剪辑师必须经历的过程。真正擅长视频剪辑去水印的软件&#xff0c;一定具备多种去水印功能。剪辑师可以根据素材的具体情况&#xff0c;选择最恰当的去水印方法。有关视频剪辑去水印软件…

JimuReport 积木报表 v1.7.5 版本发布,免费的低代码报表

项目介绍 一款免费的数据可视化报表工具&#xff0c;含报表和大屏设计&#xff0c;像搭建积木一样在线设计报表&#xff01;功能涵盖&#xff0c;数据报表、打印设计、图表报表、大屏设计等&#xff01; Web 版报表设计器&#xff0c;类似于excel操作风格&#xff0c;通过拖拽完…

【日记】遇到了一个很奇怪的大爷(845 字)

正文 花了昨天和今天两天时间&#xff0c;把数据转移完了。这块 2T 的硬盘可以光荣退休了。目前是没什么存储焦虑了。 农发行净开发一些垃圾系统。今天没什么业务&#xff0c;但跟 ActiveX 斗智斗勇了一整天&#xff0c;最后实在搞不过 IE 浏览器。我也懒得管了&#xff0c;又不…

禁用layui树形表格的多选框checkbox

1. 背景 在使用树形表格渲染数据时&#xff0c;需要对数据进行批量操作。相对于选中数据后&#xff0c;再做错误提示。直接把数据的多选框禁用掉更加直观。 2. 实现 DisabledTableCheckBox: () > {// 获取所有行 var tableElem $(".layui-table-fixed-l");var …

一脉阳光上市圆梦:销售成本高昂,两大创始人的行贿往事与屡屡被罚

《港湾商业观察》施子夫 2024年6月7日&#xff0c;江西一脉阳光集团股份有限公司&#xff08;以下简称&#xff0c;一脉阳光&#xff09;将正式在港交所主板挂牌上市&#xff08;以下简称&#xff0c;一脉阳光&#xff1b;股票代码02522.HK&#xff09;&#xff0c;公司预计发…

Vue3【七】setup的语法糖setup简写方法

Vue3【七】setup的语法糖setup简写方法 Vue3【七】setup的语法糖setup简写方法 使用script标签式写法称为setup语法糖 组件名称默认位文件名 export 的内容可以省略 案例截图 案例目录 案例代码 Person.vue <template><div class"person"><h1>我…

这才是计科之 Onix XV6 源码分析(1、XV6-x86的启动)

这才是计科之 Onix & XV6 源码分析&#xff08;1、XV6-x86的启动&#xff09; 前言 Onix是一款相对于XV6来说功能更为健全的单核OS&#xff0c;由于功能更加完善&#xff0c;Onix也更加复杂。代码阅读起来会比较绕。 XV6是一款简单易读的多核操作系统&#xff0c;但其功…

【JMeter接口测试工具】第一节.JMeter简介和安装【入门篇】

文章目录 前言一、JMeter简介 1.1 JMeter基本介绍 1.2 JMeter优缺点二、JMeter安装 2.1 JMeter安装步骤 2.2 JMeter环境配置三、项目介绍 3.1 项目简介 3.2 API接口清单总结 前言 一、JMeter简介 1.1 JMeter基本介绍 JMeter 是 Apache 组织使用…

java---程序逻辑控制(详解)

目录 一、概述二、顺序结构三、分支结构3.1 if语句3.1.1 语法格式13.1.2 语法格式23.1.3 语法格式3 3.2 练习3.2.1 判断一个数字是奇数还是偶数3.2.2 判断一个数字是正数&#xff0c;负数&#xff0c;还是零3.2.3 判断一个年份是否为闰年 3.3.switch语句 四、循环结构4.1 while…