云原生Kubernetes:K8S配置资源管理

目录

一、理论

1.Secret

2.Secret创建

3.Secret使用

4.Configmap

5.Configmap创建

6.Configmap使用

二、实验

1.Secret创建

2.Secret使用

3.Configmap创建

4.Configmap使用

三、问题

1.变量引用生成资源报错

2.查看pod日志失败

3.创建configmap报错

4.YAML创建configmap报错

5. 生成资源报错

6.文件挂载pod报错Error

四、总结


一、理论

1.Secret

(1) 概念

Secret 解决了密码、token、秘钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到镜像或者 Pod Spec 中。Secret 可以以 Volume 或者环境变量的方式使用。

Secret 是一种包含少量敏感信息例如密码、令牌或密钥的对象。 这样的信息可能会被放在 Pod 规约中或者镜像中。 使用 Secret 意味着你不需要在应用程序代码中包含机密数据。

由于创建 Secret 可以独立于使用它们的 Pod, 因此在创建、查看和编辑 Pod 的工作流程中暴露 Secret(及其数据)的风险较小。 Kubernetes 和在集群中运行的应用程序也可以对 Secret 采取额外的预防措施, 例如避免将机密数据写入非易失性存储。

Secret 类似于 ConfigMap但专门用于保存机密数据。

(2)参数

secret 可选参数有三种:

1)generic: 通用类型,通常用于存储密码数据。2)tls:此类型仅用于存储私钥和证书。3)docker-registry: 若要保存 docker 仓库的认证信息的话,就必须使用此种类型来创建。

(3)类型

secret 常用类型:

1)Service Account:
用于被 serviceaccount 引用。serviceaccout 创建时 Kubernetes 会默认创建对应的 secret。Pod 如果使用了 serviceaccount,对应的 secret 会自动挂载到 Pod的/run/secrets/kubernetes.io/serviceaccount 目录中。2)Opaque:
base64 编码格式的 Secret,用来存储密码、秘钥等。可以通过 base64 --decode 解码获得原始数据,因此安全性弱。3)kubernetes.io/dockerconfigjson:
用来存储私有 docker registry 的认证信息。

创建 Secret 时,你可以使用 Secret 资源的 type 字段, 或者与其等价的 kubectl 命令行参数(如果有的话)为其设置类型。 Secret 的 type 有助于对不同类型机密数据的编程处理。

Kubernetes 提供若干种内置的类型,用于一些常见的使用场景。 针对这些类型,Kubernetes 所执行的合法性检查操作以及对其所实施的限制各不相同。

内置类型用法
Opaque用户定义的任意数据
kubernetes.io/service-account-token服务账号令牌
kubernetes.io/dockercfg~/.dockercfg 文件的序列化形式
kubernetes.io/dockerconfigjson~/.docker/config.json 文件的序列化形式
kubernetes.io/basic-auth用于基本身份认证的凭据
kubernetes.io/ssh-auth用于 SSH 身份认证的凭据
kubernetes.io/tls用于 TLS 客户端或者服务器端的数据
bootstrap.kubernetes.io/token启动引导令牌数据

通过为 Secret 对象的 type 字段设置一个非空的字符串值,你也可以定义并使用自己 Secret 类型。如果 type 值为空字符串,则被视为 Opaque 类型。 Kubernetes 并不对类型的名称作任何限制。不过,如果你要使用内置类型之一, 则你必须满足为该类型所定义的所有要求。


2.Secret创建

(1)命令行创建

Secret的命令行创建方法与configmap一样,可以通过命令行或者文件/目录的方式创建,这里就不过多介绍,此处使用命名行创建,其它方法可以参照后面的方法进行创建

把 mysql 的 root 用户的 password 创建成 secret

kubectl create secret generic mysql-password --from-literal=password=xy123456
# 查看secret详细信息
kubectl describe secret mysql-password

(2)YAML文件创建

通过手动加密,基于base64加密

echo -n 'admin' | base64
YWRtaW4=
echo -n 'xy123456' | base64
eHkxMjM0NTY=

创建YAML

