📑 ConfigMap & Secret
## ConfigMap
数据库连接地址,这种可能根据部署环境变化的,我们不应该写死在代码里。
Kubernetes 为我们提供了 ConfigMap,可以方便的配置一些变量。[文档](https://kubernetes.io/zh/docs/concepts/configuration/configmap/)
>s 本文档课件需配套 [视频](https://www.bilibili.com/video/BV1Tg411P7EB?p=7) 一起学习
`configmap.yaml`
```yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: mongo-config
data:
mongoHost: mongodb-0.mongodb
```
```sh
# 应用
kubectl apply -f configmap.yaml
# 查看
kubectl get configmap mongo-config -o yaml
```
![configmap.png](https://cos.easydoc.net/46901064/files/kwubdzyw.png)
## Secret
一些重要数据,例如密码、TOKEN,我们可以放到 secret 中。[文档](https://kubernetes.io/zh/docs/concepts/configuration/secret/),[配置证书](https://kubernetes.io/zh/docs/concepts/configuration/secret/#tls-secret)
>w 注意,数据要进行 Base64 编码。[Base64 工具](https://tools.fun/base64.html)
`secret.yaml`
```yaml
apiVersion: v1
kind: Secret
metadata:
name: mongo-secret
# Opaque 用户定义的任意数据,更多类型介绍 https://kubernetes.io/zh/docs/concepts/configuration/secret/#secret-types
type: Opaque
data:
# 数据要 base64。https://tools.fun/base64.html
mongo-username: bW9uZ291c2Vy
mongo-password: bW9uZ29wYXNz
```
```sh
# 应用
kubectl apply -f secret.yaml
# 查看
kubectl get secret mongo-secret -o yaml
```
![image.png](https://cos.easydoc.net/46901064/files/kwub4een.png)
## 使用方法
#### 作为环境变量使用
```yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mongodb
spec:
replicas: 3
selector:
matchLabels:
app: mongodb
template:
metadata:
labels:
app: mongodb
spec:
containers:
- name: mongo
image: mongo:4.4
# IfNotPresent 仅本地没有镜像时才远程拉,Always 永远都是从远程拉,Never 永远只用本地镜像,本地没有则报错
imagePullPolicy: IfNotPresent
env:
- name: MONGO_INITDB_ROOT_USERNAME
valueFrom:
secretKeyRef:
name: mongo-secret
key: mongo-username
- name: MONGO_INITDB_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mongo-secret
key: mongo-password
# Secret 的所有数据定义为容器的环境变量,Secret 中的键名称为 Pod 中的环境变量名称
# envFrom:
# - secretRef:
# name: mongo-secret
```
#### 挂载为文件(更适合证书文件)
挂载后,会在容器中对应路径生成文件,一个 key 一个文件,内容就是 value,[文档](https://kubernetes.io/zh/docs/concepts/configuration/secret/#using-secrets-as-files-from-a-pod)
```yaml
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: mypod
image: redis
volumeMounts:
- name: foo
mountPath: "/etc/foo"
readOnly: true
volumes:
- name: foo
secret:
secretName: mysecret
```
>d 觉得老师讲得不错的话,记得点赞、关注、分享鼓励下老师
你们的鼓励会让老师更加有动力继续创造更多更好的内容
你可以到 [Github issue](https://github.com/gzyunke/test-k8s/issues) 给我提问