Kubernetes存储卷的使用
在Kubernetes
中, 有这不同方式的内容挂载, 简单记录一下他们的配置方式.
ConfigMap
配置内容
内容配置
apiVersion: v1
kind: ConfigMap
metadata:
name: test-config
data:
# 添加配置的 key-value 内容
test-key: test-value
引入
apiVersion: v1
kind: Pod
spec:
containers:
- name: test
image: nginx
env:
# 场景1: 可以用来配置环境变量
- name: ENV_NAME
valueFrom:
# 指定某一个 configMap 中的某个 key 作为 value
configMapKeyRef:
name: test-config
key: test-key
# 定义进行挂在的数据卷
volumeMounts:
- name: config-volume
mountPath: /etc/config
envFrom:
# 场景2: 将其整个导入作为 env
- configMapRef:
name: test-config
volumes:
- name: config-volume
# 场景3: 将 ConfigMap 作为数据进行导入
# 导入后, key作为文件名, value 作为文件内容
configMap:
name: test-config
Secret
存放一些加密信息, 当前加密就是base64
...
配置挂载
其使用方式基本和ConfigMap
相同, 就是单纯的换个字段名
内容配置
apiVersion: v1
kind: Secret
metadata:
name: test-secret
type: Opaque
data:
# 这里存放的是 base64 编码的内容
password: cGFzc3dvcmQ=
引入
apiVersion: v1
kind: Pod
spec:
containers:
- name: test
image: nginx
env:
# 场景1: 可以用来配置环境变量
- name: ENV_NAME
valueFrom:
# 指定某一个 configMap 中的某个 key 作为 value
secretKeyRef:
name: test-secret
key: password
# 定义进行挂在的数据卷
volumeMounts:
- name: config-volume
mountPath: /etc/config
envFrom:
# 场景2: 将其整个导入作为 env
- secretRef:
name: test-secret
volumes:
- name: config-volume
# 场景3: 将 Secret 作为数据进行导入
# 导入后, key作为文件名, value 作为文件内容
secret:
secretName: test-secret
镜像仓库鉴权
当拉取的镜像仓库是私有仓库时, 需要增加鉴权内容
内容配置
apiVersion: v1
kind: Secret
metadata:
name: test-register-secret
type: kubernetes.io/dockerconfigjson
data:
# 文件 ~/.docker/config.json 的 base64 编码内容
# 其内容就是个 json: {"auths":{"test.pull.com":{"username":"admin","password":"123456","email":"hujingnb@qq.com","auth":"YWRtaW46MTIzNDU2"}}}
.dockerconfigjson: eyJhdXRocyI6eyJ0ZXN0LnB1bGwuY29tIjp7InVzZXJuYW1lIjoiYWRtaW4iLCJwYXNzd29yZCI6IjEyMzQ1NiIsImVtYWlsIjoiaHVqaW5nbmJAcXEuY29tIiwiYXV0aCI6IllXUnRhVzQ2TVRJek5EVTIifX19
这玩意通过配置文件生成费点劲, 所有可以通过命令行直接生成:
kubectl create secret docker-registry test-register-secret \
--docker-server=<你的镜像仓库服务器> \
--docker-username=<你的用户名> \
--docker-password=<你的密码> \
--docker-email=<你的邮箱地址>
可以通过命令查看现有 secret 鉴权内容:
kubectl get secret test-register-secret --output="jsonpath={.data.\.dockerconfigjson}" | base64 --decode
引入
apiVersion: v1
kind: Pod
spec:
containers:
- name: test
image: nginx
# 指定拉取镜像是使用的配置信息
imagePullSecrets:
- name: test-register-secret
Volume
直白的说, 就是磁盘的挂载.
举个简单的使用例子
apiVersion: v1
kind: Pod
spec:
containers:
- name: test
image: nginx
# 定义进行挂在的数据卷
volumeMounts:
- name: config-volume
mountPath: /etc/config
volumes:
- name: config-volume
hostPath:
path: /usr/etc/nginx/config
上面将本地的目录 /usr/etc/nginx/config
挂在到的容器的 /etc/config
上.
注意看其中的hostPath
参数, 还可以替换成其他的, k8s
支持很多类型的挂载卷, 这里就不一一举例了, 具体可通过kubectl explain pod.spec.volumes
查看. 简单列举几个感觉比较常用的:
- emptyDir: 在 Node 上开一个空的目录用于共享.
- hostPath: 指定挂载 Node 本地路径