zoukankan      html  css  js  c++  java
  • kubernetes-控制器Deployment和DaemonSet(八)

    Pod与controllers的关系

    •controllers:在集群上管理和运行容器的对象
    •通过label-selector相关联
    •Pod通过控制器实现应用的运维,如伸缩,升级等

    控制器又称工作负载是用于实现管理pod的中间层,确保pod资源符合预期的状态,pod的资源出现故障时,会尝试 进行重启,当根据重启策略无效,则会重新新建pod的资源。

    控制器有多种类型:

    Deployment:工作在ReplicaSet之上,用于管理无状态应用,目前来说最好的控制器。支持滚动更新和回滚功能,还提供声明式配置。
    DaemonSet:用于确保集群中的每一个节点只运行特定的pod副本,通常用于实现系统级后台任务。比如ELK服务
    Job:只要完成就立即退出,不需要重启或重建。
    Cronjob:周期性任务控制,不需要持续后台运行,
    StatefulSet:管理有状态应用

    ReplicaSet: 代用户创建指定数量的pod副本数量,确保pod副本数量符合预期状态,并且支持滚动式自动扩容和缩容功能。

    Deployment

    Deployment为Pod和Replica Set(下一代Replication Controller)提供声明式更新。

    只需要在 Deployment 中描述想要的目标状态是什么,Deployment controller 就会帮您将 Pod 和ReplicaSet 的实际状态改变到您的目标状态。也可以定义一个全新的 Deployment 来创建 ReplicaSet 或者删除已有的 Deployment 并创建一个新的来替换。

    典型的用例如下:

    1)使用Deployment来创建ReplicaSet。ReplicaSet在后台创建pod。检查启动状态,看它是成功还是失败。
    (2)然后,通过更新Deployment的PodTemplateSpec字段来声明Pod的新状态。这会创建一个新的ReplicaSet,Deployment会按照控制的速率将pod从旧的ReplicaSet移动到新的ReplicaSet中。
    (3)如果当前状态不稳定,回滚到之前的Deployment revision。每次回滚都会更新Deployment的revision。
    (4)扩容Deployment以满足更高的负载。
    (5)暂停Deployment来应用PodTemplateSpec的多个修复,然后恢复上线。
    (6)根据Deployment 的状态判断上线是否hang住了。
    (7)清除旧的不必要的 ReplicaSet。

    创建deployment

    [root@k8s-master1 demo]# vim deploy-demo.yaml 
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
      namespace: default
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:1.14
            ports:
            - containerPort: 80
    
    [root@k8s-master1 demo]# kubectl create -f deploy-demo.yaml 
    deployment.apps/nginx-deployment created

    查看Deployment已经创建了3个 replica ,刚创建的Replica Set将保证总是有3个副本的 pod 存在

    [root@k8s-master1 demo]# kubectl get deploy,rs,pod -o wide
    NAME                                     READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES       SELECTOR
    deployment.extensions/nginx-deployment   3/3     3            3           8s    nginx        nginx:1.14   app=nginx
    
    NAME                                                DESIRED   CURRENT   READY   AGE   CONTAINERS   IMAGES       SELECTOR
    replicaset.extensions/nginx-deployment-75465b4f74   3         3         3       8s    nginx        nginx:1.14   app=nginx,pod-template-hash=75465b4f74
    
    NAME                                    READY   STATUS    RESTARTS   AGE   IP            NODE            NOMINATED NODE   READINESS GATES
    pod/nginx-deployment-75465b4f74-7qsh7   1/1     Running   0          8s    172.17.73.3   192.168.0.126   <none>           <none>
    pod/nginx-deployment-75465b4f74-9p9kl   1/1     Running   0          8s    172.17.73.4   192.168.0.126   <none>           <none>
    pod/nginx-deployment-75465b4f74-r9snc   1/1     Running   0          8s    172.17.32.2   192.168.0.125   <none>           <none>

     ReplicaSet 的名字总是<Deployment的名字>-<pod template的hash值>

    [root@k8s-master1 demo]# kubectl get pods --show-labels
    NAME                                READY   STATUS    RESTARTS   AGE   LABELS
    nginx-deployment-75465b4f74-7qsh7   1/1     Running   0          70s   app=nginx,pod-template-hash=75465b4f74
    nginx-deployment-75465b4f74-9p9kl   1/1     Running   0          70s   app=nginx,pod-template-hash=75465b4f74
    nginx-deployment-75465b4f74-r9snc   1/1     Running   0          70s   app=nginx,pod-template-hash=75465b4f74

    DaemonSet

    DaemonSet 确保全部(或者一些)Node 上运行一个 Pod 的副本。当有 Node 加入集群时,也会为他们新增一个 Pod 。当有 Node 从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod。

    使用 DaemonSet 的一些典型用法:

    • 运行集群存储 daemon,例如在每个 Node 上运行 ,应用场景:Agent。
    • 在每个 Node 上运行日志收集 daemon,例如fluentdlogstash
    • 在每个 Node 上运行监控 daemon,例如 Prometheus Node Exportercollectd、Datadog 代理、New Relic 代理,或 Ganglia gmond
    DaemonSet示例

    创建redis-filebeat的yaml文件

    [root@k8s-master1 demo]# vim ds-demo.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: redis
      namespace: default
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: redis
          role: logstor
      template:
        metadata:
          labels:
            app: redis
            role: logstor
        spec:
          containers:
          - name: redis
            image: redis:4.0-alpine
            ports:
            - name: redis
              containerPort: 6379
    ---
    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: filebeat-ds
      namespace: default
    spec:
      selector:
        matchLabels:
          app: filebeat
          release: stable
      template:
        metadata:
          labels: 
            app: filebeat
            release: stable
        spec:
          containers:
          - name: filebeat
            image: ikubernetes/filebeat:5.6.5-alpine
            env:
            - name: REDIS_HOST
              value: redis.default.svc.cluster.local
            - name: REDIS_LOG_LEVEL
              value: info

    创建pod

    [root@k8s-master1 demo]# kubectl apply -f ds-demo.yaml 
    deployment.apps/redis created
    daemonset.apps/filebeat-ds created

    暴露端口

    [root@k8s-master1 demo]# kubectl expose deployment redis --port=6379
    service/redis exposed
    [root@k8s-master1 demo]# kubectl get svc
    NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)    AGE
    service/kubernetes   ClusterIP   10.0.0.1     <none>        443/TCP    5d19h
    service/redis        ClusterIP   10.0.0.150   <none>        6379/TCP   19s

    查看pod  ,DaemonSet在每个node上运行一个filebeat的pod

    [root@k8s-master1 demo]# kubectl get pod -o wide
    NAME                     READY   STATUS    RESTARTS   AGE   IP            NODE            NOMINATED NODE   READINESS GATES
    filebeat-ds-dndjq        1/1     Running   0          17m   172.17.32.3   192.168.0.125   <none>           <none>
    filebeat-ds-k6d6b        1/1     Running   0          17m   172.17.73.3   192.168.0.126   <none>           <none>
    redis-85b846ff9c-wlxcg   1/1     Running   0          17m   172.17.32.2   192.168.0.125   <none>           <none>
  • 相关阅读:
    内存管理3 Win32汇编语言056
    高级强制类型转换 C++快速入门37
    内存管理3 Win32汇编语言056
    密码学基础
    危险API的禁用列表
    危险API的禁用列表
    《那些年啊,那些事——一个程序员的奋斗史》——68
    《那些年啊,那些事——一个程序员的奋斗史》——68
    《那些年啊,那些事——一个程序员的奋斗史》——68
    春节期间停止更新
  • 原文地址:https://www.cnblogs.com/yuezhimi/p/10167695.html
Copyright © 2011-2022 走看看