【模块一】kubernetes容器编排进阶实战资源对象之Configmap与Secret简介

kubernetes 资源对象详解及示例

kubernetes 的几个重要概念

资源对象:kubernetes基于声明式API,和资源对象进行交互。

yaml文件:为了方便后期管理,通过使用yaml文件通过API管理资源对象。

yaml必需字段:

  1. apiVersion - 创建该对象所使用的 Kubernetes API 的版本

  2. kind - 想要创建的对象的类型

  3. metadata - 定义识别对象唯一性的数据,包括一个 name 名称、可选的namespace4. spec:定义资源对象的详细规范信息(统一的label标签、容器名称、镜像、端口映射等)

  4. status(Pod创建完成后k8s自动生成status状态)

yaml文件及必需字段

每个API对象都有3大类
属性:元数据metadata、
规范spec和状态status。

spec和status的区别:
spec是期望状态
status是实际状态

Configmap

Configmap将非机密性信息(如配置信息)和镜像解耦, 实现方式为将配置信息放到configmap对象中,然后在pod的中作为Volume挂载到pod中,从而实现导入配置的目的。
使用场景:
     通过Configmap给pod中的容器服务提供配置文件,配置文件以挂载到容器的形式使用。
     通过Configmap给pod定义全局环境变量
     通过Configmap给pod传递命令行参数,如mysql -u -p中的账户名密码可以通过Configmap传递。

 注意事项: 

​     Configmap需要在pod使用它之前创建。 

​     pod只能使用位于同一个namespace的Configmap,即Configmap不能跨namespace使用。

​     通常用于非安全加密的配置场景。 

​     Configmap通常是小于1MB的配置。

default: | 表示一个多行字符串(block scalar)的开始,其中 | 是多行字符串字面量的指示符。这种语法允许你在YAML文件中直接编写多行文本,而不需要对每一行进行额外的缩进或引用处理。[root@k8s-master1 case10-configmap]#cat 1-deploy_configmap.yml 
apiVersion: v1
kind: ConfigMap
metadata:name: nginx-config
data:default: |server {listen       80;server_name  www.mysite.com;index        index.html index.php index.htm;location / {root /data/nginx/html;if (!-e $request_filename) {rewrite ^/(.*) /index.html last;}}}---
#apiVersion: extensions/v1beta1
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deployment
spec:replicas: 1selector:matchLabels:app: ng-deploy-80template:metadata:labels:app: ng-deploy-80spec:containers:- name: ng-deploy-80image: nginx:1.20.2-alpineports:- containerPort: 80volumeMounts:- mountPath: /data/nginx/htmlname: nginx-static-dir- name: nginx-configmountPath:  /etc/nginx/conf.dvolumes:- name: nginx-static-dirhostPath:path: /data/nginx/linux39- name: nginx-configconfigMap:name: nginx-configitems:- key: defaultpath: mysite.conf---
apiVersion: v1
kind: Service
metadata:name: ng-deploy-80
spec:ports:- name: httpport: 81targetPort: 80nodePort: 30019protocol: TCPtype: NodePortselector:app: ng-deploy-80
[root@k8s-master1 case10-configmap]#kubectl apply -f 1-deploy_configmap.yml [root@k8s-master1 case10-configmap]#cat 2-deploy_configmap_env.yml 
apiVersion: v1
kind: ConfigMapmetadata:name: nginx-config
data:username: "user1"password: "12345678"---
#apiVersion: extensions/v1beta1
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deployment
spec:replicas: 1selector:matchLabels:app: ng-deploy-80template:metadata:labels:app: ng-deploy-80spec:containers:- name: ng-deploy-80image: nginx env:- name: MY_USERNAMEvalueFrom:configMapKeyRef:name: nginx-configkey: username- name: MY_PASSWORDvalueFrom:configMapKeyRef:name: nginx-configkey: password######- name: "password"value: "123456"ports:- containerPort: 80

Secret简介

