K8s:无状态

无状态服务

无状态服务是指服务的实例之间没有持久化状态,每个实例都是相同的,可以互换使用。

调度器

ReplicationController

简称 RC是 Kubernetes 早期版本中用来确保 Pod 副本始终运行的 API 对象。它通过监控 Pod 副本的数量,确保任何时候都有指定数量的 Pod 副本始终运行。即如果有容器异常退出,会自动创建新的 Pod 来替代;而异常多出来的容器也会自动回收。

确保健康 Pod 的数量、弹性伸缩、滚动升级以及应用多版本发布跟踪等。

特点

  • 确保 Pod 副本始终运行。
  • 可以进行滚动更新。
  • 在较新版本的 Kubernetes 中,ReplicaSet 已经取代了 ReplicationController

示例

apiVersion: v1
kind: ReplicationController
metadata:
  name: my-replicationcontroller
spec:
  replicas: 3
  selector:
    app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp-container
        image: myapp:1.0.0

ReplicaSet

RS,ReplicaSet 保证 Pod 的副本数不变,并且能够处理 Pod 模板的更新。

特点

  • ReplicationController 类似,但更通用。
  • 支持基于集合的选择器(如 key in (value1, value2))。
  • 推荐用于替代 ReplicationController

示例

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: my-replicaset
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp-container
        image: myapp:1.0.0

Deployment

Deployment 是一种更高级的 API 对象,用于声明 Pod 和 ReplicaSet 的声明周期管理。Deployment 控制器负责 Pod 副本的声明式更新,可以自动替换 Pod 模板中的镜像或其他定义。

API版本:apps/v1

特点

  • 提供应用的声明式更新能力。
  • 支持回滚和暂停更新。
  • 可以查看 Deployment 的状态,如更新进度、修订版本等。
  • 是管理无状态应用的标准方式。

示例

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp-container
        image: myapp:1.0.0

比较

  • 功能Deployment 提供了比 ReplicaSetReplicationController 更丰富的功能,如自动滚动更新、回滚等。
  • 选择器ReplicaSet 支持集合选择器,而 ReplicationController 只支持等值选择器。
  • 推荐使用:在新的 Kubernetes 应用中,推荐使用 Deployment 来管理无状态应用的声明周期,使用 StatefulSet 来管理有状态应用。
$ kubectl apply -f exampleDeploymentv1.yml --record

参数–record,这样会把每次修改Deployment控制器时所使用的命令记录到备注字段中,以便在查看Deployment控制器变更历史或进行回滚时可以辨别每次修改的内容。

deployment的yaml模板

apiVersion: apps/v1
kind: Deployment
metadata:
  name: String            #元数据,必填,Deployment控制器的名字
  namespace: String       #元数据,Deployment控制器的命名空间
  labels:                 #元数据,标签列表
    key: value            #元数据,可定义多个标签的键/值对
  annotations:            #元数据,自定义注解列表
    key: value            #元数据,可定义多个注解的键/值对
spec:
  selector:#必填,用于指定此Deployment控制器针对的Pod的标签选择器,需要与template中的标签匹配
    matchLabels:          #定义需要匹配的标签集合
      key: value          #需要匹配的标签,可定义多个标签的键/值对
  template: [PodTemplate] #必填,Pod模板,它与Pod具有完全相同的结构,不过它是嵌套的,
  #而且不需要带apiVersion或kind字段
  replicas: int           #指定所需Pod的数量,默认为1
  strategy:               #更新时替换旧Pod的策略
    type: Recreate/RollingUpdate     #Recreate表示所有现有的Pod都会在创建新的Pod之前被
    #终止,RollingUpdate表示以滚动更新方式更新Pod
    rollingUpdate:
      maxSurge: int/int%           #在滚动更新时,在所需数量的Pod上允许创建的最大Pod数,
      #这个数字也可以为百分比形式
      maxUnavailable: int/int%     #在滚动更新时,同时存在最大不可用Pod数,
      #这个数字也可以为百分比形式
  progressDeadlineSeconds: int  #Deployment控制器处于进行状态时的等待秒数,超过这个时间将会变为失败
  minReadySeconds: int     #指定新创建的Pod应该在没有任何容器崩溃的情况下准备好的最短秒数
  revisionHistoryLimit: int        #指定要保留的允许回滚的旧ReplicaSet的数量
  paused: boolean                  #默认为false,用于暂停和恢复部署。当暂停部署时,
  #Pod模板中spec属性的任何更改都不会触发新的部署

Deployment控制器有两种更新方式。

  • Recreate:所有现有的Pod都会在创建的Pod之前被终止;删除旧的ReplicaSet控制器下的所有Pod,只保留旧的ReplicaSet控制器的定义,但不再投入使用

  • RollingUpdate:表示以滚动跟新方式更新Pod,并可以通过maxUnavailable和maxSurge参数控制滚动更新过程

    • maxUnavailable:表示在更新过程中能够进入不可用状态的Pod的最大值或相对于总副本数的最大百分比
    • maxSurge:表示能够额外创建的Pod数或相对于总副本数的百分比。

更新的暂停与恢复

暂停与恢复的命令如下所示。

$ kubectl rollout pause deploy {Deployment名称}
$ kubectl rollout resume deploy {Deployment名称}

回滚

需要回滚到之前版本,则可以先使用以下命令查看历史变更记录。

$ kubectl rollout history deployment {Deployment名称}

回滚命令

kubectl rollout undo deployment {Deployment名称} --to-revision={revision编号}

相关推荐

  1. K8s状态

    2024-06-07 12:26:04       14 阅读
  2. k8s笔记 | StatefulSet 有状态

    2024-06-07 12:26:04       14 阅读
  3. 五、K8S-StatefulSet(STS有状态服务)

    2024-06-07 12:26:04       28 阅读
  4. 【Kubernetes】K8s 查看 Pod 的状态

    2024-06-07 12:26:04       36 阅读
  5. k8s删除namespace失败一直处于Terminating状态

    2024-06-07 12:26:04       19 阅读
  6. K8S中删除Terminating状态的命名空间

    2024-06-07 12:26:04       11 阅读
  7. k8s处于pending状态的原因有哪些

    2024-06-07 12:26:04       8 阅读

最近更新

  1. 根据关键词query获取google_img(api方式)

    2024-06-07 12:26:04       0 阅读
  2. redis中的事务和mysql中的事务有什么区别?

    2024-06-07 12:26:04       1 阅读
  3. C# 构造函数依赖注入 使用out向外传递参数

    2024-06-07 12:26:04       1 阅读
  4. 信息时代,呼唤新的哲学

    2024-06-07 12:26:04       1 阅读
  5. 【数据基础】— B树

    2024-06-07 12:26:04       1 阅读
  6. Vue 路由传参 query方法 bug 记录

    2024-06-07 12:26:04       1 阅读
  7. 翻页 上一页/下一页

    2024-06-07 12:26:04       1 阅读

热门阅读

  1. 化学反应冷媒降温制冷量计算方法

    2024-06-07 12:26:04       11 阅读
  2. GeoJson 几何对象实例说明(2024-06-06)

    2024-06-07 12:26:04       13 阅读
  3. rust嵌入式开发之总结

    2024-06-07 12:26:04       11 阅读
  4. 初识C语言第三十天——设计三子棋游戏

    2024-06-07 12:26:04       10 阅读
  5. nginx自动清理脚本

    2024-06-07 12:26:04       11 阅读
  6. VUE中xslx解析excel日期格式问题

    2024-06-07 12:26:04       11 阅读
  7. MDK(Keil MDK)编辑器配置详解与快捷按键

    2024-06-07 12:26:04       9 阅读