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的原创文章,请关注公众号"汪子熙":
相关推荐
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 ...
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》这本书的内容围绕着Kubernetes这个当下非常热门的容器编排系统展开,介绍了在云计算环境下设计云原生应用的一系列模式、原则和实践。Kubernetes是由谷歌开源的容器编排平台,它允许用户自动...
此外,Portworx还能自动配置和控制,在本地环境和任何云端环境中重复部署,且自身作为一个容器运行于用户的代理上。 #### Stork:面向Kubernetes的存储编排运行时 为了解决在Kubernetes上运行有状态应用的问题,...
标题中的"stateful-kubernetes-slides"表明这是一个关于在Kubernetes集群中管理有状态应用的专题,通常在Kubernetes中,无状态应用较易管理和扩展,而有状态应用则需要更复杂的生命周期管理。这个主题主要关注如何在...
这里的"Laravel开发-stateful"可能是指使用Laravel 5来构建一个具备状态转换机制的应用,例如订单处理、任务流程等,其中每个实例可能有多个可变状态,并遵循一定的规则进行状态转移。 有限状态机(Finite State ...
在这个例子中,我们首先从Kafka读取数据,然后将二进制的`value`字段转换为字符串,并进一步将其解析为JSON格式,最后生成一个新的DataFrame,其中包含解析后的数据。 #### 结论 Structured Streaming中的状态流...
状态机是一个模型,表示一个实体(如订单)可以处于的不同状态以及如何从一种状态转换到另一种状态。在Laravel中,我们可以创建一个Eloquent模型来表示这个实体,并为其添加一些额外的逻辑以管理状态转换。 1. **...
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 是一个强大的容器编排系统,用于自动化容器化应用的部署、扩展和管理。它由 Google 开发并贡献给了 Cloud Native Computing Foundation (CNCF),现已成为云原生计算领域的重要组成部分。Kubernetes 的...
描述中的"有状态的简单的会话Bean的实现,里面有详细的设计过程截图以及源代码",意味着我们可以期待看到一个实际操作示例,通过设计过程的截图来直观地了解SFSB的生命周期管理,以及如何编写和部署源代码。...
"基于Java的一个较初级的EJB商业应用的例子.zip"这个压缩包可能包含了一个简单的EJB项目,可能涵盖了会话Bean的使用、数据库连接(JDBC或JPA)、以及Web层(Servlet或JSP)的集成。通过这个例子,你可以学习如何在...
在Kubernetes中,服务分为两种类型:无状态服务(Stateless Services)和有状态服务(Stateful Services)。无状态服务通常不需要保存任何持久化数据,实例之间可以互换,而有状态服务则需要保持数据的持久性,并且...
Dojo 是一个强大的JavaScript工具库,它为Web开发提供了丰富的功能和组件,包括DOM操作、AJAX通信、动画效果、模块管理和MVC框架等。在这个小例子中,我们将深入理解Dojo的核心概念,并通过实践来熟悉其用法。 1. *...
Github企业备份 ... 请参阅以下https://github.com/zalando/ghe-backup/blob/master/README.md#kubernetes-stateful-set,-volume,-volume-claim的有状态集示例) Zalando Kubernetes基于AWS,因此卷索赔基
本教程将通过一个初级的EJB商业应用例子,帮助你了解EJB的基本概念和工作原理。 1. **EJB概述** - EJB作为Java EE的一部分,提供了服务器端组件的规范,用于处理事务管理、安全性、状态管理和并发控制等复杂任务。...
在压缩包中的例子中,你可能会找到一个名为` StatelessExample `的类,它实现了无状态SessionBean的接口,并提供了一些业务方法。 接着,我们转向有状态SessionBean(Stateful Session Bean)。与无状态SessionBean...
OpenStack 时代主要是基于 OpenStack 的私有云平台,Kubernetes 时代主要是基于 Kubernetes 的容器云平台,而未来发展阶段主要是基于云原生技术的容器云平台。 容器云平台的技术栈 容器云平台的技术栈主要包括 ...
- 有状态SessionBean示例:可能包含一个实现SSB的Java类,以及对应的接口。这个类会覆盖一些方法来处理客户端的请求,并在内部存储状态信息。可能还包括测试代码,演示如何创建、查找和调用SSB实例。 - 无状态...