使用 Statefulset 部署应用
1  | # 区别:  | 
1  | # 持久卷的创建和删除  | 
创建应用和容器镜像
1  | # 该应用接收到POST请求时,会把Body数据写入 /var/data/kubia.txt中  | 
1  | [root@k8s-master2 kubia-pet-image]# vim app.js  | 
1  | [root@k8s-master2 kubia-pet-image]# vim Dockerfile  | 
部署有状态应用
1  | # 需要创建的对象  | 
手动创建 PV 持久化存储卷
1  | # nfs共享存储里创建好目录  | 
1  | [root@k8s-master1 statefulset]# vim pv-nfs.yaml  | 
创建 Headless Service
1  | # 常规 Service:一组POD的访问策略,提供负载均衡服务发现  | 
1  | [root@k8s-master1 statefulset]# vim kubia-service-headless.yaml  | 
创建 Statefulset
1  | [root@k8s-master1 statefulset]# vim kubia-statefulset.yaml  | 
1  | # volumeClaimTemplates 持久卷声明模板  | 
查看 生成的有状态 Pod
1  | [root@k8s-master1 statefulset]# kubectl create -f kubia-statefulset.yaml  | 
1  | [root@k8s-master1 statefulset]# kubectl get pod kubia-0 -o yaml  | 
1  | # 查看 PVC  | 
使用 Pod 测试数据
1  | # 通过API服务器与Pod通信  | 
1  | # 测试下其他集群节点数据 kubia-1  | 
删除一个有状态Pod
1  | # 删除一个有状态Pod 查看重新调度的Pod 是否关联了之前的数据  | 
在Statefulset 中发现其他伙伴节点
SRV 记录
1  | # 运行一个DNS查询工具 dig 命令  | 
通过DNS查找所有Pod节点 并获取数据
1  | [root@k8s-master1 pub]# vim kubia-service-public.yaml  | 
1  | [root@k8s-master2 kubia-pet-peers-image]# cat app.js  | 
更新 Statefulset
1  | [root@k8s-master1 ~]# kubectl edit statefulset kubia  | 
1  | [root@k8s-master1 ~]# kubectl get pods -o wide  | 
测试集群数据
1  | [root@k8s-master1 ~]# kubectl proxy  | 
通过 DNS 获取 POD IP
1  | [root@k8s-master1 statefulset]# kubectl get svc  | 
StatefulSet 总结
1  | StatefulSet 与 Deployment区别: 有身份的,有网络标识,主机名,固定的存储  | 
