【模块一】kubernetes容器编排进阶业务容器化案例
Kubernetes 实战案例
Kubernetes实战案例-规划(基于nerdctl + buildkitd+containerd构建容器镜像)
-
业务容器化优势:
① 提高资源利用率、节约部署IT成本。
② 提高部署效率,基于kubernetes实现微服务的快速部署与交付、容器的批量调度与秒级启动。
③ 实现横向扩容、灰度部署、回滚、链路追踪、服务治理等。
④ 可根据业务负载进行自动弹性伸缩。
⑤ 容器将环境和代码打包在镜像内,保证了测试与生产运行环境的一致性。
⑥ 紧跟云原生社区技术发展的步伐,不给公司遗留技术债,为后期技术升级夯实了基础。
⑦ 为个人储备前沿技术,提高个人level。
业务容器化案例之一: 业务规划及镜像分层构建
#构建Centos基础镜像
[root@k8s-master1 centos]#cat Dockerfile
#自定义Centos 基础镜像
FROM centos:7.9.2009
MAINTAINER kun 1710269083@qq.com
ADD CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo
ADD epel-7.repo /etc/yum.repos.d/epel.repo
ADD filebeat-7.12.1-x86_64.rpm /tmp
RUN cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup && yum repolist && yum install -y /tmp/filebeat-7.12.1-x86_64.rpm vim wget tree lrzsz gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop && rm -rf /etc/localtime /tmp/filebeat-7.12.1-x86_64.rpm && ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && useradd nginx -u 2088
[root@k8s-master1 centos]#cat build-command.sh
#!/bin/bash/usr/local/bin/nerdctl build -t harbor.chendd.fun/images/centos:7.9.2009 .
/usr/local/bin/nerdctl push harbor.chendd.fun/images/centos:7.9.2009#构建jdk—1.8.212基础镜像
[root@k8s-master1 jdk-1.8.212]#cat Dockerfile
#JDK Base Image
FROM harbor.chendd.fun/mageimages/centos:7.9.2009
#FROM centos:7.9.2009MAINTAINER kun "1710269083@qq.com"ADD jdk-8u212-linux-x64.tar.gz /usr/local/src/
RUN ln -sv /usr/local/src/jdk1.8.0_212 /usr/local/jdk
ADD profile /etc/profileENV JAVA_HOME /usr/local/jdk
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/:$JRE_HOME/lib/
ENV PATH $PATH:$JAVA_HOME/bin
[root@k8s-master1 jdk-1.8.212]#cat build-command.sh
#!/bin/bash
#docker build -t harbor.chendd.fun/pub-images/jdk-base:v8.212 .
#sleep 1
#docker push harbor.chendd.fun/pub-images/jdk-base:v8.212nerdctl build -t harbor.chendd.fun/pub-images/jdk-base:v8.212 .nerdctl push harbor.chendd.fun/pub-images/jdk-base:v8.212#构建nginx:1.22基础镜像
[root@k8s-master1 nginx-base]#cat Dockerfile
#Nginx Base Image
FROM harbor.chendd.fun/mageimages/centos:7.9.2009 MAINTAINER kun@kun.netRUN yum install -y vim wget tree lrzsz gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop
ADD nginx-1.22.0.tar.gz /usr/local/src/
RUN cd /usr/local/src/nginx-1.22.0 && ./configure && make && make install && ln -sv /usr/local/nginx/sbin/nginx /usr/sbin/nginx &&rm -rf /usr/local/src/nginx-1.22.0.tar.gz
[root@k8s-master1 nginx-base]#cat build-command.sh
#!/bin/bash
#docker build -t harbor.magedu.net/pub-images/nginx-base:v1.18.0 .
#sleep 1
#docker push harbor.magedu.net/pub-images/nginx-base:v1.18.0nerdctl build -t harbor.chendd.fun/pub-images/nginx-base:v1.22.0 .nerdctl push harbor.chendd.fun/pub-images/nginx-base:v1.22.0
业务容器化案例之二: Nginx+Tomcat+NFS实现动静分离
# 构建dockerfile 业务容器tomcat
[root@k8s-master1 tomcat-app1]#cat Dockerfile
#tomcat web1
FROM harbor.chendd.fun/pub-images/tomcat-base:v8.5.43 ADD catalina.sh /apps/tomcat/bin/catalina.sh
ADD server.xml /apps/tomcat/conf/server.xml
#ADD myapp/* /data/tomcat/webapps/myapp/
ADD app1.tar.gz /data/tomcat/webapps/app1/
ADD run_tomcat.sh /apps/tomcat/bin/run_tomcat.sh
#ADD filebeat.yml /etc/filebeat/filebeat.yml
RUN chown -R nginx.nginx /data/ /apps/
#ADD filebeat-7.5.1-x86_64.rpm /tmp/
#RUN cd /tmp && yum localinstall -y filebeat-7.5.1-amd64.debEXPOSE 8080 8443CMD ["/apps/tomcat/bin/run_tomcat.sh"]
[root@k8s-master1 tomcat-app1]#bash build-command.sh v1# 构建dockerfile 业务容器nginx
[root@k8s-master1 nginx]#cat Dockerfile
#Nginx 1.22.0
FROM harbor.chendd.fun/pub-images/nginx-base:v1.22.0 ADD nginx.conf /usr/local/nginx/conf/nginx.conf
ADD app1.tar.gz /usr/local/nginx/html/webapp/
ADD index.html /usr/local/nginx/html/index.html#静态资源挂载路径
RUN mkdir -p /usr/local/nginx/html/webapp/static /usr/local/nginx/html/webapp/images EXPOSE 80 443CMD ["nginx"]
[root@k8s-master1 nginx]#cat build-command.sh
#!/bin/bash
TAG=$1
#docker build -t harbor.chendd.fun/magedu/nginx-web1:${TAG} .
#echo "镜像构建完成,即将上传到harbor"
#sleep 1
#docker push harbor.chendd.fun/magedu/nginx-web1:${TAG}
#echo "镜像上传到harbor完成"nerdctl build -t harbor.chendd.fun/magedu/nginx-web1:${TAG} .nerdctl push harbor.chendd.fun/magedu/nginx-web1:${TAG}[root@k8s-master1 nginx]#bash build-command.sh v1
k8s资源配置
#tomcat资源清单
[root@k8s-master1 tomcat-app1]#cat tomcat-app1.yaml
kind: Deployment
#apiVersion: extensions/v1beta1
apiVersion: apps/v1
metadata:labels:app: magedu-tomcat-app1-deployment-labelname: magedu-tomcat-app1-deploymentnamespace: magedu
spec:replicas: 1selector:matchLabels:app: magedu-tomcat-app1-selectortemplate:metadata:labels:app: magedu-tomcat-app1-selectorspec:containers:- name: magedu-tomcat-app1-containerimage: harbor.chendd.fun/magedu/tomcat-app1:v1#command: ["/apps/tomcat/bin/run_tomcat.sh"]imagePullPolicy: IfNotPresent#imagePullPolicy: Alwaysports:- containerPort: 8080protocol: TCPname: httpenv:- name: "password"value: "123456"- name: "age"value: "18"#resources:# limits:# cpu: 1# memory: "512Mi"# requests:# cpu: 500m# memory: "512Mi"volumeMounts:- name: magedu-imagesmountPath: /usr/local/nginx/html/webapp/imagesreadOnly: false- name: magedu-staticmountPath: /usr/local/nginx/html/webapp/staticreadOnly: falsevolumes:- name: magedu-imagesnfs:server: 10.0.0.113path: /data/k8sdata/magedu/images- name: magedu-staticnfs:server: 10.0.0.113path: /data/k8sdata/magedu/static
# nodeSelector:
# project: magedu
# app: tomcat
---
kind: Service
apiVersion: v1
metadata:labels:app: magedu-tomcat-app1-service-labelname: magedu-tomcat-app1-servicenamespace: magedu
spec:type: NodePortports:- name: httpport: 80protocol: TCPtargetPort: 8080nodePort: 30092selector:app: magedu-tomcat-app1-selector#nginx资源清单
[root@k8s-master1 nginx]#cat nginx.yaml
kind: Deployment
apiVersion: apps/v1
metadata:labels:app: magedu-nginx-deployment-labelname: magedu-nginx-deploymentnamespace: magedu
spec:replicas: 1selector:matchLabels:app: magedu-nginx-selectortemplate:metadata:labels:app: magedu-nginx-selectorspec:containers:- name: magedu-nginx-containerimage: harbor.chendd.fun/magedu/nginx-web1:v1#command: ["/apps/tomcat/bin/run_tomcat.sh"]#imagePullPolicy: IfNotPresentimagePullPolicy: Alwaysports:- containerPort: 80protocol: TCPname: http- containerPort: 443protocol: TCPname: httpsenv:- name: "password"value: "123456"- name: "age"value: "20"resources:limits:cpu: 500mmemory: 512Mirequests:cpu: 500mmemory: 256MivolumeMounts:- name: magedu-imagesmountPath: /usr/local/nginx/html/webapp/imagesreadOnly: false- name: magedu-staticmountPath: /usr/local/nginx/html/webapp/staticreadOnly: falsevolumes:- name: magedu-imagesnfs:server: 10.0.0.113path: /data/k8sdata/magedu/images - name: magedu-staticnfs:server: 10.0.0.113path: /data/k8sdata/magedu/static#nodeSelector:# group: magedu---
kind: Service
apiVersion: v1
metadata:labels:app: magedu-nginx-service-labelname: magedu-nginx-servicenamespace: magedu
spec:type: NodePortports:- name: httpport: 80protocol: TCPtargetPort: 80nodePort: 30090- name: httpsport: 443protocol: TCPtargetPort: 443nodePort: 30091selector:app: magedu-nginx-selector
测试结果
[root@k8s-master1 nginx]#kubectl get -n magedu pod,svc -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/magedu-nginx-deployment-dc6b88d87-krtw7 1/1 Running 0 4h34m 10.200.107.194 10.0.0.113 <none> <none>
pod/magedu-tomcat-app1-deployment-5866b5677-l74xs 1/1 Running 0 5h12m 10.200.107.196 10.0.0.113 <none> <none>NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
service/magedu-nginx-service NodePort 10.100.177.90 <none> 80:30090/TCP,443:30091/TCP 4h34m app=magedu-nginx-selector
service/magedu-tomcat-app1-service NodePort 10.100.13.0 <none> 80:30092/TCP 5h12m app=magedu-tomcat-app1-selector
业务容器化案例之二: Nginx+Tomcat+NFS实现动静分离
Nginx 基础镜像制作
Nginx业务镜像制作
Nginx业务镜像测试
在kubernetes环境运行nginx
JDK基础镜像制作
tomcat基础镜像制作
tomcat业务镜像app1制作
在kubernetes环境运行tomcat
在kubernetes中nginx+tomcat实现动静分离
基于NFS实现数据共享
在后端服务生成数据并访问验证
相关文章:

【模块一】kubernetes容器编排进阶业务容器化案例
Kubernetes 实战案例 Kubernetes实战案例-规划(基于nerdctl buildkitdcontainerd构建容器镜像) 业务容器化优势: ① 提高资源利用率、节约部署IT成本。 ② 提高部署效率,基于kubernetes实现微服务的快速部署与交付、容器的批量调度与秒级启动。 ③…...

可视化建模以及UML期末复习篇----相关软件安装
作为一个过来人,我的建议是别过来。 一、可视化建模 <1>定义: 官方:一种使用图形符号来表示系统结构和行为的建模技术。 我:其实说白了就是把工作流程用图形画出来。懂不? <2>作用: 提高理解和分析复杂系统的能力。促…...

Appflyer记录卸载事件
Appflyer官方文档 1.原理 1.AppsFlyer每天向Firebase Cloud Messaging(FCM)和 Apple Push Notification Services(APNS)发送一次API请求。 2.然后FCM和APNS会发送一条静默推送消息,用于判断用户设备上是否仍装有相关应…...

JDK17 AbstractQueuedSynchronizer 二 条件队列
条件队列 同步队列中的线程是为了争抢锁,而条件队列中的线程是主动释放锁,挂起自己,等条件满足时被别的线程唤醒,继续工作。 AQS里只有1个同步队列,但可以有多个等待队列,每个等待队列对应一个ConditionO…...
8 设计模式之简单工厂模式
设计模式是软件开发中的一套通用解决方案,而简单工厂模式则是最基础、最常用的一种创建型模式。在这篇博客中,我将为大家详细介绍简单工厂模式的概念、优缺点,以及通过一个饮料制作的案例,帮助大家更好地理解和应用这种模式。 一、…...

