zoukankan      html  css  js  c++  java
  • 4.Pod控制器

    Controller-manager:

           Kube-controller-manager

           Cloud-controller-manager:在K8S上启用CloudProvider的时候才需要,用来配合云服务提供商的控制(NodeController,RouteController,ServiceController)

    一、Pod控制器

    ReplicationController

    ReplicaSet:是新一代的ReplicationController。帮助用户管理无状态的资源,并确保能够精确反映用户定义的目标数量。

           核心组件:用户期望的副本数,标签选择器,pod资源模板

    Deployment:建立在ReplicaSet之上。支持扩缩容,支持滚动更新,回滚等,提供声明式定义资源。是目前管理无状态应用的最好的控制器。

    DaemonSet:用于确保集群的每一个节点只运行一个特定的Pod副本,或者仅在满足条件的节点上,运行一个Pod副本。通常用来实现系统级别的后台任务(以守护进程形式运行),托管到K8S上,。不用定义pod的期望数量,因为副本数量取决于集群规模。

    Job:是否重建Pod取决于任务是否完成。只能执行一次性的任务。

    CronJob:周期性运行任务。

    StatefulSet:管理有状态应用。把需要手动做的运维操作步骤封装成脚本,放在pod模板中,让控制器按脚本去做。  --- 有状态应用托管到K8S很难,因为有状态应用,无法抽取共同特点,并定义出一种模式来,只能每一种应用都单独对待。

    二、ReplicaSet

     

    [kubelet@master yaml]$ cat rs-demo.yaml
    [kubelet@master ~]$ kubectl get pods --show-labels
    [kubelet@master yaml]$ kubectl edit rs myapp  ## 在线修改yaml,动态扩容缩容(更改replicas);动态更新(更改container的image版本),已存在的pod版本不会改变,只有重建的才会是新版本。

    三、Deployment

    一个deployment管理多个ReplicaSet。只有一个是处于活动状态。可以提供声明式更新创建。通常用apply,而不使用create。提供滚动式自定义自控制更新;可以实现控制更新逻辑和更新节奏,更新粒度。

    [kubelet@master yaml]$ kubectl explain deployment.spec.strategy   # 更新策略
    [kubelet@master yaml]$ kubectl explain deployment.spec.revisionHistoryLimit   # 历史版本数

    [kubelet@master yaml]$ vim deploy-demo.yaml  # 直接修改yaml文件replicas
    [kubelet@master yaml]$ kubectl apply -f deploy-demo.yaml  # 再次apply,得到如下效果。

     

    [kubelet@master yaml]$ kubectl rollout history deployment myapp-deploy  # 查看滚动更新的历史
    [kubelet@master yaml]$ kubectl patch deployment myapp-deploy -p '{"spec":{"replicas":5}}'  # 打补丁
    [kubelet@master yaml]$ kubectl patch deployment myapp-deploy -p '{"spec":{"strategy":{"rollingUpdate":{"maxSurge":1,"maxUnavailable":0}}}}'   #修改更新策略
    [kubelet@master yaml]$ kubectl set image deployment myapp-deploy myapp-container=ikubernetes/myapp:v3 && kubectl rollout pause deployment myapp-deploy  #更新,然后暂停更新。金丝雀发布
    [kubelet@master yaml]$ kubectl rollout resume deployment myapp-deploy  # 恢复操作,继续进行更新。
    [kubelet@master yaml]$ kubectl rollout status deployment myapp-deploy   # 查看更新进度
    [kubelet@master yaml]$ kubectl rollout undo deployment myapp-deploy --to-revision=1 #回滚到版本1(不指定默认回滚为上一版本)

    查看使用的是v1版本:

    [kubelet@master yaml]$  kubectl delete pod myapp-ds-ljlh5 --force --grace-period=0 #强制删除pod,当pod长时间处于Terminating状态时可使用。

    四、DaemonSet

    也支持滚动更新

    kubelet@master yaml]$ kubectl expose deployment redis --port=6379  #暴露端口

    [kubelet@master yaml]$ kubectl explain pods.spec.hostNetwork  #共享宿主机的网络命名空间,daemonset可以使用,就不需要用service单独暴露端口

    日志收集是节点级别的,需要收集所有Pod的日志。

    五、Tips

    TPR:Third Party Resources 第三方资源  1.2+   1.7废弃了

    CDR:Custom Defined Resources    1.8+  用户自定义资源

    Operator:

    Helm:类似于Yum

    [kubelet@master yaml]$ kubectl explain deploy  # 文档是落后于k8s集群本身的,所以此命令获得的群组可能是不正确的。

    [kubelet@master yaml]$ kubectl get pods -l app=myapp –w   # 查看pod的动态变化

  • 相关阅读:
    NSIS附加数据库,分离数据库脚本代码
    C# 昨天今天明天上周本周下周上月本月下月等日期计算
    NSIS安装MSDE2000和NET2.0脚本代码
    sql 获取指定数据表的所有字段名称的字符串
    如何检测TerraGate的InternetLicense运行是否正常
    Skyline TEP5.1.3二次开发入门——初级(七)
    Skyline软件二次开发初级——2如何在WEB页面中控制三维地图的观察点坐标和角度
    如何实现Skyline与微软bing地图的联动
    Skyline软件二次开发初级——3如何在WEB页面中的三维地图上创建几何对象
    Skyline软件二次开发初级——1如何在web页面中添加控件和加载三维地图数据
  • 原文地址:https://www.cnblogs.com/cmxu/p/12072006.html
Copyright © 2011-2022 走看看