k8s——deployment
创建deployment
[root@master deploy]# kubectl create deploy nginx-deploy --image=nginx:1.7.9
deployment.apps/nginx-deploy created
// kubectl create 资源类型 资源名称(deployment的名称) 指定镜像
// 都是在动态的更新pod副本的数量 deployment和replicaSet是嵌套关系,
[root@master deploy]# kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deploy 1/1 1 1 66s
[root@master deploy]# kubectl get rs
NAME DESIRED CURRENT READY AGE
nginx-deploy-68c658776b 1 1 1 75s
[root@master deploy]# kubectl get replicaset
NAME DESIRED CURRENT READY AGE
nginx-deploy-68c658776b 1 1 1 4m5s
[root@master deploy]# kubectl get po
NAME READY STATUS RESTARTS AGE
my-pod 1/1 Running 1 (19m ago) 4d19h
nginx-demo 1/1 Running 2 (19m ago) 4d23h
nginx-deploy-68c658776b-z9rc6 1/1 Running 0 4m48s
nginx-po 1/1 Running 2 (19m ago) 4d23h
[root@master deploy]#
//先是有deployment,然后有replicaSet,然后有pod
//vim :set paste 粘贴模式
[root@master deploy]# vim nginx-deploy.yaml
apiVersion: apps/v1 #deployment api 版本
kind: Deployment # 资源类型为deployment
metadata: # 元数据
labels: # 标签
app: nginx-deploy # 具体的 k:y配置形式
name: nginx-deploy # deployment的名字
namespace: default # 所在的命名空间
spec:
replicas: 1 # 期望的副本数
revisionHistoryLimit: 10 # 进行滚动更新后,保留的历史版本数
selector: # 选择器,用于找到匹配的rs
matchLabels: # 按照标签匹配
app: nginx-deploy # 匹配的标签k:y
strategy: # 更新策略
rollingUpdate: # 滚动更新配置
maxSurge: 25% # 进行滚动更新时候,更新的个数最多可以超过预期副本数的个数/比
例
maxUnavailable: 25% #进行滚动更新时,最大不可用更新比例,表述在所有副本数中,最>多可以有多少个不更新成功
type: RollingUpdate # 更新类型,采用滚动更新
template: # pod模版
metadata: # pod原信息
labels: # pod标签
app: nginx-deploy
spec: # pod的期望信息
containers: # pod 的容器
- image: nginx:1.7.9 # 镜像
imagePullPolicy: IfNotPresent # 拉取策略
name: nginx # 容器名称
restartPolicy: Always # 重启策略
terminationGracePeriodSeconds: 30 #删除操作最多宽限多久
滚动更新
[root@master deploy]# kubectl edit deploy nginx-deploy
deployment.apps/nginx-deploy edited
[root@master deploy]# kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deploy 3/3 3 3 28m
[root@master deploy]# kubectl get rs
NAME DESIRED CURRENT READY AGE
nginx-deploy-68c658776b 3 3 3 29m
[root@master deploy]# kubectl get po
NAME READY STATUS RESTARTS AGE
my-pod 1/1 Running 1 (44m ago) 4d19h
nginx-demo 1/1 Running 2 (44m ago) 4d23h
nginx-deploy-68c658776b-hgppq 1/1 Running 0 23s
nginx-deploy-68c658776b-vld7l 1/1 Running 0 23s
nginx-deploy-68c658776b-z9rc6 1/1 Running 0 29m
nginx-po 1/1 Running 2 (44m ago) 4d23h
[root@master deploy]#
//开两个终端
[root@master deploy]# kubectl set image deployment/nginx-deploy nginx=nginx:1.7.9
deployment.apps/nginx-deploy image updated
[root@master deploy]#
[root@master deploy]# kubectl rollout status deplloy nginx-deploy
Waiting for deployment "nginx-deploy" rollout to finish: 1 out of 3 new replicas have been updated...
Waiting for deployment "nginx-deploy" rollout to finish: 1 out of 3 new replicas have been updated...
Waiting for deployment "nginx-deploy" rollout to finish: 1 out of 3 new replicas have been updated...
Waiting for deployment "nginx-deploy" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "nginx-deploy" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "nginx-deploy" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "nginx-deploy" rollout to finish: 1 old replicas are pending termination...
Waiting for deployment "nginx-deploy" rollout to finish: 1 old replicas are pending termination...
deployment "nginx-deploy" successfully rolled out
[root@master deploy]#
# 滚动更新过程
1.创建一个空的rs2
2.在空的rs2中创建pod1,在rs1中关闭原pod1
3. 在rs2中创建pod2,在rs1中关闭原pod2
//整个过程中保持2个pod的存在
# 查看rs可以看到2个rs
[root@master deploy]# kubectl get rs --show-labels
NAME DESIRED CURRENT READY AGE LABELS
nginx-deploy-68c658776b 3 3 3 40m app=nginx-deploy,pod-template-hash=68c658776b
nginx-deploy-7c97fc8644 0 0 0 9m21s app=nginx-deploy,pod-template-hash=7c97fc8644
[root@master deploy]#
回滚
// 当你的更新存在问题,可以回滚
//可以使用如下命令查看更新的历史版本
[root@master deploy]# kubectl rollout history deployment/nginx-deploy
deployment.apps/nginx-deploy
REVISION CHANGE-CAUSE
2 <none>
3 <none>
// 查看历史版本
[root@master deploy]# kubectl rollout history deployment/nginx-deploy --revision=2
deployment.apps/nginx-deploy with revision #2
Pod Template:
Labels: app=nginx-deploy
pod-template-hash=7c97fc8644
Containers:
nginx:
Image: nginx:1.9.1
Port: <none>
Host Port: <none>
Environment: <none>
Mounts: <none>
Volumes: <none>
[root@master deploy]# kubectl rollout history deployment/nginx-deploy --revision=3
deployment.apps/nginx-deploy with revision #3
Pod Template:
Labels: app=nginx-deploy
pod-template-hash=68c658776b
Containers:
nginx:
Image: nginx:1.7.9
Port: <none>
Host Port: <none>
Environment: <none>
Mounts: <none>
Volumes: <none>
// 会记录修改的值
// 回退操作
[root@master deploy]# kubectl rollout undo deployment/nginx-deploy --to-revision=2
deployment.apps/nginx-deploy rolled back
[root@master deploy]# kubectl rollout status deployment/nginx-deploy
deployment "nginx-deploy" successfully rolled out
[root@master deploy]#
// 回退操作 在.spec.revisionHistoryLimit 中指定deploment保留多少revision,如果设置0,则不允许回滚
扩容和缩容
扩容
[root@master deploy]# kubectl scale --replicas=6 deploy nginx-deploy
deployment.apps/nginx-deploy scaled
[root@master deploy]# kubectl get po
NAME READY STATUS RESTARTS AGE
my-pod 1/1 Running 1 (81m ago) 4d20h
nginx-demo 1/1 Running 2 (81m ago) 5d
nginx-deploy-7c97fc8644-62dpp 1/1 Running 0 13m
nginx-deploy-7c97fc8644-g48zt 1/1 Running 0 10s
nginx-deploy-7c97fc8644-jlhfn 1/1 Running 0 13m
nginx-deploy-7c97fc8644-lqpxj 1/1 Running 0 13m
nginx-deploy-7c97fc8644-v69f4 1/1 Running 0 10s
nginx-deploy-7c97fc8644-zslj4 1/1 Running 0 10s
nginx-po 1/1 Running 2 (81m ago) 5d
[root@master deploy]# kubectl get rs
NAME DESIRED CURRENT READY AGE
nginx-deploy-68c658776b 0 0 0 66m
nginx-deploy-7c97fc8644 6 6 6 36m
[root@master deploy]# kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deploy 6/6 6 6 67m
[root@master deploy]#
缩容
[root@master deploy]# kubectl scale --replicas=3 deploy nginx-deploy
deployment.apps/nginx-deploy scaled
[root@master deploy]# kubectl get po
NAME READY STATUS RESTARTS AGE
my-pod 1/1 Running 1 (83m ago) 4d20h
nginx-demo 1/1 Running 2 (83m ago) 5d
nginx-deploy-7c97fc8644-62dpp 1/1 Running 0 14m
nginx-deploy-7c97fc8644-jlhfn 1/1 Running 0 14m
nginx-deploy-7c97fc8644-lqpxj 1/1 Running 0 14m
nginx-po 1/1 Running 2 (83m ago) 5d
[root@master deploy]# kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deploy 3/3 3 3 68m
[root@master deploy]#
暂停与恢复
暂停
// 由于每次对pod template的修改都会触发更新,所以可以通过暂停更新来避免频繁更新。我们可以先暂停更新,然后修改pod template,最后恢复更新。
[root@master deploy]# kubectl rollout pause deployment nginx-deploy
deployment.apps/nginx-deploy paused
[root@master deploy]# kubectl edit deploy nginx-deployment
Error from server (NotFound): deployments.apps "nginx-deployment" not found
[root@master deploy]# kubectl edit deploy nginx-deploy
deployment.apps/nginx-deploy edited
[root@master deploy]# kubectl rollout history deployment nginx-deploy
deployment.apps/nginx-deploy
REVISION CHANGE-CAUSE
3 <none>
4 <none>
[root@master deploy]# kubectl rollout history deployment nginx-deploy --revision=4
deployment.apps/nginx-deploy with revision #4
Pod Template:
Labels: app=nginx-deploy
pod-template-hash=7c97fc8644
Containers:
nginx:
Image: nginx:1.9.1
Port: <none>
Host Port: <none>
Environment: <none>
Mounts: <none>
Volumes: <none>
[root@master deploy]# kubectl get rs
NAME DESIRED CURRENT READY AGE
nginx-deploy-68c658776b 0 0 0 80m
nginx-deploy-7c97fc8644 3 3 3 49m
[root@master deploy]#
恢复
[root@master deploy]#
[root@master deploy]# kubectl rollout resume deployment nginx-deploy
deployment.apps/nginx-deploy resumed
[root@master deploy]# kubectl get rs
NAME DESIRED CURRENT READY AGE
nginx-deploy-68c658776b 0 0 0 82m
nginx-deploy-6cbbdbbf8b 3 3 3 10s
nginx-deploy-7c97fc8644 0 0 0 51m
[root@master deploy]# kubectl rollout history
daemonset deployment statefulset
[root@master deploy]# kubectl rollout history deployment nginx-deploy
deployment.apps/nginx-deploy
REVISION CHANGE-CAUSE
3 <none>
4 <none>
5 <none>
[root@master deploy]# kubectl rollout history deployment nginx-deploy --revision=5
deployment.apps/nginx-deploy with revision #5
Pod Template:
Labels: app=nginx-deploy
pod-template-hash=6cbbdbbf8b
Containers:
nginx:
Image: nginx:1.9.1
Port: <none>
Host Port: <none>
Limits:
cpu: 500m
memory: 512Mi
Requests:
cpu: 100m
memory: 128Mi
Environment: <none>
Mounts: <none>
Volumes: <none>
[root@master deploy]#
k8s——deployment的更多相关文章
- 【转帖】K8S Deployment 命令
K8S Deployment 命令 https://www.cnblogs.com/Tempted/p/7831604.html 今天学习了一下 kubectl scale deployment xx ...
- 详细聊聊k8s deployment的滚动更新(二)
一.知识准备 ● 本文详细探索deployment在滚动更新时候的行为 ● 相关的参数介绍: livenessProbe:存活性探测.判断pod是否已经停止 readinessProbe:就绪 ...
- 详细聊聊k8s deployment的滚动更新(一)
一.知识准备 ● 本文详细探索deployment在滚动更新时候的行为 二.环境准备 组件 版本 OS Ubuntu 18.04.1 LTS docker 18.06.0-ce 三.准备镜像 首先准备 ...
- k8s deployment controller源码分析
deployment controller简介 deployment controller是kube-controller-manager组件中众多控制器中的一个,是 deployment 资源对象的 ...
- K8S Deployment 命令
创建 Deployment kubectl create -f https://kubernetes.io/docs/user-guide/nginx-deployment.yaml --record ...
- k8s deployment yam 文件分析
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: namespace: labels:spec: replicas: #设 ...
- Centos 7 k8s Deployment新副本控制器
一.概念 Kubernetes提供了一种更加简单的更新RC和Pod的机制,叫做Deployment.通过在Deployment中描述你所期望的集群状态,Deployment Controller会将在 ...
- K8s Deployment YAML 名词解释
Deployment 简述 Deployment 为 Pod 和 ReplicaSet 提供了一个声明式定义 (declarative) 方法,用来替代以前的 ReplicationControlle ...
- k8s deployment
案例01 apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: selector: matchLabe ...
- k8s deployment 金丝雀发布 更新的 暂停 恢复 回滚
假设现在有业务需求,计划将所有的nginx 从镜像版本1.14更新到1.15,这一次发布不紧需要平滑发布,还需要 金丝雀发布,及确认其中一个Pod没有问题后在进行剩余的更新. 暂停与恢复也可以使用ym ...
随机推荐
- 在RockyLinux 9.3环境中采用RPM模式部署Oracle 19C
在RockyLinux 9.3环境中采用RPM模式部署Oracle 19C 用途 在开发数据库系统时,可以验证功能是否与Oracle的表现一致,验证正确性和兼容性 限制 虚拟机安装,CPU 2*4 内 ...
- Kubernetes 部署集群1.28.2版本(无坑)
初步搭建一个一个主节点和两个从节点Kubernetes 1.28.2 集群.先准备好机器 | host | hostname | os | role | hardware | | --- | --- ...
- 基于MaxCompute的大数据安全方案
简介:随着法律的完善,数据安全,信息安全,网络安全,升级成国家安全,所以数据安全不管对用户,还是对公司也都会变的越来越重要.做为大数据云数仓解决方案的领导者,阿里云MaxCompute在安全体系上也 ...
- dotnet 构建还原失败 NuGet.targets 错误可能原因
我在一次断电关机之后,发现我所有的项目都构建不通过了,提示在 NuGet.targets 文件的第 130 行错误.原因就是存在有某个被项目引用的 NuGet 包被损坏,在进行 NuGet 还原时读取 ...
- 基于权电阻网络的VGA色条显示#DE10-lite#verilog#qp
- 通俗易懂的生产环境Web应用架构介绍
前言 看见一篇非常通俗易懂且适合新手阅读的Web应用架构文章,我将其手工翻译了出来,分享给大家. 也可以去阅读英文原文,标题为,贴出链接: https://stephenmann.io/post/wh ...
- SAP集成技术(十一)SAP混合集成平台
愿景 SAP产品之间实现无缝集成还需要一些时间,目前可能还存在一些技术挑战或者需要进一步的开发工作,以便在未来能够轻松地把所有SAP产品整合在一起.让SAP产品能够顺利地与非SAP的解决方案连接,这也 ...
- 《Effective C++》第三版-4. 设计与声明(Design and Declarations)
目录 条款17:让接口容易被正确使用,不易被误用(Make interfaces easy to use correctly and hard to use incorrectly) 限制类型和值 规 ...
- 七、Doris Colocation Join
Colocation Join 是在 Doris 0.9 版本中引入的新功能.旨在为某些 Join 查询提供本地性优化,来减少数据在节点间的传输耗时,加速查询. 1.基本理论 Join 的常见连接类型 ...
- SQL Server实战四:查询数据库的数据
本文介绍基于Microsoft SQL Server软件,实现数据库表中多种数据查询方法的具体操作. 目录 1 指定列或全部列查询--查询S表学生记录 2 指定列或全部列查询--查询学生姓名与出生 ...