statefulset

statefulset 为管理有状态服务而设计的

有状态: 服务名称不能变化,每个pod要有单独的存储,多用于数据库使用。

无状态:管理的Pod的IP、名字,启停顺序等都是随机的。个体对整体无影响,所有pod都是共用一个数据卷的

statefulset 由以下几个部分组成:

1 Headless Service: 用来定义Pod网络标识,生成可解析的DNS记录,被DNS解析后返回所有绑定的pod的IP,普通service 解析返回的是ClusterIP,pod名称是pod唯一性的标识符,必须持久稳定有效

2 volumeClaimTemplates: 存储申请模板,创建pvc,指定pvc名称大小,自动创建pvc,且pvc由存储类供应

3 statefulset 管理pod的

资源清单示例:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: state-test
spec:
  replicas: 3
  selector:
    matchLabels:
      app: state
  serviceName: my-state
  template:
    metadata:
      name: state
      labels:
        app: state
    spec:
      containers:
      - name: state-cont
        image: nginx
        volumeMounts:
        - name: vol-test
          mountPath: /tmpdir
  # 通过卷模板创建pvc,可以达到每个pod一个独立的存储卷的效果
  volumeClaimTemplates:
  - metadata:
      name: vol-test
    spec:
      accessModes:
      - "ReadWriteOnce"
      storageClassName: nfs
      resources:
        requests:
          storage: 1Gi

使用 kubectl explain statefulset.spec.template.spec.volumes挂载只能挂载已经创建好的pvc

通过使用 volumeClaimTemplates 完成动态创建pvc

 通过statefulset创建出来的pod是有序的从0开始有序排列,扩容从小到大增长,缩容从大到小减少

扩容直接使用edit编辑statefulst即可或修改yaml文件副本数后apply更新

 

有头service 解析的是service对应的IP,无头service解析结果是后端所有pod的ip

 daemonset

daemonset可以确保k8s中每个节点都运行一个相同的pod,当节点数量变化时,pod也会随着节点的数量怎加减少。

daemonset 的控制器会监听 kuberntes 的 daemonset 对象、pod 对象、node 对象,这
些被监听的对象之变动,就会触发 syncLoop 循环让 kubernetes 集群朝着 daemonset 对象
描述的状态进行演进。

在集群的每个节点上运行存储,比如:glusterd 或 ceph。
在每个节点上运行日志收集组件,比如:flunentd 、 logstash、filebeat 等。
在每个节点上运行监控组件,比如:Prometheus、 Node Exporter 、collectd 等。

资源清单示例:

通过 kubectl explain 资源名称查看帮助

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: daem-test
  labels:
    app1: daem
spec:
  selector:
    matchLabels:
      app1: daem
  template:
    metadata:
      name: daem-pod
      labels:
        app1: daem
    spec:
      containers:
      - name: daem-pod-nginx
        image: nginx
      # 容忍污点,调度也受污点的影响
      tolerations:
      - effect: NoSchedule
        operator: Exists

 deamonset也支持滚动更新,先删除后创建。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