1存储抽象
环境准备
1、所有节点 安装nfc共享存储
#所有机器安装
yum install -y nfs-utils
主节点
#nfs主节点
echo "/nfs/data/ *(insecure,rw,sync,no_root_squash)" > /etc/exports
mkdir -p /nfs/data
systemctl enable rpcbind --now
systemctl enable nfs-server --now
#配置生效
exportfs -r
从节点
showmount -e 172.22.29.135
#执行以下命令挂载 nfs 服务器上的共享目录到本机路径 /root/nfsmount
mkdir -p /nfs/data
mount -t nfs 172.22.29.135:/nfs/data /nfs/data
# 写入一个测试文件
echo "hello nfs server" > /nfs/data/test.txt

2 做一个部署将容器/usr/share/nginx/html目录指定到外面目录/nfs/data/nginx-pv中
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx-pv-demo
name: nginx-pv-demo
spec:
replicas: 2
selector:
matchLabels:
app: nginx-pv-demo
template:
metadata:
labels:
app: nginx-pv-demo
spec:
containers:
- image: nginx
name: nginx
volumeMounts:
- name: html
mountPath: /usr/share/nginx/html
volumes:
- name: html
nfs:
server: 172.22.29.135
path: /nfs/data/nginx-pv
2 挂载目录 PV&PVC
pv :指定每个文件夹的存储大小
pvc:创建一个中间件来说明需要多大空间会自动查询pv的那个空间可以使用,那么创建pod时,只需要绑定一个pvc 就可以自动关联到文件夹了,删除pvc时会将pv中的内容也删除,但pv的名字和空间大小会保留以等待其他PVC 使用
PV:持久卷(Persistent Volume),将应用需要持久化的数据保存到指定位置
PVC:持久卷申明(Persistent Volume Claim),申明需要使用的持久卷规格给指定的文件夹标明存储大小
静态创建空间
#nfs主节点
mkdir -p /nfs/data/01
mkdir -p /nfs/data/02
mkdir -p /nfs/data/03
创建PV
---:分割文档
kind: PersistentVolume 持久化卷
metadata: name: 给文档起一个名字
storage: 10M 标记存储大小10M
accessModes: ReadWriteMany 可读可写 多节点
storageClassName:nfs 给卷起一个名字
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv01-10m
spec:
capacity:
storage: 10m
accessModes:
- ReadWriteMany
storageClassName: nfs
nfs:
path: /nfs/data/01
server: 172.22.29.135
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv02-1gi
spec:
capacity:
storage: 50m
accessModes:
- ReadWriteMany
storageClassName: nfs
nfs:
path: /nfs/data/02
server: 172.22.29.135
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv03-3gi
spec:
capacity:
storage: 100m
accessModes:
- ReadWriteMany
storageClassName: nfs
nfs:
path: /nfs/data/03
server: 172.22.29.135

PVC创建
创建一个pvc 名字是Nginx-pvc
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: nginx-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 200m
storageClassName: nfs

创建Pod绑定PVC
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx-deploy-pvc
name: nginx-deploy-pvc
spec:
replicas: 2
selector:
matchLabels:
app: nginx-deploy-pvc
template:
metadata:
labels:
app: nginx-deploy-pvc
spec:
containers:
- image: nginx
name: nginx
volumeMounts:
- name: html
mountPath: /usr/share/nginx/html
volumes:
- name: html
persistentVolumeClaim:
claimName: nginx-pvc

3 挂载配置文件 ConfigMap
抽取应用配置,并且可以自动更新
redis示例
1、把之前的配置文件创建为配置集
命令行操作
# 创建配置,redis保存到k8s的etcd;
kubectl create cm redis-conf --from-file=redis.conf
yaml 文件操作 kubectl apply -f redis.yaml
apiVersion: v1
data: #data是所有真正的数据,key:默认是文件名 value:配置文件的内容
redis.conf: |
appendonly yes
kind: ConfigMap
metadata:
name: redis-conf
namespace: default
2 pod 安装操作
apiVersion: v1
kind: Pod
metadata:
name: redis
spec:
containers:
- name: redis
image: redis
command:
- redis-server
- "/redis-master/redis.conf" #指的是redis容器内部的位置
ports:
- containerPort: 6379
volumeMounts:
- mountPath: /data
name: data
- mountPath: /redis-master
name: config #引用22行的配置文件
volumes:
- name: data
emptyDir: {}
- name: config
configMap:
name: redis-conf
items:
- key: redis.conf
path: redis.conf
3检查是否生效
kubectl exec -it redis -- redis-cli
127.0.0.1:6379> CONFIG GET appendonly
127.0.0.1:6379> CONFIG GET requirepass
4 修改ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
name: example-redis-config
data:
redis-config: |
maxmemory 2mb
maxmemory-policy allkeys-lru
5 检查配置是否更新
kubectl exec -it redis -- redis-cli
127.0.0.1:6379> CONFIG GET maxmemory
127.0.0.1:6379> CONFIG GET maxmemory-policy
检查指定文件内容是否已经更新
修改了CM。Pod里面的配置文件会跟着变
配置值未更改,因为需要重新启动 Pod 才能从关联的 ConfigMap 中获取更新的值。
原因:我们的Pod部署的中间件自己本身没有热更新能力
4 Secret
1 安装
kubectl create secret docker-registry everup-docker
--docker-username=everup
--docker-password=wangkuo123
--docker-email=everup@163.com
##命令格式
kubectl create secret docker-registry regcred
--docker-server=<你的镜像仓库服务器>
--docker-username=<你的用户名>
--docker-password=<你的密码>
--docker-email=<你的邮箱地址>
2 测试安装是否成功下载私有docker内容
apiVersion: v1
kind: Pod
metadata:
name: redis-docker
spec:
containers:
- name: redis-docker
image: everup/redis:v1
imagePullSecrets:
- name: everup-docker