vim  secret.yaml apiVersion: v1
kind: Secret
metadata:name: mysecret
type: Opaque
data:username: YWRtaW4=password: eHkxMjM0NTY=
kubectl apply -f secret.yaml 
kubectl get secret
kubectl describe secret mysecret

3.Secret使用

secret使用有2种方法

 

(1) 变量引用

vim secret-pod.yaml apiVersion: v1
kind: Pod
metadata:name: secretpod
spec:containers:- name: busyboximage: busyboxcommand: [ "/bin/sh","-c","echo $(SECRET_USERNAME) $(SECRET_PASSWORD)" ]env:- name: SECRET_USERNAMEvalueFrom:secretKeyRef:name: mysecretkey: username- name: SECRET_PASSWORDvalueFrom:secretKeyRef:name: mysecretkey: passwordrestartPolicy: Never
kubectl apply -f secret-pod.yaml 
kubectl get pod
kubectl logs secretpod

(2)文件挂载

将 Secret 挂载到 Volume 中

vim pod_secret_volume.yaml
apiVersion: v1
kind: Pod
metadata:name: secret-volume-pod
spec:containers:- name: nginximage: nginxvolumeMounts:- name: secret-volumemountPath: "/etc/secret"readOnly: truevolumes:- name: secret-volumesecret:secretName: mysecret
kubectl apply -f pod_secret_volume.yaml 
kubectl get pod
kubectl exec -it secret-volume-pod /bin/bash

进入pod可以看到/etc/secret下有password和username两个文件,查看内容和我们创建的secret内容吻合。

kubectl exec -it secret-volume-pod /bin/bash
root@secret-volume-pod:/# cd /etc/secret
root@secret-volume-pod:/etc/secret# ls
password  username
root@secret-volume-pod:/etc/secret# cat username 
adminroot@secret-volume-pod:/etc/secret# cat password 
xy123456root@secret-volume-pod:/etc/secret# exit
exit

4.Configmap

(1)概念

Configmap 是 k8s 中的资源对象,用于保存非机密性的配置的,数据可以用 key/value 键值对的形式保存,也可通过文件的形式保存。

ConfigMap来替代环境变量,ConfigMap可以被用来填入环境变量; configmap里面的信息读入环境变量,而容器启动的时候可以利用这些环境变量.

ConfigMap是以key:value的形式保存配置项,既可以用于表示一个变量的值(例如config=info),也可以用于表示一个完整配置文件的内容(例如server.xml=<?xml…>…)。

(2)作用

在部署服务的时候,每个服务都有自己的配置文件:

1)如果一台服务器上部署多个服务:nginx、tomcat、apache等,那么这些配置都存在这个节点上2)假如一台服务器不能满足线上高并发的要求,需要对服务器扩容,扩容之后的服务器还是需要部署多个服务:3)nginx、tomcat、apache,新增加的服务器上还是要管理这些服务的配置4)如果有一个服务出现问题,需要修改配置文件,每台物理节点上的配置都需要修改,这种方式肯定满足不了线上大批量的配置变更要求
所以,k8s 中引入了 Configmap资源对象,可以当成 volume 挂载到 pod 中,实现统一的配置管理。

(3)特点

1)Configmap 是 k8s 中的资源, 相当于配置文件,可以有一个或者多个 Configmap;2)Configmap 可以做成 Volume,k8s pod 启动之后,通过 volume 形式映射到容器内部指定目录上;3)容器中应用程序按照原有方式读取容器特定目录上的配置文件;4)在容器看来,配置文件就像是打包在容器内部特定目录,整个过程对应用没有任何侵入。

(4)结构

5.Configmap创建

configmap创建有二种方式,

一是命令行方式,分为从字面读取(--from-literal)和从目录(--from-file)读取。

二是yaml方式。

(1) 命令行直接创建

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

#创建
kubectl create configmap nginx-config --from-literal=nginx_port=80 --from-literal=server_name=nginx
#查看configmap
kubectl describe configmap nginx-config

(2)通过文件/目录创建

通过指定文件创建一个 configmap,–from-file=<文件/目录>

vim nginx.confserver {server_name www.nginx.com;listen 80;root /home/nginx/www/
}

通过指定文件创建

 kubectl create configmap www-nginx --from-file=www=/opt/config/nginx.confkubectl describe configmap www-nginx

 通过目录创建

