挂载
nfs是kubernetes存储层可选其中一种网络存储方式。
原生方式数据挂载
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: # pods需要挂载
- name: html # 挂载的名称
mountPath: /usr/share/nginx/html #挂载的路径
volumes:
- name: html #存储层所挂载的名称
nfs:
server: 172.31.0.4 # 存储层的ip地址
path: /nfs/data/nginx-pv # 存储层被挂载的路径
PV和PVC
PV: PersistentVolume 持久卷
PVC:PersistentVolumecClaim,持久卷申明,申明需要使用的持久卷规格
静态供应
- 创建nfs的主节点
mkdir -p /nfs/data/01
mkdir -p /nfs/data/02
mkdir -p /nfs/data/03
- 创建PV
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv01-10m # 创建pv的名称
spec:
capacity: #容量
storage: 10Mi #容量为10M的pv存储空间,
accessModes:
- ReadWriteMany #可读可写可多节点并行
storageClassName: nfs # 这个存储类名要与下面几个保持一致。
nfs:
path: /nfs/data/01
server: 172.31.0.4
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv02-1gi
spec:
capacity:
storage: 1Gi # 这个是1G,注意最后需要加一个i
accessModes:
- ReadWriteMany
storageClassName: nfs
nfs:
path: /nfs/data/02
server: 172.31.0.4
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv03-3gi
spec:
capacity:
storage: 3Gi # 这个是3G,注意最后需要加一个i
accessModes:
- ReadWriteMany
storageClassName: nfs
nfs:
path: /nfs/data/03
server: 172.31.0.4
- 创建PVC
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: nginx-pvc。 # pvc的名称
spec:
accessModes:
- ReadWriteMany #可读可写可并行
resources:
requests:
storage: 200Mi # 容量为200M
storageClassName: nfs #存储类名为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 # 绑定的申明名称
动态供应
配置集
- 创建配置文件
#举例,创建一个redis的配置文件
vi redis.conf
###############写入内容:
appendonyl yes# 数据持久化
- 将配置文件创建成 配置集ConfigMap
kubectl create cm redis-conf --from-file = redis.conf
# 这边的cm指的就是配置集redis-conf
# 创建cm完成之后,就可以把原本的配置文件删除:
rm -rf redis.conf
对于有自带【热更新】能力的pod,只需要配置好相应的配置集信息,一旦配置集ConfigMap内部的key值修改,对应pod的配置信息也会相应修改。对于没有【热更新】能力的pod,则需要对pod进行重启,重启之后才回读取到配置集里面修改的key值。
sercet
主要设置的方式与配置集CM一样,但sercet主要存储的是较为敏感的信息,例如密码、OAuth 令牌和 SSH 密钥。 将这些信息放在 secret 中比放在 Pod 的定义或者 容器镜像 中来说更加安全和灵活。
- 存储密码
##命令格式
kubectl create secret docker-registry regcred \
--docker-server=<你的镜像仓库服务器> \
--docker-username=<你的用户名> \
--docker-password=<你的密码> \
--docker-email=<你的邮箱地址>
# 运行完命令,对应的账号密码会以base64加密的方式存储在kubernetes里面
- pull镜像
apiVersion: v1
kind: Pod
metadata:
name: private-nginx
spec:
containers:
- name: private-nginx
image: leifengyang/guignginx:v1.0
imagePullSecrets:# 这边需要加上sercets的密码。
- name: <你的镜像仓库服务器>