计算机的错误计算(一百六十九)
摘要 探讨 MATLAB 中一个不动点的计算精度问题。 不动点是一类特殊的循环迭代。它有形式 例1. 已知迭代[1] 计算 显然,每个 均为 0.5 . 下面看看 MATLAB 的计算结果。不妨不用循环语句,直接用算术表达式表示 这时计算结果在如下图片: …...

Android 图形系统之三:SurfaceControl
在 Android 系统中,SurfaceControl 是一个关键的类,用于管理应用窗口和屏幕上的显示内容。它与 SurfaceFlinger 紧密交互,通过 BufferQueue 提供高效的图形缓冲区管理能力。SurfaceControl 是 Android 的显示架构中不可或缺的部分,…...

Laravel8.5+微信小程序实现京东商城秒杀方案
一、商品秒杀涉及的知识点 鉴权策略封装掊口访问频次限制小程序设计页面防抖接口调用订单创建事务使用超卖防御 二、订单库存系统方案(3种) 下单减库存 优点是库存和订单的强一致性,商品不会卖超,但是可能导致恶意下单ÿ…...

Makefile 入门指南:构建自动化编译流程
个人主页:chian-ocean 文章专栏 前言 make 和 Makefile 是编译和构建软件项目时非常常用的工具和文件,它们通常配合使用来自动化项目的编译过程。 make 定义:make 是一个构建自动化工具,用于根据项目文件的依赖关系自动完成编译…...
C#热更原理与HybridCLR
一、Mono的诞生 在Mono之前,C#虽然很好,但是只在windows家族平台上使用,就这点C#与Java就无法比。于是微软公司向ECMA申请将C#作为一种标准。在2001年12月,ECMA发布了ECMA-334 C#语言规范。C#在2003年成为一个ISO标准(ISO/IEC 23270)。意味着只要你遵守CLI(Common Lang…...

