K8s持久化存储、配置管理
● 前面我们已经学习了使用NFS提供存储,此时就要求用户会搭建NFS系统,并且会在yaml配置nfs。由于kubernetes支持的存储系统有很多,要求客户全部掌握,显然不现实。为了能够屏蔽底层存储实现的细节,方便用户使用,kubernetes引入了PV和PVC两种资源对象。● PV(Persistent Volume)是持久化卷的意思,是对底层的共享存储的一种抽象。一般情况下PV由kuberne
文章目录
nfs
所有节点
#所有机器安装
yum install -y nfs-utils
主节点
#nfs主节点
echo "/app/nfs/data/ *(insecure,rw,sync,no_root_squash)" > /etc/exports
# /app/nfs/data/ :存放数据的目录
mkdir -p /app/nfs/data # 创建 存放数据的目录
systemctl enable rpcbind --now
systemctl enable nfs-server --now
#配置生效
exportfs -r
从节点
showmount -e 192.168.111.101
mkdir -p /app/nfs/data # 应该 先创建目录,再挂载
mount -t nfs 192.168.111.101:/app/nfs/data /app/data # 挂载192.168.111.101:/app/nfs/data到本机的/app/data
# 写入一个测试文件
echo "hello nfs server" >/app/data/test.txt
创建Pod
nfs-nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-dep
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.18.0
volumeMounts:
- name: root
mountPath: /usr/share/nginx/html
ports:
- containerPort: 80
volumes:
- name: root
nfs:
server: 192.168.111.101
path: /app/data/nfs
查看Pod
创建文件
cd /app/data/nfs/
vim index.html
<h1> Hello World!</h1>
访问测试
kubectl expose deploy nginx-dep --port=80 --type=NodePort --target-port=80
kubectl get svc #查看服务
PV、PVC
PV和PVC概述
● 前面我们已经学习了使用NFS提供存储,此时就要求用户会搭建NFS系统,并且会在yaml配置nfs。由于kubernetes支持的存储系统有很多,要求客户全部掌握,显然不现实。为了能够屏蔽底层存储实现的细节,方便用户使用,kubernetes引入了PV和PVC两种资源对象。
● PV(Persistent Volume)是持久化卷
的意思,是对底层的共享存储的一种抽象。一般情况下PV由kubernetes管理员进行创建和配置,它和底层具体的共享存储技术有关,并通过插件完成和共享存储的对接。
● PVC(Persistent Volume Claim)是持久化卷声明
的意思,是用户对于存储需求
的一种声明。换言之,PVC其实就是用户向kubernetes系统发出的一种资源需求申请。
PV的使用
pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteMany
nfs:
path: /app/data/nfs
server: 192.168.111.101
pv-nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-dep
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.18.0
volumeMounts:
- name: root
mountPath: /usr/share/nginx/html
ports:
- containerPort: 80
volumes:
- name: root
persistentVolumeClaim:
claimName: my-pvc
kubectl apply -f pvc.yaml
kubectl apply -f pv.yaml
kubectl apply -f pv-nginx.yaml
查看Pod、PV、PVC
kubectl get po
kubectl get pv
kubectl get pvc
暴露服务
kubectl expose deploy nginx-dep --port=80 --type=NodePort --target-port=80
kubectl get svc #查看服务
创建文件
cd /app/data/nfs/
vim index.html
<h1> Hello World!</h1>
访问测试
kubectl get svc
Secret
Secret的主要作用就是加密数据
,然后存在etcd里面,让Pod容器以挂载Volume
方式进行访问
场景:用户名 和 密码进行加密
一般场景的是对某个字符串进行base64编码 进行加密
echo -n 'admin' | base64
变量形式挂载到Pod
创建secret加密数据的yaml文件
secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
username: YWRtaW4=
password: MWYyZDFlMmU2N2Rm
创建Secret
kubectl apply -f secret.yaml
查看Secret
kubectl get secret
secret-var.yaml
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: nginx
image: nginx:1.18.0
env:
- name: SECRET_USERNAME
valueFrom:
secretKeyRef:
name: mysecret
key: username
- name: SECRET_PASSWORD
valueFrom:
secretKeyRef:
name: mysecret
key: password
创建Pod
kubectl apply -f secret-var.yaml
进入容器,查看结果
kubectl exec -it mypod /bin/bash
echo $SECRET_USERNAME
echo $SECRET_PASSWORD
删除Pod
kubectl delete -f secret-var.yaml
数据卷形式挂载
创建secret加密数据的yaml文件
secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
username: YWRtaW4=
password: MWYyZDFlMmU2N2Rm
创建Secret
kubectl apply -f secret.yaml
secret-vol.yaml
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: nginx
image: nginx:1.18.0
volumeMounts:
- name: foo
mountPath: "/etc/foo"
readOnly: true
volumes:
- name: foo
secret:
secretName: mysecret
创建Pod
kubectl apply -f secret-vol.yaml
进入容器,查看结果
kubectl exec -it mypod /bin/bash
ls /etc/foo
ConfigMap
ConfigMap作用是存储不加密
的数据到etcd中,让Pod以变量或数据卷Volume挂载到容器中
应用场景:
配置文件
创建配置文件
首先我们需要创建一个配置文件
redis.properties
redis.port=127.0.0.1
redis.port=6379
redis.password=123456
创建ConfigMap
使用命令创建configmap
kubectl create configmap redis-config --from-file=redis.properties # --from-file 表示从哪个文件生成configmap
然后查看详细信息
kubectl describe cm redis-config
变量的形式挂载到Pod
创建我们的配置文件
myconfig.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: myconfig
namespace: default
data:
special.level: info
special.type: hello
# 创建ConfigMap
kubectl apply -f myconfig.yaml
# 获取
kubectl get cm
configmap-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
创建Pod
kubectl apply -f configmap-var.yaml
查看Pod
查看结果
kubectl logs pod mypod
数据卷形式挂载
创建我们的配置文件
myconfig.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: myconfig
namespace: default
data:
special.level: info
special.type: hello
# 创建ConfigMap
kubectl apply -f myconfig.yaml
# 获取
kubectl get cm
configmap-vol.yaml
提前准备好redis-config
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: busybox
image: busybox
command: [ "/bin/sh","-c","cat /etc/config/redis.properties" ]
volumeMounts:
- name: configmap-volume
mountPath: /etc/config
volumes:
- name: configmap-volume
configMap:
name: redis-config
restartPolicy: Never
kubectl apply -f configmap-vol.yaml
kubectl describe cm redis-config
查看结果
kubectl logs mypod
完成!
更多推荐
所有评论(0)