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(不指定默认回滚为上一版本)

查看使用的是v1版本:

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

四、DaemonSet

也支持滚动更新

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

[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的动态变化

4.Pod控制器的更多相关文章

  1. kubernetes系列07—Pod控制器详解

    本文收录在容器技术学习系列文章总目录 1.Pod控制器 1.1 介绍 Pod控制器是用于实现管理pod的中间层,确保pod资源符合预期的状态,pod的资源出现故障时,会尝试 进行重启,当根据重启策略无 ...

  2. 9.Pod控制器概念和基本操作2

    利用一个简单的例子来启动一个deployment的Pod控制器 [root@master song]# cat deploy.yml apiVersion: apps/v1 kind: Deploym ...

  3. k8s学习笔记之六:Pod控制器(kube-controller-manager)

    第一章.什么是kube-controller-manager? Controller Manager 由 kube-controller-manager 和 cloud-controller-mana ...

  4. kubernetes 的pod控制器

    转载于网络   pod是kubernetes的最小单元,自主式创建的pod删除就没有了,但是通过资源控制器创建的pod如果删除还会重建.pod控制器就是用于实现代替我们去管理pod的中间层,并帮我们确 ...

  5. Kubernetes学习之路(十二)之Pod控制器--ReplicaSet、Deployment

    一.Pod控制器及其功用 Pod控制器是用于实现管理pod的中间层,确保pod资源符合预期的状态,pod的资源出现故障时,会尝试 进行重启,当根据重启策略无效,则会重新新建pod的资源. pod控制器 ...

  6. k8s的Pod控制器

    pod的配置清单常见选项: apiVersion,kind,metadata,spec,status(只读) spec: containers: nodeSelector: nodeName: res ...

  7. k8s之pod控制器

    1.生产中,很少会跑一个自主式pod,一般由控制器去创建pod,其配置文件中内嵌了pod的创建方式. pod控制器:ReplicaSet.Deployment.DaemonSet.Job.Cronjo ...

  8. 05-kubernetes Pod控制器应用进阶

    目录 Pod 资源 标签 给资源打标签 标签选择器 Pod 生命周期 实际操作 livenessProbe 实战 livenessProbe exec 测试 livenessProbe httpGet ...

  9. (六)Kubernetes Pod控制器-ReplicaSet和Deployment和DaemonSet

    Pod控制器相关知识 控制器的必要性 自主式Pod对象由调度器调度到目标工作节点后即由相应节点上的kubelet负责监控其容器的存活状态,容器主进程崩溃后,kubelet能够自动重启相应的容器.但对出 ...

  10. k8s之pod与Pod控制器

    k8s中最为重要的基础资源,pod,pod controller,service pod controller类型有多种需要向控制器赋值之后使用: kubectl命令使用 kubectk get no ...

随机推荐

  1. 十六、对RF中ROBOT_LIBRARY_SCOPE = 'GLOBAL'进行分析

    (1)ROBOT_LIBRARY_SCOPE属于ROBOT库范围,这个范围有三个等级,分别是TEST CASE.TEST SUITE.GLOBAL三个等级,默认是TEST CASE:GLOBAL这个等 ...

  2. oauth2.0协议原理

    OAuth的授权不会使用第三方触及到用户的帐号信息(如用户密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此OAuth是安全的. OAuth的作用:就是让“客户端”安全可控 ...

  3. Visual Studio Code 断点调试Nodejs程序跳过node内部模块(internal modules)

    Built-in core modules of Node.js can be referred to by the ‘magic name’ <node_internals> in a ...

  4. oracle ogg 单实例双向复制搭建(oracle-oracle)--Oracle GoldenGate

    oracle ogg 单实例双向复制搭建(oracle-oracle)--Oracle GoldenGate --继昨天的测试,这一篇实施单实例双向复制(完全重新搭建) --环境不变 db1,db2( ...

  5. 虚拟化 RemoteApp 远程接入 源码 免费

    远程接入 RemoteApp 虚拟化 源码 免费 1.终端安装与配置: 此远程接入组件的运行原理与瑞友天翼.异速连.CTBS等市面上常见的远程接入产品一样,是透过Windows的终端服务来实现的,速度 ...

  6. python+selenium下弹窗alter对象处理02

    首先使用switch_to.alert()方法进行定位,然后可以使用下面的操作 text:返回alert.confirm.prompt中的文字信息: accept():接受现有警告框: dismiss ...

  7. excel导入导出(一)

    excel导入导出 依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi& ...

  8. 005 gcc 的简单使用

    0. 前言 本文主要讲关于 gcc 的几种编译方式 不妨设文件名为 test.c 1. 方法一 $ gcc test.c (Windows OS)编译成功的话,没有回馈,在 test.c 所在的文件夹 ...

  9. springBoot 静态变量@value取不到值

    在工具类中给静态变量初始化值,使用了springBoot的@Value注解,但是没有赋值成功,得到的是null @Value("${jdbc.url}")private stati ...

  10. 【LGR-063】洛谷11月月赛 I & MtOI2019 Ex Div.2

    [MtOI2019]黑蚊子多: 送分向水题,直接模拟即可. #include<iostream> #include<cstdio> #define N 1505 using n ...