k8s挂载映射操作详解

news2024/12/24 2:10:52

k8s投射数据卷 Projected Volume

在 k8s 中,有几种特殊的 Volume,它们的意义不是为了存放容器里的数据,也不是用来进行容器和宿主机之间的数据交换。"而是为容器提供预先定义好的数据。"

从容器的角度来看,这些 Volume 里的信息仿佛是被 k8s "投射"(Project)进入容器当中的。

k8s 支持的 Projected Volume 一共有四种:

Secret

ConfigMap

Downward API

ServiceAccountToken  不常用没有写

Secret

secret用来保存小片敏感数据的k8s资源,例如密码,token,或者秘钥。这类数据当然也可以存放在Pod或者镜像中,但是放在Secret中是为了更方便的控制如何使用数据,并减少暴露的风险。用户可以创建自己的secret,系统也会有自己的secret。Pod需要先引用才能使用某个secret

Pod有2种方式来使用secret:

1. 作为volume的一个域被一个或多个容器挂载

2. 在拉取镜像的时候被kubelet引用。

內建的Secrets: 由ServiceAccount创建的API证书附加的秘钥k8s自动生成的用来访问apiserver的Secret,所有Pod会默认使用这个Secret与apiserver通信

创建自己的Secret:

1:使用kubectl create secret命令

2:yaml文件创建Secret

命令方式创建secret:

假如某个Pod要访问数据库,需要用户名密码,分别存放在2个文件中:username.txt,password.txt

echo -n 'admin' > ./username.txt

echo -n '12345678' > ./password.txt

kubectl create secret指令将用户名密码写到secret中,并在apiserver创建Secret

kubectl create secret generic user-pass --from-file=./username.txt --from-file=./password.txt

kubectl get secrets 查看创建结果 

kubectl describe secret user-pass 查看详细信息

get或describe指令都不会展示secret的实际内容,这是出于对数据的保护的考虑,要查看实际内容使用命令:

kubectl get secret user-pass -o json

base64解码:

echo 'MWYyZDFlMmU2N2Rm' | base64 --decode

yaml方式创建Secret:

创建一个secret.yaml文件,内容用base64编码:明文显示容易被别人发现。

echo -n 'admin' | base64

echo -n '1f2d1e2e67df' | base64

vim secret.yml

---

apiVersion: v1

kind: Secret

metadata:

  name: myuser-pass

type: Opaque  #模糊

data:

  username: YWRtaW4=

  password: MWYyZDFlMmU2N2Rm

使用Secret:Pod中引用Secret

vim pod_use_secret.yaml

apiVersion: v1

kind: Pod

metadata:

  name: mypod

spec:

  containers:

  - name: testredis

    image: daocloud.io/library/redis

    volumeMounts:    #挂载一个卷

    - name: user-pass     #这个名字需要与定义的卷的名字一致

      mountPath: "/etc"  #挂载到容器里哪个目录下,随便写

      readOnly: true  #只读权限,不加默认有读写

  volumes:     #数据卷的定义

  - name: user-pass   #卷的名字这个名字自定义

    secret:    #卷是直接使用的secret。

      secretName: user-pass  #调用刚才定义的secret

 kubectl apply -f pod_use_secret.yaml   创建

kubectl exec -it mypod /bin/bash

可以看到我们定义的文件映射进来了

被挂载的secret内容会自动更新

vim secret.yml

---

apiVersion: v1

kind: Secret

metadata:

  name: mysecret

type: Opaque

data:

  username: cWlhbmZlbmcK   

  password: MTIzNDU2Nzg5Cg==   #修改为123456789的base64加密后的

kubectl apply -f secret.yml    修改完直接创建即可在次来到容器查看已经变了

 

ConfigMap

ConfigMap 与 Secret 类似,用来存储配置文件的kubernetes资源对象,所有的配置内容都存储在etcd中。

ConfigMap 保存的是不需要加密的、应用所需的配置信息。

ConfigMap 的用法几乎与 Secret 完全相同:可以使用 kubectl create configmap 从文件或者目录创建 ConfigMap,也可以直接编写 ConfigMap 对象的 YAML 文件。

创建ConfigMap的方式有4种:

命令行方式:

1:通过直接在命令行中指定configmap参数创建,即--from-literal

2:通过指定文件创建,即将一个配置文件创建为一个ConfigMap,--from-file=<文件>

3:通过指定目录创建,即将一个目录下的所有配置文件创建为一个ConfigMap,--from-file=<目录>

4:事先写好标准的configmap的yaml文件,然后kubectl create -f 创建

1、通过命令行参数--from-literal创建

kubectl create configmap configmap --from-literal=user=admin --from-literal=pass=2023888

kubectl get configmap configmap -o yaml    查看相关内容

 

