Kubernetes概念-2.0Controller:执行运行POD的任务

Controller:执行运行POD的任务

控制器,Kubernetes一般情况人们不会直接创建 Pod,而是通过创建Controller来管理 Pod 的。Controller 中定义了 Pod 的部署特性,比如有几个副本,在什么样的 Node 上运行等。为了满足不同的业务场景,Kubernetes 提供了多种 Controller,包括 Deployment、ReplicaSet、DaemonSet、StatefuleSet、Job 等,我们逐一讨论。一般创建POD,都是直接创建Deployment的kind,然后定义该Deployment下有几个pod的副本,一般情况至少有俩,保证pod的高可用。注意:deployment下创建的多个pod的功能和内容是一模一样的,多个pod被分配到多个节点,以便实现负载均衡和高可用,pod比较轻量,就算挂了一个,还可以自动销毁后再自动启动一个,所以,不要把一个deployment下的多个pod分开理解,他们是一个整体

Deployment #是最常用的 Controller。Deployment 可以管理 Pod 的多个副本,并确保 Pod 按照期望的状态运行。比ReplicaSet还多了几个功能支持滚动更新和回滚,支持声明式配置的功能

  1. ReplicaSet 实现了 Pod 的多副本管理,一般情况ReplicaSet管理无状态的Pod。使用 Deployment 时会自动创建 ReplicaSet,也就是说 Deployment 是通过 ReplicaSet 来管理 Pod 的多个副本,我们通常不需要直接使用 ReplicaSet。 ReplicaSet一般由下面三个组件组成,当启动Pod时,按照如下顺序进行创建Pod

    1. 用户期望的副本数,即希望创建多少个与该Pod一样的副本,进行统一管理,创建在不同Node上以实现负载均衡以及高可用,这些Pod的功能与服务一模一样
    2. 标签选择器,以便选定由自己管理和控制的Pod,如果标签选择器选择的pod数量少于用户期望的副本数,则使用Pod资源模板
    3. Pod资源模板,新建Pod资源
  2. Deployment的滚动更新可以进行定制化配置,比如仅更新一个pod到新版,观察其稳定情况几天后决定是否更新现网其余pod,使用的方式详见kubectl set image命令的内容

DaemonSet #用于每个 Node 最多只运行一个 Pod 副本的场景。正如其名称所揭示的,DaemonSet 通常用于运行 daemon。

  1. 当一个服务可以想象成守护进程的时候,使用该类型

StatefulSet #StatefulSet表示对Pod设定一致性身份(consistent identities)

Identities的定义:

  1. Network:单一稳定的主机名和DNS
  2. Storage: 具有同样的一些VolumeClaims. StatefulSet保证给定的网络标识将始终映射到相同的存储标识。

StatefulSet能够保证 Pod 的每个副本在整个生命周期中名称是不变的,一般情况StatefulSet管理有状态的Pod。而其他 Controller 不提供这个功能,当某个 Pod 发生故障需要删除并重新启动时,Pod 的名称会发生变化。同时 StatefulSet 会保证副本按照固定的顺序启动、更新或者删除。

  1. 当需要保持Pod不变,比如数据库类型的服务,则使用该类型
  2. 当一个有状态的应用失败需要重启的时候,比如主从结构的数据库,其中需要进行的操作时非常复杂的,这时候需要通过一个脚本来定义statefulset的功能,如果以后的研发人员可以基于kubernetes来开发有状态的应用(比如数据库等),让新的应用在开发的时候就想着要放在云上运行,这种云原生的应用,则可以让statefulset更好的支持他

使用StatefulSet的说明:

  1. 至少需要三个组件:

    1. headless service无头服务:使用无头服务类型,确保解析的名称直达后端IP
    2. statefulset:
    3. VolumeClaimTemplate存储卷申请模板:每个Pod都要有一个单独Volume

HPA #Horizontal Pod Autoscaler

Job #用于运行结束就删除的应用。而其他 Controller 中的 Pod 通常是长期持续运行。

定义Deployment对象的yaml文件

apiVersion: XXXX
kind: Deployment
metadata:
  name: NAME    #指定该资源的名字
sepc:     #指明该Deployment的规格
  replicas: NUM    #指明运行Pod的副本数量,默认为1
  selector:
    matchLabels:
      KYE: YALUE
  strategy:    #定义用一个新的pod代替现有pod的部署策略(更新pod的策略)
    rollingUpdate:    #当更新策略为rollingUpdate时,需要配置滚动更新的参数
      maxSurge: NUM    #设定在更新时最大可用的Pod数,就是先添加几个新的Pod再删除老的
      maxUnavailable: NUM    #设定在更新时最大不可用的Pod数
    type: Recreate|RollingUpdate #指定更新策略的类型,默认为RollingUpdate(滚动更新);Recreate为重塑,删除一个更新一个
  template:     #定义pod的模板,即使用上文中Pod类型的metadata和spec
    metadata:     #与Pod定义的内容基本一样
      ....
    spec:     #与Pod定义的内容基本一样
      ......

