Kubernetes 使用configmap挂载卷给Pod内的nginx容器

news2025/3/14 3:57:16

目录

实验:使用configmap挂载卷给Pod内的nginx容器

1、创建nginx.conf配置文件(必须由nginx镜像里的nginx.conf修改而来,防止出现配置不相似的情况出现,导致访问不了nginx网页)

2、通过nginx.conf文件创建configmap容器(注意nginx.conf文件必须在该目录下)

3、查看创建的configmap和它的详细资料

4、根据configmap创建nginx-deployment.yaml文件

5、运行nginx-deployment.yaml,创建Pod

6、创建Service发布nginx容器服务,创建nginx-service.yaml文件

7、运行nginx-service.yaml,创建Pod

8、验证访问


实验:使用configmap挂载卷给Pod内的nginx容器

1、创建nginx.conf配置文件(必须由nginx镜像里的nginx.conf修改而来,防止出现配置不相似的情况出现,导致访问不了nginx网页)

(base) root@sd-cluster-04:/etc/nginx# cat nginx.conf 
# claylpf test

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}
(base) root@sd-cluster-04:/etc/nginx# 

2、通过nginx.conf文件创建configmap容器(注意nginx.conf文件必须在该目录下)

(base) root@sd-cluster-04:/etc/nginx# kubectl create configmap nginx-config --from-file=nginx.conf -n testns

3、查看创建的configmap和它的详细资料

(base) root@sd-cluster-04:/etc/nginx# kubectl get configmap nginx-config -n testns #查看是否成功运行
NAME           DATA   AGE
nginx-config   1      77s


(base) root@sd-cluster-04:/etc/nginx# kubectl describe configmap/nginx-config -n testns  # 查看详细信息
Name:         nginx-config
Namespace:    testns
Labels:       <none>
Annotations:  <none>

Data
====
nginx.conf:
----
# claylpf test

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

Events:  <none>
(base) root@sd-cluster-04:/etc/nginx# 

4、根据configmap创建nginx-deployment.yaml文件

(base) root@sd-cluster-04:/etc/nginx# cat nginx-deployment.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: testns
spec:
  replicas: 1
  selector:
    matchLabels:
      app: clay-nginx
  template:
    metadata:
      labels:
        app: clay-nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.24
        ports:
        - containerPort: 80
        volumeMounts:
        - name: nginx-config-volume
          mountPath: /etc/nginx/nginx.conf
          subPath: nginx.conf
      volumes:
        - name: nginx-config-volume
          configMap:
            name: nginx-config
            items:
            - key: nginx.conf
              path: nginx.conf     
(base) root@sd-cluster-04:/etc/nginx# 

代码解释:

这是一个 Kubernetes Deployment 的 YAML 文件,用于定义一个部署配置。以下是逐行解释该文件的内容:

1. `apiVersion: apps/v1`: 这一行指定了 Kubernetes API 的版本,以及使用的资源类型是 Deployment。

2. `kind: Deployment`: 指定了资源的种类,这是一个部署 (Deployment)。

3. `metadata:`: 定义资源的元数据,包括名称和命名空间。

   - `name: nginx-deployment`: 部署的名称是 "nginx-deployment"。
   - `namespace: testns`: 部署所属的命名空间是 "testns"。

