k8s-StatefulSet控制器-独立存储

1. StatefulSet控制器-独立存储

  • 独享存储:StatefulSet的存储卷使用VolumeClaimTemplate创建,称为卷申请模板,当StatefulSet使用VolumeClaimTemplate创建一个PersistentVolume时,同样也会为每个Pod分配并创建一个编号的PVC,每
  • 个PVC绑定对应的PV,从而保证每个Pod都拥有独立的存储。

1.1 headless service示例

apiVersion: v1
kind: Service
metadata:
name: web
namespace: default
spec:
clusterIP: None #无头服务
selector: #容器选择器
app: nginx # 指定关联pod名称
ports:
- protocol: TCP # 协议
port: 80 # service 端口
targetPort: 80 # 容器端口
type: ClusterIP # 服务类型

1.2 statefulset 独享存储文件

apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
serviceName: "web" # 绑定的服务
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
name: web
# 独享存储
volumeMounts:
- name: www
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: www
spec:
storageClassName: "managed-nfs-storage"
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi

2. 案例

2. 1 编写headless service示例

[root@k8s-master statefulset]# vim headless-service.yaml
[root@k8s-master statefulset]# cat headless-service.yaml
apiVersion: v1
kind: Service
metadata:
name: web
namespace: default
spec:
clusterIP: None #无头服务
selector: #容器选择器
app: nginx # 指定关联pod名称
ports:
- protocol: TCP # 协议
port: 80 # service 端口
targetPort: 80 # 容器端口
type: ClusterIP # 服务类型

2.2 编写statefulset 独享存储文件

[root@k8s-master statefulset]# vim statefulset_pod.yaml
[root@k8s-master statefulset]# cat statefulset_pod.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
serviceName: "web" # 绑定的服务
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
name: web
volumeMounts:
- name: www
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: www
spec:
storageClassName: "managed-nfs-storage"
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi

2.3 启动配置文件

[root@k8s-master statefulset]# kubectl apply -f statefulset_pod.yaml
statefulset.apps/web configured

2.4 验证是否启动

[root@k8s-master statefulset]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nfs-client-provisioner-95c9579-qslkg 1/1 Running 0 5h6m
web-0 1/1 Running 0 17m
web-1 1/1 Running 0 17m
web-2 1/1 Running 0 16m

2.5 验证pvc和pv

