一、secret

1、什么是secret?

  • 这个类型主要就是存储密码或者一些隐私一些内容

  • 主要就是保存这些东西的

  • 值都是base64加密的

  • 都是基于命名空间的

2、创建secret方式

1、命令行创建

[root@k-master 8-2]# kubectl create secret --help
Create a secret using specified subcommand. Available Commands:
docker-registry Create a secret for use with a Docker registry
generic Create a secret from a local file, directory, or literal value # 常用的
tls Create a TLS secret Usage:
kubectl create secret [flags] [options] Use "kubectl <command> --help" for more information about a given command.
Use "kubectl options" for a list of global command-line options (applies to all commands). [root@k-master 8-2]# kubectl create secret generic --help # 这些有的是案例的
[root@k-master 8-2]# kubectl create secret generic --help | grep from
kubectl create secret generic my-secret --from-file=path/to/bar
kubectl create secret generic my-secret --from-file=ssh-privatekey=path/to/id_rsa --from-file=ssh-publickey=path/to/id_rsa.pub
kubectl create secret generic my-secret --from-literal=key1=supersecret --from-literal=key2=topsecret
kubectl create secret generic my-secret --from-file=ssh-privatekey=path/to/id_rsa --from-literal=passphrase=topsecret
# Create a new secret named my-secret from env files
kubectl create secret generic my-secret --from-env-file=path/to/foo.env --from-env-file=path/to/bar.env
--from-env-file=[]: # 通过环境变量创建
--from-file=[]: # 通过文件创建
--from-literal=[]: # 键值对的方式
kubectl create secret generic NAME [--type=string] [--from-file=[key=]source] [--from-literal=key1=value1] [--dry-run=server|client|none] [options] [root@k-master 8-2]# kubectl create secret generic mysec1 --from-literal=name1=aaa1 --from-literal=name2=bbb2
secret/mysec1 created # 上面创建了2个数据
[root@k-master 8-2]# kubectl get secrets
NAME TYPE DATA AGE
mysec1 Opaque 2 3s
[root@k-master 8-2]# kubectl describe secrets mysec1
Name: mysec1
Namespace: default
Labels: <none>
Annotations: <none> Type: Opaque # 基于base64密钥进行解密和加密 Data
====
name2: 4 bytes # 值默认是加密的
name1: 4 bytes
  • 显示加密后的密钥
[root@k-master 8-2]# kubectl get secrets mysec1 -o yaml
apiVersion: v1
data:
name1: YWFhMQ==
name2: YmJiMg==
kind: Secret
metadata:
creationTimestamp: "2025-08-02T07:00:20Z"
name: mysec1
namespace: default
resourceVersion: "150234"
uid: b89398bb-a512-41bf-9032-31d6e15e2fa0
type: Opaque # 使用base64进行解密
[root@k-master 8-2]# echo -n YWFhMQ== | base64 -d
aaa1[root@k-master 8-2]#

2、文件方式

  • 将内容保存到文件中去

  • 文件名相当于是键,内容是值

[root@k-master 8-2]# echo redhat > name3
[root@k-master 8-2]# ls
name3
[root@k-master 8-2]# cat name3
redhat
[root@k-master 8-2]# kubectl create secret generic mysec2 --from-file=name3

3、环境变量方式

cat 1.txt
name1=aaa1 [root@k-master 8-2]# kubectl create secret generic mysec3 --from-env-file=1.txt
secret/mysec3 created

4、通过yaml文件生成

# 通过查看命令帮助
[root@k-master ~]# kubectl explain secret --recursive | less [root@k-master 8-2]# cat secret1.yaml
apiVersion: v1
kind: Secret
metadata:
name: mysec4
data:
name1: cXFxCg==

3、使用secret方式

1、卷使用secret

  • 将这个secret挂载到容器里面去即可

  • 以卷的方式来挂载这个secret和confgimap的话,适用场景就是一些服务的配置文件

  • 在pod里面存在的方式,文件名就是键

