云原生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.rhkb.cn/news/146053.html

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

相关文章

2022年中国征信行业覆盖人群、参与者数量及征信业务查询量统计[图]

征信是指依法收集、整理、保存、加工自然人、法人及其他组织的信用信息&#xff0c;并对外提供信用报告、信用评估、信用信息咨询等服务&#xff0c;帮助客户判断、控制信用风险&#xff0c;进行信用管理的活动。 征信业主要范畴 资料来源&#xff1a;共研产业咨询&#xff08…

百元开放式耳机推荐哪款、性价比最好的开放式耳机推荐

随着蓝牙耳机产业的高速发展&#xff0c;目前最热门的蓝牙耳机莫过于开放式的&#xff0c;跟传统的蓝牙耳机相比&#xff0c;开放式的耳机拥有久戴不累、安全舒适等优势&#xff0c;所谓的“开放式耳机”&#xff0c;就是指不用塞入耳朵内&#xff0c;也能听音乐的耳机&#xf…

基于.Net Core实现自定义皮肤WidForm窗口

前言 今天一起来实现基于.Net Core、Windows Form实现自定义窗口皮肤&#xff0c;并实现窗口移动功能。 素材 准备素材&#xff1a;边框、标题栏、关闭按钮图标。 窗体设计 1、创建Window窗体项目 2、窗体设计 拖拉4个Panel控件&#xff0c;分别用于&#xff1a;标题栏、关…

单元测试框架-Pytest(简单学习)

单元测试框架-Pytest Pytest是基于Python语言的单元测试框架&#xff0c;也是一个命令行的工具&#xff0c;比 unittest 测试框架更灵活。具有以下特点&#xff1a; 入门简单&#xff0c;易上手&#xff0c;官方文档丰富而且使用广泛&#xff0c;有大量的参数例子。 unittest…

如何利用niceGUI构建一个流式单轮对话界面

官方文档 参考文档 import asyncio import time import requests from fastapi import FastAPI from nicegui import app, uiclass ChatPage:temperature: ui.slider Nonetop_p: ui.slider Noneapi_key: ui.input Nonemodel_name: ui.input Noneprompt: ui.textarea None…

PHP 数码公司运营管理系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP 数码公司运营管理系统系统是一套完善的web设计系统&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 php 数码公司运营管理系统 代码 https://download.csdn.net/download/qq_41…

Neural Networks for Fingerprint Recognition

Neural Computation ( IF 3.278 ) 摘要&#xff1a; 在采集指纹图像数据库后&#xff0c;设计了一种用于指纹识别的神经网络算法。当给出一对指纹图像时&#xff0c;算法输出两个图像来自同一手指的概率估计值。在一个实验中&#xff0c;神经网络使用几百对图像进行训练&…

Flutter笔记:AnimationMean、AnimationMax 和 AnimationMin 三个类的用法

Flutter笔记 AnimationMean、AnimationMax 和 AnimationMin三个类的用法 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/…

阿里云网络、数据中心和服务器技术创新优势说明

阿里云服务器技术创新、网络技术创新、数据中心技术创新和智能运维&#xff1a;云服务器方升架构、自研硬件、自研存储硬件AliFlash和异构计算加速平台&#xff0c;以及全自研网络系统技术创新和数据中心巴拿马电源、液冷技术等技术创新说明&#xff0c;阿里云百科aliyunbaike.…

树莓派4B串口通信配置方式

目录 1树莓派4B的安装&#xff1a; 1.1安装Serial与使用 1.1.1安装serial 1.1.2打开串口 1.2设置硬件串口为GPIO串口&#xff08;修改串口映射关系&#xff09; 1.2.1修改配置文件 2.1minicom串口 2.1.1安装minicom 这篇博客源于&#xff1a;工创赛。需要让树莓派与STM…

设计模式探索:从理论到实践的编码示例 (软件设计师笔记)

&#x1f600;前言 设计模式&#xff0c;作为软件工程领域的核心概念之一&#xff0c;向我们展示了开发过程中面对的典型问题的经典解决方案。这些模式不仅帮助开发者创建更加结构化、模块化和可维护的代码&#xff0c;而且也促进了代码的复用性。通过这篇文章&#xff0c;我们…

AdaBoost算法解密:从基础到应用的全面解析

目录 一、简介什么是AdaBoostAdaBoost的历史和重要性定义 二、基础概念集成学习&#xff08;Ensemble Learning&#xff09;定义示例 弱学习器和强学习器定义示例 三、AdaBoost算法原理样本权重&#xff08;Sample Weights&#xff09;定义示例 学习器权重&#xff08;Learner …

C/C++与汇编混合编程

1. C/C调用汇编 C/C想调用汇编代码必须要注意名称修饰的问题 名称修饰(name decoration): 一种标准的C/C编译技术, 通过添加字符来修改函数名, 添加的字符指明了每个函数参数的确切类型。主要是为了支持函数重载, 但对于汇编来说其问题在于, C/C编译器让链接器去找被修饰过的名…

CSS box-shadow阴影

1、语法 box-shadow: h-shadow v-shadow blur spread color inset; 值描述h-shadow必需的。水平阴影的位置。允许负值v-shadow必需的。垂直阴影的位置。允许负值blur可选。模糊距离spread可选。阴影的大小color可选。阴影的颜色。在CSS颜色值寻找颜色值的完整列表inset可选。…

Windows驱动反调试的一种手段

Windows驱动反调试的一种手段 今天要介绍的是eprocess的0xbc位置 0x0bc DebugPort : Ptr32 Void DebugPort是在用windowsapi调试方式时候所使用的数据结构指针&#xff0c;那么如果我们能够循环清空这个值的话&#xff0c;就可以做到大部分windows调试api都无法正确调试进程 …

【论文笔记】DiffusionTrack: Diffusion Model For Multi-Object Tracking

原文链接&#xff1a;https://arxiv.org/abs/2308.09905 1. 引言 多目标跟踪通常分为两阶段的检测后跟踪&#xff08;TBD&#xff09;和一阶段的联合检测跟踪&#xff08;JDT&#xff09;。TBD对单帧进行目标检测后&#xff0c;使用跟踪器跨帧关联相同物体。使用的跟踪器包括使…

SLAM从入门到精通(tf的使用)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 在ros的机器人学习过程中&#xff0c;有一件事情是肯定少不了的。那就是坐标系的转换。其实这也很容易理解。假设有一个机器人&#xff0c;它有一个…

DC电源模块关于宽电压输入和输出的范围

BOSHIDA DC电源模块关于宽电压输入和输出的范围 DC电源模块是一种电子设备&#xff0c;能够将输入的直流电源转换成所需的输出电源&#xff0c;用于供电各种电子设备。其中&#xff0c;关于宽电压输入和输出的范围&#xff0c;是DC电源模块常见的设计要求之一。本文将详细介绍…

UG\NX二次开发 信息窗口的一些操作 NXOpen/ListingWindow

文章作者:里海 来源网站:王牌飞行员_里海_里海NX二次开发3000例,里海BlockUI专栏,C\C++-CSDN博客 简介: UG\NX二次开发 信息窗口的一些操作 NXOpen/ListingWindow 效果: 代码: #include "me.hpp" #include <NXOpen/ListingWindow.hxx> #include <…

安全渗透测试基础之漏洞扫描工具之Nessus使用介绍

前置条件:Nessus工具使用前要确保工具是服务状态 systemctl start nessusd.service 启动nessus服务 systemctl status nessusd.service 查看nessus服务状态 1.配置扫描模板 2.新增高级扫描 2.1 设置日程表: 2.2设置邮件收件人(可选): 2.3主机发现: 2.