[root@k8s-master statefulset]# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
my-pvc Bound my-pv 5Gi RWX 3d12h
test-claim Bound pvc-998a4c34-f686-4e46-80bf-6d32c005111d 1Gi RWX managed-nfs-storage 2d9h
www-web-0 Bound pvc-3494846e-cfaa-4334-8080-1479a583cb53 1Gi RWO managed-nfs-storage 15m
www-web-1 Bound pvc-fe224ed6-b3e2-4359-975d-d2a5bd22a3a1 1Gi RWO managed-nfs-storage 15m
www-web-2 Bound pvc-a56d4952-bbbe-49c0-8208-7126fc392b20 1Gi RWO managed-nfs-storage 15m [root@k8s-master statefulset]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
my-pv 5Gi RWX Retain Terminating default/my-pvc 3d12h
pvc-3494846e-cfaa-4334-8080-1479a583cb53 1Gi RWO Delete Bound default/www-web-0 managed-nfs-storage 15m
pvc-998a4c34-f686-4e46-80bf-6d32c005111d 1Gi RWX Delete Bound default/test-claim managed-nfs-storage 2d9h
pvc-a56d4952-bbbe-49c0-8208-7126fc392b20 1Gi RWO Delete Bound default/www-web-2 managed-nfs-storage 15m
pvc-fe224ed6-b3e2-4359-975d-d2a5bd22a3a1 1Gi RWO Delete Bound default/www-web-1 managed-nfs-storage 15m
test-pv 1Gi RWX Retain Available 22m
  • 验证nfs存储的

    [root@k8s-node3 ~]# cd /ifs/kubernetes/
    [root@k8s-node3 kubernetes]# ll -a
    总用量 4
    drwxr-xr-x 6 root root 289 1月 2 21:30 .
    drwxr-xr-x 3 root root 24 12月 28 17:36 ..
    drwxrwxrwx 2 root root 24 12月 31 12:37 default-test-claim-pvc-998a4c34-f686-4e46-80bf-6d32c005111d
    drwxrwxrwx 2 root root 6 1月 2 21:30 default-www-web-0-pvc-3494846e-cfaa-4334-8080-1479a583cb53
    drwxrwxrwx 2 root root 6 1月 2 21:30 default-www-web-1-pvc-fe224ed6-b3e2-4359-975d-d2a5bd22a3a1
    drwxrwxrwx 2 root root 6 1月 2 21:30 default-www-web-2-pvc-a56d4952-bbbe-49c0-8208-7126fc392b20
    -rw-r--r-- 1 root root 22 12月 28 20:17 index.html

    注释: 在这里我们可以看到有web的存储路径

  • 往这三个路径写入数据

    echo  ' hello pod 00' > default-www-web-0-pvc-3494846e-cfaa-4334-8080-1479a583cb53/index.html
    
    echo  ' hello pod 01' > default-www-web-1-pvc-fe224ed6-b3e2-4359-975d-d2a5bd22a3a1/index.html
    
    echo  ' hello pod 02' > default-www-web-2-pvc-a56d4952-bbbe-49c0-8208-7126fc392b20/index.html
  • 验证三个路径里面的数据

    [root@k8s-node3 kubernetes]# cat default-www-web-0-pvc-3494846e-cfaa-4334-8080-1479a583cb53/index.html
    hello pod 00
    [root@k8s-node3 kubernetes]# cat default-www-web-1-pvc-fe224ed6-b3e2-4359-975d-d2a5bd22a3a1/index.html
    hello pod 01
    [root@k8s-node3 kubernetes]# cat default-www-web-2-pvc-a56d4952-bbbe-49c0-8208-7126fc392b20/index.html
    hello pod 02

2.6 验证一下请求数据

  • 查看pod的IP

    [root@k8s-master statefulset]# kubectl get pods -o wide
    NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
    nfs-client-provisioner-95c9579-qslkg 1/1 Running 0 5h19m 10.244.36.92 k8s-node1 <none> <none>
    web-0 1/1 Running 0 29m 10.244.107.220 k8s-node3 <none> <none>
    web-1 1/1 Running 0 29m 10.244.36.94 k8s-node1 <none> <none>
    web-2 1/1 Running 0 29m 10.244.169.149 k8s-node2 <none> <none>
  • 模拟浏览器请求

    [root@k8s-master statefulset]# curl 10.244.107.220
    hello pod 00
    [root@k8s-master statefulset]# curl 10.244.36.94
    hello pod 01
    [root@k8s-master statefulset]# curl 10.244.169.149
    hello pod 02

3 案例-删除应用测试

3.1 删除pod服务

[root@k8s-master statefulset]# kubectl delete -f statefulset_pod.yaml
statefulset.apps "web" deleted

3.2 验证服务是否存在

[root@k8s-master statefulset]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nfs-client-provisioner-95c9579-qslkg 1/1 Running 0 5h27m

注释:发现服务已经删除了

3.3 验证pv和pvc是否存在

