Un. StatefulSet
(1) StatefulSet est un objet API de charge de travail utilisé pour gérer les applications avec état. Les applications qui ont des relations asymétriques entre les instances et les instances qui reposent sur des données externes sont appelées «applications avec état»
(2) StatefulSet est utilisé pour gérer le déploiement et étendre un ensemble de pods, et peut fournir des numéros de série et unicité pour ces pods garantis .
(3) Les StatefulSets sont utiles pour les applications qui doivent répondre à une ou plusieurs des exigences suivantes:
1. Un identifiant de réseau stable et unique.
2. Stockage stable et durable.
3. Déploiement et mise à l'échelle ordonnés et élégants.
4. Mises à jour progressives ordonnées et automatiques
2. État de la topologie
apiVersion: v1 #创建Headless service
kind: Service
metadata:
name: nginx-svc
labels:
app: nginx
spec:
ports:
- port: 80
name: web
clusterIP: None
selector:
app: nginx
---
apiVersion: apps/v1 #StatefulSet控制器
kind: StatefulSet
metadata:
name: web
spec:
serviceName: "nginx-svc"
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: myapp:v1
ports:
- containerPort: 80
name: web
3. Demandes avec état
(1) StatefulSet résume l'état de l'application en deux situations:
État topologique: les instances d'application doivent être démarrées dans un certain ordre. Le pod nouvellement créé doit avoir le même ID réseau que le pod d'origine.
État de stockage: plusieurs instances de l'application sont liées à des données de stockage différentes.
(2) StatefulSet numérote tous les pods. La règle de numérotation est la suivante: (statefulset name) - (statefulset ) nom) -( S T A T E F U L S E T nom appelé ) - (nombre), de 0
supprimer (c), le nombre de copies à 0, le pod est supprimé reconstruit dans l'identification du réseau du pod n'est pas Change, la topologie du pod le statut est fixé en fonction du "nom + numéro" du pod, et une entrée d'accès fixe et unique est fournie pour chaque pod, c'est-à-dire l'enregistrement DNS
dig -t A nginx-svc.defaultcorrespondant au pod. svc.cluster. local @ 10.96.0.10
Comment StatefulSet maintient-il l'état de la topologie du pod via le service sans tête
4. État du stockage
La conception du PV et du PVC permet à StatefulSet de gérer l'état de stockage
apiVersion: v1
kind: Service
metadata:
name: nginx-svc
labels:
app: nginx
spec:
ports:
- port: 80
name: web
clusterIP: None
selector:
app: nginx
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
serviceName: "nginx-svc"
replicas: 2 #通过副本数扩容或删除
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: myapp:v1
ports:
- containerPort: 80
name: web
volumeMounts:
- name: www
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: www
spec:
storageClassName: managed-nfs-storage
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
La création de Pod est également effectuée strictement par ordre de nombre. Par exemple, avant que Web-0 n'entre dans l'état d'exécution et que Conditions soit Ready, Web-1 sera toujours à l'état En attente. Le
StatefulSet allouera et créera également un PVC avec le même numéro pour chaque Pod. De cette manière, kubernetes peut lier le PV correspondant à ce PVC via le mécanisme de volume persistant, afin de garantir que chaque pod a un volume indépendant
5. Utilisez statefullset pour déployer un cluster maître-esclave mysql
Reportez-vous à
StatefulSet
pour commencer par extraire l'image requise et la télécharger dans l'entrepôt local. Faites attention à l'emplacement de l'image lors de son utilisation.
Sauvegardez les données de la base de données principale via xtrabackup pour obtenir une base de données maître-esclave sur une seule ligne.