当某些服务存在多个配置文件时,放在同一目录下,我们可以指定目录,进行创建

kubectl create configmap www-nginx2 --from-file=/opt/config/
kubectl describe configmap www-nginx2

(3)YAML创建

 vim nginx_conf.yamlapiVersion: v1
kind: ConfigMap
metadata:name: nginx-conflabels:app: nginx-conf
data:nginx.conf: |server {server_name www.nginx.com;listen 80;root /home/nginx/www/}

6.Configmap使用

(1)新创一个configmap用于测试

apiVersion: v1
kind: ConfigMap
metadata:name: testlabels:app: test
data:xy: "xuexi"hw: "hello world"
kubectl apply -f test.yaml

(2)变量引入

创建一个pod,引用configmap

apiVersion: v1
kind: Pod
metadata:name: mypod
spec:containers:- name: busyboximage: busyboxcommand: [ "/bin/sh", "-c", "echo $(LEVEL) $(TYPE)" ]env:- name: LEVELvalueFrom:configMapKeyRef:name: testkey: xy- name: TYPEvalueFrom:configMapKeyRef:name: testkey: hwrestartPolicy: Never                         
kubectl apply -f pod-configmap.yaml 
kubectl get pod
kubectl logs mypod

(3)文件挂载 

apiVersion: v1
kind: Pod
metadata:name: mypod1
spec:containers:- name: busyboximage: busyboxcommand: [ "/bin/sh","-c","cat /etc/config/hi" ]volumeMounts:- name: config-volumemountPath: /etc/configvolumes:- name: config-volumeconfigMap:name: testrestartPolicy: Never
#创建pod
kubectl apply -f cm.yaml
#查看pod日志
kubectl logs mypod1

二、实验

1.Secret创建

(1)命令行创建

把 mysql 的 root 用户的 password 创建成 secret

密文类型威Opaque,查询不会显示password的值

(2)YAML文件创建

通过手动加密,基于base64加密

创建YAML

生成资源

查看信息

2.Secret使用

(1)变量引用

生成资源

查看信息

(2)文件挂载

将 Secret 挂载到 Volume 中

生成资源

查看信息

进入pod可以看到/etc/secret下有password和username两个文件,查看内容和我们创建的secret内容吻合。

3.Configmap创建

 (1) 命令行直接创建

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

(2)通过文件/目录创建

通过指定文件创建一个 configmap,–from-file=<文件/目录>

通过指定文件创建

 通过目录创建

当某些服务存在多个配置文件时,放在同一目录下,我们可以指定目录,进行创建

(3)YAML创建

生成资源

查看信息

4.Configmap使用

 (1)新创一个configmap用于测试

生成资源

(2)变量引入

创建一个pod,引用configmap

输出2个变量,用于测试

LEVEL:定义pod容器内的变量

test为configmap的名称

xw为tes中的key

(3)文件挂载 

"cat /etc/config/hi"输出test配置种的key为hw的值

挂载在pod内容器的位置: /etc/config

test为configmap的名称


启动pod并查看pod日志

三、问题

1.变量引用生成资源报错

(1)报错

(2)原因分析

资源类型错误

(3)解决方法

修改前:

修改后:

成功:

2.查看pod日志失败

(1)报错

(2)原因分析

pod还在创建,未启动

(3)解决方法

等待几秒,再次查看

3.创建configmap报错

(1)报错

(2)原因分析

文件名已存在

(3)解决方法

删除已存在文件

4.YAML创建configmap报错

(1)报错

(2)原因分析

配置文件错误

(3)解决方法

修改前:

修改后:

5. 生成资源报错

(1)报错

(2)原因分析

配置文件错误

(3)解决方法

配置文件关键词“ConfigMap”,添加 “|”

修改前:

修改后:

成功:

6.文件挂载pod报错Error

(1)报错

(2)原因分析

配置文件错误

(3)解决方法

修改配置文件

修改前:

修改后:

成功

四、总结

使用secret的基本流程:

1.创建k8s集群
2.创建管理的文件
3.验证
4.解码
5.清理

configmap创建有二种方式,

