使用 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区别: 有身份的,有网络标识,主机名,固定的存储 |