• 四. k8s--pod控制器


    统一使用kubectl apply -f test.yaml格式来创建控制器, 和create相比, apply可以通过读取etcd当中保存的状态对比新的yaml和之前版本的区别, 可以直接根据新的yaml文件更新相应的控制器, 而create是一次性的, 创建一次之后在执行会报错

    pod控制器----ReplicaSet

    什么是ReplicaSet?

    ReplicaSet是下一代复本控制器。ReplicaSet和 Replication Controller之间的唯一区别是现在的选择器支持。Replication Controller只支持基于等式的selector(env=dev或environment!=qa),但ReplicaSet还支持新的,基于集合的selector(version in (v1.0, v2.0)或env notin (dev, qa))。在试用时官方推荐ReplicaSet。

    大多数kubectl支持Replication Controller的命令也支持ReplicaSets。rolling-update命令有一个例外 。如果您想要滚动更新功能,请考虑使用Deployments。此外, rolling-update命令是必须的,而Deployments是声明式的,因此我们建议通过rollout命令使用Deployments。

    虽然ReplicaSets可以独立使用,但是今天它主要被 Deployments 作为协调pod创建,删除和更新的机制。当您使用Deployments时,您不必担心管理他们创建的ReplicaSets。Deployments拥有并管理其ReplicaSets。

    apiVersion: apps/v1
    kind: ReplicaSet
    metadata:
      name: myapp
      namespace: default
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: myapp
          release: canary
      template:
        metadata:
          name: myapp-pod
          labels:
            app: myapp
            release: canary
            environment: qa
        spec:
          containers:
          - name: myapp-container
            image: ikubernetes/myapp:v1
            ports:
            - name: http
              containerPort: 80
    

    pod控制器----Deployment

    Deployment为Pod和ReplicaSet提供了一个声明式定义(declarative)方法,用来替代以前的ReplicationController来方便的管理应用。典型的应用场景包括:

    • 定义Deployment来创建Pod和ReplicaSet

    • 滚动升级和回滚应用

      kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1 #更新镜像
      kubectl rollout undo deployment/nginx-deployment                #回滚
      
    • 扩容和缩容

      kubectl scale deployment nginx-deployment --replicas 10 #扩容或者缩容均由scale指定replicas数量实现
      kubectl autoscale deployment nginx-deployment --min=10 --max=15 --cpu-percent=80
      
    • 暂停和继续Deployment

    Deployment是什么?

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

    你只需要在Deployment中描述你想要的目标状态是什么,Deployment controller就会帮你将Pod和Replica Set的实际状态改变到你的目标状态。你可以定义一个全新的Deployment,也可以创建一个新的替换旧的Deployment。

    一个典型的用例如下:

    • 使用Deployment来创建ReplicaSet。ReplicaSet在后台创建pod。检查启动状态,看它是成功还是失败。
    • 然后,通过更新Deployment的PodTemplateSpec字段来声明Pod的新状态。这会创建一个新的ReplicaSet,Deployment会按照控制的速率将pod从旧的ReplicaSet移动到新的ReplicaSet中。
    • 如果当前状态不稳定,回滚到之前的Deployment revision。每次回滚都会更新Deployment的revision。
    • 扩容Deployment以满足更高的负载。
    • 暂停Deployment来应用PodTemplateSpec的多个修复,然后恢复上线。
    • 根据Deployment 的状态判断上线是否hang住了。
    • 清除旧的不必要的ReplicaSet。
    apiVersion: apps/v1
    kind: Deployment
    metadata:
        name: myapp-deploy
        namespace: default
    spec:
        replicas: 2
        selector:
          matchLabels:
            app: myapp
            release: canary
        template:
          metadata:
            labels:
              app: myapp
              release: canary
          spec:
            containers:
            - name: myapp
              image: ikubernetes/myapp:v1
              ports:
              - name: http
                containerPort: 80
    

    Rolling Update:

    • Max Unavailable,.spec.strategy.rollingUpdate.maxUnavailable 是可选配置项,用来指定在升级过程中不可用Pod的最大数量。该值可以是一个绝对值(例如5),也可以是期望Pod数量的百分比(例如10%)。通过计算百分比的绝对值向下取整。例如,该值设置成30%,启动rolling update后旧的ReplicatSet将会立即缩容到期望的Pod数量的70%。新的Pod ready后,随着新的ReplicaSet的扩容,旧的ReplicaSet会进一步缩容,确保在升级的所有时刻可以用的Pod数量至少是期望Pod数量的70%

    • Max Surge,.spec.strategy.rollingUpdate.maxSurge 是可选配置项,用来指定可以超过期望的Pod数量的最大个数。该值可以是一个绝对值(例如5)或者是期望的Pod数量的百分比(例如10%)。当MaxUnavailable为0时该值不可以为0。通过百分比计算的绝对值向上取整。默认值是1。例如,该值设置成30%,启动rolling update后新的ReplicatSet将会立即扩容,新老Pod的总数不能超过期望的Pod数量的130%。旧的Pod被杀掉后,新的ReplicaSet将继续扩容,旧的ReplicaSet会进一步缩容,确保在升级的所有时刻所有的Pod数量和不会超过期望Pod数量的130%。

    kubectl rollout history deployment myapp-deploy  #查看滚动历史
    
    master $ kubectl rollout history deployment myapp-deploy
    deployment.extensions/myapp-deploy
    REVISION  CHANGE-CAUSE
    1         <none>
    2         <none>
    

    修改控制器信息, 除了直接修改yaml文件外, 还可以使用patch命令

    kubectl patch deployments myapp-deploy -p '{"spec":{"replicas":5}}'
    kubectl patch deploy myapp-deploy -p '{"spec":{"strategy":{"rollingUpdate":{"maxSurge":1,"maxUnavailable":0}}}}'
    

    pod控制器----DaemonSet控制器

    DaemonSet保证在每个Node上都运行一个容器副本,常用来部署一些集群的日志、监控或者其他系统管理应用。典型的应用包括:

    • 日志收集,比如fluentd,logstash等
    • 系统监控,比如Prometheus Node Exporter,collectd,New Relic agent,Ganglia gmond等
    • 系统程序,比如kube-proxy, kube-dns, glusterd, ceph等
    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
    
  • 相关阅读:
    Java中的变量
    Java是什么
    leetcode 75. 颜色分类
    leetcode 283. 移动零
    剑指 Offer 65. 不用加减乘除做加法
    剑指 Offer 53
    剑指 Offer 58
    剑指 Offer 58
    剑指 Offer 57
    剑指 Offer 57. 和为s的两个数字
  • 原文地址:https://www.cnblogs.com/peitianwang/p/11436278.html
Copyright © 2020-2023  润新知