[root@k-master 8-2]# cat pod1.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: pod1
name: pod1
spec:
containers:
- image: nginx
imagePullPolicy: IfNotPresent
name: pod1
volumeMounts: # 挂载到这个/mnt目录下
- name: v1
mountPath: /mnt
volumes: # 使用secret作为卷
- name: v1
secret:
secretName: mysec1 # 将这个密钥写到这个文件里面去了
# 文件名就是这个键,内容就是值 # 在pod里面的存在的方式文件名就是键
[root@k-master 8-2]# kubectl exec -ti pod1 -- ls /mnt
name1 name2
# nginx的页面来使用卷挂载网站页面

2、变量方式使用secret

  • mysql运行时,需要环境变量,因此上面的文件不方便
[root@k-master 8-2]# cat pod1.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: pod1
name: pod1
spec:
containers:
- image: nginx
imagePullPolicy: IfNotPresent
name: pod1
env:
- name: env1 # 环境变量名
valueFrom: # 这个值来自于这个secret
secretKeyRef:
name: mysec1
key: name1 # 使用的键是这个name1,env1的值使用就是name1对应的值 # 进入容器使用环境变量
[root@k-master 8-2]# kubectl exec -ti pod1 -- /bin/bash
root@pod1:/# echo $env1
aaa1
  • 创建一个mysql容器
[root@k-master 8-2]# cat mysql.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: mysql1
name: mysql1
spec:
containers:
- image: mysql
imagePullPolicy: IfNotPresent
name: mysql1
ports:
- containerPort: 3306
env:
- name: MYSQLROOT_PASSWORD # 环境变量键
valueFrom:
secretKeyRef:
name: mysec1
key: name1 # 使用的值就是name1键对应的值
resources: {}
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}
  • 远程登录mysql,密码是aaa1
[root@k-master 8-2]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
mysql1 1/1 Running 0 84s 10.244.82.180 k-node1 <none> <none>
pod1 1/1 Running 0 16m 10.244.82.172 k-node1 <none> <none> # 语法,-u 可以要空格可以不需要空格
# 但是呢,这个密码的话不能有空格 [root@k-master 8-2]# mysql -uroot -paaa1 -h 10.244.82.180
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 9.4.0 MySQL Community Server - GPL Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MySQL [(none)]>

二、configmap

1、什么是configmap

  • 主要就是保存配置文件用的

  • 明文的方式保存

  • 跟上面secret的操作一模一样

2、创建configmap方式

1、命令行创建

# 查看命令行帮助
[root@k-master 8-2]# kubectl create configmap --help | grep -i from
kubectl create configmap my-config --from-file=path/to/bar
kubectl create configmap my-config --from-file=key1=/path/to/bar/file1.txt --from-file=key2=/path/to/bar/file2.txt
kubectl create configmap my-config --from-literal=key1=config1 --from-literal=key2=config2
# Create a new config map named my-config from the key=value pairs in the file
kubectl create configmap my-config --from-file=path/to/bar
# Create a new config map named my-config from an env file
kubectl create configmap my-config --from-env-file=path/to/foo.env --from-env-file=path/to/bar.env
--from-env-file=[]:
--from-file=[]:
--from-literal=[]:
kubectl create configmap NAME [--from-file=[key=]source] [--from-literal=key1=value1] [--dry-run=server|client|none] [options] [root@k-master 8-2]# kubectl create configmap cm1 --from-literal=name1=qqq
configmap/cm1 created
[root@k-master 8-2]# kubc^C
[root@k-master 8-2]# kubectl get cm
NAME DATA AGE
cm1 1 4s
kube-root-ca.crt 1 13d
[root@k-master 8-2]# kubectl describe cm cm1
Name: cm1
Namespace: default
Labels: <none>
Annotations: <none> Data
====
name1: # 键
----
qqq # 文件的内容 BinaryData
==== Events: <none>

2、文件创建

  • 文件名相当于是键,值是文件里面的内容
