配置资源管理

目录

    • 1 Secret
      • 1.1 Secret 的类型
      • 1.2 Secret 使用方式
      • 1.3 示例
        • 1.3.1 创建 Secret 示例
        • 1.3.2 使用 Secret 示例
    • 2 ConfigMap
      • 2.1 示例
        • 2.1.1 创建 ConfigMap 示例
        • 2.1.2 Pod 中使用 ConfigMap
        • 2.1.3 ConfigMap 的热更新
        • 2.1.4 ConfigMap 更新后滚动更新 Pod

1 Secret

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

1.1 Secret 的类型

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

1.2 Secret 使用方式

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

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

1.3 示例

1.3.1 创建 Secret 示例

1.用kubectl create secret命令创建Secret
echo -n ‘zhangsan’ > username.txt
echo -n ‘abc1234’ > password.txt
命令解释:在 Kubernetes 中创建一个名为 “mysecret” 的通用密钥(Generic)。该密钥将从 "username.txt"和 "password.txt"两个文件中读取数据。将这两个文件中的内容作为密钥的值存储在 Kubernetes 的 Secret 中,以便在容器中安全地使用这些敏感信息。
kubectl create secret generic mysecret --from-file=username.txt --from-file=password.txt
查看
kubectl get secrets
在这里插入图片描述
kubectl describe secret mysecret
在这里插入图片描述
get 或 describe 指令都不会展示 secret 的实际内容,这是出于对数据的保护的考虑
2.用 base64 编码,创建Secret
echo -n zhangsan | base64
在这里插入图片描述
echo -n abc1234 | base64
在这里插入图片描述
vim secret.yaml

apiVersion: v1
kind: Secret
metadata:name: mysecret1
type: Opaque
data:username: emhhbmdzYM4=password: YWJjMTIzNA==

kubectl create -f secret.yaml

kubectl get secrets
在这里插入图片描述
kubectl get secret mysecret1 -o yaml
在这里插入图片描述

1.3.2 使用 Secret 示例

1.将 Secret 挂载到 Volume 中,以 Volume 的形式挂载到 Pod 的某个目录下
vim secret-test.yaml

apiVersion: v1
kind: Pod
metadata:name: mypod
spec:containers:- name: nginximage: nginxvolumeMounts:- name: secretsmountPath: "/etc/secrets"readOnly: truevolumes:- name: secretssecret:secretName: mysecret

kubectl create -f secret-test.yaml

kubectl get pods
在这里插入图片描述
kubectl exec -it seret-test bash
cd /etc/secrets/
ls
在这里插入图片描述
cat password.txt
在这里插入图片描述
cat username.txt
在这里插入图片描述
2.将 Secret 导出到环境变量中
vim secret-test1.yaml

apiVersion: v1
kind: Pod
metadata:name: mypod1
spec:containers:- name: nginximage: nginxenv:- name: TEST_USERvalueFrom:secretKeyRef:name: mysecret1key: username- name: TEST_PASSWORDvalueFrom:secretKeyRef:name: mysecret1key: password

kubectl apply -f secret-test1.yaml

kubectl get pods
在这里插入图片描述
kubectl exec -it mypod bash
echo $TEST_USER
在这里插入图片描述
echo $TEST_PASSWORD
在这里插入图片描述

2 ConfigMap

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

2.1 示例

2.1.1 创建 ConfigMap 示例

1.使用目录创建
mkdir /opt/configmap/

vim /opt/configmap/game.properties
enemies=aliens
lives=3
enemies.cheat=true
enemies.cheat.level=noGoodRotten
secret.code.passphrase=UUDDLRLRBABAS
secret.code.allowed=true
secret.code.lives=30

vim /opt/configmap/ui.properties

color.good=purple
color.bad=yellow
allow.textmode=true
how.nice.to.look=fairlyNice

解释:–from-file 指定在目录下的所有文件都会被用在 ConfigMap 里面创建一个键值对,键的名字就是文件名,值就是文件的内容
kubectl create configmap game-config --from-file=/opt/configmap/
kubectl get cm
在这里插入图片描述
kubectl get cm game-config -o yaml
在这里插入图片描述
2.使用文件创建
只要指定为一个文件就可以从单个文件中创建 ConfigMap
–from-file 这个参数可以使用多次,即可以使用两次分别指定上个实例中的那两个配置文件,效果就跟指定整个目录是一样的

