一、Pod控制器的类别

  • ReplicationController:早期唯一的控制器,已废弃

  • ReplicaSet:控制Pod满足用户期望副本;标签选择器选择由自己管理的Pod副本;Pod资源模板完成Pod资源的新建。主要用于管理无状态的Pod,不建议直接使用此控制器

  • Deployment:基于ReplicaSet控制器;建议使用此控制器,支持滚动更新和回滚,管理无状态应用

  • DaemonSet:守护进程类的控制器,例如每台node都启动一个Pod一直持续下去

  • Job:执行一次性的任务,完成后就退出,如果没有完成则重新构建一个Pod运行

  • Cronjob:周期性运行的任务

  • StatefulSet:管理有状态的应用,每个Pod都是单独管理

二、ReplicaSet控制器

  • kubectl explain rs:获取帮助手册
# cat rs-damo.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata: #ReplicaSet的metadata
name: myapp-rs
namespace: default
spec: #ReplicaSet的spec
replicas: 2
selector:
matchLabels: #标签选择器,用于控制器选择控制符合条件的pod
app: myapp
release: canary
template:
metadata:
name: myapp-pod #此处pod名会被控制器的名字代替
labels: #此处为Pod的标签,必须符合控制器的标签选择器定义的条件
app: myapp
release: canary
spec:
containers:
- name: myapp-container
image: dongfeimg/myapp:v1
ports:
- name: http
containerPort: 80
# kubectl get rs
# kubectl get pods
  • 扩容/缩容
# kubectl edit rs myapp-rs
spec:
replicas: 10 #将此值改
  • 升级/回滚
# kubectl edit rs myapp-rs
spec:
containers:
- image: dongfeimg/myapp:v2 #修改此值不能立即更新,原有pod删除后重建会升级到v2版本

三、Deployment控制器

  • kubectl explain deploy
# cat deploy-damo.yaml
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-container
image: dongfeimg/myapp:v1
ports:
- name: http
containerPort: 80
# kubectl apply -f deploy-damo.yaml #声明式创建
# kubectl get deploy #deploy控制rs
# kubectl get rs #rs控制pod
# kubectl get pods
  • 使用修改清单文件的方式扩容、缩容、更新和回滚等操作
# vim deploy-damo.yaml
spec:
replicas: 3 #将副本扩容至3个
# kubectl apply -f deploy-damo.yaml # vim deploy-damo.yaml
spec:
containers:
- name: myapp-container
image: dongfeimg/myapp:v2 #将版本更新为v2
# kubectl apply -f deploy-damo.yaml
# kubectl rollout history deployment myapp-deploy #查看升级的历史信息
  • 使用kubectl patch的方式扩容、缩容、更新和回滚等操作
# kubectl patch deployment myapp-deploy -p '{"spec":{"replicas":5}}'  #传入json格式的数组来实现扩容
# kubectl patch deployment myapp-deploy -p '{"spec":{"strategy":{"rollingUpdate":{"maxSurge":1,"maxUnavailable":0}}}}' #"maxSurge":1 最大在更新pod数,"maxUnavailable":0 允许最大不可用的pod
# kubectl describe deployment myapp-deploy |grep RollingUpdateStrategy #验证
  • kubectl set image和kubectl rollout pause
# kubectl set image deployment myapp-deploy myapp-container=dongfeimg/myapp:v3 \  #将容器版本更新至v3
&& kubectl rollout pause deployment myapp-deploy #在更新第一个的时候暂停,金丝雀发布
# kubectl rollout resume deployment myapp-deploy #继续此前的更新
  • kubectl rollout undo:回滚
# kubectl rollout history deployment myapp-deploy
# kubectl rollout undo deployment myapp-deploy --to-revision=1 #回滚至v1

四、DaemonSet控制器

  • 在集群中符合选择器的node上一个pod,例如在每个节点上运行一个filebeat来收集日志
  • kubectl explain ds
# cat ds-damo.yaml
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
ports:
- name: redis
containerPort: 6379
---
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-container
image: dongfeimg/filebeat:5.6.5-alpine
env:
- name: REDIS_HOST
value: redis.default.svc.cluster.local #redis-server的主机名(svc)
- name: REDIS_LOG_LEVEL
value: info
# kubectl expose deployment redis --port=6379

6、kubernetes资源清单之Pod控制器190714的更多相关文章

  1. kubernetes资源清单之pod

    什么是pod? Pod是一组一个或多个容器(例如Docker容器),具有共享的存储/网络,以及有关如何运行这些容器的规范. Pod的内容始终位于同一地点,并在同一时间安排,并在共享上下文中运行. Po ...

  2. 5、kubernetes资源清单之Pod应用190709

    一.Pod镜像及端口 获取帮助文档 # kubectl explain pod.spec.containers spec.containers <[]object> pod.spec.co ...

  3. Kubernetes中资源清单与Pod的生命周期(二)

    一.资源清单 1,定义: 在k8s中一般使用yaml格式的文件来创建符合我们预期的资源,这样的yaml被称为资源清单. 使用资源清单创建Pod: kubectl apply -f nginx.yaml ...

  4. kubernetes 资源清单定义入门

    k8s中的资源 什么叫资源? k8s中所有的内容都抽象为资源, 资源实例化之后,叫做对象 在k8s中有哪些资源? 工作负载型资源(workload): Pod ReplicaSet Deploymen ...

  5. Kubernetes 学习5 kubernetes资源清单定义入门

    一.kubernetes是有一个restful风格的 API,把各种操作对象都一律当做资源来管理.并且可通过标准的HTTP请求的方法 GET,PUT,DELETE,POST,等方法来完成操作,不过是通 ...

  6. kubernetes系列06—kubernetes资源清单定义入门

    本文收录在容器技术学习系列文章总目录 1.认识kubernetes资源 1.1 常用资源/对象 workload工作负载型资源:pod,ReplicaSet,Deployment,StatefulSe ...

  7. 【04】Kubernets:资源清单(pod)

    写在前面的话 前面我们提到过,纯手敲 K8S 名称管理 K8S 服务只是作为我们了解 K8S 的一种方案,而我们最终管理 K8S 的方法还是通过接下来的资源清单的方式进行管理. 所以从本章节开始,将会 ...

  8. (四)Kubernetes 资源清单定义

    Kubernetes常用资源对象 依据资源的主要功能作为分类标准,Kubernetes的API对象大体可分为五个类别,如下: 类型 名称 工作负载(Workload) Pod.ReplicaSet.D ...

  9. 4、kubernetes资源清单快速入门190625

    一.资源清单概念 资源/对象的类型 工作负载型资源:Pod, ReplicaSet, Deployment, StatefulSet, DaemonSet, Job, Cronjob, ... 服务发 ...

随机推荐

  1. JS基础_基本语法

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  2. Altium Designer 只导出PCB元器件及标号的PDF文件的方法

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明. 作者:struct_mooc 博客地址:https://www.cnblogs.com/stru ...

  3. 今天给大家分享一下js中常用的基础算法

    今天给大家分享一下js中常用的基础算法,废话不多说,直接上代码: 1.两个数字调换顺序 ,b= function fun(a,b){ b = b - a ;// a = 2 ; b = 2 a = a ...

  4. vue中监听数据变化 watch

    今天做项目的时候,子组件中数据(原本固定的数据)需要父组件动态传入,如果一开始初始化用到的数据.但当时还没有获取到,初始化结束就不会更新数据了.只有监听这两个属性,再重新执行初始化. 1.watch是 ...

  5. python 目录管理与文件管理

    目录管理(os) system:执行系统命令 # 执行系统命令 os.system('cls') name:获取操作系统名称 # 操作系统名称,nt代表Windows, posix代表类unix pr ...

  6. cassandra分页

    在cassandra的协议中,没有具体规定查询结果的行数限制.但是对于大的数据集,依然有结果分页的必要.过大的结果集会爆掉服务端或者客户端的内存. 传统的分页方法采用了一点trick,采用了token ...

  7. linux下如何查询jdk的安装路径

    首先这个问题困扰了我很久,由于是新装的系统还不熟悉,配置java环境变量时很头疼,找不到JDK位置,还好google一波,发现了这个方法. 首先确保安装了JDK java -version java ...

  8. 浙大数据结构课后习题 练习二 7-2 Reversing Linked List (25 分)

    Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elem ...

  9. 多个jar包合并成一个jar包(ant)

    https://blog.csdn.net/gzl003csdn/article/details/53539133 多个jar包合并成一个jar 使用Apache的Ant是一个基于Java的生成工具. ...

  10. java8学习之Stream陷阱剖析

    上一次[http://www.cnblogs.com/webor2006/p/8297603.html]在最后用stream.iterate()生成了6个奇数,接着基于它来实现如下需求:找出该流中大于 ...