kubernetes基础 – 管理无状态服务

欢迎加入本站的kubernetes技术交流群,微信添加:加Blue_L。


考虑到性能和可用性,通常一个服务会有多个服务实例,在k8s中通过多个pod实现。

无状态服务是各个pod完全是一样,彼此可替代。

有状态服务是各个pod不完全一样,不可彼此替代,比如pod关联特定存储卷。

对于以下场景可以使用replicaset:

  • 稳定的、唯一的网络标识符。
  • 稳定的、持久的存储。
  • 有序的、优雅的部署和缩放。
  • 有序的、自动的滚动更新。

replicaset讲解

replicaset 的目的是维护一组在任何时候都处于运行状态的 Pod 副本的稳定集合。 因此,它通常用来保证给定数量的、完全相同的 Pod 的可用性。

replicaset通过pod的metadata.ownerReferences对应的replicaset。如果匹配的pod没有这个值扩不是控制器,那么replicaset将捕获纳管这个pod。

ReplicaSet 确保任何时间都有指定数量的 Pod 副本在运行。 然而,Deployment 是一个更高级的概念,它管理ReplicaSet,并向 Pod 提供声明式的更新以及许多其他有用的功能。 因此,我们建议使用 Deployment 而不是接使用 ReplicaSet,除非 你需要自定义更新业务流程或根本不需要更新。

示例replicaset:

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: frontend
  labels:
    app: guestbook
    tier: frontend
spec:
  # modify replicas according to your case
  replicas: 3
  selector:
    matchLabels:
      tier: frontend
  template:
    metadata:
      labels:
        tier: frontend
    spec:
      containers:
      - name: php-redis
        image: gcr.io/google_samples/gb-frontend:v3

操作:

  • 创建replicaset
  • 获取replicaset和查看状态
  • 捕获裸pod测试
  • 扩缩replicaset

replicaset详细说明:https://kubernetes.io/zh/docs/concepts/workloads/controllers/replicaset/#how-a-replicaset-works

replicaset接口说明:https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/replica-set-v1/

deployment讲解

一个 Deployment 为 Pods 和 ReplicaSets 提供声明式的更新能力。

以下是的典deployment型用例:

  • 创建 Deployment 以将 ReplicaSet 上线。 ReplicaSet 在后台创建 Pods。 检查 ReplicaSet 的上线状态,查看其是否成功。
  • 通过更新 Deployment 的 PodTemplateSpec,声明 Pod 的新状态 。 新的 ReplicaSet 会被创建,Deployment 以受控速率将 Pod 从旧 ReplicaSet 迁移到新 ReplicaSet。 每个新的 ReplicaSet 都会更新 Deployment 的修订版本。
  • 如果 Deployment 的当前状态不稳定,回滚到较早的 Deployment 版本。 每次回滚都会更新 Deployment 的修订版本。
  • 扩大 Deployment 规模以承担更多负载。
  • 暂停 Deployment 以应用对 PodTemplateSpec 所作的多项修改, 然后恢复其执行以启动新的上线版本。
  • 使用 Deployment 状态 来判定上线过程是否出现停滞。
  • 清理较旧的不再需要的 ReplicaSet 。

你负责描述 Deployment 中的 目标状态,而 Deployment 控制器(Controller) 以受控速率更改实际状态, 使其变为期望状态。你可以定义 Deployment 以创建新的 ReplicaSet,或删除现有 Deployment, 并通过新的 Deployment 收养其资源。

deployment示例:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

操作:

  • 创建deployment
  • 获取deployment和查看状态
  • 更新deployment和查看进度状态
  • 查看更新历史和回滚
  • 扩缩容deployment
  • 暂停和继续更新动作

deployment详细说明:https://kubernetes.io/zh/docs/concepts/workloads/controllers/deployment/

关于deploy的详细配置参考:https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/deployment-v1/

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注