一是命令行方式,分为从字面读取(--from-literal)和从目录(--from-file)读取。
下面是二者区别:
1.   --from-literal从字面读取的好处就是快速和便捷,你可以通过关键字参数的形式(**kargs),将配置信息直接传递至configmap,然后在pod启动的时候进行加载;同时这个方式的弊端就是,变量不能实时更新到pod容器。2.   --from-file从目录读取的好处可以实时更新到pod容器。二是yaml方式。

在容器看来,配置文件就像是打包在容器内部特定目录,整个过程对应用没有任何侵入。

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

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

相关文章

网络编程-UDP协议(发送数据和接收数据)

需要了解TCP协议的&#xff0c;可以看往期文章 https://blog.csdn.net/weixin_43860634/article/details/133274701 TCP/IP参考模型 通过此图&#xff0c;可以了解UDP所在哪一层级中 代码案例 发送数据 package com.hidata.devops.paas.udp;import java.io.IOException; …

ElementUI之登陆+注册->饿了吗完成用户登录界面搭建,axios之get请求,axios之post请求,跨域,注册界面

饿了吗完成用户注册登录界面搭建axios之get请求axios之post请求跨域注册界面 1.饿了吗完成用户注册登录界面搭建 将端口号8080改为8081 导入依赖&#xff0c;在项目根目录使用命令npm install element-ui -S&#xff0c;添加Element-UI模块 -g&#xff1a;将依赖下载node_glod…

配置OSPFv3引入外部路由及路由过滤 华为实验

1.1 实验介绍 1.1.1 关于本实验 在大型园区网络中&#xff0c;往往使用不同的路由协议进行组网&#xff0c;实现全网的网络互通。不同的协议间通信&#xff0c;除了路由协议本身&#xff0c;还需要引入外部路由及路由信息过滤等技术。 本章内容主要介绍OSPFv3路由过滤及引入外…

win使用git(保姆级教程)

序言 上学期间用的git并不多&#xff0c;但是从研三实习以及后面工作来看&#xff0c;git是一项必备技能&#xff0c;所以在此来学习一下。 下载git安装包 打开网站&#xff0c;根据需求来下载&#xff1b;一般按照如下方式进行下载&#xff1a; 然后安装的时候记得按下图勾…

webpack:关于处理html文件的插件html-webpack-plugin、add-asset-html-webpack-plugin

简介 add-asset-html-webpack-plugin 将 JavaScript或CSS文件添加到由html-webpack-plugin插件生成的HTML中去。 html-webpack-plugin 默认配置会在出口目录中&#xff08;通过output.path选项配置&#xff09;生成一个index.html文件&#xff1b; 生成的index.html文件将会…

论文笔记:ViTGAN: Training GANs with Vision Transformers

2021 1 intro 论文研究的问题是&#xff1a;ViT是否可以在不使用卷积或池化的情况下完成图像生成任务 即不用CNN&#xff0c;而使用ViT来完成图像生成任务将ViT架构集成到GAN中&#xff0c;发现现有的GAN正则化方法与self-attention机制的交互很差&#xff0c;导致训练过程中…

《优化接口设计的思路》系列:第四篇—接口的权限控制

系列文章导航 《优化接口设计的思路》系列&#xff1a;第一篇—接口参数的一些弯弯绕绕 《优化接口设计的思路》系列&#xff1a;第二篇—接口用户上下文的设计与实现 《优化接口设计的思路》系列&#xff1a;第三篇—留下用户调用接口的痕迹 《优化接口设计的思路》系列&#…

机器人过程自动化(RPA)入门 2. 录制播放

在计算机上记录用户步骤并回放的功能使机器人过程自动化(RPA)取得了巨大成功。如果没有这一功能,该技术的采用可能会非常缓慢,它将被视为另一种自动化/脚本工具。 在前一章中,我们对机器人过程自动化有了基本的了解。在本章中,我们将了解如何使用录音机作为我们旅程中自…

知识库搭建保姆级教程,如何从0到1完成知识库搭建

在这个信息爆炸的时代&#xff0c;如何获取、整理和应用知识成为了我们个体价值和企业核心竞争力打造的重要表现&#xff0c;搭建一个高效的知识库可以提升我们企业的竞争力&#xff0c;必要时还能快速切换赛道&#xff0c;开展一个新的领域。 今天我们将结合HelpLook 来与你一…