6. `spec:`: 定义了部署的规格,包括副本数、选择器以及 Pod 模板。

   - `replicas: 1`: 指定了要运行的副本数量,这里是 1 个。
   
   - `selector:`: 选择器用于确定要管理的 Pod 集合。

     - `matchLabels:`: 指定了需要匹配的标签。

       - `app: clay-nginx`: 匹配标签中含有 "app: clay-nginx" 的 Pod。

   - `template:`: 定义了要创建的 Pod 模板。

     - `metadata:`: 定义 Pod 模板的元数据,包括标签。

       - `labels:`: 指定了 Pod 的标签,这里是 "app: clay-nginx"。

     - `spec:`: 定义了 Pod 的规格。

       - `containers:`: 定义了容器列表。

         - `name: nginx`: 定义容器的名称为 "nginx"。
         - `image: nginx:1.24`: 指定容器使用的镜像,这里使用的是 Nginx 版本 1.24。
         - `ports:`: 定义容器的端口配置。

           - `containerPort: 80`: 容器监听的端口是 80。

         - `volumeMounts:`: 定义了卷挂载配置,将卷挂载到容器内。

           - `name: nginx-config-volume`: 指定挂载卷的名称,这个名称将与下面定义的卷匹配。
           - `mountPath: /etc/nginx/nginx.conf`: 指定挂载的路径在容器内的位置。
           - `subPath: nginx.conf`: 指定在卷中的子路径。

       - `volumes:`: 定义了卷的配置。

         - `name: nginx-config-volume`: 定义了一个名为 "nginx-config-volume" 的卷。
         - `configMap:`: 指定卷的类型为 ConfigMap。

           - `name: nginx-config`: 指定 ConfigMap 的名称,这个名称将与集群中的 ConfigMap 匹配。
           - `items:`: 指定要从 ConfigMap 中提取的键值对。

             - `key: nginx.conf`: 指定键的名称。
             - `path: nginx.conf`: 指定将键的值映射到容器内的路径。

这个配置文件描述了一个部署,它将创建一个 Pod,其中运行一个名为 "nginx" 的容器,该容器使用 Nginx 1.24 镜像,并将一个名为 "nginx-config-volume" 的 ConfigMap 挂载到容器内的 `/etc/nginx/nginx.conf` 路径上。这样,Nginx 容器将使用 ConfigMap 中的配置文件来配置其行为。

5、运行nginx-deployment.yaml,创建Pod

(base) root@sd-cluster-04:/etc/nginx# kubectl apply -f nginx-deployment.yaml 

(base) root@sd-cluster-04:/etc/nginx# kubectl get pods -o wide -n testns
NAME                                READY   STATUS        RESTARTS   AGE    IP             NODE            NOMINATED NODE   READINESS GATES
es-cluster-0                        0/1     Terminating   0          62d    10.244.5.163   sd-cluster-02   <none>           <none>
mysql-deployment-66c4d975f5-zm4sz   1/1     Running       0          5d1h   10.244.0.212   sd-cluster-04   <none>           <none>
nginx-deployment-67fb5f6db7-9ltlb   1/1     Running       0          21m    10.244.1.254   sd-cluster-05   <none>           <none>
redis-deployment-f7d7dd455-xk7h8    1/1     Running       0          5d     10.244.0.215   sd-cluster-04   <none>           <none>
(base) root@sd-cluster-04:/etc/nginx# 

6、创建Service发布nginx容器服务,创建nginx-service.yaml文件

(base) root@sd-cluster-04:/etc/nginx# cat nginx-service.yaml 
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
  namespace: testns
  labels:
    app: clay-nginx
spec:
  type: NodePort
  selector:
    app: clay-nginx  
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
      nodePort: 31273
(base) root@sd-cluster-04:/etc/nginx# 

逐行解释:

这是一个 Kubernetes Service 的 YAML 文件,用于创建一个服务资源。以下是逐行解释该文件的内容:

1. `apiVersion: v1`: 这一行指定了 Kubernetes API 的版本,以及使用的资源类型是 Service。

2. `kind: Service`: 指定了资源的种类,这是一个服务 (Service)。

3. `metadata:`: 定义了服务的元数据,包括名称、命名空间和标签。

   - `name: nginx-service`: 服务的名称是 "nginx-service"。
   - `namespace: testns`: 服务所属的命名空间是 "testns"。

   - `labels:`: 为服务添加标签。

     - `app: clay-nginx`: 将标签 "app: clay-nginx" 添加到服务上。

6. `spec:`: 定义了服务的规格,包括服务类型、选择器和端口配置。

   - `type: NodePort`: 指定了服务的类型为 NodePort,这意味着服务将暴露到每个节点的指定端口上。

   - `selector:`: 选择器用于确定哪些 Pod 属于这个服务。

     - `app: clay-nginx`: 匹配标签中含有 "app: clay-nginx" 的 Pod。

   - `ports:`: 定义了服务监听的端口配置。

     - `protocol: TCP`: 指定了端口的传输协议是 TCP。

     - `port: 80`: 服务监听的端口号是 80。

     - `targetPort: 80`: 服务将流量转发到后端 Pod 的端口号是 80。

     - `nodePort: 31273`: 如果服务类型是 NodePort,这个配置项指定了节点上用于访问服务的端口号。在这个例子中,服务将在节点上的端口 31273 上监听,从而可以通过节点的 IP 地址和该端口访问该服务。

