Secret
Secret 解决了密码、token、密钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到镜像或者 Pod Spec中。Secret 可以以 Volume 或者环境变量的方式使用 。
Secret 有三种类型:
-
Service Account :用来访问 Kubernetes API,由 Kubernetes 自动创建,并且会自动挂载到 Pod的
/run/secrets/kubernetes.io/serviceaccount
目录中。 -
Opaque :base64编码格式的Secret,用来存储密码、密钥等
-
kubernetes.io/dockerconfigjson :用来存储私有 docker registry 的认证信息
Service Account
Service Account 简称 sa , Service Account 用来访问 Kubernetes API,由 Kubernetes 自动创建,并且会自动挂载到 Pod 的 /run/secrets/kubernetes.io/serviceaccount
目录中。
目录下包含三个文件
-
ca.crt
-
namespace
-
token
Opaque Secret
Opaque 类型的数据是一个 map 类型,要求 value 是 base64 编码格式。
加密、解密
使用命令行方式对需要加密的字符串进行加密。例如 mysql 数据库的密码
# 对admin字符串进行base64加密:获得admin的加密字符串"YWRtaW4="
echo -n "admin" | base64
# base64解密:对加密后的字符串进行解密
echo -n "YWRtaW4=" | base64 -d
示例
apiVersion: v1
kind: Secret
metadata:
name: mariadbsecret
type: Opaque
data:
password: YWRtaW4=
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mariadb-deploy
labels:
app: mariadb-deploy
spec:
replicas: 1
template:
metadata:
name: mariadb-deploy
labels:
app: mariadb-deploy
spec:
containers:
- name: mariadb-deploy
image: mariadb:10.5.2
imagePullPolicy: IfNotPresent
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
#这是mysqlroot用户的密码
valueFrom:
secretKeyRef:
key: password
name: mariadbsecret
- name: TZ
value: Asia/Shanghai
args:
- "--character-set-server=utf8mb4"
- "--collation-server=utf8mb4_unicode_ci"
restartPolicy: Always
selector:
matchLabels:
app: mariadb-deploy
---
apiVersion: v1
kind: Service
metadata:
name: mariadb-svc
spec:
selector:
app: mariadb-deploy
ports:
- port: 3306
targetPort: 3306
nodePort: 30336
type: NodePort
ConfigMap
ConfigMap 顾名思义,是用于保存配置数据的键值对,可以用来保存单个属性,也可以保存配置文件。
ConfigMap 允许你将配置构件与映像内容解耦,以保持容器化应用程序的可移植性。
ConfigMap 可以从文件、目录或者 key-value 字符串创建等创建 ConfigMap 。也可以通过 kubectl create -f
从描述文件创建。可以使用 kubectl create
创建命令。
创建ConfigMap的方式有4种:
-
直接在命令行中指定 ConfigMap 参数创建,即
--from-literal
-
指定文件创建,即将一个配置文件创建为一个 ConfigMap,
--from-file=<文件>
-
指定目录创建,即将一个目录下的所有配置文件创建为一个ConfigMap,
--from-file=<目录>
-
先写好标准的configmap的yaml文件,然后
kubectl create -f
创建
命令行方式
从key-value字符串创建,官方翻译是从字面值中创建ConfigMap
kubectl create configmap map的名字 --from-literal=key=value
# 如果有多个key,value。可以继续在后边写
kubectl create configmap map的名字
--from-literal=key1=value1
--from-literal=key2=value2
--from-literal=key3=value4
# 创建configmap
kubectl create configmap helloconfigmap --from-literal=lagou.hello=world
# 查看configmap
kubectl get configmap helloconfigmap -o go-template='{{.data}}'
在使用kubectl get获取资源信息的时候,可以通过 -o
(--output
简写形式) 指定信息输出的格式,如果指定的是yaml或者json输出的是资源的完整信息,实际工作中,输出内容过少则得不到我们想要的信息,输 出内容过于详细又不利于快速定位的我们想要找到的内容。
其实-o输出格式可以指定为go-template ,然后指定一个template,这样我们就可以通过go-template获取我们想要的内容。go-template与 kubernetes无关,它是go语言内置的一种模板引擎。这里不对go-template做过多解释,仅介绍在 kubernetes中获取资源常用的语法
配置文件方式
# 语法规则如下:当 --from-file指向一文件,key的名称是文件名称,value的值是这个文件的内容。
kubectl create configmap cumulx-test --from-file=xxxx
jdbc.properties
jdbc.driverclass=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.username=root
jdbc.password=admin
# 创建configmap换用其他方式查看信息
kubectl create configmap myjdbcmap --from-file=jdbc.properties
# 查看configmap详细信息
kubectl describe configmaps myjdbcmap
目录方式
# 语法规则如下:当 --from-file指向一个目录,目录中的每个文件直接用于填充ConfigMap中的key,key的名称是文件名称,value的值是这个文件的内容。下面的命令读取/data目录下的所有文件
kubectl create configmap cumulx-test --from-file=/data/
kubectl create configmap myjdbcconfigmap --from-file=/data/jdbc.properties
# 查看configmap详细信息
kubectl describe configmaps myjdbcmap
资源文件方式
apiVersion: v1
kind: ConfigMap
metadata:
name: myjdbcconfigmap
data:
driverclass: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/test
username: root
password: admin
Volume
hostPath
hostPath类型的存储卷是指将工作节点上某文件系统的目录或文件挂载于Pod中的一种存储卷。把宿主机上的目录挂载到容器,但是在每个节点上都要有,因为不确定容器会分配到哪个节点。也是把存储从宿主机挂载到k8s集群上,但它有许多限制,例如只支持单节点(Node),而且只支持 “ReadWriteOnce” 模式。
指定node节点
kubectl label nodes k8s-node01 mariadb=mariadb
# 查看node节点label值
kubectl get nodes --show-labels
挂载卷
语法:
-
volumeMounts为containers下级key,
containers.volumeMounts
。volumes与containers平级。 -
containers.volumeMounts.name
与volumes.name
值一致。 -
containers.volumeMounts.mountPath
是容器内目录 -
volumes.hostPath.path
是宿主机挂载目录 -
volumes.hostPath.type
值必须为Directory
containers
volumeMounts:
- mountPath: /var/lib/mysql
name: mariadb-volume
.......
volumes:
- name: mariadb-volume
hostPath:
path: /data/mariadb
type: Directory
emptyDir
emptyDir存储卷是Pod生命周期中的一个临时目录,在pod对象被移除时会被一并删除,用得很少,例如同一pod内的多个容器间文件共享,或者作为容器数据的临时存储目录用于数据缓存系统等
标签:configmap,ConfigMap,name,kubectl,--,20221221,Volume,mariadb From: https://www.cnblogs.com/huangwenjie/p/16998706.html