Chiriri's blog Chiriri's blog
首页
  • Java

    • JavaSE
    • JavaEE
    • 设计模式
  • Python

    • Python
    • Python模块
    • 机器学习
  • Golang

    • Golang
    • gRPC
  • 服务器

    • Linux
    • MySQL
    • NoSQL
    • Kubernetes
  • 项目

    • 传智健康
    • 畅购商城
  • Hadoop生态

    • Hadoop
    • Zookeeper
    • Hive
    • Flume
    • Kafka
    • Azkaban
    • Hbase
    • Scala
    • Spark
    • Flink
  • 大数据项目

    • 离线数仓
  • 青训营

    • 第四届青训营
  • HTML

    • HTML
    • JavaScript
  • Vue

    • Vue2
    • TypeScript
    • Vue3
    • Uni-APP
  • 数据结构与算法
  • C语言
  • 考研数据结构
  • 计算机组成原理
  • 计算机操作系统
  • Java基础

    • Java基础
    • Java集合
    • JUC
    • JVM
  • 框架

    • Spring
    • Dubbo
    • Spring Cloud
  • 数据库

    • MySQL
    • Redis
    • Elasticesearch
  • 消息队列

    • RabbitMQ
    • RocketMQ
  • 408

    • 计算机网络
    • 操作系统
    • 算法
  • 分类
  • 标签
  • 归档
  • 导航站
GitHub (opens new window)

Iekr

苦逼后端开发
首页
  • Java

    • JavaSE
    • JavaEE
    • 设计模式
  • Python

    • Python
    • Python模块
    • 机器学习
  • Golang

    • Golang
    • gRPC
  • 服务器

    • Linux
    • MySQL
    • NoSQL
    • Kubernetes
  • 项目

    • 传智健康
    • 畅购商城
  • Hadoop生态

    • Hadoop
    • Zookeeper
    • Hive
    • Flume
    • Kafka
    • Azkaban
    • Hbase
    • Scala
    • Spark
    • Flink
  • 大数据项目

    • 离线数仓
  • 青训营

    • 第四届青训营
  • HTML

    • HTML
    • JavaScript
  • Vue

    • Vue2
    • TypeScript
    • Vue3
    • Uni-APP
  • 数据结构与算法
  • C语言
  • 考研数据结构
  • 计算机组成原理
  • 计算机操作系统
  • Java基础

    • Java基础
    • Java集合
    • JUC
    • JVM
  • 框架

    • Spring
    • Dubbo
    • Spring Cloud
  • 数据库

    • MySQL
    • Redis
    • Elasticesearch
  • 消息队列

    • RabbitMQ
    • RocketMQ
  • 408

    • 计算机网络
    • 操作系统
    • 算法
  • 分类
  • 标签
  • 归档
  • 导航站
GitHub (opens new window)
  • JavaSE

  • JavaEE

  • Linux

  • MySQL

  • NoSQL

  • Python

  • Python模块

  • 机器学习

  • 设计模式

  • 传智健康

  • 畅购商城

  • 博客项目

  • JVM

  • JUC

  • Golang

  • Kubernetes

    • Kubernetes(K8S)
    • 安装K8S集群
    • 部署应用到集群中
    • Service
    • StatefulSet
      • 数据持久化
      • ConfigMap & Secret
      • Helm 和 命名空间
      • Ingress
      • Kubeasz
      • Kainstall
      • 探针
      • 调度器
      • 集群安全机制 RBAC
      • 性能监控平台
      • 高可用集群
    • 硅谷课堂

    • C

    • 源码

    • 神领物流

    • RocketMQ

    • 短链平台

    • 后端
    • Kubernetes
    Iekr
    2022-06-26
    目录

    StatefulSet

    # StatefulSet

    StatefulSet 是用来管理有状态的应用,例如数据库。 前面我们部署的应用,都是不需要存储数据,不需要记住状态的,可以随意扩充副本,每个副本都是一样的,可替代的。 而像数据库、Redis 这类有状态的,则不能随意扩充副本。 StatefulSet 会固定每个 Pod 的名字

    # 部署 StatefulSet 类型的 Mongodb

    mongo.yaml

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: mongodb
    spec:
      serviceName: mongodb
      replicas: 3
      selector:
        matchLabels:
          app: mongodb
      template:
        metadata:
          labels:
            app: mongodb
        spec:
          containers:
            - name: mongo
              image: mongo:4.4
              # 镜像拉取策略 IfNotPresent 仅本地没有镜像时才远程拉,Always 永远都是从远程拉,Never 永远只用本地镜像,本地没有则报错
              imagePullPolicy: IfNotPresent
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: mongodb
    spec:
      selector:
        app: mongodb
      type: ClusterIP
      # HeadLess
      clusterIP: None
      ports:
        - port: 27017
          targetPort: 27017
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34

    部署配置

    kubectl apply -f mongo.yaml
    
    1

    查看 pod 状态

    kubectl get pod
    
    1

    发现后缀是有序 而不是之前随机生成的

    image-20220626203350261

    扩容

    kubectl scale sts mongodb --replicas=5
    
    1

    # StatefulSet 特性

    • Service 的 CLUSTER-IP 是空的,Pod 名字也是固定的。
    • Pod 创建和销毁是有序的,创建是顺序的,销毁是逆序的。
    • Pod 重建不会改变名字,除了 IP,所以不要用 IP 直连

    我们通过 kubectl get endpoints mongodb -o yaml 查看 k8s 导出的 yaml 配置

    kubectl get endpoints mongodb -o yaml
    
    1

    Endpoints 会多一个 hostname

    image-20220626204331323

    访问时,如果直接使用 Service 名字连接,会随机转发请求 要连接指定 Pod,可以这样 pod-name.service-name

    先获取 pod 的名称

    kubectl get pod
    
    1

    运行一个临时 Pod 连接数据测试下

    kubectl run mongodb-client --rm --tty -i --restart='Never' --image docker.io/bitnami/mongodb:4.4.10-debian-10-r20 --command -- bash
    
    1

    使用 MongoDB 客户端测试

    mongo --host mongodb-0.mongodb
    
    1
    编辑 (opens new window)
    上次更新: 2023/12/06, 01:31:48
    Service
    数据持久化

    ← Service 数据持久化→

    最近更新
    01
    k8s
    06-06
    02
    进程与线程
    03-04
    03
    计算机操作系统概述
    02-26
    更多文章>
    Theme by Vdoing | Copyright © 2022-2025 Iekr | Blog
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式