里氏替换原则:Java面向对象设计的基石
在面向对象编程(OOP)中,继承是一个强大的工具,它允许我们创建新的类(子类)来复用和扩展现有类(父类)的功能。然而,继承也带来了复杂性,特别是在确保子类能够正…...

恒创科技:服务器操作系统和客户端操作系统之间的区别
客户端操作系统和服务器操作系统是两种不同的操作系统,旨在满足计算机网络环境中的特定目的。虽然每种类型的操作系统在基本功能方面都有一些相似之处,但它们针对不同的用例进行了优化,并具有针对其特定角色量身定制的特定功能。 什么是服务器…...

做异端中的异端 -- Emacs裸奔之路4: 你不需要IDE
确切地说,你不需要在IDE里面编写或者阅读代码。 IDE用于Render资源文件比较合适,但处理文本,并不划算。 这的文本文件,包括源代码,配置文件,文档等非二进制文件。 先说说IDE带的便利: 函数或者变量的自动…...

Unity3d C# 摄像头检测敌方单位(目标层级)并在画面中标注(含源码)
前言 需要实现的功能是通过一个专门的检测摄像头将出现在摄像头画面内的敌方单位检测出来,并通过框选的UI框在画面中标记出来。检测摄像头支持自动检测和手动控制检测,同时需要实现锁定模式,检测到一个敌方单位直接锁定到对象上等功能。 效…...
js 16进制加密
function hexEncode(str) { let hexEncodedStr ‘’; for (let i 0; i < str.length; i) { let charCode str.charCodeAt(i); let hexCode charCode.toString(16).padStart(2, ‘0’); hexEncodedStr ‘\x’ hexCode; } return hexEncodedStr; } // 示例用法 let ori…...

性能测试之压测
1、首先需要提前准备好需要压测的接口地址及对应的接口参数 写好对应的压测接口及对应参数脚本 2、添加线程组(根据对应的需求提供的QPS及需要压测的数量如有) 如:40个线程,循环次数为永远(或者根据自身情况设置循…...
CentOS修改yum.repos.d源,避免“Could not resolve host: mirrorlist.centos.org”错误
1、问题现象 由于CentOS停止维护,mirrorlist.centos.org网站也关闭不可访问。导致CentOS默认配置的yum.repos.d源也不可用,所以执行yum命令会报“Could not resolve host: mirrorlist.centos.org”错误。具体如下: Could not retrieve mirror…...
Python 三目运算实战详解
Python 的三目运算符(也称为条件表达式)是一种简洁的方式来执行基于条件的赋值或返回值。它的语法类似于其他编程语言中的三元运算符,但有一些细微的不同。在 Python 中,三目运算符的语法如下: value_if_true if cond…...
JVM 性能调优 -- CMS 垃圾回收器 GC 日志分析【Full GC】
前言: 上一篇我们分析了 Minor GC 的发生过程,因为 GC 日志没有按我们预估的思路进行打印,其中打印了 CMS 垃圾回收器的部分日志,本篇我们就来分析一下 CMS 垃圾收集日志。 JVM 系列文章传送门 初识 JVM(Java 虚拟机…...

PS的学习
背景差色较大,就魔棒 魔棒的连续就是倒水点的跨越问题 魔棒的容差的选择就有点看经验了,看颜色的统一程度选择 Ctrl D 取消当前所有的选区 至于快速选择工具,和对象选择工具也差不多,只不过控制范围变成了一块一块的&#x…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...

Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...

初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...
scikit-learn机器学习
# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...
MySQL 8.0 事务全面讲解
以下是一个结合两次回答的 MySQL 8.0 事务全面讲解,涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容,并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念(ACID) 事务是…...