`
JerryWang_SAP
  • 浏览: 1029676 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

Kubernetes stateful set讲解以及一个基于postgreSQL的具体例子

阅读更多

Stateful Set是Kubernetes 1.9版本新引入的一个概念,用于管理有状态的应用。

Kubernetes官方文档:

https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/

Manages the deployment and scaling of a set of Pods, and provides guarantees about the ordering and uniqueness of these Pods.

Like a Deployment, a StatefulSet manages Pods that are based on an identical container spec. Unlike a Deployment, a StatefulSet maintains a sticky identity for each of their Pods. These pods are created from the same spec, but are not interchangeable: each has a persistent identifier that it maintains across any rescheduling.

StatefulSet由以下几个部分组成:

1. 用于定义网络标志(DNS domain)的Headless Service

2. 用于创建PersistentVolumes的volumeClaimTemplates

3. 定义具体应用的StatefulSet

下面我给出了一个实际应用中的StatefulSet的yaml文件:

---

apiVersion: apps/v1

kind: StatefulSet

metadata:

name: ads-db-statefulset

labels:

component: ads

module: db

spec:

serviceName: ads-db-service

replicas: 1

selector:

matchLabels:

component: ads

module: db

template:

metadata:

labels:

component: ads

module: db

spec:

volumes:

- name: init

secret:

secretName: ads-db-secret

items:

- key: initdb.sql

path: initdb.sql

containers:

- name: ads-db-pod

image: postgres:9.6

ports:

- containerPort: 5432

name: ads-db-port

volumeMounts:

- name: ads-db-volume

mountPath: /var/lib/postgresql/data/

- name: init

mountPath: /docker-entrypoint-initdb.d/

env:

- name: PGDATA

valueFrom:

configMapKeyRef:

name: ads-db-configmap

key: pgdata_value

- name: POSTGRES_PASSWORD

valueFrom:

secretKeyRef:

name: ads-db-secret

key: postgres_password_value

volumeClaimTemplates:

- metadata:

name: ads-db-volume

labels:

component: ads

module: db

spec:

accessModes: [ "ReadWriteOnce" ]

resources:

requests:

storage: 1Gi
 
 
 

使用kubectl get statefulset查看生成的statefulset:

 

生成的headless service:

 

生成的pod:

 

当我把statefulset yaml文件里的replicas从1改成3之后,果然观察到有两个新的pod正在启动,并且名称满足命名规范<stateful set name >-X。

 

使用kubectl describe查看创建的statefulset明细:

 
 

statefulSet自动创建的persistentVolumeClaim:

 
 

The files belonging to this database system will be owned by user "postgres".

This user must also own the server process.

The database cluster will be initialized with locale "en_US.utf8".

The default database encoding has accordingly been set to "UTF8".

The default text search configuration will be set to "english".

Data page checksums are disabled.

fixing permissions on existing directory /var/lib/postgresql/data/pgdata ... ok

creating subdirectories ... ok

selecting default max_connections ... 100

selecting default shared_buffers ... 128MB

selecting dynamic shared memory implementation ... posix

creating configuration files ... ok

running bootstrap script ... ok

performing post-bootstrap initialization ... ok

syncing data to disk ... ok

Success. You can now start the database server using:

pg_ctl -D /var/lib/postgresql/data/pgdata -l logfile start

使用下面的命令登录到statefulset提供的postgreSQL服务器上:

1. kubectl run tester -it --rm --image=postgres:9.6 --env="PGCONNECT_TIMEOUT=5" --command -- bash

 

看到root$之后,说明我们已经连接上pod了。

使用如下命令行连接postgreSQL服务器:

psql -h ads-db-statefulset-0.ads-db-service -p 5432 -U adsuser -W ads

 

当然如果不用命令行,也可以使用pgadmin,以图形化界面连接statefulSet里的postgreSQL服务器:

sudo apt install pgadmin3

 

进行端口转发,这样我们可以使用localhost:5432进行连接:

kubectl port-forward ads-db-statefulset-0 5432:5432

 
 

也能成功连接:

 
 

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

 
0
0
分享到:
评论

相关推荐

    Mastering Kubernetes

    Using real-world use cases, we explain the options for network configuration and provides guidelines on how to set up, operate, and troubleshoot various Kubernetes networking plugins. Finally, we ...

    Mastering Kubernetes [Gigi Sayfan]

    You will discover how to run complex stateful microservices on Kubernetes including advanced features as horizontal pod autoscaling, rolling updates, resource quotas, and persistent storage back ends....

    Kubernetes Patterns.pdf

    《Kubernetes Patterns》这本书的内容围绕着Kubernetes这个当下非常热门的容器编排系统展开,介绍了在云计算环境下设计云原生应用的一系列模式、原则和实践。Kubernetes是由谷歌开源的容器编排平台,它允许用户自动...

    Israni_Dinesh_Bulletproofing_Stateful_Applications_on_Kubernetes.pdf

    此外,Portworx还能自动配置和控制,在本地环境和任何云端环境中重复部署,且自身作为一个容器运行于用户的代理上。 #### Stork:面向Kubernetes的存储编排运行时 为了解决在Kubernetes上运行有状态应用的问题,...

    stateful-kubernetes-slides

    标题中的"stateful-kubernetes-slides"表明这是一个关于在Kubernetes集群中管理有状态应用的专题,通常在Kubernetes中,无状态应用较易管理和扩展,而有状态应用则需要更复杂的生命周期管理。这个主题主要关注如何在...

    Laravel开发-stateful

    这里的"Laravel开发-stateful"可能是指使用Laravel 5来构建一个具备状态转换机制的应用,例如订单处理、任务流程等,其中每个实例可能有多个可变状态,并遵循一定的规则进行状态转移。 有限状态机(Finite State ...

    spark2018欧洲峰会中关于StructuredStreaming中stateful stream processing的ppt

    在这个例子中,我们首先从Kafka读取数据,然后将二进制的`value`字段转换为字符串,并进一步将其解析为JSON格式,最后生成一个新的DataFrame,其中包含解析后的数据。 #### 结论 Structured Streaming中的状态流...

    Laravel开发-stateful-eloquent

    状态机是一个模型,表示一个实体(如订单)可以处于的不同状态以及如何从一种状态转换到另一种状态。在Laravel中,我们可以创建一个Eloquent模型来表示这个实体,并为其添加一些额外的逻辑以管理状态转换。 1. **...

    Kubernetes_in_Action

    10 StatefulSets: deploying replicated stateful applications PART 3: BEYOND THE BASICS 11 Understanding Kubernetes internals 12 Securing clusters using authentication and authorization 13 Securing ...

    Kubernetes有状态集群服务部署与管理.pptx

    Kubernetes 是一个强大的容器编排系统,用于自动化容器化应用的部署、扩展和管理。它由 Google 开发并贡献给了 Cloud Native Computing Foundation (CNCF),现已成为云原生计算领域的重要组成部分。Kubernetes 的...

    Stateful--sessionbean.zip_sessionBean_stateful

    描述中的"有状态的简单的会话Bean的实现,里面有详细的设计过程截图以及源代码",意味着我们可以期待看到一个实际操作示例,通过设计过程的截图来直观地了解SFSB的生命周期管理,以及如何编写和部署源代码。...

    基于Java的一个较初级的EJB商业应用的例子.zip

    "基于Java的一个较初级的EJB商业应用的例子.zip"这个压缩包可能包含了一个简单的EJB项目,可能涵盖了会话Bean的使用、数据库连接(JDBC或JPA)、以及Web层(Servlet或JSP)的集成。通过这个例子,你可以学习如何在...

    Kubernetes有状态集群服务部署与管理.rar

    在Kubernetes中,服务分为两种类型:无状态服务(Stateless Services)和有状态服务(Stateful Services)。无状态服务通常不需要保存任何持久化数据,实例之间可以互换,而有状态服务则需要保持数据的持久性,并且...

    dojo 一个小的例子

    Dojo 是一个强大的JavaScript工具库,它为Web开发提供了丰富的功能和组件,包括DOM操作、AJAX通信、动画效果、模块管理和MVC框架等。在这个小例子中,我们将深入理解Dojo的核心概念,并通过实践来熟悉其用法。 1. *...

    ghe-backup:ZalandoTech上的Github Enterprise备份(Kubernetes,AWS,Docker)

    Github企业备份 ... 请参阅以下https://github.com/zalando/ghe-backup/blob/master/README.md#kubernetes-stateful-set,-volume,-volume-claim的有状态集示例) Zalando Kubernetes基于AWS,因此卷索赔基

    基于java的一个较初级的EJB商业应用的例子.zip

    本教程将通过一个初级的EJB商业应用例子,帮助你了解EJB的基本概念和工作原理。 1. **EJB概述** - EJB作为Java EE的一部分,提供了服务器端组件的规范,用于处理事务管理、安全性、状态管理和并发控制等复杂任务。...

    基于Java的实例源码-EJB中有、无状态SessionBean的两个例子.zip

    在压缩包中的例子中,你可能会找到一个名为` StatelessExample `的类,它实现了无状态SessionBean的接口,并提供了一些业务方法。 接着,我们转向有状态SessionBean(Stateful Session Bean)。与无状态SessionBean...

    容器云平台建设方案.pptx

    OpenStack 时代主要是基于 OpenStack 的私有云平台,Kubernetes 时代主要是基于 Kubernetes 的容器云平台,而未来发展阶段主要是基于云原生技术的容器云平台。 容器云平台的技术栈 容器云平台的技术栈主要包括 ...

    Java EJB中有、无状态SessionBean的两个例子.rar

    - 有状态SessionBean示例:可能包含一个实现SSB的Java类,以及对应的接口。这个类会覆盖一些方法来处理客户端的请求,并在内部存储状态信息。可能还包括测试代码,演示如何创建、查找和调用SSB实例。 - 无状态...

Global site tag (gtag.js) - Google Analytics