前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >备战CKA每日一题——第7天

备战CKA每日一题——第7天

作者头像
我的小碗汤
发布2019-12-10 17:49:28
4880
发布2019-12-10 17:49:28
举报
文章被收录于专栏:我的小碗汤我的小碗汤

昨日考题

通过命令行,创建1个deployment,副本数为3,镜像为nginx:latest。然后滚动升 级到nginx:1.9.1,再回滚到原来的版本 要求:Deployment的名称为cka-1125,贴出用到的相关命令。 最好附带创建的Deployment完整yaml,以及和升级回滚有关的命令。

昨日答案

先创建deployment,可以用命令创建:

代码语言:javascript
复制
kubectl run cka-1125  --image=nginx --replicas=3

也可以用以下yaml:cka-1125.yaml创建

代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: cka-1125
  name: cka-1125
spec:
  replicas: 3
  selector:
    matchLabels:
      app: cka-1125
  template:
    metadata:
      labels:
        app: cka-1125
    spec:
      containers:
      - image: nginx
        name: cka-1125

创建:

代码语言:javascript
复制
kubectl apply -f cka-1125.yaml

升级:

代码语言:javascript
复制
kubectl set image deploy/cka-1125 cka-1125=nginx:1.9.1 --record
deployment.extensions/cka-1125 image updated

回滚:

代码语言:javascript
复制
# 回滚到上一个版本
kubectl rollout undo deploy/cka-1125
# 回滚到指定版本
kubectl rollout undo deploy/cka-1125 --to-revision=2

昨日解析

官方中set image命令: https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#set

set image命令

set image命令格式如下:

代码语言:javascript
复制
kubectl set image (-f FILENAME | TYPE NAME) CONTAINER_NAME_1=CONTAINER_IMAGE_1 ... CONTAINER_NAME_N=CONTAINER_IMAGE_N [--record]

--record指定,在annotation中记录当前的kubectl命令。如果设置为false,则不记录命令。如果设置为true,则记录命令。默认为false。

代码语言:javascript
复制
[root@liabio test]# kubectl set image deploy/cka-1125 cka-1125=nginx:1.9.1 --record
deployment.extensions/cka-1125 image updated
[root@liabio test]# 
[root@liabio test]# kubectl rollout history deploy/cka-1125 
deployment.extensions/cka-1125 
REVISION  CHANGE-CAUSE
3         <none>
4         kubectl set image deploy/cka-1125 cka-1125=nginx:1.9.1 --record=true

像上面这样,CHANGE-CAUSE中会有升级命令。

set image命令可以对:pod (po), replicationcontroller (rc), deployment (deploy), daemonset (ds), replicaset (rs),statefulset(sts)进行操作。

roll命令

roll命令官方文档: https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#rollout

可以管理deployments、daemonsets、statefulsets资源的回滚:

查询升级历史:

代码语言:javascript
复制
[root@liabio test]# kubectl rollout history deploy/cka-1125 
deployment.extensions/cka-1125 
REVISION  CHANGE-CAUSE
1         <none>
2         <none>

查看指定版本的详细信息:

代码语言:javascript
复制
kubectl rollout history deploy/cka-1125 --revision=3 -o=yaml

回滚到上一个版本:

代码语言:javascript
复制
[root@liabio test]# kubectl rollout undo deploy/cka-1125 
deployment.extensions/cka-1125 rolled back

或者回滚到指定版本:

代码语言:javascript
复制
[root@liabio test]# kubectl rollout undo deploy/cka-1125 --to-revision=3
deployment.extensions/cka-1125 rolled back

其他roll子命令

restart:资源将重新启动; status:展示回滚状态; resume:恢复被暂停的资源。控制器不会控制被暂停的资源。通过恢复资源,可以让控制器再次控制。resume仅对deployment支持。 pause:控制器不会控制被暂停的资源。使用kubectl rollout resume来恢复暂停的资源。当前,只有deployment支持被暂停。

滚动更新策略

滚动更新官网文档: https://kubernetes.io/docs/concepts/workloads/controllers/deployment/

代码语言:javascript
复制
minReadySeconds: 5
strategy:
  type: RollingUpdate
  rollingUpdate:
    maxSurge: 1
    maxUnavailable: 1

minReadySeconds Kubernetes在等待设置的时间后才进行升级 如果没有设置该值,Kubernetes会假设该容器启动起来后就提供服务了 如果没有设置该值,在某些极端情况下可能会造成服务服务正常运行

maxSurge

控制滚动更新过程中副本总数超过DESIRED的上限。maxSurge可以是具体的整数,也可以是百分比,向上取整。maxSurge默认值为25%。

例如DESIRED为10,那么副本总数的最大值为roundUp(10 + 10*25%)=13,所以CURRENT为13。

maxUnavaible 控制滚动更新过程中,不可用副本占DESIRED的最大比例。maxUnavailable可以是具体的整数,也可以是百分之百,向下取整。默认值为25%。

例如DESIRED为10,那么可用的副本数至少要为 10-roundDown(10*25%)=8所以AVAILABLE为8。

maxSurge越大,初始创建的新副本数量就越多;maxUnavailable越大,初始销毁的旧副本数目就越多。

今日考题

提供一个pod的yaml,要求添加Init Container,Init Container的作用是创建一个空文件,pod的Containers判断文件是否存在,不存在则退出 注意:附带Pod完整yaml

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 进击云原生 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 昨日考题
  • 昨日答案
  • 昨日解析
    • set image命令
      • roll命令
        • 其他roll子命令
          • 滚动更新策略
          • 今日考题
          相关产品与服务
          容器服务
          腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档