Annuaire d'articles
1. Introduction au contrôleur ReplicaSet
Documents de référence officiels chinois :
ReplicaSet est un objet de ressource dans k8s, abrégé rs
, utilisé pour gérer le nombre de copies de pod et l'état de santé. Dans spec.replicas
le champ, vous pouvez définir le nombre de copies de pod. ReplicaSet conservera toujours le nombre de pods au nombre spécifié . Lorsque le En plus des pods supplémentaires, lorsque le nombre de pods est inférieur au nombre de répliques, des pods seront automatiquement créés pour maintenir le nombre de répliques. , ReplicaSet surveillera également l'état de santé des pods. Si un pod tombe en panne, ReplicaSet le remplacera automatiquement .
Les caractéristiques de ReplicaSet sont les suivantes :
- Gestion automatisée : ReplicaSet peut automatiquement créer, supprimer et mettre à jour des copies de pod pour garantir que le nombre spécifié de copies de pod est toujours en cours d'exécution.
- Bilan de santé : ReplicaSet vérifie périodiquement l'état de santé des pods et redémarre ou remplace les pods défectueux si nécessaire.
- Extension horizontale : en augmentant ou en diminuant le nombre de copies de pod, l'application peut être mise à l'échelle horizontalement pour répondre aux différentes exigences de charge.
- Sélecteur : un ReplicaSet utilise un sélecteur d'étiquettes pour sélectionner les répliques de pod à gérer.
- Gestion avec état : ReplicaSet peut gérer des applications avec état, telles que des bases de données, pour assurer la cohérence et la disponibilité des données.
- Mise à jour : les mises à jour progressives ne sont pas prises en charge et les anciens pods doivent être supprimés manuellement pour mettre en œuvre les mises à jour .
Explication des champs communs de ReplicaSet :
apiVersion: apps/v1 # RS版本
kind: ReplicaSet # 定义RS资源类型
metadata: # RS元数据
name: nginx-replicaset # RS名称
namespace: default # RS命名空间
labels: # RS标签
app: web
env: uat
spec:
replicas: 3 # 关联Pod副本数量
selector:
matchLabels: # 关联具有app=web的Pod
app: web
template: # Pod模板
metadata: # Pod元数据
namespace: default # Pod命名空间
labels: # Pod标签
app: web
env: uat
spec:
containers: # Pod定义容器
- name: web-nginx # 容器名称
image: nginx # 容器使用镜像
imagePullPolicy: IfNotPresent # 容器镜像下载策略
ports:
- containerPort: 80 # 容器内端口
Deux, boîtier ReplicaSet
1. Cas d'expansion et de contraction de copie de pod
spec.replicas
Développez et réduisez dynamiquement en modifiant la valeur, utilisez nginx
le miroir pour définir le nombre de copies 3
et ajoutez quelques détections nécessaires, comme suit :
cat replicaset.yaml
---
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: nginx-replicaset
namespace: default
labels:
app: web
spec:
replicas: 3
selector:
matchLabels:
app: web
template:
metadata:
namespace: default
labels:
app: web
spec:
containers:
- name: web-nginx
image: nginx:1.18.0
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
startupProbe:
tcpSocket:
port: 80
livenessProbe:
httpGet:
path: /index.html
port: 80
readinessProbe:
httpGet:
path: /index.html
port: 80
Exécutez le fichier YAML :
kubectl apply -f replicaset.yaml
Vérifiez l'état du Pod et du RS, s'il est créé et normal :
kubectl get rs,pod -l app=web
Lorsque nous supprimons un pod, RS le crée automatiquement pour nous et RS maintient toujours le nombre de pods à 3. La commande de suppression est la suivante :
kubectl delete pod nginx-replicaset-7mh2r
Augmentez dynamiquement le nombre de copies et mettez à jour le nombre de copies à 5 :
Réappliquez le fichier YAML :
kubectl apply -f replicaset.yaml
Vérification, le nombre de Pods :
kubectl get pod -l app=web
La réduction est la même opération, changez simplement la valeur des répliques et appliquez à nouveau, ce qui est omis ici.
2. Cas de version de mise à jour du pod
L'adresse de téléchargement d'image requise
ReplicaSet ne prend pas en charge les mises à jour dynamiques et ne peut être supprimé qu'en supprimant les anciens pods. La démonstration de cas est la suivante :
web:v1
Créer une ressource ReplicaSet à l'aide de la mise en miroir
cat replicaset.yaml
---
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: nginx-replicaset
namespace: default
labels:
app: web
spec:
replicas: 3
selector:
matchLabels:
app: web
template:
metadata:
namespace: default
labels:
app: web
spec:
containers:
- name: web-nginx
image: web:v1 # V1 镜像
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
fichier exécutable:
kubectl apply -f replicaset.yaml
kubectl get pod -l app=web
Vérifiez l'adresse PodIP et visitez :
kubectl describe pod nginx-replicaset-wht6q|grep IP
Basé sur la mise à jour ci-dessus utilisant web:v2
le miroir :
Modifiez le fichier YAML ci-dessus et modifiez uniquement la version miroir comme indiqué ci-dessous :
fichier exécutable:
kubectl apply -f replicaset.yaml
kubectl get pod -l app=web
Notez qu'à ce stade, le contenu renvoyé par curl Pod est toujours le contenu de l'ancienne version du Pod. Vous devez supprimer manuellement les anciennes ressources du Pod. RS créera automatiquement le Pod, et le Pod créé automatiquement utilisera le nouveau image .
Pour supprimer un pod, supprimez-le en fonction du nom de votre pod d'environnement actuel :
kubectl delete pod nginx-replicaset-ff5pl nginx-replicaset-rvr9k nginx-replicaset-wht6q
Après la suppression, RS sera créé automatiquement, vérifiez le nouveau Pod :
kubectl get pod -l app=web
Accéder aux modules :