配置资源管理
Secret
Configmap*.1.2加入新特征 1.18
Secret:保存密码,token,敏感的k8s资源
这类数据可以存放在镜像当中,但是防止secret可以更方便的控制,减少暴漏风险。
保存加密的信息
Secret的类型:
docker-registry:存储docker仓库认证信息,以及docker组件的认证信息(私有的)
generic:是secret的默认模式,Opaque base64加密编码的secret.用户自定义的密码,密钥等等。
tls:TLS/SSL用于存储整数和私钥,https
系统自建的:kubernetes.io/service-account-token,用来访问apiserver,pod会默认使用这个kubernetes.io/service-account-token创建的secret和apiserver通信,自动挂载到pod的/run/secret/kubernetes.io/serviceaccount.
pod如何来引用secret
3种方式:
1、挂载的方式,secret挂载到pod当中的一个或者多个容器上的卷里面
2、把secret容器的环境变量
3、docker-registry可以作为集群拉取镜像时的使用。使用secret可以实现免密登录
创建:
kubectl create secret generic myscret --from-file=/opt/username.txt --from-file=/opt/passwd.txt #从指定文件种提取信息
generic默认类型,Opaque加密类型
--from-file=/opt/username.txt #从指定的文件获取信息
DATA:加密的信息
保存的是加密的内容,容器内部可以解密,可以直接引用
secret的三种方式:
可以陈述式创建,也可以声明式创建。
用的最多的引用方式:挂载方式
挂载使用 设定环境变量 docker-registry
ConfigMap:
保存的是不需要加密的信息。configmap是1.2之后引用的功能,应用程序会从这些配置文件,命令行参数,以及环境变量种读取信息
通过configmap再创建容器时,给他注入我们需要的配置信息。既可以单个的属性也可以是整个容器的配置文件。
整个nginx.conf传给容器
创建的方式两种
陈述式和声明式
陈述
kubectl create configmap game --from-file=/opt/configmap/wqb1.txt
从指定文件创建可以是一个也可以是多个
使用字面值创建
kubectl create configmap game --from-literal=wqb=123 --from-literal=ooo=avc
声明式
apiVersion: v1
kind: ConfigMap
metadata:
? name: game
data:
? ooo: kkk
? ffff1: fdf
数据卷使用configMap
1、我们通过数据卷形式,把配置文件传给了pod内部容器
2、config的热更新,再pod运行的情况下,对config的配置信息进行修改,直接生效(反应到容器当中)
3、configmap的热更新不会触发pod的滚动更新机制(deployment)
version/config来触发滚动更新机制
kubectl patch deployments.apps nginx1 --patch '{"spec": {"template": {"metadata": {"annottations": {"version/config": "20240116"}}}}}'
secret:主要作用是保存加密文件,只要的使用方式就是挂载方式
configMap:把配置信息传给容器,主要方式也是挂载方式
configMap的热更新:热更新可以直接反映到容器内部,也不会触发pod的更新机制,如果不是需要重启的配置,都可以直接生效
需要重启的,可以重启pod
所谓的更新就是把配置信息重新传到容器内,重启也是一样
configMap:就是把配置信息传给容器,键值对形式保存的,非加密的信息
比如:我想通过configMap实现挂载pod中的nginx.conf配置
mkdir nginx-configmap
创建一个nginx.conf文件
kubectl create configmap nginx-con --from-file=/opt/nginx-configmap/nginx.conf
创建yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx1
labels:
app: nginx1
spec:
replicas: 3
selector:
matchLabels:
app: nginx1
template:
metadata:
labels:
app: nginx1
spec:
containers:
- name: nginx1
image: nginx:1.22
ports:
- containerPort: 8081
volumeMounts:
- name: nginx-config
mountPath: /etc/nginx/
- name: nginx-mount
mountPath: /usr/share/nginx/html/
volumes:
- name: nginx-config
configMap:
name: nginx-con
- name: nginx-mount
hostPath:
path: /opt/html/
type: DirectoryOrCreate
kubectl apple -f nginx.yaml
404因为nginx的目录和yaml里的不一致
kubectl edit cm nginx-con
kubectl patch deployments.apps nginx1 --patch '{"spec": {"template": {"metadata": {"annotations": {"version/confgi": "20240116"}}}}}'