k8s 控制器:controller-manager ,是部署、管理pod 的。常见的控制器类型有deployment、Job 、statefulset 、daemonset 等等。deployment 是最常见的控制器,它是部署静态服务用的控制器。控制器是通过标签来关联查找pod 的

介绍

Deployment 是一种更高阶资源, 相比于rc或rs 或其他控制器它的价值是不仅可以用来部署应用程序,还可以以声明的方式滚动升级应用。更强大的是它可以定制升级策略,记录升级所有版本,方便升级失败的回退等操作。
 
当创建个 Deployment 时, ReplicaSet 资源也会随之创建,在使用 Deployment 时, 实际的 pod是由 Deployment 的 Replicaset 创建和管理的, 而不是由 Deployment 直接创建和管理的

deployment  功能与应用场景

关于版本迭代和升级

1、下线旧的服务,上线新的服务,此方式适用于新旧应用不能同时提供服务,弊端就是可能造成服务短暂不可用。

2、滚动更新,下线一个旧的再上一个新的,依次逐个更新,直至所有旧的下线新的上线,此过程新旧程序同时提供服务。

针对滚动更新,k8s 中的两种方式

方式一

kubectl + rc 方式滚动升级,通过rc或rs 创建pod 应用,再通过kubectl  rolling-update 命令升级。整个过程如下:

通过yaml新建资源rc和service,pod 模板绑定标签,rc和svc 通过标签选择器关联Pod ,kubectl 命令来新建一个rc并且制定新镜像版本,发送命令到api ,每次删除一个旧的pod ,就新建一个新的pod ,直至旧的pod 完全消失新pod全部建立,整个过程service 可以访问在线的新旧pod 提供服务。

k8s  控制器(kube-controller-manager)-deployment

方式二

deployment  声明式的方式实现滚动升级,而不是kubectl 命令式的方式,本文后面会有详细介绍。

两者比较

方式一  中整个过程一直是通过kubectl 客户端命令与api 通信,如果客户端与api 网络故障容易导致升级中断,而且此过程中还添加了新的标签。

方式二  声明式的,而不是kubectl 命令式的方式;deployment 方式升级可以有两种方式(滚动升级,删除旧的上新的),而且升级出错可以回退。deployment 方式升级实现过程与kubectl rollling-update 过程相似也是新建一个副本控制器,整个过程是由deployment 协调维护两个副本控制器的状态的,但是旧的rs 不会删除,记录所有升级记录,可以回退。

相关操作 

部署应用程序 

创建资源deployment

kubectl create   deployment   --help

kubectl  create  deployment  dep-name  --image=naginx  --dry-run  -o  yaml > a.yaml  # --dry-run不实际生效只是测试,-o yaml把此命令转换成yaml 格式

vi a.yaml                           #再编辑配置此文件自定义要配置的pod 参数。

kubectl   create  -f  a.yaml --record      #根据文件创建资源,record 参数为了记录历史版本号

kubectl   get  deploy -n  namespace        #查看通过 deployment 部署的pod

kubectl   describe  deploy,pods -n namespace  #查看详情
  kubectl   rollout   status deployment kubia  #查看部署状态

  kubectl  get pod                   #查看部署的pod,由Deployment创建的三个pod 名称中均包含一个额外的数字,这个数字实际上对应 Deployment 和 Repli                                                   caSet 中的 pod 模板的哈希值

  kubectl   get  replicasets  #查看创建的rc ,ReplicaSet的名称中也包含了其 pod 模板的哈希值。Deployment 会创建多个 ReplicaSet, 用来对应和管                                                 理一个版本的pod模板。像这样使用pod模板的哈希值,可以让 Deployment 始终对给定版本的pod模板创建相同的(或使用已有的) ReplicaSet。
View Code

相关文章: