转载于网络

 

pod是kubernetes的最小单元,自主式创建的pod删除就没有了,但是通过资源控制器创建的pod如果删除还会重建。pod控制器就是用于实现代替我们去管理pod的中间层,并帮我们确保每一个pod资源处于我们所定义或者所期望的目标状态,pod资源出现故障首先要重启容器,如果一直重启有问题的话会基于某种策略重新编排。自动适应期望pod数量

pod控制器类型简介:

  1.ReplicaSet:

    代用户创建指定数量的pod副本数量,确保pod副本数量符合用户期望的数量状态,如果少了多退少补,并且支持滚动式自动扩容和缩容机制。

    ReplicaSet主要三个组件组成:  

      (1)用户期望的pod副本数量   

      (2)标签选择器,判断哪个pod归自己管理   

      (3)pod资源模板(当现存的pod数量不足,会根据pod资源模板进行新建帮助用户管理无状态的pod资源,精确反应用户定义的目标数量。不直接使用)

  Deployment:(无状态,守护进程类,只关注群体不关注个体)

    工作在ReplicaSet之上,用于管理无状态应用,目前来说最好的控制器。支持滚动更新和回滚功能,还提供声明式配置。(pod数量和node没有精确的配比,没有一对一的关系)

  DaemonSet:(无状态,守护进程类,只关注群体不关注个体)

    确保集群中的每一个节点上只运行一个特定的pod副本,系统级的后台任务。新增节点他都会自动添加pod。也可以是满足条件的节点上运行特定的副本。比如ELK服务特性:服务是无状态的服务必须是守护进程(pod资源模板,标签选择器)有hostnetwork直接爆露node

  Job:(有状态,一次性任务)

    只要完成就立即退出,不需要重启或重建,没有完成重构job。只能执行一次性任务  

  Cronjob:(有状态,周期性任务)

    周期性任务控制,不需要持续后台运行

  StatefulSet:(管理有状态应用)

    管理有状态应用(redis cluster)针对管理的应用器配置管理是不一样的,没有什么共通的规律,需要人为的封装在脚本中实行,相当之大的逻辑处理。(运维技能封装到运维脚本中)

  TPR:(third party resource)1.7以后就不支持了

    第三方资源

  CDR:(custom defined resource) 1.8+以后

    用户自定义资源

控制器ReplicaSet应用:

    获取replica的字段命令===>kubectl explain rs

实例yaml:

apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: web-server
namespace: default
spec:
replicas: 2
selector:
matchLabels:
app: web-nginx
release: canary
template:
metadata:
name: web-nginx-pod
labels:
app: web-nginx
release: canary
environment: qa
spec:
containers:
- name: web-nginx-container
image: ikubernetes/myapp:v1
imagePullPolicy: IfNotPresent
ports:
- name: http
containerPort: 80
~template中创建的container必须包含控制器中标签选择器中要选择的标签,如果不包含控制器就发现不了他已经存在pod,会一直创建下去

动态修改replicaset的副本数量   1. kubectl edit rs web-server     或者 kubectl edit -f replicaSet_demo.yaml

               2.kubectl scale --replicas=5 rs/web-server 或者 kubectl scale -f replicaSet_demo.yaml

通过kubectl edit可以修改pod资源的镜像,但是只有是重建的pod才会使用修改过得镜像

控制器deployment应用:

deployment是建构在rs之上的,可以控制多个rs滚动式自定义,自控制的更新。

同时在实现自动更新时还能实现控制更新节奏和更新逻辑

                 

    获取deployment的字段命令===>kubectl explain deploy

实例deployment:

apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-deploy
namespace: default
spec:
replicas: 5
selector:
matchLabels:
app: myapp
release: canary
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
template:
metadata:
labels:
app: myapp
release: canary
spec:
containers:
- name: myapp-container
image: ikubernetes/myapp:v2
imagePullPolicy: IfNotPresent
ports:
- name: http
containerPort: 80
红色部分是更新策略,可以多出一个,不能少于replica定义的5个

deployment启动可以用kubectl apply -f deploy_demo.yaml

可以用打补丁的方式进行修改:kubectl patch deployment myapp-deploy -p '{"spec":{"replicas":5}}'   相对来说要对文件的嵌套关系了解清楚

kubectl rollout pause deployment myapp-deploy   暂停一个deployment

kubectl rollout resume deployment myapp-deploy  重新启动一个暂停的deployment

kubectl rollout history deployment myapp-deploy   查看历史版本

kubectl rollout undo deployment myapp-deploy --to-revision=1   回滚到以前版本

控制器daemonset应用:

    获取daemonset的字段:kubectl explain ds

实例daemonset

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: filebeta-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
imagePullPolicy: IfNotPresent
env:
- name: REDIS_HOST
value: redis.default.svc.cluster.local
- name: REDIS_LOG_LEVEL
value: info

通过kubectl get pod -o wide 可以看出一个节点上只有一个filebeat的pod

