美文网首页
Kubernetes YAML 详解之工作负载二(Statefu

Kubernetes YAML 详解之工作负载二(Statefu

作者: 河码匠 | 来源:发表于2023-02-19 09:09 被阅读0次

一、StatefulSet YAML

简写 sts
有状态服务。需要数据持久化的服务,如: mysql

  • 特点
    StatefulSet 创建的 pod 是有序的
    StatefulSet 创建资源时,必须有一个 Service 服务
    StatefulSet 删除 pod 自动重新创建的 pod 名字不变
    StatefulSetvolumeClaimTemplates 卷申请模板模板,使用的是 StorageClass 资源。使用 volumeClaimTemplates 创建的卷在 pod 中是独享的。如:mysql 主从
    StatefulSet 创建的 pod,的域名 组成:pod-name.svc-name.svc-namespace.svc.cluster.local

Headless service 定义 pod 网络标识,生成 DNS 解析,Headless service 不分配 clusterIPheadless service 可以通过解析 Service 的 DNS ,返回所有 Pod 的 dns 和 ip 地址 ( StatefulSet 部署的 Pod 才有 DNS ),普通的 Service ,只能通过解析 Service 的 DNS 返回 ServiceClusterIP

  • StatefulSet 的 statefulset.spec 字段

kubectl explain statefulset.spec
字段 值类型 说明
minReadySeconds integer
persistentVolumeClaimRetentionPolicy Object pvc 回收策略
podManagementPolicy string pod 管理策略
replicas integer 副本数
revisionHistoryLimit integer 保留的历史版本数量,默认 10
* selector Object 标签选择器

匹配方式:

matchExpressions:表达式方式匹配 pod,参考上面示例有很多

matchLabels:标签 pod 匹配 map[string]string 这个类型
* serviceName string service 服务名
* template Object 创建资源时使用的模板

replicaset.spec.template.metadata 内容和 pod.metadata 相同。

replicaset.spec.template.spec 内容和 pod.spce 相同
updateStrategy Object 更新策略

rollingUpdate: Object 滚动更新策略
    maxUnavailable: 最多有几个不可用,也可以说必须存活的副本数
    partition: 只更新大于等于 partition 序号的 pod

type:
    OnDelete: pod 不会自动更新,更新需要手动删除 pod 然后 StatefulSet 自动创建删除的 pod
    RollingUpdate: 滚动更新,默认策略,需要定义 rollingUpdate
volumeClaimTemplates []Object 卷申请模板,在存储类自动生成 pv 和 pvc
  • StatefulSet 的 statefulset.spec.volumeClaimTemplates 字段,卷申请模板

因为这个 volumeClaimTemplates 是在 statefulset 资源里面的所以 apiVersionkind 字段可以不写。
metadata 和其他资源的一样

kubectl explain statefulset.spec.volumeClaimTemplates
字段 值类型 说明
accessModes []string 访问模式

ReadWriteOnce: 卷可以被同一个节点上资源以读写方式挂载。(list 中简称 RWX)
ReadOnlyMany: 卷可以被多个节点以只读方式挂载。(list 中简称 ROX)
ReadWriteMany: 卷可以被多个节点以读写方式挂载。(list 中简称 RWX)
ReadWriteOncePod: 卷可以被单个 Pod 以读写方式挂载。这只支持 CSI 卷以及需要 Kubernetes 1.22 以上版本。(list 中简称 RWOP)
dataSource Object
dataSourceRef Object
resources Object 资源限制

limits: 限制最大可用资源
requests: 最小的资源需求,节点资源不足这个限制,不会调度到该节点

limitsrequests 限制的资源 storagecpumemory。示例看下面的
selector Object 标签选择器。

匹配方式:

matchExpressions:表达式方式匹配 pod,参考上面示例有很多

matchLabels:标签 pod 匹配 map[string]string 这个类型
storageClassName string 存储类的名字,关于存储类
volumeMode string
volumeName string

示例:
如何创建 nfs 服务
如何创建 StorageClass

apiVersion: v1
kind: Service
metadata:
  name: ngins-service
  labels:
    server: nginx
spec:
  selector:                     # 标签选择器,选择资源的 container
    app: nginx
  ports:                        # 定义端口信息
  - port: 80                    # service 自己的端口号
    name: web                   # 关联的容器名
    targetPort: 80              # 目标容器的端口号
  clusterIP: None               # 不需要 ip
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
  labels:
    app: sfs
spec:
  replicas: 3                   # 副本数 3
  selector:                     # 标签选择器
    matchLabels:  
      app: nginx                # 选择要使用的 template
  serviceName: ngins-service    # service 服务的名字
  template:                     # 定义容器模板
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
          name: web
        volumeMounts:                       # 挂载镜像
        - name: web                         # 下面 volumeClaimTemplates 卷申请的名字
          mountPath: /usr/share/nginx/html  # 挂载到容器指定位置
  volumeClaimTemplates:                     # 申请卷,要在动态分配 pv 服务里面申请的 pv 和 pvc 的相关配置;根据副本数生成,相互之间独立
  - metadata:
      name: web
    spec:
      accessModes: ["ReadWriteOnce"]        # 存储模式
      storageClassName: nfs                 # 存储类 StorageClass 的名字,这是在 StorageClass 资源中创建的 nfs 动态分配 pv
      resources:                            # 存储资源限制
        requests:                           # 限制最小可用资源
          storage: 100Mi                    # 存储资源定义为100Mi

查看结果

kubectl get sts
kubectl get svc
kubectl get pods
kubectl get pv
kubectl get pvc

二、DaemonSet YAML

DaemonSet(简写 ds)确保 k8s 集群所有节点能运行一个相同的 pod,当集群新增节点时 DaemonSet 会自动在这个节点上运行 pod,集群删除节点时也会删除 pod。
比如:所有节点运行 ceph。或者所有节点采集日志 logstatsh、fluentd。或者监控。

字段 值类型 说明
minReadySeconds integer 过多长时间进行后续操作,默认 0
revisionHistoryLimit integer 保留的历史版本数量,默认 10
* selector Object 标签选择器。

匹配方式:

matchExpressions:表达式方式匹配 pod,参考上面示例有很多

matchLabels:标签 pod 匹配 map[string]string 这个类型
* template Object 创建资源时使用的模板

replicaset.spec.template.metadata 内容和 pod.metadata 相同。

replicaset.spec.template.spec 内容和 pod.spce 相同
updateStrategy Object 更新策略

rollingUpdate: Object 滚动更新策略
    maxUnavailable: 最多有几个不可用,也可以说必须存活的副本数

type:
    OnDelete: pod 不会自动更新,更新需要手动删除 pod 然后 StatefulSet 自动创建删除的 pod
    RollingUpdate: 滚动更新,默认策略,需要定义 rollingUpdate

示例:

apiVersion: apps/v1
kind: DaemonSet
metadata: 
  labels:
    k8s-app: fluentd-logging
  namespace: kube-system                   # 指定命名空间
spec:
  selector:                                # 标签选择器,选择要使用的 template
    matchLabels:
     app: fluentd
  template:                                # 定义 template
    metadata:
     labels:
       app: fluentd
    spec:
     tolerations:                          # 定义容忍度,因为要所有节点都创建,所以 master 的容忍度需要定义
     - key: node-role.kubernetes.io/master # node 节点污点的 key;kubectl describe node nodexx 里面的 Taints 字段
       effect: NoSchedule                  # 污点类型
     containers:
     - name:  fluentd
       image: fluentd:v2.5.1
       imagePullPolicy: IfNotPresent
       resources:                          # 资源限制
         limits:                           # 容器最多使用的资源
           cpu: 200m
           memory: 300Mi
         requests:                         # 容器最少使用的资源,也可以说节点最少提供的资源
           cpu: 100m
           memory: 200Mi
       volumeMounts:                       # 挂载镜像
       - name: varlog
         mountPath: /var/fluentd-logging   # 挂载容器指定位置
         readOnly: true                    # 开启只读
     volumes:                              # 定义挂载卷
     - name: varlog
       hostPath:                           # 在本地宿主机挂载卷
          path: /var/log

相关文章

网友评论

      本文标题:Kubernetes YAML 详解之工作负载二(Statefu

      本文链接:https://www.haomeiwen.com/subject/qdnmkdtx.html