原文地址:https://www.cnblogs.com/Forsake-dream/p/9980748.html

时间: 2024-11-05 21:43:01

Kubernetes概念-2.0Controller:执行运行POD的任务的相关文章

扩展Kubernetes群集节点并手动扩充Pod

如果现有的资源已经不能满足应用程序的运行需求时,我们就需要扩充AKS的节点,以满足应用的需求.对于群集节点的扩充我们有两种方式: 横向扩展:横向扩展即为在保证当前现有节点的稳定运行的前提下向群集中添加新的节点,进而增加资源. 纵向扩展:纵向扩展即调整现有的虚拟机规格,纵向扩展时节点会被仔细封锁和排除,尽量避免对正在运行的应用程序造成中断. 纵向扩展时,AKS 会一直等待,直到节点被 Kubernetes 群集标记为 Ready,然后才在这些节点上计划 Pod.今天我们要和大家演示的是使用横向扩展

Memcached概念、作用、运行原理、特性、不足简单梳理(1)

http://www.cnblogs.com/yinrq/p/5013742.html Memcached概念.作用.运行原理.特性.不足简单梳理(1) 大家可能对memcached这种产品早有了解,或者已经应用在自己的网站中了,但是也有一些朋友从来都没有听说过或者使用过.这都没什么关系,本文旨在从各个角度综合的介绍这种产品,尽量深入浅出,如果能对您现在或以后的工作有所帮助,笔者将感到无比荣幸. Memcached概念.作用.运行原理.特性.不足简单梳理(1) Memcached下载安装.NET

cocoapods 在10.11下运行pod命令报-bash: pod: command not found

系统是10.11,在运行pod命令是报:-bash: pod: command not found,于是开始找办法解决. 先试了试第一种方案. sudo gem install -n /usr/local/bin cocoapods 运行成功,但还是会报command not found 不得已再试另一种方法. $ mkdir -p $HOME/Software/ruby $ export GEM_HOME=$HOME/Software/ruby $ gem install cocoapods

使用dynamic引发的异常:无法对 null 引用执行运行时绑定

今天上午运营反映有商户的账单没有生成. 查看日志,在批量生成账单服务执行过程中,因为如下异常而中断了: 跑批异常 Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: 无法对 null 引用执行运行时绑定 在 CallSite.Target(Closure , CallSite , Object ) 在 System.Dynamic.UpdateDelegates.UpdateAndExecute1[T0,TRet](CallSite si

解决ASP.NET MVC5"无法对 null 引用执行运行时绑定"

无法对 null 引用执行运行时绑定 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息. 异常详细信息: Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: 无法对 null 引用执行运行时绑定源错误: 视图,Demo.csthml: @model LanhuImageUploader.Web.Models.Product @{ ViewBag.Title =

Kubernetes概念之mater、node

很久没写博客了,终于把重心找回来了,不过没有以前有斗志.有理想.有目标了.慢慢来.你若问我我最近几年的规划是什么,还真不知道.突然发现摧毁一个人真的很简单.k8s也是一遍一遍的从入门到放弃,还是要好好弄弄了. 本文通过<Kubernetes权威指南>的概念部分学习总结 Kubernetes集群管理的两个角色Master.Node 1.Master Master:Kubernetes里的Master指的是集群控制节点,每个Kubernetes集群里需要有一个Master节点来负责整个集群的管理和

Kubernetes概念之deployment

一整天一整天的坐在办公室,真的很~~~,懵圈中....,求解救. 本文通过<Kubernetes权威指南>的概念部分学习总结 Deployment作用 Deployment与RC的作用其实是一样的,都是为了管理Pod的副本数 Deployment的使用场景 1)创建一个Deployment对象来生成对应的Replica Set并完成Pod副本的创建过程. 2)检查Deployment的状态来看部署动作是否完成(Pod副本的数量是否达到了预期的值) 3)更新Deployment以创建新的Pod

[三]java8 函数式编程Stream 概念深入理解 Stream 运行原理 Stream设计思路

Stream的概念定义   官方文档是永远的圣经~ 表格内容来自https://docs.oracle.com/javase/8/docs/api/   Package java.util.stream  一节部分原文内容的翻译 int sum = widgets.stream() .filter(b -> b.getColor() == RED) .mapToInt(b -> b.getWeight()) .sum(); 流操作被划分为中间和终端操作,并组合成流管道. 一条Stream管道由

Kubernetes中,通过Service访问Pod快速入门

一.背景 理想状态下,我们可以认为Kubernetes Pod是健壮的.但是,理想与现实的差距往往是非常大的.很多情况下,Pod中的容器可能会因为发生故障而死掉.Deployment等Controller会通过动态创建和销毁Pod来保证应用整体的健壮性.众所周知,每个Pod都拥有自己的IP地址,当新的Controller用新的Pod替代发生故障的Pod时,我们会发现,新的IP地址可能跟故障的Pod的IP地址可能不一致.此时,客户端如何访问这个服务呢?Kubernetes中的Service应运而生