Kubernetes连载 (3)Deployment

在这一讲里,我们可以一起探讨下如何在Kubernetes集群中以Deployment 的形式部署Pods,但在那之前,我们再了解一个Kubernetes object,也即是Replication set。

Replication set

上一篇博文我们讲到了Replication controller(下称RC),在功能性方面,Replication set与RC非常相似。然而Replication set是一个更新的Kubernetes object, 它有一个额外的特点,也就是set based selectors。 这个额外的特点意味着我们能够根据一组值过滤键。
以下是两种selectors的对比,
Equality-based selectors:
该selector允许按键和值过滤,其中匹配的对象应满足所有指定的标签。
Set-based selectors:
该selector允许您有一系列的值,而您只需要满足其中几个值而不需要全部满足。

为什么我们需要Deployment?

我们已经有了Replication controller也有了 Replication set,为什么还需要一个Deployment呢?因为Deployment可以帮助我们执行rolling updates 以及 rollbacks。Rolling updates是指您修改或更新您pod实列的某些内容。而rollbacks是指回归到之前的版本。

看看我们这次的定义文件

ginx_deployment.yml

apiVersion: apps/v1
kind: Deployment
metadata:
        name: nginx-deployment
spec:
        replicas: 5
        selector:
               matchLabels:
                       app: newnginx
        template:
               metadata:
                       labels:
                            app: newnginx
               spec:
                       containers:
                             - name: my-nginx
                               image: nginx
                               ports:
                                    - containerPort: 80

和之前几个博文的定义文件相似的配置我就略过了,我们看下主要异同的地方。首先是apiVersion, 这里需要定义为apps/v1, 其次是kind,我们需要定义为Deployment, 也就是以Deployment 的形式部署Pods。replicas被指定为5,说明我希望有5个pods可以被运行,之后就是matchLabels,这里您需要指定labels,这里我指定了个app: newnginx。需要注意的是再template下也有个labels,那个labels是指pods的labels。

Rolling updates 以及 Rollbacks

考虑下这个情景,我们都希望我们的应用程序一直保持运行状态,且一直保持高可用状态。同时,开发者还会要求更新以及创建各种版本的应用程序。所以Rolling updates是一个能帮助我们开发者在开发期间对应用程序进行更新时不让应用程序出现downtime(停机时间)的特点。Rollbacks是一个让您的应用程序回到某个版本的回滚过程。

我们先修改下我们之前创建的nginx_service.yml文件,修改后的内容如下:

apiVersion: v1
kind: Service
metadata:
        name: my-nginx-service
spec:
        type: NodePort
        ports:
              - port: 80
        selector:
              app: newnginx

对比后可以知道,我只是修改了selector的内容。

此时您如果打开浏览器NodePort 地址访问您的nginx应用程序,出现的结果应该和您之前看到的没什么不同。

接下来我们修改下nginx_deployment.yml的内容

piVersion: apps/v1
kind: Deployment
metadata:
        name: nginx-deployment
spec:
        replicas: 5
        selector:
               matchLabels:
                       app: newnginx
        template:
               metadata:
                       labels:
                            app: newnginx
               spec:
                       containers:
                             - name: my-nginx
                               image:  anjucoursera1/nginxcourseraapp
                               ports:
                                    - containerPort: 80

在上面我们修改所用到的image。然后我们等待所有的pods都更新完成。
您可以通过这条命令查看更新的进度

kubectl get deployment

当输出如下时,说明更新完毕:

NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   5/5     5            5           67m

在没更新完成之前,您刷新浏览器应该显示的都是未更新前的内容。在更新完后,您的输出应该如下:
在这里插入图片描述

尝试下Rollbacks

我们可以让应用程序的版本回到旧版
输入以下命令:

kubectl rollout history deploy nginx-deployment

输出应该如下:

deployment.apps/nginx-deployment 
REVISION  CHANGE-CAUSE
1         <none>
2         <none>

此时我们输入下列命令可以将应用程序回归到旧版:

kubectl rollout undo deploy nginx-deployment --to-revision-1

输出是:

deployment.apps/nginx-deployment rolled back

回退完成后,此时刷新浏览器,便可以看到旧版内容了。

连载就到这里结束了。谢谢您能看到这里。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值