第9关 k8s架构师课程之有状态服务StatefulSet
文件转载自博客:https://www.bilibili.com/video/BV1kK4y1U7PQ?spm_id_from=333.999.0.0
https://www.toutiao.com/a6941713886601085471/?log_from=2e24852b1d691_1630849929667
这里一定要看视频
接下来先看这篇文章,再来看视频里面的文章
https://zhuanlan.zhihu.com/p/164771138
Statefulset
StatefulSet是为了解决有状态服务的问题,对应的Deployment和ReplicaSet是为了无状态服务而设计,其应用场景包括:
- 稳定的持久化存储,即Pod重新调度后还是能访问到相同的持久化数据,基于PVC来实现
- 稳定的网络标志,即Pod重新调度后其PodName和HostName不变,基于Headless Service(即没有Cluster IP的Service)来实现
- 有序部署,有序扩展,即Pod是有顺序的,在部署或者扩展的时候要依据定义的顺序依次依次进行(即从0到N-1,在下一个Pod运行之前所有之前的Pod必须都是Running和Ready状态),基于init containers来实现
- 有序收缩,有序删除(即从N-1到0)
因为statefulset要求Pod的名称是有顺序的,每一个Pod都不能被随意取代,也就是即使Pod重建之后,名称依然不变。为后端的每一个Pod去命名。
StatefulSet:Pod控制器。RC、RS、Deployment、DS。 无状态的服务。
template(模板):根据模板创建出来的Pod,它们的状态都是一模一样的(除了名称、IP、域名之外)可以理解为:任何一个Pod,都可以被删除,然后用新生成的Pod进行替换。
有状态的服务:需要记录前一次或者多次通信中的相关时间,以作为下一次通信的分类标准。比如:MySQL等数据库服务。(Pod的名称,不能随意变化。数据持久化的目录也是不一样,每一个Pod都有自己独有的数据持久化存储目录。)
每一个Pod-----对应一个PVC-----每一个PVC对应一个PV。
以自己的名称创建一个名称空间,以下所有资源都运行在此空间中。
用statefuset资源运行一个httpd web服务,要求3个Pod,但是每个Pod的主界面内容不一样,并且都要做专有的数据持久化,尝试删除其中一个Pod,查看新生成的Pod,是否数据与之前一致。
基于NFS服务,创建NFS服务。
[root@master ~]# yum -y install nfs-utils rpcbind br/>2.[root@master ~]# mkdir /nfsdata [root@master ~]# vim /etc/exports br/>4./nfsdata *(rw,sync,no_root_squash) [root@master ~]# systemctl start nfs-server.service [root@master ~]# systemctl start rpcbind br/>7.[root@master ~]# showmount -e Export list for master: ./nfsdata *
2.创建RBAC权限
vim rbac-rolebind.yaml
apiVersion: v1
kind: Namespace
metadata:
name: lbs-test
apiVersion: v1
kind: ServiceAccount 创建rbac授权用户。及定义权限
metadata:
name: nfs-provisioner
name:lbs-test
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: nfs-provisioner-runner
name:lbs-test
rules:
- apiGroups: [""]
resources: ["persistentvolumes"]
verbs: ["get", "list", "watch", "create", "delete"]
- apiGroups: [""]
resources: ["persistentvolumeclaims"]
verbs: ["get", "list", "watch", "update"]
- apiGroups: ["storage.k8s.io"]
resources: ["storageclasses"]
verbs: ["get", "list", "watch"]
- apiGroups: [""]
resources: ["events"]
verbs: ["watch", "create", "update", "patch"]
- apiGroups: [""]
resources: ["services", "endpoints"]
verbs: ["get","create","list",