kubectl create configmap game-config-2 --from-file=/opt/configmap/game.properties --from-file=/opt/configmap/ui.properties

kubectl describe cm game-config-2
在这里插入图片描述
3.使用字面值创建
使用文字值创建,利用 --from-literal 参数传递配置信息,该参数可以使用多次,格式如下:
kubectl create configmap special-config --from-literal=special.how=very --from-literal=special.type=good

kubectl get configmaps special-config -o yaml
在这里插入图片描述
删除
kubectl delete cm --all
kubectl delete pod --all

2.1.2 Pod 中使用 ConfigMap

1.使用 ConfigMap 来替代环境变量
vim env.yaml

apiVersion: v1
kind: ConfigMap
metadata:name: special-confignamespace: default
data:special.how: veryspecial.type: good
---
apiVersion: v1
kind: ConfigMap
metadata:name: env-confignamespace: default
data:log_level: INFO

kubectl create -f env.yaml

kubectl get cm
在这里插入图片描述
创建 Pod
vim test-pod.yaml

apiVersion: v1
kind: Pod
metadata:name: test-pod
spec:containers:- name: busyboximage: busybox:1.28.4command: [ "/bin/sh", "-c", "env" ]env:- name: SPECIAL_HOW_KEYvalueFrom:configMapKeyRef:name: special-configkey: special.how- name: SPECIAL_TYPE_KEYvalueFrom:configMapKeyRef:name: special-configkey: special.typeenvFrom:- configMapRef:name: env-configrestartPolicy: Never

kubectl create -f test-pod.yaml

kubectl get pods
在这里插入图片描述
kubectl logs pod-test
在这里插入图片描述
2.用 ConfigMap 设置命令行参数
vim test-pod2.yaml

apiVersion: v1
kind: Pod
metadata:name: test-pod2
spec:containers:- name: busyboximage: busybox:1.28.4command: - /bin/sh- -c- echo "$(SPECIAL_HOW_KEY) $(SPECIAL_TYPE_KEY)"env:- name: SPECIAL_HOW_KEYvalueFrom:configMapKeyRef:name: special-configkey: special.how- name: SPECIAL_TYPE_KEYvalueFrom:configMapKeyRef:name: special-configkey: special.typeenvFrom:- configMapRef:name: env-configrestartPolicy: Never

kubectl create -f test-pod2.yaml

kubectl get pods
在这里插入图片描述
kubectl logs test-pod2
在这里插入图片描述
3.通过数据卷插件使用ConfigMap
在数据卷里面使用 ConfigMap,就是将文件填入数据卷,在这个文件中,键就是文件名,键值就是文件内容
vim test-pod3.yaml

apiVersion: v1
kind: Pod
metadata:name: test-pod3
spec:containers:- name: busyboximage: busybox:1.28.4command: [ "/bin/sh", "-c", "sleep 36000" ]volumeMounts:- name: config-volumemountPath: /etc/configvolumes:- name: config-volumeconfigMap:name: special-configrestartPolicy: Never

kubectl create -f test-pod3.yaml

kubectl get pods
在这里插入图片描述
kubectl exec -it test-pod3 sh
cd /etc/config/
ls
在这里插入图片描述
cat special.how
在这里插入图片描述
cat special.type
在这里插入图片描述

2.1.3 ConfigMap 的热更新

vim test-pod4.yaml

apiVersion: v1
kind: ConfigMap
metadata:name: log-confignamespace: default
data:log_level: INFO
---
apiVersion: apps/v1
kind: Deployment
metadata:name: my-nginx
spec:replicas: 1selector:matchLabels:run: my-nginxtemplate:metadata:labels:run: my-nginxspec:containers:- name: my-nginximage: nginxports:- containerPort: 80volumeMounts:- name: config-volumemountPath: /etc/configvolumes:- name: config-volumeconfigMap:name: log-config

kubectl apply -f test-pod4.yaml

kubectl get pods
在这里插入图片描述
kubectl edit configmap log-config
在这里插入图片描述
等大概10秒左右,使用该 ConfigMap 挂载的 Volume 中的数据同步更新
kubectl exec -it my-nginx-7b8755d996-ndf8n – cat /etc/config/log_level
在这里插入图片描述

2.1.4 ConfigMap 更新后滚动更新 Pod

更新 ConfigMap 可以触发相关 Pod 的滚动更新,可以通过在 .spec.template.metadata.annotations 中添加 version/config ,每次通过修改 version/config 来触发滚动更新
kubectl patch deployment my-nginx --patch ‘{“spec”: {“template”: {“metadata”: {“annotations”: {“version/config”: “20210525” }}}}}’