[root@k8s-master statefulset]# kubectl get pv,pvc
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
persistentvolume/my-pv 5Gi RWX Retain Terminating default/my-pvc 3d12h
persistentvolume/pvc-3494846e-cfaa-4334-8080-1479a583cb53 1Gi RWO Delete Bound default/www-web-0 managed-nfs-storage 39m
persistentvolume/pvc-998a4c34-f686-4e46-80bf-6d32c005111d 1Gi RWX Delete Bound default/test-claim managed-nfs-storage 2d9h
persistentvolume/pvc-a56d4952-bbbe-49c0-8208-7126fc392b20 1Gi RWO Delete Bound default/www-web-2 managed-nfs-storage 39m
persistentvolume/pvc-fe224ed6-b3e2-4359-975d-d2a5bd22a3a1 1Gi RWO Delete Bound default/www-web-1 managed-nfs-storage 39m
persistentvolume/test-pv 1Gi RWX Retain Available 45m NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
persistentvolumeclaim/my-pvc Bound my-pv 5Gi RWX 3d12h
persistentvolumeclaim/test-claim Bound pvc-998a4c34-f686-4e46-80bf-6d32c005111d 1Gi RWX managed-nfs-storage 2d9h
persistentvolumeclaim/www-web-0 Bound pvc-3494846e-cfaa-4334-8080-1479a583cb53 1Gi RWO managed-nfs-storage 39m
persistentvolumeclaim/www-web-1 Bound pvc-fe224ed6-b3e2-4359-975d-d2a5bd22a3a1 1Gi RWO managed-nfs-storage 39m
persistentvolumeclaim/www-web-2 Bound pvc-a56d4952-bbbe-49c0-8208-7126fc392b20 1Gi RWO managed-nfs-storage 39m

注释:发现服务还存在

3.4 重新启动服务看看

  • 重启服务

    [root@k8s-master statefulset]# kubectl apply -f statefulset_pod.yaml
    statefulset.apps/web created
  • 验证IP是否发生变化

    # 验证IP
    [root@k8s-master statefulset]# kubectl get pods -o wide
    NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
    nfs-client-provisioner-95c9579-qslkg 1/1 Running 0 5h19m 10.244.36.92 k8s-node1 <none> <none>
    web-0 1/1 Running 0 29m 10.244.107.220 k8s-node3 <none> <none>
    web-1 1/1 Running 0 29m 10.244.36.94 k8s-node1 <none> <none>
    web-2 1/1 Running 0 29m 10.244.169.149 k8s-node2 <none> <none> #重启后的
    [root@k8s-master statefulset]# kubectl get pods -o wide
    NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
    nfs-client-provisioner-95c9579-qslkg 1/1 Running 0 5h31m 10.244.36.92 k8s-node1 <none> <none>
    web-0 1/1 Running 0 82s 10.244.107.221 k8s-node3 <none> <none>
    web-1 1/1 Running 0 77s 10.244.36.95 k8s-node1 <none> <none>
    web-2 1/1 Running 0 71s 10.244.169.150 k8s-node2 <none> <none>

    注释: 发现已经发现变化了

  • 我们验证一下数据是否一样

    [root@k8s-master statefulset]# curl 10.244.107.221
    hello pod 00
    [root@k8s-master statefulset]# curl 10.244.36.95
    hello pod 01
    [root@k8s-master statefulset]# curl 10.244.169.150
    hello pod 02

    注释: 看到数据是没有发生变化的

