运维之扩容与升级

本文我们将对Kubernetes的常用运维操作扩容与升级做简单说明。

1.Node的扩容

Node的扩容简单言之就是增加新的Node节点。在节点上安装Kubelet,Kube-proxy及Docker, 并修改参数使其指向Master地址。基于Kuberlet的自动注册机制,新的Node将会自动加入现有的Kubernetes集群中。

2.Pod的动态扩容和缩放

在实际运维过程中,我们常常需要对某个服务动态扩容以满足突增的流量,或者动态减少服务实例节约服务器资源。
下面我们将动态增加redis-slave的pod副本由2个增加为3个。
#kubectl scale rc redis-slave –replicas=3

[[email protected] python]# kubectl get pods

NAME                 READY     STATUS    RESTARTS   AGE

frontend-02x2s       1/1       Running   1          1d

frontend-8xtuj       1/1       Running   1          1d

frontend-ko8b2       1/1       Running   1          1d

redis-master-2v6pp   1/1       Running   1          1d

redis-slave-5k126    1/1       Running   1          1d

redis-slave-9dqti    1/1       Running   1          1d

[[email protected] python]# kubectl scale rc redis-slave --replicas=3 scaled

[[email protected] python]# kubectl get pods

NAME                 READY     STATUS    RESTARTS   AGE

frontend-02x2s       1/1       Running   1          1d

frontend-8xtuj       1/1       Running   1          1d

frontend-ko8b2       1/1       Running   1          1d

redis-master-2v6pp   1/1       Running   1          1d

redis-slave-0d33n    1/1       Running   0          59s

redis-slave-5k126    1/1       Running   1          1d

redis-slave-9dqti    1/1       Running   1          1d

同样的我们也可以减少pod的副本,以下我们将redis-slave由3个副本减为1个。

[[email protected] python]# kubectl scale rc redis-slave --replicas=1 scaled

[[email protected] python]# kubectl get pods

NAME                 READY     STATUS    RESTARTS   AGE

frontend-02x2s       1/1       Running   1          1d

frontend-8xtuj       1/1       Running   1          1d

frontend-ko8b2       1/1       Running   1          1d

redis-master-2v6pp   1/1       Running   1          1d

redis-slave-0d33n    1/1       Running   0          2m

3.应用的滚动升级

在实际运维过程中,如何不停止服务而进行升级将变得越来越常见,Kubernetes提供了Rolling-update的功能来解决上述场景。
我们假设PHP的image有一个新的v2版本,我们需要将现有PHP服务滚动升级为v2。

3.1制作新镜像

简单起见,我们通过docker commit来制作一个新镜像,首先用原镜像启动一个新容器,你可以在容器里修改,然后退出。

[[email protected] python]# docker run -it docker.io/kubeguide/guestbook-php-frontend /bin/bash
[email protected]:/var/www/html# exit
exit

好,现在我们用docker commit来保存刚才我们编辑过的容器,我们把它命名为guestbook-php-frontend:v2

[[email protected] python]# docker commit 68b765a2b8db guestbook-php-frontend:v2

afa8c93501405642879a30d14ddeb087e48d8fb7a7a04dd2ab8f5556fd9db99b

[[email protected] python]# docker images

REPOSITORY                                            TAG                 IMAGE ID            CREATED              VIRTUAL SIZE

guestbook-php-frontend                                v2                  afa8c9350140        About a minute ago   509.6 MB

daocloud.io/daocloud/daocloud-toolset                 latest              01869b5aa54e        3 weeks ago          150.2 MB

docker.io/mysql                                       latest              4b95c7a7999d        4 weeks ago          374 MB

registry.access.redhat.com/rhel7/pod-infrastructure   latest              2b96d2bcbc46        6 weeks ago          428 MB

docker.io/kubeguide/guestbook-php-frontend            latest              38658844a359        8 months ago         509.6 MB

docker.io/kubeguide/redis-master                      latest              423e126c2ad4        8 months ago         419.1 MB

docker.io/kubeguide/guestbook-redis-slave             latest              00206e07dd92        9 months ago         109.5 MB

我们看到新增加了一个镜像guestbook-php-frontend,tag为v2,接下来我们将通过两种方法来演示滚动升级。

3.2通过配置文件

创建 frontend-controller-v2.yaml

apiVersion: v1
kind: ReplicationController
metadata:
  name: frontend-v2
  labels:
    name: frontend
spec:
  replicas: 3
  selector:
    name: frontend-v2
  template:
    metadata:
      labels:
        name: frontend-v2
    spec:
      containers:
      - name: php-redis
        image: guestbook-php-frontend:v2
        env:
        - name: GET_HOSTS_FROM
          value: env
        ports:
        - containerPort: 80

Kubectl的执行过程如下:

[[email protected] kube-guestbook]#kubectl rolling-update frontend -f frontend-controller-v2.yaml

查看pods创建过程, 我们看到新的POD副本从1开始增加,旧的POD副本从3逐步减少,最终旧的POD副本被删除。这样就完成了应用的升级。

3.3通过新版镜像

另一种方法是不使用配置文件,直接用kubectl rolling-update 加上–image参数指定新版镜像名称来滚动升级
kubectl rolling-update frontend –image=guestbook-php-frontend:v2

更新完成,查看RC,我们看到与配置文件不同,Kubectl给rc增加了一个key为”deployment”的label,当然这个名字可以通过–deployment-label-key参数修改。

