[TOC]
# Deployment
(针对无状态服务) Deployment用来管理`Pod`和`ReplicaSet`的,用来代替以前老版本的ReplicationController
Deployment可以用来:
* 滚动升级和回滚
* 扩容和缩容
* Deployment暂停和继续
先定义一个yaml
~~~
apiVersion: app/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
match:labels:
app: nginx #这里的标签必须和template中定义的标签一样。不然会报错
replicas: 3 #定义创建3个副本
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
~~~
### 字段说明

READY: 表示一共有多少个副本准备就绪
UP-TO-DATE: 表示最新当前有几个副本
AVAILABLE:表示可用的副本数
AGE: 表示运行时间
### 操作示例
##### 扩容
原本定义3个副本,现在扩容到10个副本
~~~
kubectl scale deployment nginx-deployment --replicas 10
~~~
##### 缩容
原本定义3个副本,现在缩容到2个副本
~~~
kubectl scale deployment nginx-deployment --replicas 2
~~~
##### 更新镜像
从nginx:1.7.9更新到nginx:1.9.1
~~~
kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1
~~~
##### 回滚
回滚到上一个步骤
~~~
kubectl rollout undo deployment/nginx-deployment
~~~
##### 查看可用的回滚版本
~~~
kubectl rollout history deployment nginx-deployment
~~~
##### 查看滚动状态
~~~
kubectl rollout status deployments nginx-deployment
~~~
##### 监控更新过程
~~~
kubectl get deployments myapp-deploy --watch
~~~
##### 在线修改yaml
使用edit命令
~~~
kubectl edit deployment/nginx-deployment
deployment "nginx-deployment" edited
~~~
### 滚动机制
* 新创建: 当 Deployment controller 观测到有新的 deployment 被创建时,会直接创建出一个新的 ReplicaSet 来做这件事。
* 变更: 当更新了一个的已存在并正在进行中的 Deployment,每次更新 Deployment都会创建一个新的 ReplicaSet并扩容它,同时回滚之前扩容的 ReplicaSet ,将它添加到旧的 ReplicaSet 列表中,开始缩容。
### 暂停和恢复
在暂停状态下的更新操作,多次更改,只会触发一次 rolling 记录
~~~
kubectl rollout pause deployment/nginx-deployment
~~~
### 回滚策略
##### 记录保留
`.spec.revisionHistoryLimit`默认设置保留数量为 2。 在 Deployment 中设置来指定保留多少旧的 ReplicaSet。余下的将在后台被当作垃圾收集。
##### 滚动更新数量
`.spec.strategy`指定新的Pod替换旧的Pod的策略
### 遗留
(还有好多东西,等需要的时候,再去网上查吧,现在暂时先不看了)
- 一、K8S的安装
- 1.1 安装环境
- 1.2 问题汇总
- 1.3 事前准备
- 1.4 安装配置负载均衡
- 1.5 安装K8S软件
- 1.6 初始化kubeadm
- 1.7 添加控制节点
- 1.8 添加计算节点
- 1.9 安装故障问题处理
- 1.10 安装管理dashboard
- 1.11 编写测试Pod
- 1.12 从外部访问集群中的Pod
- 1.13 部署metrics-server指标采集
- 二、Pod管理
- 2.1 Pod 资源需求和限制
- 2.2 Init 容器
- 2.3 Pod 健康检查(探针)和重启策略
- 2.4 Pod 生命周期(钩子Hook)
- 2.5 静态Pod
- 2.6 初始化容器(init container)
- 2.7 资源限制
- 三、资源控制器
- 3.1 Deployment
- 3.2 StatefulSet
- 3.3 DaemonSet
- 3.4 Job
- 3.5 定时任务
- 3.6 准入控制器
- 3.7 自动伸缩
- 3.8 ReplicaSet
- 四、存储
- 4.1 Secret 管理敏感信息
- 4.2 ConfigMap 存储配置
- 4.3 Volume
- 4.4 PV
- 4.5 PVC
- 4.6 StorageClass
- 4.7 暴露宿主机信息给Pod
- 五、服务Service
- 5.1 Service 资源
- 5.2 服务发现
- 5.3 服务暴露
- 5.4 Ingress 资源
- 5.5 Ingress 专题
- 5.6 traefik 2.X版本使用
- 六、认证、授权、准入控制
- 6.1 服务账户
- 6.2 LimitRange资源与准入控制器
- 6.3 ResourceQuota 资源与准入控制器
- 七、Helm
- 7.1 Helm 安装
- 八、 istio
- 8.1 istio 介绍
- 8.2 iotis 安装
- 九、calico
- 9.1 两种网络模式
- 9.2 全互联模式 与 路由反射模式
- 9.3 BGP跨网段(大型网络)
- 十、Ingress
- 10.1 安装 LoadBalancer
- 10.2 部署 ingress-nginx
- 10.3 Ingress-nginx 的使用
- 10.4 开启TCP和UDP
- 使用中的问题
- CSI Node问题
