Replication Controller:用来部署、升级Pod
Replica Set:下一代的Replication Controller
Deployment:可以更加方便的管理Pod和Replica Set
$ mkdir rc-demo
$ vim rc-demo.yaml
---
apiVersion: v1
kind: ReplicationController
metadata:
  name: rc-demo
  labels:
    app: rc
spec:
  replicas: 3
#  selecter:
#    app: rc
  template:
    metadata:
      labels:
        app: rc
    spec:
      containers:
      - name: nginx-demo
        image: nginx
        ports:
        - containerPort: 80
$ kubectl edit rc rc-demo
在里面可以修改副本集数量

滚动更新:
kubectl rolling-update rc-demo --image=nginx:1.7.9      ##(更新到1.7.9版本)

~~~~~RC不是实现一键回滚~~~~~

Deployment:

Deployment主要职责和RC一样都是保证Pod的数量和健康

RC的全部功能:Deployment具备上面描述的RC的全部功能
事件和状态查看:可以查看Deployment的升级详细进度和状态
回滚:当升级Pod的时候如果出现问题,可以使用回滚操作回滚到之前的任一版本
版本记录:每一次对Deployment的操作,都能够保存下来,这也是保证可以回滚到任一版本的基础
暂停和启动:对于每一次升级都能够随时暂停和启动

---
apiVersion: apps/v1beta1
kind: Deployment
metedata:
  name: nginx-deploy
  labels:
    app: nginx-demo
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80
template就相当于pod 只是省略apiVersion kind name
不指定name,自动生成name,避免重复

$ vim deploy-demo.yaml
---
apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: nginx-deploy
  labels:    
    app: nginx-demo
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80

滚动升级设置:
---
apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: nginx-deploy
  labels:    
    app: nginx-demo
spec:
  replicas: 3
  revisionHistoryLimit: 15
  minReadySeconds: 5
  stragety:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80

查询滚动更新状态:
kubectl rollout status deploy nginx-deploy
kubectl rollout pause deploy nginx-deploy  ##暂停滚动更新
kubectl rollout resume deploy nginx-deploy ##恢复滚动更新
kubectl rollout history deploy nginx-deploy #查看回滚历史版本
kubectl apply -f deploy-demo.yaml --record=true
rollout 历史版本跟rs有关,rs删除某一版本,rollout 历史版本中也会删除掉同一版本
kubectl rollout ando deploy nginx-deploy  ##回退上一版本最近的
 
kubectl rollout ando deploy nginx-deploy --to-revision=3 ##回退到指定版本

一.Pod水平自动伸缩(horizontal-pod-autoscaler)
1. kubectl autoscale命令来创建一个HPA资源对象
2. 可通过kube-controller-manager的标志--horizontal-pod-autoscaler-sync-period进行设置(轮询设置默认是30s)
3. HPA可以从heapster或者用户自定义的restclient端获取每一个的利用率
4.
    Heapster:仅支持CPU使用率
    自定义监控:我们到后面的监控的课程中再给大家讲解这部分的使用方法

安装 heapster:需要influxdb和grafana支持
1.https://github.com/kubernetes-retired/heapster/blob/v1.5.4/deploy/kube-config/influxdb/influxdb.yaml
 https://github.com/kubernetes-retired/heapster/blob/v1.5.4/deploy/kube-config/influxdb/heapster.yaml
 https://github.com/kubernetes-retired/heapster/blob/v1.5.4/deploy/kube-config/influxdb/grafana.yaml

2.查看heapster日志:
 kubectl logs -f heapster-5d4bf58946-hwqbz -n kube-system
### E0520 09:58:35.150249       1 reflector.go:190] k8s.io/heapster/metrics/util/util.go:30: Failed to list *v1.Node: nodes is forbidden: User "system:serviceaccount:kube-system:heapster" cannot list resource "nodes" in API group "" at the cluster scope

这个意思是heapster用户没有权限需要添加serviceaccount相对应的admin最高权限ClusterRole
集群规则绑定:ClusterRoleBinding

在heapster.yaml中的serviceaccount下面添加

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: heapster-admin
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: heapster
  namespace: kube-system
 
 
 
 
 
Hpa:
$ vim hap-demo.yaml
---
apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: hpa-demo
  labels:
    app: hpa
spec:
  replicas: 1
  revisionHistoryLimit: 15
  minReadySeconds: 5
  strategy:
    type: RollingUpdate
    rollingUpdate:
       maxSurge: 1
       maxUnavailable: 1
  template:
    metadata:
      labels:
        app: hpa
    spec:
      containers:
      - name: nginx
        image: nginx:1.9.7
        resources:
          requests:
            cpu: 100m
#          limit:
#            cpu: 200m
#            memory:
        ports:
        - containerPort: 80  
---
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: hpa-demo
  namespace: default
spec:
  maxReplicas: 10
  minReplicas: 1
  scaleTargetRef:
    apiVersion: extensions/v1beta1
    kind: Deployment
    name: hpa-demo
  targetCPUUtilizationPercentage: 5
 
$ kubectl autoscale deploy hpa-demo --min=1 --max=10 --cpu-percent=5

$ kubectl get hpa