kubectl get pods
在这里插入图片描述

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

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

相关文章

PaddleOCR基于PPOCRv4的垂类场景模型微调——手写文字识别

PaddleOCR手写文字识别 一. 项目背景二. 环境配置三. 数据构造四. 模型微调五. 串联推理六. 注意事项七. 参考文献 光学字符识别(Optical Character Recognition, OCR),ORC是指对包含文本资料的图像文件进行分析识别处理,获取文字…

HTML+CSS+BootStrap景区官网

一、技术栈 支持pc、pad、手机访问,页面自适应!! html5cssbootstrapjs 二、项目截图 接受项目定制,站内联系博主!!!

【设计模式】观察者模式及函数式编程的替代C++

本文介绍观察者模式以及使用函数式编程替代简单的策略模式。 观察者模式 观察者模式是一种行为型设计模式,它定义了一种一对多的依赖关系,当一个对象的状态发生改变时,其所有依赖者都会收到通知并自动更新。 当对象间存在一对多关系时&#…

构建安全的REST API:OAuth2和JWT实践

引言 大家好,我是小黑,小黑在这里跟咱们聊聊,为什么REST API这么重要,同时,为何OAuth2和JWT在构建安全的REST API中扮演着不可或缺的角色。 想象一下,咱们每天都在使用的社交媒体、在线购物、银行服务等等…

linux中对信号的认识

信号的概念与相关知识认识 信号是向目标进程发送消息通知的的一种机制。 信号可以以异步的方式发送给进程,也就是说,进程无需主动等待,而是在任何时间都可以接收到信号。 信号的种类 用kill-l命令查看系统定义的信号列表: 前台…

「Java开发指南」MyEclipse如何支持Spring Scaffolding?(四)

在上文中(点击这里回顾>>)主要为大家介绍了应用程序分层、代码助手等内容,本文将继续介绍Spring DSL模型等。 MyEclipse v2023.1.2离线版下载(Q技术交流:742336981) 5. Spring DSL模型 支持Spring的MyEclipse…

使用华为云云函数functiongraph

之前使用腾讯云serverless,但是突然开始收费了。所以改用functiongraph 首先登陆华为云。 目录 1.登录华为云 2.在控制台找到functiongraph并开通 3.添加依赖包: 3.1 制作依赖包 3.2引入依赖包 4.发送请求 4.1直接发送 4.1.1uri 4.1.2 请求头…

WordPress建站入门教程:如何在本地电脑搭建WordPress网站?

前面跟大家分享了『WordPress建站入门教程:如何安装本地WordPress网站运行环境?』,接下来boke112百科就继续跟大家分享本地电脑如何搭建WordPress网站。 小皮面板(phpstudy)的“软件管理 – 网站程序”虽然可以一键部…

从0开始学习NEON(1)

1、前言 在上个博客中对NEON有了基础的了解,本文将针对一个图像下采样的例子对NEON进行学习。 学习链接:CPU优化技术 - NEON 开发进阶 上文链接:https://blog.csdn.net/weixin_42108183/article/details/136412104 2、第一个例子 现在有一张图片,需…

VS Code 的粘性滚动预览 - 类似于 Excel 的冻结首行

VS Code 的粘性滚动预览 - 类似于 Excel 的冻结首行功能,即滚动 UI 显示当前源代码范围。便于在代码行数比较多的时候更好的知道自己所在的位置。粘性滚动UI 显示用户在滚动期间所处的范围,将显示编辑器顶部所在的类/接口/命名空间/函数/方法/构造函数&a…

端接电阻没选对,DDR颗粒白费?

高速先生成员--姜杰 端接可以解决很多反射问题,如果还有问题,有没有一种可能是端接电阻阻值没选对? 对于点到点的拓扑,末端并联电阻的阻值比较容易选择,端接电阻阻值R与传输线特征阻抗一样即可。 VTT为1V时&#xff0c…

CSS3笔记

1.相同优先级的样式以写在后面的为主。 2.交集选择器,并且 条件挨在一起 p.rich{...} /*p元素class有rich的元素*/ 3.并集选择器,或者 逗号隔开 .class1,class2{...}/*满足其中一个类名都会使用该样式*/ 4.后代选择器 空格 隔开 所有符合的包括孙子及…