k8s中部署nginx的pod

       在当今数字化的浪潮中,容器编排技术成为了构建和管理应用程序的核心力量。Kubernetes(简称 k8s)作为容器编排领域的佼佼者,凭借其强大的自动化部署、扩展和管理能力,深受开发者和运维人员的青睐。而 Nginx 作为一款高性能的 Web 服务器和反向代理服务器,在众多项目中承担着流量分发、负载均衡等重要职责。今天,我们就来详细探讨如何在 k8s 中部署 Nginx 的 Pod,并且在 Nginx 里添加业务配置文件,引入前端开发的代码,同时实现与 k8s 中后端 Java Pod 的精准连接,构建一个完整且高效的应用架构。

创建存储

前段代码存储

这里默认是有nfs存储的,在nfs的存储上,创建了前段代码存放的位置目录。存放的目录 /data/nfs/yewu/dist,建议 这个目录我会给予777的权限,防止访问报错403。确保nfs把这个目录挂载出去了,查看nfs的配置。

dist]# cat /etc/exports
/data/nfs *(rw,sync,no_root_squash)

这里如果配置后不生效就重启nfs ,保证nfs没有问题

systemctl restart rpcbind
systemctl restart nfs-server

前段的nginx配置文件存储

这里是准备好的yewu-nginx.conf配置文件,里面有业务逻辑。确认配置文件无误。

这里有一个/api 下面我写了 proxy_pass http://yewu:5854; 这里是因为我的k8s集群里有一个 叫业务的pod关联了svc 叫这个名字并在内部暴漏了5854端口。先确保内部可以访问再到这里配置。

server {listen 80;client_max_body_size 1024M;server_name   yewu.dztech.com;add_header Access-Control-Allow-Origin *;add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';if ($request_method = 'OPTIONS') {return 204;}location / {add_header Accept-Ranges bytes;root /data/front/yewu/dist;index index.html index.htm;try_files $uri $uri/ /index.html;}location /api {proxy_pass http://yewu:5854;proxy_next_upstream error timeout invalid_header http_500 http_503;proxy_set_header Host $host:$server_port;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_redirect off;proxy_connect_timeout 300;proxy_send_timeout 300;proxy_read_timeout 300;proxy_buffer_size 128k;proxy_buffers 8 64k;proxy_busy_buffers_size 128k;proxy_temp_file_write_size 128k;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";proxy_ignore_client_abort on ;}access_log yewu-access.log;error_log yewu-error.log error;
}

把配置文件加载到configmap里,把nginx.conf 放到当前目录,开始创建configmap

kubectl create configmap yewu-nginx-config --from-file=yewu-nginx.conf -n test

这里如果配置文件想改,就直接删掉,再次创建configmap。

kubectl delete configmap yewu-nginx-config -n test

创建pod资源文件

创建存储资源文件

注意这里的pv和pvc的storageClassName类型 需要一致managed-nfs-storage,如果不一致有可能会导致Pod创建过程中,一直处于Pending。

apiVersion: v1
kind: PersistentVolume
metadata:name: yewu-nfs-pvlabels:type: nfs
spec:capacity:storage: 10Gi  accessModes:- ReadWriteMany persistentVolumeReclaimPolicy: Retain  storageClassName: managed-nfs-storage  nfs:server: 10.100.100.100 path: /data/nfs/yewu/dist  
# 定义 PersistentVolumeClaim
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: yewu-nfs-pvcnamespace: test
spec:accessModes:- ReadWriteManyresources:requests:storage: 10Gi selector:matchLabels:type: nfs storageClassName: managed-nfs-storage  

创建服务资源文件

# 定义 Deployment
---
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deploymentnamespace: test
spec:replicas: 1selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginx# 这里要换成自己的私有仓库image: harbor.da.con/repo/nginx:latestports:- containerPort: 80volumeMounts:- name: nginx-config-volumemountPath: /etc/nginx/conf.d/readOnly: true- name: nfs-frontend-volumemountPath: /data/front/yewu/distvolumes:- name: nginx-config-volumeconfigMap:name: yewu-nginx-configdefaultMode: 0644- name: nfs-frontend-volumepersistentVolumeClaim:claimName: yewu-nfs-pvc 
# 定义 Service
---
apiVersion: v1
kind: Service
metadata:name: nginx-servicenamespace: test
spec:selector:app: nginxports:- protocol: TCPport: 80targetPort: 80nodePort: 31794type: NodePort