Secret 的功能类似于 ConfigMap给pod提供额外的配置信息,但是
Secret是一种包含少量敏感信息例如密码、令牌或密钥的对象。Secret 的名称必须是合法的 DNS 子域名。每个Secret的大小最多为1MiB,主要是为了避免用户创建非常大的
Secret进而导致API服务器和kubelet内存耗尽,不过创建很多小的
Secret也可能耗尽内存,可以使用资源配额来约束每个名字空间中
Secret的个数。在通过yaml文件创建secret时,可以设置data或stringData字段,data
和stringData字段都是可选的,data字段中所有键值都必须是base64
编码的字符串,如果不希望执行这种 base64字符串的转换操作,也
可以选择设置stringData字段,其中可以使用任何非加密的字符串作
为其取值。Pod 可以用三种方式的任意一种来使用 Secret:
作为挂载到一个或多个容器上的卷 中的文件(crt文件、key文件)。
作为容器的环境变量。
由 kubelet 在为 Pod 拉取镜像时使用(与镜像仓库的认证)。

Secret简介类型

Kubernetes默认支持多种不同类型的secret,用于一不同的使用场景,不同类型的secret的配置参数也不一样。

 

Secret类型-Opaque格式

Opaque格式-data类型数据-事先使用base64加密:
case11-secret# echo admin | base64
case11-secret# echo 123456 | base64
创建secret:
# cat 1-secret-Opaque-data.yaml
apiVersion: v1
kind: Secret
metadata:name: mysecret-datanamespace: myserver
type: Opaque
data:user: YWRtaW4Kpassword: MTIzNDU2Cg==  #age: 18 #非base64加密的会报错# kubectl apply -f 1-secret-Opaque-data.yaml secret/mysecret created
验证secret:
# kubectl get secrets mysecret-data -n myserver -o yamlOpaque格式stringData类型数据-不用事先加密:创建secret:
# cat 2-secret-Opaque-stringData.yaml
apiVersion: v1
kind: Secret
metadata:name: mysecret-stringdatanamespace: myserver
type: Opaque
stringData:user: 'admin'password: '123456'# kubectl apply -f 2-secret-Opaque-stringData.yaml
验证secret:
# kubectl get secrets mysecret-stringdata -n myserver -o yaml

Secret的挂载流程

root@k8s-etcd1:~# etcdctl get / --keys-only --prefix | grep mysecret
/registry/secrets/myserver/mysecret-data
/registry/secrets/myserver/mysecret-stringdata
root@k8s-etcd1:~# etcdctl get /registry/secrets/myserver/mysecret-stringdata
root@k8s-node1:~# find /var/lib/kubelet/ -name user
root@k8s-node1:~# cat /var/lib/kubelet/pods/44a2bcca-2b5b-4c33-9d79-5753736331a4/volumes/kubernetes.io~secret/myserver-auth-secret/password123456
root@k8s-node1:~# cat /var/lib/kubelet/pods/44a2bcca-2b5b-4c33-9d79-5753736331a4/volumes/kubernetes.io~secret/myserver-auth-secret/useradmin

Secret类型-kubernetes.io/tls-为nginx提供证书示例

