今天继续给大家介绍Linux运维相关知识,本文主要内容是statefulset控制器实战。
一、NFS配置
在前文Kubernetes详解(四十五)——statefulset控制器原理中,我们介绍了StatefulSet控制器的相关知识,今天我们来进行StatefulSet控制器的实战。
在进行实战前,我们首先配置好NFS服务,和Kubernetes集群的PV,有关NFS服务的配置可以参考文章NFS配置实战,有关Kubernetes的NFS配置PV可以参考文章Kubernetes详解(三十八)——NFS对PVC和PV使用实战。
最终,我们配置的结果如下所示:
二、StatefulSet资源清单配置
首先,我们先配置StatefulSet控制器的资源清单。创建statefulset.yaml文件,并向文件中写入如下内容:
apiVersion: v1
kind: Service
metadata:
name: headless-svc
labels:
employ: statefulset
spec:
ports:
- port: 80
name: web
clusterIP: None
selector:
pod: statefulset
----
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: statefulset-exp
spec:
serviceName: headless-svc
replicas: 3
selector:
matchLabels:
pod: statefulset
template:
metadata:
labels:
pod: statefulset
spec:
containers:
- name: myapp
image: ikubernetes/myapp:v1
volumeMounts:
- name: volume-exp
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: volume-exp
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 1Gi
在上述资源清单中,我们创建了一个Service和一个StatefulSet控制器。在Service中,我们的ClusterIP为Node,即表示一个Headless Service;在StatefulSet控制器中,我们声明了该控制器下的Pod模板,以及PVC。
配置完成后的Service资源清单如下所示:
StatefulSet资源清单如下所示:
三、StatefulSet创建
接下来,我们就可以创建StatefulSet控制器了,执行命令:
kubectl apply -f statefulset.yaml
创建资源清单中配置的Headless Service和StatefulSet,该命令执行结果如下所示:
创建后,我们查看Kubernetes集群中的Pod,结果如下:
从上图中可以看出,我们的StatefulSet控制器与Deployment、ReplicaSet等控制器的区别在于,该控制器所控制的Pod是有顺序的。
PV的挂载情况如下:
PVC的信息如下:
四、效果展示
之后,我们尝试删除该StatefulSet控制器,执行命令:
kubectl delete -f statefulset.yaml
在执行上述创建命令时,如果我们同时打开一个终端,执行命令:
kubectl get pods -w
以便动态的查看Pod的情况,结果如下:
从上图中可以看出,我们的StatefulSet控制器在删除时,也是按照顺序删除的。
之后,我们再次创建该StatefulSet控制器,删除其中的Pod。并查看PV和PVC的相关信息,结果如下所示:
从上图中可以看出,当我们Pod重建后,挂载的PV依旧是原来的PV卷。
原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200