验证服务是否正常

查看已创建的pod运行状态

]# kubectl get pod -n test -l app=nginx 
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-7576688b45-hr68r   1/1     Running   0          3h29m

查看已创建的pod关联的svc

]# kubectl get svc -n test nginx-service 
NAME            TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
nginx-service   NodePort   10.245.206.137   <none>        80:31794/TCP   167m

访问验证

这里用的nodeport类型这里固定映射了31794端口,用任意一个k8s节点的31794端口都可以访问的。

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

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

相关文章

台湾精锐APEX减速机在半导体制造设备中的应用案例

半导体制造设备对传动系统的精度、可靠性和稳定性要求极高&#xff0c;台湾精锐APEX减速机凭借其低背隙、高精度和高刚性等优势&#xff0c;在半导体制造设备中得到了广泛应用。 案例一&#xff1a;晶圆切割设备 1.应用场景 在晶圆切割过程中&#xff0c;设备需要高精度的运…

UV - Python 包管理

文章目录 创建 uv 项目已有项目已有uv项目 创建 uv 项目 # 创建项目 uv init m3 # 创建环境 cd m3 uv venv --python 3.11 # 激活环境 source .venv/bin/activate # 添加库 uv add flask 如果创建项目后&#xff0c;给库取别的名字&#xff0c;add 的时候&#xff0c;会…

如何为win10本地部署的deepseek创建一个快捷方式

简介&#xff1a;在桌面上创建一个快捷方式&#xff0c;双击即可实现打开终端并且输入ollama run的命令。 在win10系统下&#xff0c;本地部署了deepseek之后&#xff0c;每次需要打开powershell&#xff0c;然后再手动输入指令 ollama run deepseek-r1:1.5b 要想实现一个桌面…

网安三剑客:DNS、CDN、VPN

DNS&#xff08;网络地址转换系统&#xff09;的技术原理与安全应用 1. 网络地址转换系统的基本原理 DNS通过解析用户的访问URL&#xff08;超链接&#xff09;&#xff0c;将其映射到服务器上存储的信息。具体来说&#xff1a; 解析URL&#xff1a;DNS从URL中提取出 hostna…

Unity项目实战-简单特效系统的管理

