一 . Secret
Secret的主要作用就是加密数据,然后存在etcd里面,让Pod容器以挂载Volume方式进行访问
场景:用户名 和 密码进行加密
一般场景的是对某个字符串进行base64编码 进行加密
echo -n 'admin' | base64
- 创建secret加密数据的yaml文件 secret.yaml
然后使用下面命令创建一个pod(这个应该有命名) ``` kubectl create -f secret.yamlapiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
username: YWRtaW4=
password: MWYyZDFlMmU2N2Rm
查看
kubectl get secret
![image.png](https://cdn.nlark.com/yuque/0/2021/png/2639475/1618208642480-ed1e3590-eb09-42ea-bc47-67207f49d489.png#height=111&id=fiLk1&margin=%5Bobject%20Object%5D&name=image.png&originHeight=111&originWidth=821&originalType=binary&size=13464&status=done&style=none&width=821)
<a name="lEbzb"></a>
### 1.1 变量形式挂载到Pod
文件 : secret-var.yaml
```yaml
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: nginx
image: nginx
env:
- name: SECRET_USERNAME
valueFrom:
secretKeyRef:
name: mysecret
key: username
- name: SECRET_PASSWORD
valueFrom:
secretKeyRef:
name: mysecret
key: password
通过get命令查看
#挂载
kubectl apply -f secret-var.yaml
kubectl get pods
然后我们通过下面的命令,进入到我们的容器内部
kubectl exec -it mypod bash
然后我们就可以输出我们的值,这就是以变量的形式挂载到我们的容器中
# 输出用户
echo $SECRET_USERNAME
# 输出密码
echo $SECRET_PASSWORD
最后如果我们要删除这个Pod,就可以使用这个命令
kubectl delete -f secret-val.yaml
1.2 数据卷形式挂载
首先我们创建一个 secret-val.yaml 文件
apiVersion: v1
kind: Pod
metadata:
name: mypod2
spec:
containers:
- name: nginx
image: nginx
# 挂载目录
volumeMounts:
- name: foo
mountPath: "/etc/foo"
readOnly: true
volumes:
- name: foo
# 名称
secret:
secretName: mysecret
然后创建我们的 Pod
# 根据配置创建容器
kubectl apply -f secret-val.yaml
# 进入容器
kubectl exec -it mypod bash
# 查看
ls /etc/foo
kubectl delete pod -all
二. ConfigMap
ConfigMap作用是存储不加密的数据到etcd中,让Pod以变量或数据卷Volume挂载到容器中
应用场景:配置文件
2.1 创建配置文件
首先我们需要创建一个配置文件 redis.properties
redis.port=127.0.0.1
redis.port=6379
redis.password=123456
2.2 创建ConfigMap
我们使用命令创建configmap
kubectl create configmap redis-config --from-file=redis.properties
然后查看详细信息
kubectl get cm
kubectl describe cm redis-config
2.3 挂载
2.3.1 Volume数据卷形式挂载
首先我们需要创建一个 cm.yaml
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: busybox
image: busybox
# 命令输出redis配置
command: [ "/bin/sh","-c","cat /etc/config/redis.properties" ]
volumeMounts:
- name: config-volume
mountPath: /etc/config
volumes:
- name: config-volume
configMap:
# 对应刚刚的configMap
name: redis-config
#Pod重启机制
# Always:当容器终止退出后,总是重启容器,默认策略 【nginx等,需要不断提供服务】
# OnFailure:当容器异常退出(退出状态码非0)时,才重启容器。
# Never:当容器终止退出,从不重启容器 【批量任务】
restartPolicy: Never
然后使用该yaml创建我们的pod
# 创建
kubectl apply -f cm.yaml
# 查看
kubectl get pods
最后我们通过命令就可以查看结果输出了
kubectl logs mypod
kubectl delete -f cm.yaml
2.3.4 以变量的形式挂载Pod
首先我们也有一个 myconfig.yaml文件,声明变量信息,然后以configmap创建
apiVersion: v1
kind: ConfigMap
metadata:
name: myconfig
namespace: default
data:
special.level: info
special.type: hello
然后我们就可以创建我们的配置文件
# 创建pod
kubectl apply -f myconfig.yaml
# 获取
kubectl get cm
然后我们创建完该pod后,我们就需要在创建一个 config-var.yaml 来使用我们的配置信息
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
# 容器
- name: busybox
image: busybox
# 配置输出信息
command: [ "/bin/sh", "-c", "echo $(LEVEL) $(TYPE)" ]
env:
- name: LEVEL
valueFrom:
# 挂载
configMapKeyRef:
name: myconfig
key: special.level
- name: TYPE
valueFrom:
configMapKeyRef:
name: myconfig
key: special.type
restartPolicy: Never
最后我们查看输出
kubectl create -f config-var.yaml
kubectl get cm
kubectl logs mypod