当前位置: 首页 > news >正文

探索k8s集群的配置资源(secret和configmap)

目录

ConfigMap


ConfigMap(主要是将配置目录或者文件挂载到k8s里面使用)

与Secret类似,区别在于ConfigMap保存的是不需要加密配置的信息。(例如:配置文件
ConfigMap 功能在 Kubernetes1.2 版本中引入,许多应用程序会从配置文件、命令行参数或环境变量中读取配置信息。ConfigMap API 给我们提供了向容器中注入配置信息的机制,ConfigMap 可以被用来保存单个属性,也可以用来保存整个配置文件或者JSON二进制大对象。
应用场景:应用配置

创建 ConfigMap

以文件的形式创建

//--from-file 指定在目录下的所有文件都会被用在 ConfigMap 里面创建一个键值对,键的名字就是文件名,值就是文件的内容

 

还有两个文件依次使用同样的方法去创建cm

 以文件目录的形式创建

 将其中的两个文件加入到configmap中

 可以用多个--from-file指定多个文件或者目录

小总结: 将文件或者目录作为键,里面的内容作为值

 

 通过--from-literal创建键值

把之前手动创建的cm删除

创建以文件和键值形式的cm

 

 使用cm资源

1.当作数据卷挂载使用,把cm当作数据卷挂载到pod容器里面使用

 

 

 comfigMap热更新(动态更新)

在线修改

随后等个10秒左右,进入到pod里面查看 

 使用 ConfigMap 来替代环境变量  环境变量不支持热更新

第一种:

第二种:

 先创建一个新的cm

 

demo2的配置文件内容 

 ​​​​​​

 所有的的cm-ky00里面的内容都在env里面查看到

 同时还可以设置command操作

demo2.yaml的配置文件内容


导入配置文件方式

导入nginx.conf配置文件 (以文件的形式挂载)不支持热更新!!!

 

导入nginx.conf配置文件kubectl create configmap nginx-config --from-file=nginx.conf取的名字                  配置文件kubectl get cmkubectl describe cm nginx-config   查看nginx-config的详细信息

 

​​​​​​​ 

nginx.conf里面的内容已经变成挂载的内容

不支持热更新 测试一下:

 

 随后,去pod里面查看是否有更新

 配置文件以文件的形式挂载,不支持热更新 外面cm修改,在pod里面不生效

 在容器配置中用volumeMoumts.subPath字段指定文件名,实现将卷挂载到容器种指定的文件上(不支持热更新)

 

secret(以加密的方式保存)

Secret 是用来保存密码、token、密钥等敏感数据的 k8s 资源,这类数据虽然也可以存放在 Pod 或者镜像中,但是放在 Secret 中是为了更方便的控制如何使用数据,并减少暴露的风险。
 

  有四种类型: 

kubernetes.io/service-account-token:由 Kubernetes 自动创建(1.27版本之前),用来访问 APIServer 的 Secret,Pod 会默认使用这个 Secret 与 APIServer 通信, 并且会自动挂载到 Pod 的 /run/secrets/kubernetes.io/serviceaccount 目录中;
●Opaque :base64 编码格式的 Secret,用来存储用户自定义的密码、密钥等,默认的 Secret 类型;
●kubernetes.io/dockerconfigjson :用来存储私有 docker registry 的认证信息

●kubernetes.io/tls; 用来存储Tls证书和私钥信息。

 serviceaccount如果不指定的情况下,默认都是用defalut的账户,当pod作为主键访问apiservier时,就会通过account-token去验证

举例:

Pod 需要先引用才能使用某个 secret,Pod 有 3 种方式来使用 secret:

●作为挂载到一个或多个容器上的卷 中的文件。
●作为容器的环境变量。
●由 kubelet 在为 Pod 拉取镜像时使用。

 

创建secret  文件形式  ●Opaque,base64 编码格式的 Secret,用来存储用户自定义的密码、密钥等,默认的 Secret 类型;

 

 解密:

 创建secret 以键值形式

 secret挂载方式 将secret以挂载的方式到pod里面

 

 

 secret环境变量方式

 

环境变量里面都有

 

 类型三:kubernetes.io/dockerconfigjson

在 Docker harbor 节点(192.168.88.7)上操作

1.1关闭防火墙

systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0

1.2 安装docker

yum install -y yum-utils device-mapper-persistent-data lvm2 
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
yum install -y docker-ce
systemctl start docker.service
systemctl enable docker.service
docker version

建议不要使用最新版本的 Docker,会存在与 api-server 版本不兼容,安装20版本的docker 

yum install -y docker-ce-20.10.18 docker-ce-cli-20.10.18

 、部署 Harbor 服务

2.1修改配置

​tar zxvf harbor-offline-installer-v1.2.2.tgz -C /usr/local/
vim /usr/local/harbor/harbor.cfg
--5行--修改,设置为Harbor服务器的IP地址或者域名
hostname = 192.168.246.14cd /usr/local/harbor/
./install.sh

yum install -y docker-ce-20.10.18 docker-ce-cli-20.10.18

 

上传软件表到 /opt 目录中 

上传 docker-compose 和 harbor-offline-installer-v1.2.2.tgz 到 /opt 目录中

上传 docker-compose 和 harbor-offline-installer-v1.2.2.tgz 到 /opt 目录中cd /opt
chmod +x docker-compose
mv docker-compose /usr/local/bin/

 在 Harbor 中创建一个新项目

(1)浏览器访问:http://192.168.246.14登录 Harbor WEB UI 界面,默认的管理员用户名和密码是 admin/Harbor12345
(2)输入用户名和密码登录界面后可以创建一个新项目。点击“+项目”按钮
(3)填写项目名称为“kgc-project”,点击“确定”按钮,创建新项目

在node1 node2节点上将nginx:latest镜像删除

随后,在harbor上面下载nginx:1.24版本的镜像

 

随后,修改镜像标签

 再次查看镜像,已经成功了

 

然后完成node节点的docker都部署私有镜像地址,并重启docker

现在harbor中,/etc/docker/daemon.json中 将harbor的配置复制到node 1 node2 同路径下的/etc/docker/daemon.json中 粘贴即可(要将node1 node2指向私有仓库)

 

 

 ​​​​​​

 创建secret账号,基于账号来实现镜像拉取

 里面包含了harbor的用户名跟密码

kubectl create secret docker-registry secret-harbor --docker-username=admin --docker-server=http://192.168.20.18 --docker-password=Harbor12345
//创建私有仓库的账号

apiVersion: v1
kind: Pod
metadata:name: pod03
spec:imagePullSecrets:  #镜像拉取密码- name: secret-harborcontainers:- image: 192.168.20.18/test/lxy-nginx:test #私有仓库拉取镜像name: pod03ports:- containerPort: 80dnsPolicy: ClusterFirstrestartPolicy: Always

 

 

相关文章:

  • 自然语言处理(NLP)—— 主题建模
  • WMS仓储管理系统高效驱动制造企业物料管理
  • dart 基本语法
  • 【Python】认识 Python
  • 【设计模式之外观模式 -- C++】
  • 【数据结构】栈和队列-->理解和实现(赋源码)
  • width: 100%和 width: 100vw这两种写法有什么区别
  • 大模型参加高考,同写2024年高考作文,及格分(通义千问、Kimi、智谱清言、Gemini Advanced、Claude-3-Sonnet、GPT-4o)
  • 2024年安全现状报告
  • 【Postman接口测试】第四节.Postman接口测试项目实战(中)
  • Vue项目安装axios报错npm error code ERESOLVE npm error ERESOLVE could not resolve解决方法
  • selenium中,如何使用选择框
  • stack和queue的模拟实现
  • 代码随想录算法训练营第二十二天
  • VCS基本仿真
  • 分享的文章《人生如棋》
  • flutter的key在widget list的作用以及必要性
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • JavaScript的使用你知道几种?(上)
  • js作用域和this的理解
  • PhantomJS 安装
  • 阿里云前端周刊 - 第 26 期
  • 从零开始在ubuntu上搭建node开发环境
  • 动态规划入门(以爬楼梯为例)
  • 二维平面内的碰撞检测【一】
  • 关于springcloud Gateway中的限流
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 如何编写一个可升级的智能合约
  • 如何学习JavaEE,项目又该如何做?
  • 使用docker-compose进行多节点部署
  • MPAndroidChart 教程:Y轴 YAxis
  • 国内开源镜像站点
  • #NOIP 2014# day.1 T2 联合权值
  • #数据结构 笔记一
  • (1)svelte 教程:hello world
  • (附源码)计算机毕业设计大学生兼职系统
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (转)fock函数详解
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • .mysql secret在哪_MySQL如何使用索引
  • .NET delegate 委托 、 Event 事件,接口回调
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)
  • .NET上SQLite的连接
  • .NET业务框架的构建
  • /dev/sda2 is mounted; will not make a filesystem here!
  • @ComponentScan比较
  • [17]JAVAEE-HTTP协议
  • [Android学习笔记]ScrollView的使用
  • [ARM]ldr 和 adr 伪指令的区别
  • [BUUCTF 2018]Online Tool(特详解)
  • [CSS]盒子模型
  • [HNOI2010]BUS 公交线路
  • [java] 23种设计模式之责任链模式