kubernetes学习记录(7)——弹性伸缩与滚动升级

弹性伸缩

弹性伸缩是指适应负载变化,以弹性可伸缩的方式提供资源。

Pod的弹性伸缩就是修改Replication Controller的Pod副本数。可以通过Kubectl scale命令实现。

创建Replication Controller

test-rc.yaml

apiVersion: v1
kind: ReplicationController
metadata:
  name: test-rc
spec:
  replicas: 2
  selector:
    app: test
  template:
    metadata:
      labels:
        app: test
    spec:
      containers:
      - name: test
        command:
          - sleep
          - "3600"
        image: 192.168.121.143:5000/busybox
        imagePullPolicy: IfNotPresent
      restartPolicy: Always

创建RC

# kubectl create -f test-rc.yaml 

查看创建出的Pod

# kubectl get pod --selector app=test -o wide

扩容Pod的数量到4

# kubectl scale rc test-rc --replicas=4
# kubectl get pod --selector app=test -o wide

缩容Pod的数量到1

# kubectl scale rc test-rc --replicas=1
# kubectl get pod --selector app=test -o wide

把Pod的数量设为0,即可删除RC关联的所有Pod。

滚动升级

滚动升级采用逐步替换的策略。

通过一个例子进行演示,演示应用从V1版本升到V2版本。

创建V1版本的RC。

my-app-v1-rc.yaml

apiVersion: v1
kind: ReplicationController
metadata:
  name: myapp-v1
spec:
  replicas: 10
  selector:
    app: myapp
    version: v1
  template:
    metadata:
      labels:
        app: myapp
        version: v1
    spec:
      containers:
      - name: myapp
        command:
          - sleep
          - "3600"
        image: 192.168.121.143:5000/busybox:v1
        imagePullPolicy: IfNotPresent
      restartPolicy: Always

创建RC,查看RC和Pod。

# kubectl create -f my-app-v1-rc.yaml
# kubectl get rc myapp-v1 -o wide
# kubectl get pods --selector app=myapp -o wide

创建V2版本的RC。

my-app-v2-rc.yaml

apiVersion: v1
kind: ReplicationController
metadata:
  name: myapp-v2
spec:
  replicas: 10
  selector:
    app: myapp
    version: v2
  template:
    metadata:
      labels:
        app: myapp
        version: v2
    spec:
      containers:
      - name: myapp
        command:
          - sleep
          - "3600"
        image: 192.168.121.143:5000/busybox:v2
        imagePullPolicy: IfNotPresent
      restartPolicy: Always

开始滚动升级

# kubectl rolling-update myapp-v1 -f my-app-v2-rc.yaml --update-period=10s

通过–update-period=10s设置每隔10s逐步增加V2版本的RC的Pod副本数量,逐步减少V1版本的RC的Pod副本数量。 升级完成后,删除V1版本的RC,保留V2版本的RC。

在升级过程中,可以进行回退。如果升级完成,则不可以使用这条指令进行回退。

# kubectl rolling-update myapp-v1 -f my-app-v2-rc.yaml --update-period=10s --rollback

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云知识学习

helm搭建

到这一步发现tiller根本装不上,查看event发现是缺少了serviceaccount,查了下google创建一个就行了

2000
来自专栏杂文共赏

使用DCHQ自动部署和管理Docker Cloud /虚拟Java微服务

本文演示了一个在云或虚拟平台上,用于自动化部署和管理Docker Java微服务应用程序的解决方案。我们通过扩展现有项目Chris Richardson的示例—...

1734
来自专栏散尽浮华

Docker网络解决方案-Calico部署记录

Calico简单简介 Calico是一个纯三层的协议,为OpenStack虚机和Docker容器提供多主机间通信。Calico不使用重叠网络比如flannel和...

71110
来自专栏A周立SpringCloud

Docker系列教程16-network命令

本文是一篇翻译,原文 https://docs.docker.com/engine/userguide/networking/work-with-network...

1.2K8
来自专栏云计算

Kubernetes服务网格(第8部分):Linkerd作为入口控制器

Linkerd旨在使应用程序内部服务间的通信安全,快速和可靠。但是,这些目标同样适用于网络的接入层(应用程序对外的服务)。在这篇文章中,我们将展示Linkerd...

4718
来自专栏从零学习云计算

kubernetes学习记录(5)——服务发现机制与Cluster DNS的安装(无CA认证版)

服务发现机制 Kubernetes提供了两种发现Service的方法: 1.环境变量 当Pod运行的时候,Kubernetes会将之前存在的Service的信息...

5520
来自专栏禅林阆苑

csxiaoyao.com整站第二次迁移记录

csxiaoyao的主页( csxiaoyao.com / csxiaoyao.cn / victorsun.cn / sunshinestudio.cn )从...

59431
来自专栏aCloudDeveloper

Docker 基础技术之 Linux namespace 详解

Docker 是“新瓶装旧酒”的产物,依赖于 Linux 内核技术 chroot 、namespace 和 cgroup。本篇先来看 namespace 技术。...

4267
来自专栏小狼的世界

CoreDNS介绍

开始之前先吐槽一下busybox中的nslookup命令。这个命令应该是实现的不是很完全,导致我在测试DNS的成功,得到了错误的信息。先来看一下

7271
来自专栏技术翻译

Kubernetes Demystified:Java应用程序资源的限制

随着容器技术变得越来越复杂,越来越多的企业客户选择Docker和Kubernetes作为其应用平台的基础。但是,这些客户在实践中遇到许多问题。本系列文章介绍了阿...

780

扫码关注云+社区