这个配置文件描述了一个服务,它会将流量从节点的端口 31273 转发到匹配标签 "app: clay-nginx" 的后端 Pod 上的端口 80。这种服务类型通常用于在外部网络上访问 Kubernetes 集群中的服务。

7、运行nginx-service.yaml,创建Pod

(base) root@sd-cluster-04:/etc/nginx# kubectl apply -f nginx-service.yaml 

(base) root@sd-cluster-04:/etc/nginx# kubectl get service -o wide -n testns
NAME            TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE   SELECTOR
mysql-service   NodePort   10.96.132.123   <none>        3306:30859/TCP   5d    app=mysql
nginx-service   NodePort   10.96.87.157    <none>        80:31273/TCP     65m   app=clay-nginx
redis-service   NodePort   10.96.10.164    <none>        6379:30026/TCP   5d    app=redis
(base) root@sd-cluster-04:/etc/nginx# 

8、验证访问

首先访问容器内的配置文件是否发生更改:

再次访问浏览器,产科nginx的Web服务是否发布 

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

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

相关文章

Java 代理模式之静态代理与动态代理

1&#xff0c;代理模式 代理模式给某一个对象提供一个代理对象&#xff0c;并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。 代理模式的目的&#xff1a; &#xff08;1&#xff09;通过引入代理对象的方式来间接访问目标对象&#xff0c;防…

对话式人工智能(Conversational AI):提高模型的智能程度和扩展能力

对话式人工智能的趋势与挑战 对话式人工智能 (AI) 已经出现在许多家庭的客厅、汽车和在线购物体验中。聊天机器人、语音助手、智能扬声器、交互式语音识别系统&#xff1a;所有这些都是对话式 AI 的示例。由于该领域通过增强的客户体验提供了更多可访问性&#xff0c;因此吸引…

PHP自己的框架2.0结合容器技术(重构篇二)

目录 1、使用容器实现框架加载类运行 2、 创建框架容器类core/fm/Di.php 3、框架使用容器类来执行public/index.php 4、运行效果还是一样 1、使用容器实现框架加载类运行 2、 创建框架容器类core/fm/Di.php 什么是容器&#xff1f;容器就相当于盒子&#xff0c;把很多类放里…

录音怎么转换成mp3格式?支持二十多种格式

录音怎么转换成mp3格式&#xff1f;在我们的日常生活和工作中&#xff0c;录音是一项非常有用的工具&#xff0c;随着手机以及录音设备越来越普及化&#xff0c;让录音这件事情变得非常的简单&#xff0c;录音可以帮助我们解决非常多的事情。例如通过录音&#xff0c;我们可以记…

Linux C++ OpenVINO 物体检测 Demo

目录 main.cpp #include <iostream> #include <string> #include <vector> #include <openvino/openvino.hpp> #include <opencv2/opencv.hpp> #include <dirent.h> #include <stdio.h> #include <time.h> #include …

OJ练习第171题——复制带随机指针的链表

复制带随机指针的链表 力扣链接&#xff1a;138. 复制带随机指针的链表 题目描述 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个…

Temu新手入门需要注意哪些细节?如何在Temu中添加尺码?

要在temu平台取得商业成功&#xff0c;创业者们必须注重商品策划和市场调研、关注市场动向和用户反馈、建立良好的互动和交流机制、发挥temu的优势和特点&#xff0c;本文介绍了temu新手入门需要注意细节以及如何在TEMU中添加尺码&#xff0c;快来学习一下吧。 temu新手入门需…

使用Javassist修改组件化 Router

工程目录图 请点击下面工程名称&#xff0c;跳转到代码的仓库页面&#xff0c;将工程 下载下来 Demo Code 里有详细的注释 代码&#xff1a;TransformDemo

Python中数据去重的重要性、技巧和实现代码

在数据处理和分析的过程中&#xff0c;数据去重是数据处理和分析的关键步骤之一。重复的数据会导致分析结果的偏差&#xff0c;影响决策的准确性。通过数据去重&#xff0c;我们可以确保分析所使用的数据集是干净、准确的&#xff0c;从而提高分析结果的可靠性&#xff0c;Pyth…