k8s StatefulSet控制器-独立存储的更多相关文章

  1. 5.深入k8s:StatefulSet控制器

    转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com 在上一篇中,讲解了容器持久化存储,从中我们知道什么是PV和PVC,这一篇我们讲通过Sta ...

  2. 容器编排系统K8s之StatefulSet控制器

    前文我们聊到了k8s的configmap和secret资源的说明和相关使用示例,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/14194944.html:今天 ...

  3. Kubernetes学习之路(十七)之statefulset控制器

    目录 一.statefulset简介 二.为什么要有headless?? 三.为什么要 有volumeClainTemplate?? 四.statefulSet使用演示 (1)查看statefulse ...

  4. kubernetes学习控制器之StatefulSet控制器

    StatefulSet介绍 一.StatefulSet概述 StatefulSet是用来管理stateful(有状态)应用的StatefulSet管理Pod时,确保Pod有一个按序增长的ID与Depl ...

  5. 3.k8s资源控制器rs Deployment Job

    k8s资源控制器 #控制器类型 ReplicaSet #rs,确保pod副本数,rs已替代rc Deployment #管理rs,升级.回滚.扩容pod DaemonSet #在每个节点运行一个Pod ...

  6. WP8 独立存储 总结3(应用设置)

    •可在独立存储中使用ApplicationSettings对象•在独立存储中存储键/值对的Dictionary方式存储 •存储的对象将永久保存 在应用设置中保存数据 void saveString(s ...

  7. WP_从独立存储区读取缓存的图片

      ///<summary> /// 独立存储缓存的图片源 /// 用法:item.img = new StorageCachedImage(newUri(http://www.baidu ...

  8. Silverlight 独立存储(IsolatedStorageFile)

    1.在Web中添加天气服务引用地址 http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl 2.在Web中添加Wcf服务接口I ...

  9. Windows phone 之独立存储

    独立存储命名空间的说明:

随机推荐

  1. Shooting Bricks题解

    题目传送门 以后我绝对不会一直磕着一道题磕几个小时了...感觉还是自己节奏出了问题,不知为啥感觉有点小慌... 算了,其实再回头仔细看一下这个题dp的思路还是比较好想出来的,打代码之前一定要做好足够的 ...

  2. pycharm软件安装和破解

    pycharm安装 1. 进入pycharm的官网 --- 下载专业版的pycharm 2. 双击下载好的软件,下一步 3. 选择需要安装软件的路径 --- 注意: 尽量不要将软件装在C盘里 4. 默 ...

  3. QuantumTunnel:内网穿透服务设计

    背景 最近工作中有公网访问内网服务的需求,便了解了内网穿透相关的知识.发现原理和实现都不复杂,遂产生了设计一个内网穿透的想法. 名字想好了,就叫QuantumTunnel,量子隧道,名字来源于量子纠缠 ...

  4. 升级JDK8的坎坷之路

    为更好的适应JAVA技术的发展,使用更先进及前沿的技术.所以推出将我们现在使用的JDK1.6(1.7)及tomcat6(7)升级至JDK1.8及tomcat8,使我们的系统获得更好的性能,更好适应未来 ...

  5. (数据科学学习手札130)利用geopandas快捷绘制在线地图

    本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 在上一篇文章中,我为大家介绍了不久前发布的 ...

  6. 【数据结构&算法】10-串基础&KMP算法源码

    目录 前言 串的定义 串的比较 串的抽象类型数据 串与线性表的比较 串的数据 串的存储结构 串的顺序存储结构 串的链式存储结构 朴素的模式匹配算法 模式匹配的定义 朴素的匹配方法(BRUTE FORC ...

  7. CobaltStrike上线Linux

    为获得最佳的阅读体验,请访问我的个人主页: https://xzajyjs.cn/ 在红蓝对抗中,我们常需要对目标进行长时间的控制,cobaltstrike原生对于上线windows比较轻松友好,但如 ...

  8. java读取大文件内容到Elasticsearch分析(手把手教你java处理超大csv文件)

    现在需要快算分析一个2g的csv文件: 基于掌握的知识,使用java按行读取文件,批量导入数据到es, 然后利用es强大的聚合能力分析数据,2个小时搞定! package com.example.de ...

  9. 一个反直觉的sql

    引子 在<容易引起雪崩的两个处理>里,我提到一个慢查询的问题.本文先从整洁架构的角度讲讲慢查询sql完成的功能以及设计,再介绍对sql进行的实施测试现象以及思考. 设计讲解 一见杨过误终身 ...

  10. Java学习(十七)

    Java多态的学习差不多有3个小时,老师还夹杂着一些编译器运用的知识. 这是多态的基本知识: 我们可以创建父类引用指向子类对象,这就是多态的一种.(这种也叫向下转型) Pet c=new Cat(); ...