Unity特效系统详解 一、基础特效管理系统 1. 初始版本实现 现在我们编写了一个VFXManager脚本来控制特效,并实现了 VFX 特效的运行和结束功能,并用单例模式优化了代码,避免每次播放不同特效时重复实例脚本类. public class VFXManager : MonoBehaviour {public static VFXM…

解锁Rust:融合多语言特性的编程利器

如果你曾为理解Rust的特性或它们之间的协同工作原理而苦恼,那么这篇文章正是为你准备的。 Rust拥有许多令人惊叹的特性,但这些特性并非Rust所独有。实际上,Rust巧妙地借鉴了众多其他语言的优秀特性,并将它们融合成了一个完美的整体。深入了解Rust这些重要特性的来源以及它是…

【阅读笔记】信息熵自动曝光An Automatic Exposure Algorithm Based on Information Entropy

一、算法背景 信息熵作为衡量图像信息量的重要指标&#xff0c;能够反映图像的细节丰富程度。通过基于信息熵的自动曝光算法&#xff0c;可以自动调整曝光时间&#xff0c;使图像包含更多信息&#xff0c;从而提高图像质量。 灰度直方图在各个灰度值上分布越均匀&#xff0c;…

2025我的第二次社招,写在春招之季

先说一个好消息&#xff0c;C那些事 4w star了&#xff01; 前面断更了一个月&#xff0c;本篇文章就可以看到原因&#xff0c;哈哈。 大家好&#xff0c;我叫光城&#xff0c;腾讯实习转正做后端开发&#xff0c;后去小公司做数据库内核&#xff0c;经过这几年的成长与积累&am…

查找和压缩指令相关

1.按文件名&#xff0c;查找/home目录下的hello.txt 2.按照拥有者&#xff0c;查找/opt下&#xff0c;用户名称为nobody的文件 3.查找整个Linux系统下大于200M的文件 4.在/home/hello.txt文件中&#xff0c;查找"yes"&#xff08;忽略大小写&#xff09;,并显示行号 …

字符串高频算法:无重复字符的最长子串

题目 3. 无重复字符的最长子串 - 力扣&#xff08;LeetCode&#xff09; 解题思路 思路 方法: 滑动窗口 [!简单思路] [^1]以示例一中的字符串 abcabcbb 为例&#xff0c;找出从每一个字符开始的&#xff0c;不包含重复字符的最长子串&#xff0c;其中最长的那个字符串即为答…

编译加速工具ccache

1、什么是ccache ccache&#xff08;Compilation Cache&#xff09;是一个开源的编译缓存工具&#xff0c;最初为 C/C 设计&#xff0c;但也可以用于其他语言的编译过程&#xff08;如 Objective-C、CUDA 等&#xff09;。它的核心思想是通过缓存编译结果&#xff0c;避免重复…

用Python的模式匹配(Pattern Matching)重构复杂条件逻辑:超越if-else的艺术

在Python 3.10发布两年后&#xff0c;模式匹配&#xff08;Pattern Matching&#xff09;仍然是许多开发者未曾探索的秘境。这个被误解为"加强版switch语句"的功能&#xff0c;实则是重构复杂条件逻辑的终极武器。本文将带您深入模式匹配的进阶应用&#xff0c;揭示其…

运用Deek Seeker协助数据分析

我的数据源有两张表&#xff0c;一个是每日销售表(字段有日期、产品名称、实际销量)&#xff0c;一个是每月目标表(字段有年度月份、产品名称、目标销量);我的需求是&#xff0c;按月、按年来统计每个产品的目标完成情况请问用PowerBl进行分析&#xff0c;应该如何建立数据模型…

Sentinel——Spring Boot 应用接入 Sentinel 后内存开销增长计算方式

接入 Sentinel 对 Spring Boot 应用的内存消耗影响主要取决于 规则数量、资源数量、监控粒度、并发量 等因素。 1. 核心内存消耗来源 (1) Sentinel 核心库 默认依赖&#xff1a;Sentinel Core 本身占用较小&#xff0c;通常在 10~50MB&#xff08;取决于资源数量和规则复杂度…

【设计模式】【行为型模式】策略模式(Strategy)

&#x1f44b;hi&#xff0c;我不是一名外包公司的员工&#xff0c;也不会偷吃茶水间的零食&#xff0c;我的梦想是能写高端CRUD &#x1f525; 2025本人正在沉淀中… 博客更新速度 &#x1f4eb; 欢迎V&#xff1a; flzjcsg2&#xff0c;我们共同讨论Java深渊的奥秘 &#x1f…

【高级架构师】多线程和高并发编程(三):锁(中)深入ReentrantLock

文章目录 3、深入ReentrantLock3.1 ReentrantLock和synchronized的区别3.2 AQS概述3.3 加锁流程源码剖析3.3.1 加锁流程概述3.3.2 三种加锁源码分析3.3.2.1 lock方法3.3.2.2 tryLock方法3.3.2.3 lockInterruptibly方法 3.4 释放锁流程源码剖析3.4.1 释放锁流程概述3.4.2 释放锁…

WPF 进度条(ProgressBar)示例一

本文讲述&#xff1a;WPF 进度条(ProgressBar)简单的样式修改和使用。 进度显示界面&#xff1a;使用UserControl把ProgressBar和进度值以及要显示的内容全部组装在UserControl界面中&#xff0c;方便其他界面直接进行使用。 <UserControl x:Class"DefProcessBarDemo…

Android studio怎么创建assets目录

在Android Studio中创建assets文件夹是一个简单的步骤&#xff0c;通常用于存储不需要编译的资源文件&#xff0c;如文本文件、图片、音频等 main文件夹&#xff0c;邮件new->folder-assets folder

工业相机在工业生产制造过程中的视觉检测技术应用

随着技术不断发展以及工业4.0时代的到来&#xff0c;利用工业相机进行视觉检测技术已经成为制造业不可或缺的一部分。通过结合先进的计算机视觉、AI算法和自动化设备&#xff0c;工业视觉检测为生产线质量控制和效率提升提供了革命性的解决方案。 一、什么是工业视觉检测技术 …

vscode中使用code-runner插件运行c程序语法报错code: 1

代码 int main() {// 定义变量a&#xff0c;赋值为10int a 10;// 定义变量b&#xff0c;赋值为20int b 20;// 定义变量c&#xff0c;将a和b相加的结果赋值给cint c a b;// 输出c的值printf("%d", c);// 返回0&#xff0c;表示程序正常结束return 0; }问题&#…