[[email protected] ~]# kubectl get rc
CONTROLLER     CONTAINER(S)   IMAGE(S)                                    SELECTOR                                                    REPLICAS
frontend       php-redis      guestbook-php-frontend:v2                   deployment=cdb7f26e49a90eae43e257284310b1cf,name=frontend   3

如果在更新过程中发现配置错误,可以通过执行kubectl rolling-update –rollback完成回滚
kubectl rolling-update frontend –image=guestbook-php-frontend:v2 –rollback

时间: 2024-11-02 14:36:49

运维之扩容与升级的相关文章

运维:CentOS6.5 升级到 PHP7 Alpha2

关闭现在的PHP:killall php-fpm 删掉现有PHP:rm /usr/local/php -rf 下载 PHP 7 Alpha2:wget http://openlogic.oss-cn-hangzhou-internal.aliyuncs.com/php-7.0.0alpha2.tar.gz 编译方法:看我上篇博文这里我新加了一个参数: --with-freetype-dir,另外去掉了 --with-mysql,为什么要这么做呢?因为我需要freetype,并且,PHP7不再把m

自动化运维-自动化扩容介绍加etcd部署

saltstack -----  haproxy  ------jinja cd /usr/local/src/ rz -y tar xf etcd-v2.2.1-linux-amd64.tar.gz cd etcd-v2.2.1-linux-amd64 cp etcd etcdctl /usr/local/bin/ etcd --version mkdir -p /data/etcd nohup etcd --name auto_scale --data-dir /data/etcd/ --l

携程第四代架构探秘之运维基础架构升级

作为国内最大的OTA公司,携程为数以亿计的海内外用户提供优质的旅游产品及服务.2014年底携程技术中心的框架.系统和运维团队共同启动了架构改造项目,历时2年,涉及所有业务线.本文回顾了携程在整个技术架构改造过程中的一些实践和收获. 一.写在前面 随着携程业务量迅速增长.业务变化越来越敏捷,对于应用交付的效率也提出了更高的要求.根据统计,截止2014年底携程总应用数在5000个左右,平均每周约有3000次以上的发布需求.所以作为整体交付环节中极为重要的一环,应用的部署和发布是提高交付效率的关键,然

hadoop日常运维与升级总结

日常运维 升级 问题处理方法 日常运维 进程管理 由于配置文件的更改,需要重启生效, 或者是进程自己因某种致命原因终止, 或者发现进程工作出现异常等情况下,需要进行手动进程的关闭或启动, 或者是增删节点过程中的需要, 进程的关闭与启动,使用 hadoop-daemon.sh start|stop datanode/namenode/journalnode/zkfc yarn-daemon.sh start|stop nodemanager/resourcemanager 检查进程是否完成关闭:

【转载】运维职业向!我是怎么入得运维行业?运维工程师入门必备技能以及打怪升级篇

前言:转载 陈浩一个从事安全运维向的前辈文章.写的很好.人非常nice,遇到了问题,qq上很快就回复了我. 大道三千 入门最难,凡事入了行,也就什么都好说了,好的自然不断努力奋斗修行,不好的自然很快就被淘汰.恭谨勤勉,时不我待~ ---------------------------------------------------------------------------------------------------------------------------------------

详解Linux运维工程师打怪升级篇

详解 Linux 运维工程师打怪升级篇 积累经验篇 做运维也快4年多了,就像游戏打怪升级,升级后知识体系和运维体系也相对变化挺大,学习了很多新的知识点. 运维工程师 是从一个呆逼进化为苦逼再成长为牛逼的过程,前提在于你要能忍能干能拼,还要具有敏锐的嗅觉感知前方潮流变化.如:今年大数据,人工智能比较火...(相对表示就是 python 比较火) 前面也讲了运维基础篇,发现对很多人收益挺大,接下来也写下关于这4年多的运维实践经验,从事了2年多游戏运维,1年多安全运维,1年大数据运维,相关行业信息不能

技术升级成为Linux运维人前途的魔障,是跟进还是选择被淘汰?

技术迭代升级是做IT人最苦恼的难题,随着社会互联网应用的普及,企业追求高的运行效率和性价比,以往一个小的Linux运维项目动辄10多人,现在流程和过程自动化以后,像类似唯品会一样的大型电商公司才不过20人的Linux运维团队. "以前会个基本的Linux操作和一些常见的安全部署处理就能拿个8K以上的薪资,现在的面试者一出来就会各种的高阶能力,例如Docker.Tomcat.KVM等,如果不是因为企业发展还不错,站住了现在的位置,可能会面临失业."10年就工作的张先生说到. 在IT行业里

企业运维之域控篇(八)--辅助域控升级为主域控之一(阴谋)

             阴谋是背地里为了达到自己的目的不择手段的而制定的一种谋略.        有时,我们会遇到主域控因种种原因(硬件.软件.病毒)造成了不能正常启动,这就形成了辅助域只能是在黑灯黑火的情况下,实施阴谋造反,强制性占用域控的 五大角色,成功夺权为王... 企业运维之域控篇(八)--辅助域控升级为主域控之一(阴谋)

ECS主动运维2.0,体验升级,事半功倍

摘要: 阿里云致力于提供更好用的运维体验,让您使用ECS的过程更透明.高效,并实现更加标准化.自动化的运维方式.基于主动运维2.0,您使用ECS云服务器的体验更加流畅,而且利用系统事件,不再依赖于工单联系客服,可以通过自助处理的方式响应主动运维实例重启,减少对系统可靠性和业务连续性的影响. 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新.当您基于ECS云服务器搭建了业务系统,借助云计算的诸