自签名证书:
0220423/case11-secret# mkdir certs
0220423/case11-secret# cd certs/
certs# openssl req -x509 -sha256 -newkey rsa:4096 -keyout ca.key -out ca.crt -days 3560 -nodes -subj '/CN=www.ca.com' 
certs# openssl req -new -newkey rsa:4096 -keyout server.key -out server.csr -nodes -subj '/CN=www.mysite.com' 
certs# openssl x509 -req -sha256 -days 3650 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt
certs# kubectl create secret tls myserver-tls-key --cert=./server.crt --key=./server.key -n myserver [root@k8s-master1 case11-secret]#cat 4-secret-tls.yaml 
apiVersion: v1
kind: ConfigMap
metadata:name: nginx-confignamespace: myserver
data:default: |server {listen       80;server_name  www.mysite.com;listen 443 ssl;ssl_certificate /etc/nginx/conf.d/certs/tls.crt;ssl_certificate_key /etc/nginx/conf.d/certs/tls.key;location / {root /usr/share/nginx/html; index index.html;if ($scheme = http ){  #未加条件判断,会导致死循环rewrite / https://www.mysite.com permanent;}  if (!-e $request_filename) {rewrite ^/(.*) /index.html last;}}}---
#apiVersion: extensions/v1beta1
apiVersion: apps/v1
kind: Deployment
metadata:name: myserver-myapp-frontend-deploymentnamespace: myserver
spec:replicas: 1selector:matchLabels:app: myserver-myapp-frontendtemplate:metadata:labels:app: myserver-myapp-frontendspec:containers:- name: myserver-myapp-frontendimage: nginx:1.20.2-alpine ports:- containerPort: 80volumeMounts:- name: nginx-configmountPath:  /etc/nginx/conf.d/myserver- name: myserver-tls-keymountPath:  /etc/nginx/conf.d/certsvolumes:- name: nginx-configconfigMap:name: nginx-configitems:- key: defaultpath: mysite.conf- name: myserver-tls-keysecret:secretName: myserver-tls-key ---
apiVersion: v1
kind: Service
metadata:name: myserver-myapp-frontendnamespace: myserver
spec:type: NodePortports:- name: httpport: 80targetPort: 80nodePort: 30018protocol: TCP- name: httsport: 443targetPort: 443nodePort: 30019protocol: TCPselector:app: myserver-myapp-frontend 

Secret类型-kubernetes.io/tls-为nginx提供证书示例:

    	
[root@k8s-master1 case11-secret]#kubectl -n myserver exec -it myserver-myapp-frontend-deployment-5cf6b65d59-m9g8f sh
/ # ls /etc/nginx/conf.d/
certs         default.conf  myserver
/ # ls /etc/nginx/conf.d/certs/
tls.crt  tls.key配置hosts 解析:
[root@k8s-master1 case11-secret]sudo cat /etc/hosts
10.0.0.113 www.mysite.com
# kubectl exec -it myserver-myapp-frontend-deployment-85fb884bcd-wmb62 sh -n myserver
/ # ls /etc/nginx/conf.d/myserver/*.conf #验证配置文件
/etc/nginx/conf.d/myserver/mysite.conf
/ # ls /etc/nginx/conf.d/certs/ #验证证书
tls.crt tls.key
/ # vi /etc/nginx/nginx.conf #编辑配置文件,默认的官方镜像没有加载自定义配置
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/conf.d/myserver/*.conf;
/ # nginx -s reload
/ # netstat -tanlp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1/nginx: master pro
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 1/nginx: master pro
tcp 0 0 :::80 :::* LISTEN 1/nginx: master pro

 

Secret-kubernetes.io/dockerconfigjson类型的示例

存储docker registry的认证信息,在下载镜像的时候使用,这样每一个node节点就可以不登录也可以下载私有级别的镜像了。

创建secret:
# kubectl create secret --help
方式一:通过命令创建
# kubectl create secret docker-registry Name \
--docker-server=registry.myserver.com \
--docker-username=USER\
--docker-password=PASSWORD方式二:通过docker认证文件创建:
root@k8s-master1:~# docker/nerdctl login --username=rooroot@aliyun.com registry.cn-qingdao.aliyuncs.com
root@k8s-master1:~# kubectl create secret generic harbor-image-pull-key \--from-file=.dockerconfigjson=/root/.docker/config.json \--type=kubernetes.io/dockerconfigjson \-n myserver
创建pod:
case11-secret# kubectl apply -f 5-secret-imagePull.yaml[root@k8s-master1 case11-secret]#cat 5-secret-imagePull.yaml 
#apiVersion: extensions/v1beta1
apiVersion: apps/v1
kind: Deployment
metadata:name: myserver-myapp-frontend-deploymentnamespace: myserver
spec:replicas: 1selector:matchLabels:app: myserver-myapp-frontendtemplate:metadata:labels:app: myserver-myapp-frontendspec:containers:- name: myserver-myapp-frontendimage: harbor.chendd.fun/myserver/nginx:latestports:- containerPort: 80imagePullSecrets:- name: harbor-image-pull-key---
apiVersion: v1
kind: Service
metadata:name: myserver-myapp-frontendnamespace: myserver
spec:ports:- name: httpport: 80targetPort: 80nodePort: 30018protocol: TCPtype: NodePortselector:app: myserver-myapp-frontend 
[root@k8s-master1 case11-secret]#kubectl apply f 5-secret-imagePull.yaml

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

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

相关文章

游戏引擎学习第14天

视频参考:https://www.bilibili.com/video/BV1iNUeYEEj4/ 1. 为什么关注内存管理? 内存分配是潜在的失败点: 每次进行内存分配(malloc、new等)时,都可能失败(例如内存不足)。这种失败会引入不稳…

游戏引擎学习第12天

视频参考:https://www.bilibili.com/video/BV1yom9YnEWY 这节没讲什么东西,主要是改了一下音频的代码 后面有介绍一些alloc 和malloc,VirtualAlloc 的东西 _alloca 函数(或 alloca)分配的是栈内存,它的特点是: 生命周…

django——创建 Django 项目和 APP

2.创建 Django 项目和 APP 命令: 创建Django项目 django-admin startproject name 创建子应用 python manager.py startapp name 2.1 创建工程 在使用Flask框架时,项目工程目录的组织与创建是需要我们自己手动创建完成的。 在django中,…

OceanBase 分区表详解

1、分区表的定义 在OceanBase数据库中,普通的表数据可以根据预设的规则被分割并存储到不同的数据区块中,同一区块的数据是在一个物理存储上。这样被分区块的表被称为分区表,而其中的每一个独立的数据区块则被称为一个分区。 如下图所示&…

学习大数据DAY61 宽表加工

目录 模型设计 加工宽表 任务调度: 大表 - 把很多数据整合起来 方便后续的明细查询和指标计算 模型设计 设计 建模 设计: excel 文档去编写 建模: 使用建模工具 PowerDesigner Navicat 在线画图工具... 把表结构给绘 制出来 共享\项目课工具\pd 加工宽表 数…

uniapp微信小程序转发跳转指定页面

onShareAppMessage 是微信小程序中的一个重要函数,用于自定义转发内容。当用户点击右上角的菜单按钮,并选择“转发”时,会触发这个函数。开发者可以在这个函数中返回一个对象,用于定义分享卡片的标题、图片、路径等信息。 使用场…

Datawhale组队学习】模型减肥秘籍:模型压缩技术3——模型量化

模型量化的目的是通过将浮点运算转换为定点运算,以减少模型大小、内存和存储需求,同时加快推理速度,降低计算功耗,使得模型在低算力设备上运行更加高效,特别适用于嵌入式设备或移动端场景。 不同数据类型(…

arkUI:网格布局(Grid)

arkUI:网格布局(Grid) 1 主要内容说明2 网格布局的相关内容2.1 基本使用2.1.1 源码1 (Grid网格布局)2.1.2 源码1运行效果 2.2 设置排列方式2.2.1 核心布局参数2.2.2 网格单元格参数(GridItem)2.…

Cherno OpenGL(28 ~ 33)

批量渲染-介绍 在这里我们将在一个drawcall打包多个几何体。即 batch geometry。 我们在这里将聚焦于2d渲染,我们如何渲染一堆2d的quads或者说rectangles呢? 一种情况是比如一个2d游戏有很多个tile组成,要去渲染这些tile;另一种…

网络安全之国际主流网络安全架构模型

目前,国际主流的网络安全架构模型主要有: ● 信息技术咨询公司Gartner的ASA(Adaptive Security Architecture自适应安全架构) ● 美国政府资助的非营利研究机构MITRE的ATT&CK(Adversarial Tactics Techniques &…

游戏引擎学习第16天

视频参考:https://www.bilibili.com/video/BV1mEUCY8EiC/ 这些字幕讨论了编译器警告的概念以及如何在编译过程中启用和处理警告。以下是字幕的内容摘要: 警告的定义:警告是编译器用来告诉你某些地方可能存在问题,尽管编译器不强制要求你修复…

【Nginx从入门到精通】03 、安装部署-让虚拟机可以联网

文章目录 总结一、配置联网【Minimal 精简版】1.1、查看网络配置1.2、配置ip地址 : 修改配置文件 <font colororange>ifcfg-ens33Stage 1&#xff1a;输入指令Stage 2&#xff1a;修改参数Stage 3&#xff1a;重启网络Stage 4&#xff1a;测试上网 二、配置联网【Everyth…

【UGUI】背包的交互01(道具信息跟随鼠标+道具信息面板显示)

详细程序逻辑过程 初始化物品栏&#xff1a; 在 Awake 方法中&#xff0c;通过标签找到提示框和信息面板。 循环生成10个背包格子&#xff0c;并为每个格子设置图标和名称。 为每个格子添加 UInterMaager232 脚本&#xff0c;以便处理交互事件。 关闭提示框和信息面板&#…

MySQL45讲 第二十四讲 MySQL是怎么保证主备一致的?——阅读总结

文章目录 MySQL45讲 第二十四讲 MySQL是怎么保证主备一致的&#xff1f;——阅读总结一、MySQL 主备基本原理&#xff08;一&#xff09;主备切换流程&#xff08;二&#xff09;主备数据同步流程 二、binlog 格式及相关问题&#xff08;一&#xff09;binlog 的三种格式&#…

RSA算法原理

1、RSA加密算法介绍 2、RSA算法的基本原理 2.1、RSA密钥生成 2.2、RSA加密和解密 1、RSA加密算法介绍 简单介绍一下&#xff0c;RSA算法是现代密码学的基石之一&#xff0c;广泛应用与安全通信、数据加密和身份验证等领域。 RSA加密是一种非对称加密算法&#xff0c;由罗…

html 图片转svg 并使用svg路径来裁剪html元素

1.png转svg 工具地址: Vectorizer – 免费图像矢量化 打开svg图片,复制其中的path中的d标签的路径 查看生成的svg路径是否正确 在线SVG路径预览工具 - UU在线工具 2.在html中使用svg路径 <svg xmlns"http://www.w3.org/2000/svg" width"318px" height…

哋它亢SEO技术分析:如何提升网站在搜索引擎中的可见性

文章目录 哋它亢SEO技术分析&#xff1a;如何提升网站在搜索引擎中的可见性网站的基本情况SEO优化分析与建议1. 元数据优化2. 关键词优化3. URL结构4. 图像优化5. 移动端优化6. 网站速度7. 结构化数据&#xff08;Schema Markup&#xff09;8. 内链与外链9. 社交分享 哋它亢SEO…

Liunx-Ubuntu22.04.1系统下配置Anaconda+pycharm+pytorch-gpu环境配置

这里写自定义目录标题 Liunx-Ubuntu22.04.1系统下配置Anacondapycharmpytorch-gpu环境配置一、Anaconda3配置1.Anaconda安装2.Anaconda更新3.Anaconda删除 二、pycharm配置1.pycharm安装 三、pytorch配置 Liunx-Ubuntu22.04.1系统下配置Anacondapycharmpytorch-gpu环境配置 一…

视觉SLAM--经典视觉SLAM框架

整个视觉SLAM流程主要包括以下步骤&#xff1a; 1、传感器信息读取&#xff1a;在视觉SLAM中主要为相机图像信息的读取和预处理。 2、前端视觉里程计&#xff1a;估算相邻图像间相机的运动&#xff0c;以及局部地图的样子。 3、后端&#xff08;非线性&#xff09;优化&#…

3、C语言基本数据类型关键字

本章学习目标&#xff1a; 1、认识存储单位&#xff1a;位bit和字节Byte 2、根据不同的应用场景选择符合需求的数据类型关键字,了解关键字的表示数据范围 1、内存单位 一、位 内存中的数据无论是文本、图像、音频还是视频&#xff0c;都是以位的形式进行存储的。 位是二进制…