daemonset也支持滚动式更新,有两个选项1.OnDelete  在删除时更新

                   2.RollingUpdate 只有做多不可用,最多有几个不工作,根据节点数量

通过修改containers的image镜像来测试滚动更新  ,先删除一个pod,再新建一个,滚动式更新。一次滚动几个根据maxUnavailable的值是多大(kubectl explain ds.spec.updateStrategy.rollingUpdate)

kubectl set image ds filebeta-ds filebeta=ikubernetes/filebeta:5.6.6-alpine

kubectl get pod -w 

 
 
 
好文要顶 关注我 收藏该文  

kubernetes 的pod控制器的更多相关文章

  1. Kubernetes的pod控制器及ReplicaSet控制器类型的pod的定义

    为什么需要Pod Kubernetes项目之所以这么做的原因: 因为Kubernetes是谷歌公司基于Borg项目做出来的,谷歌工程师发现,他们部署的应用往往存在这进程与进程组的关系.具体说呢,就是这 ...

  2. 06 . Kubernetes之Pod控制器详细介绍及应用

    Pod API属性详解 Pod是k8s集群中的最小编排单位.将这个设计落实到API对象上,容器就成了Pod属性里一个普通的字段.那么到底哪些属性属于Pod对象,哪些属性属于容器的呢?先看下面的一段描述 ...

  3. Kubernetes之Pod 控制器

    定义Pod的常用资源 pods.spec.containers - name    <string>   #containers 的名字 image    <string>  ...

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

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

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

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

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

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

  7. Kubernetes 学习8 Pod控制器

    一.回顾 1.Pod是标准的kubernetes资源,因此其遵循为其资源清单配置定义的基本格式,包含:apiVersion,kind,metadata,spec,status(只读) 2.spec的内 ...

  8. Kubernetes 学习6 Pod控制器应用进阶

    一.资源配置清单 1.自主式Pod资源 2.资源的清单格式,大多数清单格式都遵循如下条件: a.一级字段:apiVersion(group/version),kind,metadata(name,na ...

  9. 6、kubernetes资源清单之Pod控制器190714

    一.Pod控制器的类别 ReplicationController:早期唯一的控制器,已废弃 ReplicaSet:控制Pod满足用户期望副本:标签选择器选择由自己管理的Pod副本:Pod资源模板完成 ...

随机推荐

  1. mfc 友元类

    知识点 继承类成员的访问级别 友元类 继承访问控制: 基类 派生类(能否访问) public private protected 派生类类 派生类对象 派生类 派生类对象 派生类类 派生类对象 pri ...

  2. python 回溯法 子集树模板 系列 —— 11、全排列

    问题 实现 'a', 'b', 'c', 'd' 四个元素的全排列. 分析 这个问题可以直接套用排列树模板. 不过本文使用子集树模板.分析如下: 一个解x就是n个元素的一种排列,显然,解x的长度是固定 ...

  3. Codeforces 954C Matrix Walk (思维)

    题目链接:Matrix Walk 题意:设有一个N×M的矩阵,矩阵每个格子都有从1-n×m的一个特定的数,具体数的排列如图所示.假设一个人每次只能在这个矩阵上的四个方向移动一格(上下左右),给出一条移 ...

  4. 设计模式 笔记 命令模式 Command

    //---------------------------15/04/25---------------------------- //Conmmand  命令模式----对象行为型模式 /* 1:意 ...

  5. 移动端jq及zepto事件绑定

    最近做移动端网页,用到了zepto.js , 其大致用法跟 jquery 差不多,但是在时间绑定的时候被困了好久的坑. 这里说的主要是给未来元素绑定事件.未来元素:这里指的是通过 ajax 请求得到数 ...

  6. Win7 64位操作系统连接HP 1010打印机完美解决方案

    工作的第一天就遇到问题,新电脑无法连接老式的HP1010打印机,64位Windows7系统无法连接32位XP网络共享打印机,而32位WIN7就可以. 这里分享个简单的解决方法:        先去下载 ...

  7. NX 栈不可执行的绕过方式--ROP链

    目标程序下载 提取码:5o0a 环境:Ubuntu linux 工具 pwn-gdb pwntools python库 ROPgadget ( 这些工具可以到github官网找) 1.检查程序开了哪些 ...

  8. 01-docker简介

    如今Docker的使用已经非常普遍,特别在一线互联网公司.使用Docker技术可以帮助企业快速水平扩展服务,从而到达弹性部署业务的能力.在云服务概念兴起之后,Docker的使用场景和范围进一步发展,如 ...

  9. 20135202闫佳歆--week4 系统调用(上)--学习笔记

    此为个人笔记存档 week 4 系统调用(上) 一.用户态.内核态和中断处理过程 用户通过库函数与系统调用联系起来. 1.内核态 在高执行级别下,代码可以执行特权指令,访问任意的物理地址. 2.用户态 ...

  10. 20135337朱荟潼 Linux第六周学习总结——进程的描述和进程的创建

    朱荟潼 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课http://mooc.study.163.com/course/USTC 1000029000 第六周 进程的描述 ...