deployment部署pod,也是通过yaml文件的方式部署。deployment通过yaml文件定义需要deploy名称,需要几个pod协助运行,拉取的镜像版本等内容。一般来说一个deployment管理一个pod模板,比如前端和后端就需要分开管理。实际上deployment在底层是利用了replicaset的对象,replicaset直接管理pod。

部署一个deployment:
编写yaml文件–deploy.yaml:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: hello-deploy
spec:
  replicas: 10
  selector:
    matchLabels:
      app: hello-world
  minReadySeconds: 10
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
      maxSurge: 1
  template:
    metadata:
      labels:
        app: hello-world
    spec:
      containers:
      - name: hello-pod
        image: nigelpoulton/k8sbook:latest
        ports:
        - containerPort: 8080

apiversion:指定api版本
kind:指定类型,这里是deployment
metadata:deployment的标签,定义了它的名字为hello-deploy
spec:spec一下都是pod相关的内容。
replicas:副本数量,就是pod数量
selector:deploy管理这个pod的选择标签。这里定义了一个标签app:hello-world
minReadySeconds:最小的准备时间。意思就是每个副本创建之间最小间隔时间,这里为10s
strategy:更新策略。type:更新类型为RollingUpdate。
RollingUpdate:这里有两个定义maxUnavailable和maxSurge。maxUnavailable是最大的不可用的副本,maxSurge是最大的超过期望的副本数的数量。这里两个都为1,意思是我们deploy定义的副本数是10,一般来说就有10个副本同时可用,但是更新的时候,拿一个来更新操作(maxUnavailable),就只有9个可用,同时创建一个新的更新pod(maxSurge),就会出现11个副本数。最终结果就是同时有两个pod更新,11-9=2。如果一个1,一个0的话,应该是一次一个的更新。分别对应下面的两个值。这里我调成了一个1,一个0,所有最大不超过10副本数为0,但是不可用的可以少一个为9。
在这里插入图片描述
template是pod模板,下面有个containers是定义容器,指定镜像和名称等。

使用kubectl apploy来是deploy.yaml应用至集群:

kubectl apply -f deploy.yaml

查看该deploy集群情况:

kubectl apply -f deploy.yaml
kubectl describe deploy hello-deploy

查看replicaset:

kubectl get rs

滚动更新

假如我们对我们之前的deploy.ment部署的版本做了更新,并将新的版本做成了一个镜像,取名为nigelpoulton/k8sbook:edge,现在我们需要将应用进行升级。
修改deploy.yaml文件,只需要将容器镜像改成image: nigelpoulton/k8sbook:edge即可,其他不用修改。
在这里插入图片描述
升级操作:

kubectl apply -f deploy.yaml --record

加入前面两个参数为1,1的话,这里只能两个两个更新,而且设置了间隔时间为10s,才能下次两个更新。
查看更新过程:

kubectl rollout status deploy hello-deploy

也可以使用:

kubectl get deploy

应用回滚

升级的使用了–record参数,kubernetes会维护该deployment的历史版本,可以查看历史版本信息

kubectl rollout history deployment hello-deploy

前面数字是版本号,版本1是初始版本,2是更新后的版本,操作命令也被记录下来。
这里说一下replicaset,升级后回滚都和它有关,当应用升级后,会产生新的replicaset,但是旧的replicaset还存在,而且保留之前的配置信息。所以当回滚的时候就是启用旧的replicaset进行回滚操作。
查看replicaset:

kubectl get rs

可以看到旧的rs已经没有pod存在。
进行回滚:

kubectl rollout undo deployment hello-world --to-revision=1

这就完成回滚操作了,但是这样和配置文件的镜像内容不符,规范来说还需手动修改yaml文件的镜像内容。

如果需要删除该deployment的话,执行:

kubectl delete -f deploy.yaml
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