[root@k-master 8-2]# kubectl create configmap cm2  --from-file=name4
configmap/cm2 created
[root@k-master 8-2]# kubectl describe cm cm2
Name: cm2
Namespace: default
Labels: <none>
Annotations: <none> Data
====
name4: # 键
----
qqq # 文件的内容 BinaryData
==== Events: <none>

3、环境变量和yaml创建

[root@k-master 8-2]# kubectl create configmap cm3 --from-env-file=2.txt
configmap/cm3 created
[root@k-master 8-2]# kubectl get cmck^C
[root@k-master 8-2]# kubectl describe cm cm3
Name: cm3
Namespace: default
Labels: <none>
Annotations: <none> Data
====
name1:
----
qqq BinaryData
==== Events: <none>
[root@k-master 8-2]# kubectl apply -f cm4.yaml
configmap/cm4 created
[root@k-master 8-2]# kubectl describe configmaps cm4
Name: cm4
Namespace: default
Labels: <none>
Annotations: <none> Data
====
name1:
----
qqq BinaryData
==== Events: <none>

3、使用configmap方式

1、通过卷的方式使用

[root@k-master 8-2]# cat pod2.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: pod2
name: pod2
spec:
containers:
- image: nginx
imagePullPolicy: IfNotPresent
name: pod2
volumeMounts:
- name: c1
mountPath: /mnt
resources: {}
volumes:
- name: c1
configMap:
name: cm4
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {} # 卷挂载的话,以键是文件的存在形式存在的
[root@k-master 8-2]# kubectl exec -ti pod2 -- cat /mnt/name1
qqq[root@k-master 8-2]#

2、通过变量的方式使用

[root@k-master 8-2]# cat pod2.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: pod2
name: pod2
spec:
containers:
- image: nginx
imagePullPolicy: IfNotPresent
name: pod2
resources: {}
env:
- name: env1 # 环境变量键
valueFrom:
configMapKeyRef: # 使用的值是configmap
name: cm4
key: name1 # 值是name1对应的值
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {} [root@k-master 8-2]# kubectl exec -ti pod2 -- /bin/bash
root@pod2:/# echo $env1
qqq
root@pod2:/#

secret和configmap的更多相关文章

  1. secret或configmap对象key名称带点,env命令不显示分析

    分享一个最近在排查的问题: k8s的 secret 或 configmap 对象,如果 key 名称是带[.]的,比如[a.b.c .db.host]这种名称,注入到POD后,使用env等命令查看不到 ...

  2. k8s_使用k8s部署博客系统svc、secret、configmap(三)

    service service是抽象Pod对外提供服务的地址,将其固化的作用:屏蔽因pod的创删以及扩缩容带来ip变化.service通过自身定义文件的selector的标签配置匹配到需要提供服务的对 ...

  3. Kubernetes中的Configmap和Secret

    本文的试验环境为CentOS 7.3,Kubernetes集群为1.11.2,安装步骤参见kubeadm安装kubernetes V1.11.1 集群 应用场景:镜像往往是一个应用的基础,还有很多需要 ...

  4. ASP.NET Core on K8S深入学习(9)Secret & Configmap

    本篇已加入<.NET Core on K8S学习实践系列文章索引>,可以点击查看更多容器化技术相关系列文章. 一.Secret 1.1 关于Secret 在应用启动过程中需要一些敏感信息, ...

  5. Kubernetes 学习13 kubernetes pv pvc configmap 和secret

    一.概述 1.我们在pvc申请的时候未必就有现成的pv能正好符合这个pvc在申请中指定的条件,毕竟上一次的成功是我们有意设定了有一些满足有一些不满足的前提下我们成功创建了一个pvc并且被pod绑定所使 ...

  6. kubernetes Configmap secret的使用

    kubernetes configmap 核心作用是让配置信息和镜像解耦,pod可以使用configmap的数据生成配置文件.如果后端的pod配置文件要改变时,只需要更改下configmap里面的数据 ...

  7. Kubernetes学习笔记(六):使用ConfigMap和Secret配置应用程序

    概述 本文的核心是:如何处理应用程序的数据配置. 配置应用程序可以使用以下几种途径: 向容器传递命令行参数 为每个容器配置环境变量 通过特殊的卷将配置文件挂载到容器中 向容器传递命令行参数 在Kube ...

  8. 容器编排系统K8s之ConfigMap、Secret资源

    前文我们了解了k8s上的pv/pvc/sc资源的使用和相关说明,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/14188621.html:今天我们主要来聊一下 ...

  9. Kubernetes 实战——配置应用(ConfigMap、Secret)

    配置容器化应用的方式:①命令行参数:②环境变量:③文件化配置 一.向容器传递命令行参数或环境变量 这两种方式在 Pod 创建后不可被修改 1. 在Docker中定义命令与参数 ENTRYPOINT:容 ...

  10. k8s配置中心-configmap,Secret密码

    目录 k8s配置中心-configmap,Secret 创建ConfigMap 使用ConfigMap subPath参数 Secret 官方文档 编写secret清单 使用secret 在 Pod ...

