k8s 控制器:controller-manager ,是部署、管理pod 的。常见的控制器类型有deployment、Job 、statefulset 、daemonset 等等。deployment 是最常见的控制器,它是部署静态服务用的控制器。控制器是通过标签来关联查找pod 的
介绍
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 提供服务。
方式二
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。