k8s ——配置管理与持久化存储
拉取镜像可以去渡渡鸟:https://docker.aityp.com/
https://kubernetes.io/zh-cn/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/

ConfigMap 和 Secret 像“云端数据库”一样存在于 Etcd 中
注意:
ConfigMap 并不提供保密或者加密功能。 如果你想存储的数据是机密的,请使用 Secret, 或者使用其他第三方工具来保证你的数据的私密性,而不是用 ConfigMap。
echo "123"
echo "123"|base64 #(加密)
MTIzCg==
echo "MTIzCg=="|base64 -d #(解密)---(这个加密不是绝对的安全)
123
一、configmap
https://kubernetes.io/zh-cn/docs/concepts/configuration/configmap/
ConfigMap 是一种 API 对象,用来将非机密性的数据保存到键值对中。使用时, Pod 可以将其用作环境变量、命令行参数或者存储卷中的配置文件。
键值对:
ConfigMap 将你的环境配置信息和容器镜像解耦,便于应用配置的修改。
二、什么是解耦
把「程序代码 / 镜像」和「配置参数」分离开管理,代码镜像固定不变,配置单独存放、独立修改,互不影响。
三、常见键值对形式对应关系
本质:都是 key:value 键值对结构
- JSON 格式 → 标准数据格式 → 底层就是键值对
key:value - Python 语言 → 字典 → 本质也是键值对存储
- Nginx → nginx.conf 配置文件 → 各类配置项都是键值对形式
拉取镜像(在node节点上)
ctr -n k8s.io images pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/library/alpine:latest
ctr -n k8s.io images tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/library/alpine:latest docker.io/library/alpine:latest
四、alpine镜像
是极简轻量级Linux镜像,体积小,资源占用底,k8s尝做测试、基础容器,常配合ConfigMap做实验:用apline容器挂载ConfigMap配置文件,验证配置注入、配置挂载效果
在master节点上/root/configmap
cat pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: configmap-demo-pod
spec:
containers:
- name: demo
image: alpine
command: ["sleep", "3600"]
env:
# 定义环境变量
- name: PLAYER_INITIAL_LIVES # 请注意这里和 ConfigMap 中的键名是不一样的
valueFrom:
configMapKeyRef:
name: game-demo # 这个值来自 ConfigMap
key: player_initial_lives # 需要取值的键
- name: UI_PROPERTIES_FILE_NAME
valueFrom:
configMapKeyRef:
name: game-demo
key: ui_properties_file_name
volumeMounts:
- name: config
mountPath: "/config"
readOnly: true
volumes:
# 你可以在 Pod 级别设置卷,然后将其挂载到 Pod 内的容器中
- name: config
configMap:
# 提供你想要挂载的 ConfigMap 的名字
name: game-demo
# 来自 ConfigMap 的一组键,将被创建为文件
items:
- key: "game.properties"
path: "game.properties"
- key: "user-interface.properties"
path: "user-interface.properties"
kubectl apply -f pod.yaml # 创建/更新 Pod
kubectl get pod -o wide # 查看 Pod 详细信息
kubectl exec -it pod名 -- sh # 进入 Pod 内部
kubectl api-resources # 查看 K8s 所有资源
kubectl get deploy # 查看部署控制器
kubectl delete deploy 名字 # 删除部署(连带删除 Pod)
kubectl get node # 查看集群节点状态
如果你想拷贝到当前目录并保持原名 :
kubectl cp nginx-6:/etc/nginx/nginx.conf nginx.conf
[root@k8s-master-1 nginx]# cat nginx.conf
user nginx;
worker_processes 5;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 2048;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
ulimit -n 655350
kubectl create cm nginx-config-1 --from-file=nginx.conf
configmap/nginx-config-1 created
[root@k8s-master-1 nginx]# kubectl get cm
NAME DATA AGE
game-demo 4 3h20m
kube-root-ca.crt 1 30d
nginx-config-1 1 11s
看里面的内容
kubectl describe cm nginx-config-1
[root@k8smaster configmap]# cat nginx.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-configmap-test
spec:
containers:
- name: test-container-configmap
image: nginx
imagePullPolicy: IfNotPresent
volumeMounts:
- name: config-volume
mountPath: /etc/nginx/nginx.conf
subPath: nginx.conf
#声明nginx.conf是一个文件
volumes:
- name: config-volume
#创建一个卷的名字为config-volume
configMap:
# 提供包含要添加到容器中的文件的 ConfigMap 的名称
name: nginx-config-1
restartPolicy: Always
mount的挂载点是目录
二、secret
https://kubernetes.io/zh-cn/docs/concepts/configuration/secret/
尺寸限制,每个尺寸最多为1MB
[root@k8s-master-1 secret]# cat secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: secret-sa-sample
type: Opaque
data:
password: c2MxMjM0NTYK
[root@k8s-master-1 secret]#
[root@k8s-master-1 secret]# kubectl apply -f secret.yaml
secret/secret-sa-sample created
[root@k8s-master-1 secret]# kubectl get secret
NAME TYPE DATA AGE
mysql-pass-8g8494mfgm Opaque 1 6m50s
secret-sa-sample Opaque 1 4s
[root@k8s-master-1 secret]#
kubectl describe secret mysecret-<你的名称>
三、PV——持久卷
apiVersion: v1
kind: PersistentVolume
metadata:
name: task-pv-volume
labels:
type: local
spec:
storageClassName: sanchuang
#存储类的名字一会pvc的名字和中国名字要一样
#---》pvc通过这个存储类型的名字和pv绑定
capacity: #能力
storage: 10Gi #提供多少存储空间
accessModes:
- ReadWriteOnce #读写
# ——一共有四种访问模式
1、ReadWriteOnce————RWO
2、ReadOnlyMany————ROX
3、ReadWriteMany————RWX
4、ReadWriteOncePod————RWOP
hostPath:
path: "/web/data"
四、PVC——持久卷申领
PVC申领会占用PV空间
五、补充configmap和secret知识点
1、configmap 和secret
物理上 :configmap 和secret储存在k8s集群的数据库(Etcd)中,由API Server管理。他们在被挂载之前不属于任何一个节点或容器
逻辑上:当定义了一个Pod并引用了他们,k8s会在pod启动时,由kubelet将这些数据“投射”到容器的文件系统中。
2、containerd Pod docker k8s configmap secret hostpath 之间的关系
3、kubectl 和 kubelet
kubectl作用:负责把你写的yaml文件内容发送给集群“大脑”(API Server)
kubelet作用:当Master决定要在某个节点跑一个Pod时,该节点的kubelet就会收到指令。它负责去拉取镜像(Pull Image)、启动容器,并持续监控它们的状态。
3. ConfigMap & Secret 底层原理
- 物理存储:全部保存在 K8s 集群 Etcd 数据库,由 API Server 统一管理;没被 Pod 引用时,不归属任何节点、容器。
- 逻辑挂载:Pod 启动时,节点上的 kubelet 负责把 ConfigMap/Secret 数据投射挂载到容器文件系统或环境变量中。
4. 组件关系梳理
containerd / Docker → Pod → K8s → ConfigMap / Secret / PV / PVC / hostPath
更多推荐




所有评论(0)