【LeetCode题目详解】第十章 单调栈part03 84.柱状图中最大的矩形(day60补)

本文章代码以c为例&#xff01; 一、力扣第84题&#xff1a;柱状图中最大的矩形 题目&#xff1a; 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。 …

【数据结构】—堆详解(手把手带你用C语言实现)

食用指南&#xff1a;本文在有C基础的情况下食用更佳 &#x1f525;这就不得不推荐此专栏了&#xff1a;C语言 ♈️今日夜电波&#xff1a;水星—今泉愛夏 1:10 ━━━━━━️&#x1f49f;──────── 4:23 …

掌控你的Mac——用Bookshelf Library简化文件管理

Bookshelf Library for Mac是一款高效的文件索引管理工具&#xff0c;它可以帮助你轻松整理和查找Mac上的所有文档和书籍。下面我们来看看这款工具的五个特点。 安装&#xff1a;Bookshelf Library for Mac(文件索引管理工具)v6.3.4激活版 第一&#xff0c;Bookshelf Library…

【广州华锐互动】工业零件拆装VR培训:无需前往现场,提高学习效率

工业零件拆装VR培训是一种新兴的培训方式&#xff0c;通过虚拟现实技术将设备拆解过程进行模拟&#xff0c;让学员在虚拟环境中进行实际操作和学习。这种培训方式具有许多益处&#xff0c;本文将对其进行详细阐述。 首先&#xff0c;工业零件拆装VR培训可以提高学员的学习效率。…

好用的软件测试框架有哪些?测试框架的作用是什么?

软件测试框架是现代软件开发过程中至关重要的工具&#xff0c;它可以帮助开发团队更加高效地进行测试和验证工作&#xff0c;从而大大提高软件质量和用户体验。 一、好用的软件测试框架 1. Selenium&#xff1a;作为一种开源的自动化测试框架&#xff0c;Selenium具有功能强大…

【Jmeter】什么是BeanShell?

一、什么是BeanShell&#xff1f; BeanShell是用Java写成的,一个小型的、免费的、可以下载的、嵌入式的Java源代码解释器&#xff0c;JMeter性能测试工具也充分接纳了BeanShell解释器&#xff0c;封装成了可配置的BeanShell前置和后置处理器&#xff0c;分别是 BeanShell Pre…

快速打造BI大屏 激活各行业数据价值

BI的概念普遍认为最早由Gartner公司提出&#xff0c;简单可理解为基于现代企业经营理论与信息应用技术系统对信息、数据进行挖掘、分析和处理&#xff0c;最终辅助商业决策的一个企业服务解决方案。 在企业数字化进程中&#xff0c;这样的解决方案主要以信息技术系统为底座&am…

力扣 -- 673. 最长递增子序列的个数

小算法&#xff1a; 通过一次遍历找到数组中最大值出现的次数&#xff1a; 利用这个小算法求解这道题就会非常简单了。 参考代码&#xff1a; class Solution { public:int findNumberOfLIS(vector<int>& nums) {int nnums.size();vector<int> len(n,1);auto…

23.Xaml Frame控件---->导航控件

1.运行效果 2.运行源码 a.Xaml源码 <Window x:Class="testView.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.mic…

leetcode330. 按要求补齐数组(java)

按要求补齐数组 题目描述贪心算法代码演示 题目描述 难度 - 困难 leetcode - 330. 按要求补齐数组 给定一个已排序的正整数数组 nums &#xff0c;和一个正整数 n 。从 [1, n] 区间内选取任意个数字补充到 nums 中&#xff0c;使得 [1, n] 区间内的任何数字都可以用 nums 中某几…

演讲实录:大模型时代,我们需要什么样的AI算力系统?

当前&#xff0c;“百模大战”带来了算力需求的爆发&#xff0c;AI芯片产业也迎来巨大机遇&#xff0c;“创新架构开源生态”正在激发多元AI算力产品百花齐放。面对新的产业机会&#xff0c;AI算力产业链亟需通过上下游协作共同把握机遇。 近日&#xff0c;浪潮信息AI&HPC…