行为型模式-解释器模式

提供了评估语言的语法或表达式的方式&#xff0c;它属于行为型模式。这种模式实现了一个表达式接口&#xff0c;该接口解释一个特定的上下文。这种模式被用在 SQL 解析、符号处理引擎等。 意图&#xff1a;给定一个语言&#xff0c;定义它的文法表示&#xff0c;并定义一个解释…

Flink RoaringBitmap去重

1、RoaringBitmap的依赖 <!-- 去重大哥--> <dependency><groupId>org.roaringbitmap</groupId><artifactId>RoaringBitmap</artifactId><version>0.9.21</version> </dependency> 2、Demo去重 package com.gwm.driver…

SpringBoot-Druid

目录 1.什么是Druid 2.主要优点和原因 3.误区 4.Part代码 0.pom 1.Spring.datasource.type: com.alibaba.druid.pool.DruidDataSource 2.Druid用Jasypt加密任意内容 EnableEncryptableProperties开启加密注解 3.Druid监控平台 1.什么是Druid Druid 是一个开源的数据库…

C++之互斥锁、读写锁、互斥量、 信号量、原子锁机制总结(二百二十五)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

MAC word 如何并列排列两张图片

系统&#xff1a;MAC os 参考博客 https://baijiahao.baidu.com/s?id1700824516945958911&wfrspider&forpc 步骤1 新建一个word文档和表格 修改表格属性 去掉自动重调尺寸以适应内容 插入图片 在表格的位置插入对应的图片如下 去除边框 最终结果如下

十大排序算法的实现(C/C++)

以下是十大经典排序算法的简单 C 实现&#xff1a; 冒泡排序&#xff08;Bubble Sort&#xff09;&#xff1a; 思想&#xff1a;重复地遍历要排序的列表&#xff0c;比较相邻的两个元素&#xff0c;如果它们的顺序错误就交换它们。时间复杂度&#xff1a;最坏情况和平均情况…

CentOS安装kafka单机部署

一&#xff1a;保证机器上已经运行的有Java环境 服务器&#xff1a;centos7 kafka版本&#xff1a;3.5.1 二&#xff1a;下载kafka压缩包 下载地址 1.解压kafka压缩包 tar -zxvf kafka_2.13-3.5.1.tgz 2.我得是上传到了 /home目录下&#xff0c;配置文件server.propertie…

UE5 ChaosVehicles载具研究

一、基本组成 载具Actor类名称&#xff1a;WheeledVehiclePawn Actor最原始的结构 官方增加了两个摇臂相机&#xff0c;可以像驾驶游戏那样切换多机位、旋转观察 选择骨骼网格体、动画蓝图类、开启物理模拟 二、SportsCar_Pawn 角阻尼&#xff1a;物体旋转的阻力。数值越大…

云原生技术盛会KubeCon即将召开!亚马逊云科技作为钻石赞助商参会

KubeCon2023将于9月26-28日在上海跨国采购会展中心隆重召开。作为云原生领域最负盛名的技术大会之一&#xff0c;KubeConCloudNativeCon是连接全球开发者与云原生社区的最佳平台&#xff0c;此次还新增Open Source Summit环节&#xff0c;吸引了全球顶尖的云原生专家们汇聚其中…

ArrayBlockingQueue

ArrayBlockingQueue 是 一个并发队列实现,它基于数组的数据结构,提供了线程安全的队列操作。这个队列的容量是固定的,一旦达到容量上限,后续的插入操作将会被阻塞,直到有其他线程从队列中移除元素为止。以下是对 ArrayBlockingQueue 的详细解释: 容量限制:ArrayBlocking…

腾讯mini项目-【指标监控服务重构-会议记录】2023-08-04

组长会议记录 A组 调研 traefik 命名&#xff0c;大驼峰 Grafana metric 的配置还存在有些问题&#xff0c;待解决 完成了 trace 的上报 待办&#xff1a; entry.go : fiber log 重复 【完成】event.go : traceparent 变量&#xff0c;线程隔离&#xff0c;多线程并发问题…