2、通过指定文件创建

编辑配置文件properties

vim properties

property.1 = user-1

property.2 = user-2

property.3 = user-3

[mysqld]

!include /data/mysql/mysqld.cnf

port = 3306

socket = /data/mysql/mysql.sock

pid-file = /data/mysql/mysql.pid

kubectl create configmap configmap-2 --from-file=properties   创建

kubectl get configmap configmap-2 -o yaml 查看内容

3、指定目录创建

指定目录创建时,configmap内容中的各个文件会创建一个key/value对,key是文件名,value是文件内容。

mkdir test

cd test/

vim test-1

123

456

789

a=10

vim test-2

aaa

bbb

ccc

d=AAA

kubectl create configmap configmap-3 --from-file=/root/test   创建

kubectl get configmap configmap-3 -o yaml     查看内容

4、通过事先写好configmap的标准yaml文件创建

vim configmap.yaml

---

apiVersion: v1

kind: ConfigMap

metadata:

  name: configmap-4

  namespace: default

data:

  cache_host: redis

  cache_port: "6379"

  cache_prefix: redis

  my.cnf: |

   [mysqld]

   log-bin = mysql-bin

   haha = hehe

kubectl apply -f configmap.yaml 创建

kubectl get configmap configmap-4 -o yaml   查看内容

kubectl describe configmap 查看所有configmap的详细信息

kubectl describe configmap  configmap名称   查看单独configmaop的详细信息

kubectl delete configmap  configmap名称 删除对应configmap

使用ConfigMap

通过envFrom、configMapRef、name使得configmap中的所有key/value对儿 都自动变成环境变量

vim testpod.yml

---

apiVersion: v1

kind: Pod

metadata:

  name: test-pod

spec:

  containers:

    - name: test-container

      image: daocloud.io/library/nginx

      envFrom: #固定写法

      - configMapRef: #固定写法

          name: configmap-2 已创建的configmap名称

  restartPolicy: Never #重启策略-从不

kubectl apply -f testpod.yml    创建pod

 kubectl exec -it dapi-test-pod /bin/bash   进入pod容器

输入env  查看一下变量  可以看到configmap-2里面定义的内容都有

作为volume挂载使用

 vim volupod.yml

---

apiVersion: v1

kind: Pod

metadata:

  name: nginx-configmap

spec:

  containers:

  - name: nginx-configmap

    image: daocloud.io/library/nginx

    volumeMounts:

    - name: volume4

      mountPath: "/home/config-4"

  volumes:

  - name: volume4

    configMap:

      name: configmap-4

kubectl apply -f volupod.yml     创建pod

kubectl  exec -it nginx-configmap /bin/bash    进入到容器查看

在config-4文件夹下以每一个key为文件名value为值创建了多个文件

Downward API

用于在容器中获取 POD 的基本信息,kubernetes原生支持

Downward API提供了两种方式用于将 POD 的信息注入到容器内部:

1.环境变量:用于单个变量,可以将 POD 信息和容器信息直接注入容器内部。

2.Volume挂载:将 POD 信息生成为文件,直接挂载到容器内部中去。

环境变量的方式:

通过Downward API来将 POD 的 IP、名称以及所对应的 namespace 注入到容器的环境变量中去,然后在容器中打印全部的环境变量来进行验证

使用环境变量的方式

vim test-env-pod.yml

---

apiVersion: v1

kind: Pod

metadata:

    name: test-env-pod

    namespace: kube-system

spec:

    containers:

    - name: test-env-pod

      image: daocloud.io/library/nginx

      env:

      - name: POD_NAME   #第一个环境变量的名字

        valueFrom:      #使用valueFrom方式设置

          fieldRef:    #关联一个字段metadata.name

            fieldPath: metadata.name  #这个字段从当前运行的pod详细信息查看

      - name: POD_NAMESPACE

        valueFrom:

          fieldRef:

            fieldPath: metadata.namespace

      - name: POD_IP

        valueFrom:

          fieldRef:

            fieldPath: status.podIP

 kubectl apply -f test-env-pod.yml 创建pod

kubectl exec -it test-env-pod /bin/bash -n kube-system   进入容器内部查看

env | grep POD

Volume挂载

 vim test-volume-pod.yaml

---

apiVersion: v1

kind: Pod

metadata:

    name: test-volume-pod

    namespace: kube-system

    labels:

        k8s-app: test-volume

        node-env: test

spec:

    containers:

    - name: test-volume-pod-container

      image: daocloud.io/library/nginx

      volumeMounts:

      - name: podinfo

        mountPath: /data

    volumes:

    - name: podinfo

      downwardAPI:

        items:

        - path: "labels"

          fieldRef:

            fieldPath: metadata.labels

kubectl apply -f test-volume-pod.yaml    创建pod

