K8S statefulset
不同于rc、rs、deployment等控制器,statefulset面向的是有状态的服务。创建statefulset后一并与之创建对应的PVC,且每个PVC与创建的pod之间的绑定关系不会随pod的删除而改变,在pod根据replica定义的副本数量再生后,其持久化的数据因此也不会改变。创建后可通过pod.sv.ns的方式来访问,例如web-0.nginx.app01[root@k8s-mast
·
不同于rc、rs、deployment等控制器,statefulset面向的是有状态的服务。创建statefulset后一并与之创建对应的PVC,且每个PVC与创建的pod之间的绑定关系不会随pod的删除而改变,在pod根据replica定义的副本数量再生后,其持久化的数据因此也不会改变。创建后可通过pod.sv.ns的方式来访问,例如web-0.nginx.app01
[root@k8s-master-01 volumeTest]# cat sts.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
app: nginx
spec:
ports:
- port: 80
name: web
clusterIP: None #声明clusterIP为None
selector:
app: nginx
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
selector:
matchLabels:
app: nginx # has to match .spec.template.metadata.labels
serviceName: "nginx" #指定无头服务名
replicas: 2 # by default is 1
minReadySeconds: 10 # by default is 0
template:
metadata:
labels:
app: nginx # has to match .spec.selector.matchLabels
spec:
terminationGracePeriodSeconds: 10
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
name: web
volumeMounts:
- name: www
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: www
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: "nfssc" #使用之前定义过的StorageClass作为存储。
resources:
requests:
storage: 1Gi
#应用该sts文件过,查看PVC以及pod状态,可见自动创建了pvc
[root@k8s-master-01 volumeTest]# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
www-web-0 Bound pvc-7410035a-01ae-46a4-8cd2-31745492aef9 1Gi RWO nfssc 91s
www-web-1 Bound pvc-ee7695d0-6a1d-4650-87f2-b68c7bdbf53e 1Gi RWO nfssc 51s
[root@k8s-master-01 volumeTest]# kubectl get pods
NAME READY STATUS RESTARTS AGE
dbpod 1/1 Running 0 4h21m
web-0 1/1 Running 0 95s
web-1 1/1 Running 0 55s
#删除上述pods
[root@k8s-master-01 volumeTest]# kubectl delete pod web-{0,1}
pod "web-0" deleted
pod "web-1" deleted
#删除后pods再生,pod名字保持不变且根据其age时间可知创建顺序也没有变化。而不同于deployement的同时创建。
[root@k8s-master-01 volumeTest]# kubectl get pods
NAME READY STATUS RESTARTS AGE
dbpod 1/1 Running 0 4h29m
web-0 1/1 Running 0 24s
web-1 1/1 Running 0 4s
#查看创建的svc
[root@k8s-master-01 volumeTest]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
mysvc NodePort 10.96.179.103 <none> 80:31524/TCP 2d20h
nginx ClusterIP None <none> 80/TCP 12m
#创建一个testpod通过nslookup的方式访问服务,访问方式为“pod名.svc名”
[root@k8s-master-01 volumeTest]# kubectl run testpod --image=busybox:1.28 \
--image-pull-policy=IfNotPresent -it
/ # nslookup web-0.nginx
Server: 10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local
Name: web-0.nginx
Address 1: 10.244.1.51 web-0.nginx.app01.svc.cluster.local
更多推荐
已为社区贡献9条内容
所有评论(0)