kubernetes 水平伸缩及yaml格式编写的更多相关文章

  1. kubernetes yaml格式的Pod配置文件

    kubernetes yaml文件解析 # yaml格式的pod定义文件完整内容: apiVersion: v1 #必选,版本号,例如v1 kind: Pod #必选,Pod metadata: #必 ...

  2. kubernetes内yaml格式

    yaml格式的pod定义文件完整内容: apiVersion: v1 #必选,版本号,例如v1 可通过 kubectl api-versions 获取 kind: Pod #必选,Pod metada ...

  3. Kubernetes自动伸缩pod-HPA

    在运维中,虽然能预先知道负载何时会飙升,或者如果负载的变化是较长时间内逐渐发生的,手动扩容也是可以接受的,但指望靠人工干预来处理突发而不可预测的流量增长,仍然不够理想. 幸运的是,Kubernetes ...

  4. Kubernetes 弹性伸缩全场景解析 (四)- 让核心组件充满弹性

    前言 在本系列的前三篇中,我们介绍了弹性伸缩的整体布局以及HPA的一些原理,HPA的部分还遗留了一些内容需要进行详细解析.在准备这部分内容的期间,会穿插几篇弹性伸缩组件的最佳实践.今天我们要讲解的是 ...

  5. Kubernetes 弹性伸缩全场景解读(二)- HPA 的原理与演进

    前言 在上一篇文章 Kubernetes 弹性伸缩全场景解析 (一):概念延伸与组件布局中,我们介绍了在 Kubernetes 在处理弹性伸缩时的设计理念以及相关组件的布局,在今天这篇文章中,会为大家 ...

  6. Kubernetes 弹性伸缩全场景解析 (一)- 概念延伸与组件布局

    传统弹性伸缩的困境 弹性伸缩是Kubernetes中被大家关注的一大亮点,在讨论相关的组件和实现方案之前.首先想先给大家扩充下弹性伸缩的边界与定义,传统意义上来讲,弹性伸缩主要解决的问题是容量规划与实 ...

  7. Kubernetes 弹性伸缩全场景解读(五) - 定时伸缩组件发布与开源

    作者| 阿里云容器技术专家刘中巍(莫源) 导读:Kubernetes弹性伸缩系列文章为读者一一解析了各个弹性伸缩组件的相关原理和用法.本篇文章中,阿里云容器技术专家莫源将为你带来定时伸缩组件  kub ...

  8. Kubernetes 弹性伸缩全场景解析 (一):概念延伸与组件布局

    传统弹性伸缩的困境 弹性伸缩是 Kubernetes 中被大家关注的一大亮点,在讨论相关的组件和实现方案之前.首先想先给大家扩充下弹性伸缩的边界与定义,传统意义上来讲,弹性伸缩主要解决的问题是容量规划 ...

  9. Fiddler插件---将Mapi请求自动转为HTTPRunner测试用例(YAML格式)

    背景 继之前鼓捣出了Mapi解密插件之后,在团队内已经使用了三年之久,一跃成为团队最爱欢迎的测试工具之一(加个之一,低调谦虚一点). 随着团队推行HttpRunner搞接口自动化:编写和维护Case带 ...

随机推荐

  1. pip 安装报错

    pip3 install uwsgi 报错 Command in /tmp/pip-build-5m77h_mm/uwsgi/ yum -y install python36-devel 解决

  2. Linux使用iptables设置黑白名单

    使用ipset工具 1,下面我先说下iptables的基本配置规则,然后再说ipset以下使用C7 x86_64为实验环境CentOS7默认的防火墙不是iptables,而是firewalle.如果你 ...

  3. Google Python Style Guide

    https://google.github.io/styleguide/pyguide.html

  4. Linunx创建软连接、删除软连接、修改软连接

    创建: ln -s [目标目录] [软链接地址] ln -s /usr/local/python3/bin/python3 /usr/bin/python3ln -s /usr/local/pytho ...

  5. 阶段5 3.微服务项目【学成在线】_day05 消息中间件RabbitMQ_10.RabbitMQ研究-工作模式-路由工作模式介绍

    队列在绑定交换机的时候可以指定routingKey, 路由模式: 1.每个消费者监听自己的队列,并且设置routingkey. 2.生产者将消息发给交换机,由交换机根据routingkey来转发消息到 ...

  6. 阶段5 3.微服务项目【学成在线】_day04 页面静态化_14-页面静态化-数据模型-远程请求接口

    okhttp的官方文档: https://square.github.io/okhttp/ github的地址 https://github.com/square/okhttp/ 如何远程请求轮播图的 ...

  7. 阶段5 3.微服务项目【学成在线】_day03 CMS页面管理开发_06-新增页面-前端-新增页面

    新建一个添加的页面 复制page_list页面改改名字 page_add 一个标准的页面 <template> <div> 新增页面 </div> </tem ...

  8. Java NIO学习笔记四 NIO选择器

    Java NIO选择器 A Selector是一个Java NIO组件,可以检查一个或多个NIO通道,并确定哪些通道已准备就绪,例如读取或写入.这样一个线程可以管理多个通道,从而管理多个网络连接. 为 ...

  9. MySQL 查询某个数据库中所有包含数据记录的表名

    MySQL 查询某个数据库中所有包含数据记录的表名 有时根据实际应用需要,需要对数据进行备份. 如果一个数据库中有很多数据表,但是只想备份包含数据记录的那些表数据(空表不做数据备份). 如果通过如下S ...

  10. Hystrix-基本概念(设计原则和两种隔离技术)

    一.Hystrix是什么在微服务的架构系统中,每个服务都可能会调用很多其他服务,被调用的那些服务就是依赖服务.有的时候某些依赖服务出现故障也是很正常的.Hystrix可以让我们在对服务间的调用进行控制 ...