kubectl exec -it test-volume-pod /bin/bash -n kube-system   进入容器内部

将元数据 labels 和 annotaions 以文件的形式挂载到了/data

在实际应用中,如果你的应用有获取 POD 的基本信息的需求,就可以利用Downward API来获取基本信息,然后编写一个启动脚本或者利用initContainer将 POD 的信息注入到容器中去,然后在自己的应用中就可以正常的处理相关逻辑

目前 Downward API 支持的字段使用 fieldRef 可以声明使用:

spec.nodeName - 宿主机名字

status.hostIP - 宿主机 IP

metadata.name - Pod 的名字

metadata.namespace - Pod 的 Namespace

status.podIP - Pod 的 IP

spec.serviceAccountName - Pod 的 Service Account 的名字

metadata.uid - Pod 的 UID

metadata.labels['<KEY>'] - 指定 <KEY> 的 Label 值

metadata.annotations['<KEY>'] - 指定 <KEY> 的 Annotation 值

metadata.labels - Pod 的所有 Label

metadata.annotations - Pod 的所有 Annotation

ServiceAccount

  Service Account它并不是给kubernetes集群的用户使用的,而是给pod里面的进程使用的,它为pod提供必要的身份认证。----专门为pod里面的进程和apiserver通信提供认证的。

Service account是为了方便Pod里面的进程调用Kubernetes API或其他外部服务而设计的。它与User account不同。很少会使用到操作略

挂载目录的方法

vim  test.yml

---

apiVersion: v1

kind: Pod

metadata:

  name: mypod-3

spec:

  containers:

  - name: mycontainer

    image: daocloud.io/library/nginx

    volumeMounts:

    - name: myvolume            #挂载名称

      mountPath: /home #容器内路径

  volumes:

  - name: myvolume              #和上方一致

    hostPath:

      path: /data/test    #被映射路径

 

 

 

 

 

 

 

 

 

 

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

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

相关文章

xlsx工作表隐藏了?不用担心,这些方法帮你恢复

在进行数据整理或保护时&#xff0c;很多用户可能会选择隐藏XLSX工作表。然而&#xff0c;当需要重新显示之前隐藏的工作表时&#xff0c;可能会感到困惑。不过&#xff0c;不用担心&#xff0c;下面将向您介绍xlsx工作表隐藏怎么恢复。 ▌第一部分&#xff1a;XLSX工作表隐藏…

结构型(三) - 享元模式

一、概念 享元模式&#xff08;Flyweight Pattern&#xff09;&#xff1a;所谓“享元”&#xff0c;顾名思义就是被共享的单元。享元模式的意图是复用对象&#xff0c;节省内存&#xff0c;前提是享元对象是不可变对象。 优点&#xff1a;可以极大地减少内存中对象的数量&am…

鉴源实验室丨软件代码结构化覆盖测试-语句覆盖

作者 | 李伟 上海控安安全测评部总监 来源 | 鉴源实验室 社群 | 添加微信号“TICPShanghai”加入“上海控安51fusa安全社区” 引言&#xff1a; 之前我们一直在讲功能、性能、以及专项等相关的测试&#xff0c;这些测试主要集中在集成测试&#xff0c;系统验证等阶段&#x…

