目录
一、statfulset
StatefulSet 管理了基于相同容器定义的一组 Pod。但和 Deployment 不同的是,StatefulSet 为每个 Pod 维护了一个固定的 ID。这些 Pod 是基于相同的声明来创建的,但是不能相互替换:无论怎么调度,每个 Pod 都有一个永久不变的 ID。
① 稳定的、唯一的网络标识符,即Pod重新调度后其PodName和HostName不变(当然IP是会变的)
② 稳定的、持久的存储,即Pod重新调度后还是能访问到相同的持久化数据,基于PVC实现
③ 有序的、优雅的部署和缩放
④ 有序的、自动的滚动更新
cat statefulset.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
app: nginx
spec:
ports:
- port: 80
name: http
clusterIP: None
selector:
app: nginx
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
selector:
matchLabels:
app: nginx # has to match .spec.template.metadata.labels
serviceName: "nginx"
replicas: 3 # by default is 1
template:
metadata:
labels:
app: nginx # has to match .spec.selector.matchLabels
spec:
terminationGracePeriodSeconds: 10 默认30秒
containers:
- name: nginx
image: registry.cn-beijing.aliyuncs.com/google_registry/nginx:1.17
ports:
- containerPort: 80
name: http
kubectl apply -f statefulset.yml
1.创建顺序
在下面的 nginx 示例被创建后,会按照 web-0、web-1、web-2 的顺序创建三个 Pod。在 web-0 进入 Running 和 Ready 状态前不会创建 web-1。在 web-1 进入 Running 和 Ready 状态前不会创建 web-2。
如果 web-1 已经处于 Running 和 Ready 状态,而 web-2 尚未创建,在此期间发生了 web-0 运行失败,那么 web-2 将不会被创建,要等到 web-0 创建完成并进入 Running 和 Ready 状态后,才会创建 web-2。
2.收缩顺序
如果想将示例中的 StatefulSet 收缩为 replicas=1,首先被终止的是 web-2。在 web-2 没有被完全停止和删除前,web-1 不会被终止。当 web-2 已被终止和删除;但web-1 尚未被终止,如果在此期间发生 web-0 运行失败,那么就不会终止 web-1,必须等到 web-0 进入 Running 和 Ready 状态后才会终止 web-1
二、PV PVC
apiVersion: v1
kind: PersistentVolume 持久化存储卷
metadata:
name: pv0003
spec:
capacity: 指定容量
storage: 5Gi
volumeMode: Filesystem 挂载模式,可选,包含filesystem和block
accessModes: 访问模式
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle 挥手策略
storageClassName: slow 存储类别
mountOptions:
挂载参数,将PV挂载到Node时,根据后端存储特点,需要设置挂载参数时,可使用此项
- hard
- nfsvers=4.1
nfs:
path: /tmp
server: 主机ip NFS服务器
accessModes:PersistentVolume(PV)指定特殊的访问模式,NFS可以支持多个读/写客户端,但是特定的NFS PV可能以只读方式在服务器上导出。每个PV都有自己的一组访问模式,用于描述该特定PV的功能。
① ReadWriteOnce-该卷可以被单个节点以读写方式挂载
② ReadOnlyMany-该卷可以被许多节点以只读方式挂载
③ ReadWriteMany-该卷可以被多个节点以读写方式挂载
在CLI命令行中,访问模式缩写为
RWO-ReadWriteOnce
ROX-ReadOnlyMany
RWX-ReadWriteMany
同时一个卷一次只能使用一种访问模式挂载,即使它支持多种访问模式。
storageClassName:PV可以有一个类,通过将storageClassName属性设置为一个StorageClass的名称来指定这个类。特定类的PV只能绑定到请求该类的PVC。没有storageClassName的PV没有类,只能绑定到不请求特定类的PVC。
persistentVolumeReclaimPolicy:当前的回收政策是:Retain (保留)-手动回收、Recycle (回收)-基本擦除(rm -rf /thevolume/*)、Delete (删除)-删除相关的存储资产 (例如AWS EBS,GCE PD,Azure Disk或OpenStack Cinder卷)。
当前,仅NFS和HostPath支持回收。AWS EBS,GCE PD,Azure Disk和Cinder卷支持删除。
1.PV 状态/生命周期
卷将处于以下某种状态:
① Available:尚未绑定到声明(claim)的空闲资源
② Bound:卷已被声明绑定
③ Released:声明已被删除,但群集尚未回收该资源
④ Failed:该卷自动回收失败
CLI将显示绑定到PV的PVC的名称。
2.PVC
PVC作为用户对存储资源的需求申请,主要包括存储空间请求、访问模式、PV选择条件和存储类别等信息的设置。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc
spec:
accessModes: 访问模式
- ReadWriteOnce
resources: 申请资源,8Gi存储空间
requests:
storage: 8Gi
storageClassName: slow 存储类别
selector: PV选择条件
matchLabels:
release: "stable"
matchExpressions:
- {key: environment, operator: In, values: [dev]}
3.nfs
yum install nfs-utils rpcbind -y
mkdir -p /data/nfs1 /data/nfs2 /data/nfs3 /data/nfs4 /data/nfs5 /data/nfs6
vim /etc/exports
/data/nfs1 192.168.226.128/24(rw,sync,root_squash,all_squash)
/data/nfs2 192.168.226.128/24(rw,sync,root_squash,all_squash)
/data/nfs3 192.168.226.128/24(rw,sync,root_squash,all_squash)
/data/nfs4 192.168.226.128/24(rw,sync,root_squash,all_squash)
/data/nfs5 192.168.226.128/24(rw,sync,root_sq