K8S之StatefulSet有状态服务详解
目录
- 一、概念
- 二、实例
一、概念
1.1.无状态和有状态的区别
主要从网络和存储来对比
无状态不考虑存储和网络,可以任意漂移,每个副本是一样的,如Nginx
有状态应用需要考虑存储和网络,每个副本是不对等的,具有唯一的ID,如etcd、mysql
1.2.StatefulSet的特点
专为部署有状态服务而生
解决Pod独立生命周期,保持Pod启动顺序和唯一性
应用场景:分布式应用、数据库集群
稳定,唯一的网络标识符,持久存储
有序,优雅的部署和扩展、删除、终止
有序,滚动更新
1.3.Headless Service
也是一种Service,但不需要Cluster IP,需要设置clusterIP: None
1.4.serviceName
告诉StatefulSet要使用serviceName指定的headless service来保证Pod的身份
1.5.稳定的存储
存储卷使用volumeClaimTemplates创建,称为卷申请模板;当创建一个PV时,同样会为每个Pod分配并且创建一个编号PVC
二、实例
拿Nginx测试,主要演示yaml的写法,实际应用中需用有状态服务
2.1.statefulset.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
labels:
app: web
name: web
spec:
replicas: 3
selector:
matchLabels:
app: web
serviceName: "headless-web"
template:
metadata:
labels:
app: web
spec:
containers:
- image: nginx
imagePullPolicy: IfNotPresent
name: web
ports:
- containerPort: 8080
volumeMounts:
- name: www
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: www
spec:
storageClassName: "managed-nfs-storage"
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 1Gi
设置了3个副本,从0开始标号,创建3个副本

自动创建PV和PVC


2.2.headless-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: headless-web
spec:
clusterIP: None
ports:
- port: 80
protocol: TCP
selector:
app: web
CLUSTER-IP为None

启动一个busybox的Pod
kubectl run test -it --rm --image=busybox -- sh nslookup headless-web
域名解析结果

在容器里可以通过
curl web-0.headless-web

参考视频:https://ke.qq.com/user/index/index.html#/plan/cid=1709963&term_id=102815140
您可能感兴趣的文章
- 12-22nginx代理实现静态资源访问的示例代码
- 12-22Docker 存储管理的几种方式
- 12-22nginx静态资源的服务器配置方法
- 12-22Docker Compose部署微服务项目上线功能
- 12-22GPU服务器的多用户配置方法
- 12-22docker-compose搭建etcd集群的实现(三节点)
- 12-22docker中mysql开启日志的实现步骤
- 12-22Linux下docker安装mysql8并配置远程连接
- 12-22docker部署mysql8并设置可远程连接
- 12-22阿里云oss对象存储使用详细步骤


阅读排行
推荐教程
- 12-11docker存储目录迁移示例教程
- 12-10docker start启动容器后仍然exit状态的解决
- 12-10Linux下如何安装Logstash
- 12-19Zabbix SAML SSO 登录绕过漏洞的操作流程
- 12-15Docker-Compose搭建Spark集群的实现方法
- 12-14Docker Desktop无法正常启动解决(failed to start...)
- 12-14k8s 与docker空间使用分析与清理方法
- 12-13k8s编排之Deployment知识点详解
- 12-13Nginx IP封禁及自动封禁IP的实现
- 12-13Nginx代理Partainer如何使用