【快速傅里叶变换(fft)和逆快速傅里叶变换】生成雷达接收到的经过多普勒频移的脉冲雷达信号(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

颜值爆表!这款开源的API工具用起来更优雅!

作为一名后端开发者&#xff0c;我们经常会使用API工具来调试接口&#xff0c;之前一直使用的Postman&#xff0c;用多了感觉它有点不够轻量级&#xff0c;有时候打开也比较慢。最近发现了一款轻量级的开源API工具Insomnia&#xff0c;界面挺炫酷&#xff0c;功能也很实用&…

井下空气质量检测预警系统,煤矿生产、事故应急检测和实时监测

井下空气质量检测预警系统,煤矿生产、事故应急检测和实时监测 在煤矿生产中&#xff0c;空气质量是关系到矿工生命安全的重要因素。煤矿内部存在着各种有害气体&#xff0c;如甲烷、一氧化碳等&#xff0c;高浓度的有害气体会导致矿工中毒、窒息等危险情况&#xff0c;因此煤矿…

Linux journalctl命令详解(journalctl指令)(systemd服务默认日志管理工具)

文章目录 Linux Journalctl命令详解1. Journalctl简介2. Journalctl基础使用3. 过滤日志条目4. 时间戳和日志轮转5. 高级应用6. journalctl --help指令文档英文中文 注意事项journal日志不会将程序输出的空行显示&#xff0c;日志会被压缩得满满当当。journal日志不会自动持久化…

HTML5+CSS3+JS小实例:环形文字动画特效

实例:环形文字动画特效 技术栈:HTML+CSS+JS 效果: 源码: 【html】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" content=&quo…

排序算法之详解冒泡排序

引入 冒泡排序顾名思义&#xff0c;就是像冒泡一样&#xff0c;泡泡在水里慢慢升上来&#xff0c;由小变大。虽然冒泡排序和冒泡并不完全一样&#xff0c;但却可以帮助我们理解冒泡排序。 思路 一组无序的数组&#xff0c;要求我们从小到大排列 我们可以先将最大的元素放在数组…

关于图像分类、图像识别和目标检测异同

计算机视觉是人工智能领域的一个重要分支&#xff0c;它旨在构建能够理解和处理图像、视频等视觉信息的计算机系统。在计算机视觉领域中&#xff0c;图像分类、图像识别和目标检测是三个重要的任务&#xff0c;当然目标跟踪、图像生成也是新的方向和延伸。 其实下面这幅图已经非…

A. Two Semiknights Meet

题目描述 可知走法为中国象棋中的象的走法 解题思路 利用结构体来存储两个 K K K的位置 x , y x,y x,y&#xff0c;因为两个 K K K同时走&#xff0c;所以会出现两种情况 相向而行&#xff0c;两者距离减少 相反而行&#xff0c;两者距离不变 我们完全可以不考虑格子是好…

记一次从Redis弱口令到RCE

Fscan扫描网段发现了一些开启了6379的服务器&#xff0c;逐个尝试了下未授权&#xff0c;然后尝试了下爆破 hydra爆破redis hydra -P [字典目录] redis://xxx.xxx.xxx.xxx结果还真让爆出来一个 得到密码后&#xff0c;连接上去&#xff0c;这里用的是Another Redis Desktop M…

polar si9000使用---1

1、软件界面 2、表面单端信号 表层单端走线&#xff1a;1、走线表面未覆盖绿油&#xff1b;2、参考表面为完整的地平面&#xff1b;3、走线同层不进行铺铜操作&#xff0c;或者同层铺铜的距离大于参考地到走线距离H1&#xff1b; 表层单端走线&#xff1a;1、走线表面覆盖绿油…

【自适应稀疏度量方法和RQAM】疏度测量、RQAM特征、AWSPT和基于AWSPT的稀疏度测量研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

wps 画项目进度甘特图

效果如上 步骤一&#xff1a; 创建excel 表格 步骤二&#xff1a; 选中开始时间和结束时间两列数据&#xff0c;右键设置单元格格式 步骤三&#xff1a; 选择数值&#xff0c;点击确定&#xff0c;将日期转成数值。 步骤四&#xff1a;插入图表 选中任务&#xff0c;开始时间…

什么是程序化交易接口?执行三步曲是什么?

在股市中的发展过程中&#xff0c;通过不断的更新迭代&#xff0c;从手动交易到自动交易的过程就有了历史的蜕变&#xff0c;那么对于程序化交易接口&#xff08;Application Programming Interface, API&#xff09;其实就是指为程序化交易提供的一组定义和规范&#xff0c;允…

【BASH】回顾与知识点梳理(三十九)

【BASH】回顾与知识点梳理 三十九 三十九. make、tarball、函数库及软件校验39.1 用 make 进行宏编译为什么要用 makemakefile 的基本语法与变量 39.2 Tarball 的管理与建议使用原始码管理软件所需要的基础软件Tarball 安装的基本步骤一般 Tarball 软件安装的建议事项 (如何移除…

概率和统计,最大似然估计(MLE),大后验概率估计(MAP)

目录 1、概率和统计是一个东西吗&#xff1f; 2、贝叶斯公式到底在说什么&#xff1f; 3、似然函数 4、最大似然估计&#xff08;MLE&#xff09; 5、最大后验概率估计&#xff08;MAP&#xff09; MLE VS MAP 总结 贝叶斯公式分成两派&#xff1a;唯物主义的频率学派&a…

变频器和plc之间无线MODBUS通讯

在工业现场由PLC远程控制变频器的应用非常常见&#xff0c;如果挖沟布线不便或者变频器在移动设备上&#xff0c;那么采用无线通讯就是最佳方案。 这里我们选用最常用的三菱 FX2N PLC和三菱变频器为例&#xff0c;并结合日系plc专用无线通讯终端DTD435M来说明PLC与变频器之间的…

LeetCode 0849. 到最近的人的最大距离

【LetMeFly】849.到最近的人的最大距离 力扣题目链接&#xff1a;https://leetcode.cn/problems/maximize-distance-to-closest-person/ 给你一个数组 seats 表示一排座位&#xff0c;其中 seats[i] 1 代表有人坐在第 i 个座位上&#xff0c;seats[i] 0 代表座位 i 上是空的…