随机推荐

  1. rancher 卸载后重装报错

    报错信息 kubectl create namespace cattle-system Error from server (InternalError): Internal error occurr ...

  2. codeup之查找

    Description 输入数组长度 n 输入数组 a[1-n] 输入查找个数m 输入查找数字b[1-m] 输出 YES or NO 查找有则YES 否则NO . Input 输入有多组数据. 每组输 ...

  3. github无法访问问题解决方法

    问题描述: 直接使用gtihub.com网址访问github浏览器无响应. 解决办法: 1.登录https://github.com.ipaddress.com/去查询github.com.githu ...

  4. SmolVLA: 让机器人更懂 “看听说做” 的轻量化解决方案

    TL;DR 今天,我们介绍了 SmolVLA,这是一个轻量级 (450M 参数) 的开源视觉 - 语言 - 动作 (VLA) 模型,专为机器人领域设计,并且可以在消费级硬件上运行. 仅使用开源社区共享 ...

  5. Doxygen基本使用教程

    前言 规范的注释是一个良好的编程习惯. Doxygen可以直接将注释提取为程序文档,便于开发人员使用 本文主要介绍了Doxygen的使用方法,更多细节请阅读官方文档 一.Doxygen是什么? dox ...

  6. 数栈产品分享:基于StreamWorks构建实时大数据处理平台

    数栈是云原生-站式数据中台PaaS,我们在github和gitee上有一个有趣的开源项目:FlinkX,FlinkX是一个基于Flink的批流统一的数据同步工具,既可以采集静态的数据,也可以采集实时变 ...

  7. 从零开发Vim-like编辑器(02)探讨编辑器对文本的解析与呈现设计思路

    本文同步发布在我的个人博客:https://zhen.wang 前言 前一篇文章作为开篇,只是介绍了Ratatui的相关使用,引出了一些概念.从本文开始,我们正式进入咱们的Vim-like编辑器的开发 ...

  8. Elastic学习之旅 (1) 初识ElasticSearch

    大家好,我是Edison. 最近需要用到ElasticSearch,于是想要系统学习了解下,于是这就开始啦. 什么是ElasticSearch? ElasticSearch是一款开源的分布式搜索分析引 ...

  9. 温故知新:Docker基础知识知多少

    记得之前曾经粗略的写过一篇Docker的基础及ASP.NET Core部署Docker示例的入门文章,但那个时候刚刚学习Docker对Docker的认知还比较浅,现在重新来温故知新一下.此外,本篇已加 ...

  10. 【机器人】—— 1. ROS 概述与环境搭建

    1. ROS 简介 1.1 ROS 诞生背景 机器人是一种高度复杂的系统性实现,机器人设计包含了机械加工.机械结构设计.硬件设计.嵌入式软件设计.上层软件设计....是各种硬件与软件集成,甚至可以说机 ...