幸福和富有的过一生

幸福和富有的过一生!


  • 首页

  • 归档

  • 关于我

  • 公益404

  • 搜索

Kubernetes中Deployment DaemonSet StatefulSet

时间: 2022-05-22 分类: kubernetes   cloudnative   deployment   daemonset   字数: 1466 字 阅读: 3分钟 阅读次数:

kubernetes集群有几种部署和管理POD的工具,下面简单介绍一下。

ReplicaSet

ReplicaSet是支持基于集合的标签选择器的下一代Replication Controller(新版本已不再使用), 它主要用作Deployment协调创建、删除和更新Pod,和Replication Controller唯一的区别是,ReplicaSet支持标签选择器。 在实际应用中,虽然ReplicaSet可以单独使用,但是一般建议使用Deployment来自动管理ReplicaSet, 除非自定义的Pod不需要更新或有其他编排等。

## 查看RellicaSet资源
$ kubectl get rs

Deployment

根据声明的YAML文件信息部署POD,并将POD调度到资源占用少的node节点上,会调用ReplicaSet管理POD副本。 主要适合如下场景:

  1. 部署无状态应用
  2. 管理Pod和ReplicaSet
  3. 部署,滚动升级
  4. 弹性扩容等 看一下kubernetes官方提供deployment yaml资源文件
apiVersion: apps/v1
kind: Deployment          ## 资源类型
metadata:
  name: nginx-deployment  ## 名称
  labels:
    app: nginx            ##标签
spec:
  replicas: 3             ## 副本数量
  selector:
    matchLabels:
      app: nginx          ## deployment根据这个标签,选择管理POD
  template:
    metadata:
      labels:
        app: nginx       ## Pod的标签,跟selector保持一致
    spec:
      containers:
      - name: nginx         ## 容器镜像
        image: nginx:1.14.2 ## 镜像版本
        ports:
        - containerPort: 80 ## 容器的端口

DaemonSet

DaemonSet(守护进程集)和守护进程类似,它在符合匹配条件的kubernetes集群的node节点上均部署一个Pod。 DaemonSet的场景:

  1. 集群存储守护程序,如glusterd、ceph要部署在每个节点上提供持久性存储。
  2. 集群日志守护程序,如fluentd、logstash,在每个节点运行容器。
  3. 节点监视守护进程,如prometheus监控集群,可以在每个节点上运行一个node-exporter用进程来收集监控节点的信息。
apiVersion: apps/v1
kind: DaemonSet     ## 资源类型
metadata:
  name: fluentd-elasticsearch
  namespace: kube-system
  labels:
    k8s-app: fluentd-logging
spec:
  selector:
    matchLabels:
      name: fluentd-elasticsearch
  template:
    metadata:
      labels:
        name: fluentd-elasticsearch
    spec:
      tolerations:
      # 这些容忍度设置是为了让守护进程在控制平面节点上运行
      # 如果你不希望控制平面节点运行 Pod,可以删除它们
      - key: node-role.kubernetes.io/control-plane
        operator: Exists
        effect: NoSchedule
      - key: node-role.kubernetes.io/master
        operator: Exists
        effect: NoSchedule
      containers:
      - name: fluentd-elasticsearch
        image: quay.io/fluentd_elasticsearch/fluentd:v2.5.2
        resources:
          limits:
            memory: 200Mi
          requests:
            cpu: 100m
            memory: 200Mi
        volumeMounts:
        - name: varlog
          mountPath: /var/log
        - name: varlibdockercontainers
          mountPath: /var/lib/docker/containers
          readOnly: true
      terminationGracePeriodSeconds: 30
      volumes:
      - name: varlog
        hostPath:
          path: /var/log
      - name: varlibdockercontainers
        hostPath:
          path: /var/lib/docker/containers

StatefulSet

StatefulSet主要用于管理有状态应用程序的工作负载API对象。 比如在生产环境中可以部署ElasticSearch集群、MongoDB集群或者需要持久化的RabbitMQ集群、 Redis集群、Kafka集群和ZooKeeper集群等。和Deployment类似,一个StatefulSet也同样管 理着基于相同容器规范的Pod。不同的是StatefulSet为每个Pod维护了一个粘性标识。 这些Pod是根据相同的规范创建的,但是不可互换,每个Pod都有一个持久的标识符,在重新调度时也会保留, 一般格式为StatefulSetName-Number。比如定义一个名字是Redis-Sentinel的StatefulSet,指定创建三个Pod, 那么创建出来的Pod名字就为Redis-Sentinel-0、Redis-Sentinel-1、Redis-Sentinel-2。 而StatefulSet创建的Pod一般使用Headless Service(无头服务)进行通信。

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:
  selector:
    matchLabels:
      app: nginx # 必须匹配 .spec.template.metadata.labels
  serviceName: "nginx"
  replicas: 3 # 默认值是 1
  minReadySeconds: 10 # 默认值是 0
  template:
    metadata:
      labels:
        app: nginx # 必须匹配 .spec.selector.matchLabels
    spec:
      terminationGracePeriodSeconds: 10
      containers:
      - name: nginx
        image: k8s.gcr.io/nginx-slim:0.8
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: www
          mountPath: /usr/share/nginx/html
  volumeClaimTemplates:
  - metadata:
      name: www
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: "my-storage-class"
      resources:
        requests:
          storage: 1Gi

引用

  1. Deployment

  2. DaemonSet

  3. StatefulSet

  4. 资源调度-Deployment,StatefulSet,DaemonSet

#kubernetes# #cloudnative# #deployment# #daemonset#
QQ扫一扫交流

标题:Kubernetes中Deployment DaemonSet StatefulSet

链接:/post/kubernetes-deploy/

作者:lizj3624

声明: 本博客文章除特别声明外,均采用 CC BY-NC-SA 3.0许可协议,转载请注明出处!

创作实属不易,如有帮助,那就打赏博主些许茶钱吧 ^_^
WeChat Pay

微信打赏

Alipay

支付宝打赏

美国股市百年跌荡启示录
Kubeadm中的Token过期问题
  • 文章目录
  • 站点概览
lizj3624

lizj3624

幸福和富有的过一生!

93 日志
90 分类
107 标签
GitHub 知乎
标签云
  • Cloudnative 13
  • 财报 11
  • Kubernetes 10
  • Nginx 9
  • Apisix 7
  • 美股 6
  • Video 5
  • 宏观经济 5
  • 投资 5
  • Linux 4
    • ReplicaSet
    • Deployment
    • DaemonSet
    • StatefulSet
    • 引用
© 2010 - 2024 幸福和富有的过一生
Powered by - Hugo v0.124.1 / Theme by - NexT
/
Storage by /
0%