k8s学习笔记-StatefulSets

StatefulSets
(有状态系统服务设计)同时StatefulSets是1.4 版本中PetSets的替代品。PetSets的用户参考1.5 升级指南 。
CoreOS:Operator:k8s运维组件来维护
1.稳定且唯一的网络标识符
2.稳定且持久的存储
3.有序平滑的部署和扩展
4.有序平滑的删除和终止
5.有序的滚动更新
三组件:
headless service StatefulSet VolumeClaimTemplate
kubectl explain sts.spec

vim Stateful.yaml

apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None
  selector:
    app: nginx
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  serviceName: "nginx"
  replicas: 3
  template:
    metadata:
      labels:
        app: nginx
    spec:
      terminationGracePeriodSeconds: 10 #k8s将会对应用发送SIGTERM信号,用来优雅的关闭应用,默认是30S
      containers:
      - name: nginx
        image: ikubernetes/myapp:v1
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: www
          mountPath: /usr/share/nginx/html
  volumeClaimTemplates:
  - metadata:
      name: www
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 5Gi

[root@k8s-master volumes]# kubectl apply -f pv-demo.yaml 修改pv001 pv002 pv003 为5G pv004 pv005 为 10G
kubectl apply -f Stateful.yaml
[root@k8s-master k8s]# kubectl get sts
NAME        READY      AGE
 web              3/3         4m55s
[root@k8s-master volumes]# kubectl get pv
[root@k8s-master k8s]# kubectl get pvc
[root@k8s-master k8s]# kubectl get pods
NAME        READY                    STATUS              RESTARTS         AGE
web-0           1/1                         Running                     0                  3m34s
web-1           1/1                         Running                     0                  3m32s
web-2           1/1                         Running                     0                  3m30s
做删除操作
[root@k8s-master k8s]# kubectl get pods -w

观察会发现Pods被删除时,会从{N-1..0}的相反顺序终止

做恢复操作

当部署Pod时,将会顺序从{0..N-1}开始创建。


解析名

pod_name.service_name.ns_name.svc.cluster.local

kubectl exec -it web-0 -- /bin/sh
# nslookup web-0.nginx.default.svc.cluster.local
Name: web-0.nginx.default.svc.cluster.local
Address 1: 10.244.2.90 web-0.nginx.default.svc.cluster.local
/ # nslookup web-1.nginx.default.svc.cluster.local
Name: web-1.nginx.default.svc.cluster.local
Address 1: 10.244.1.228 web-1.nginx.default.svc.cluster.local
/ # nslookup web-2.nginx.default.svc.cluster.local
Name: web-2.nginx.default.svc.cluster.local
Address 1: 10.244.1.229 web-2.nginx.default.svc.cluster.local
规模扩容
[root@k8s-master k8s]# kubectl scale sts web --replicas=5
statefulset.apps/web scaled
[root@k8s-master k8s]# kubectl get pods


缩减
kubectl patch sts web -p '{"spec":{"replicas":2}}'
[root@k8s-master k8s]# kubectl get pods

更新策略:
kubectl explain sts.spec.updateStrategy
kubectl explain sts.spec.updateStrategy.rollingUpdate
partition: N
>=N 的所有POD 更新 比如 有5个 如果定义 4 只更新 最后一个,其他4个都不变动,类似金丝雀发布
[root@k8s-master k8s]# kubectl patch sts web -p '{"spec":{"updateStrategy":{"rollingUpdate":{"partition":4}}}}'
statefulset.apps/web patched
kubectl describe sts web
kubectl set image sts/web nginx=ikubernetes/myapp:v2
[root@k8s-master k8s]# kubectl get sts -o wide
NAME       READY      AGE       CONTAINERS           IMAGES
web            5/5            39m             nginx               ikubernetes/myapp2
[root@k8s-master k8s]# kubectl set image sts/web nginx=ikubernetes/myapp:v2
statefulset.apps/web image updated
[root@k8s-master k8s]# kubectl get pods web-4 -o yaml |egrep image
- image: ikubernetes/myapp:v2
[root@k8s-master k8s]# kubectl get pods web-3 -o yaml |egrep image
- image: ikubernetes/myapp:v1
[root@k8s-master k8s]# kubectl get pods web-2 -o yaml |egrep image
- image: ikubernetes/myapp:v1
[root@k8s-master k8s]# kubectl get pods web-1 -o yaml |egrep image
- image: ikubernetes/myapp:v1
[root@k8s-master k8s]# kubectl get pods web-0 -o yaml |egrep image
- image: ikubernetes/myapp:v1
滚动更新所有的Pod

kubectl patch sts web -p '{"spec":{"updateStrategy":{"rollingUpdate":{"partition":0}}}}' 

posted @ 2019-05-06 11:51  屌丝的IT  阅读(661)  评论(0编辑  收藏  举报