186 lines
6.5 KiB
Markdown
186 lines
6.5 KiB
Markdown
|
|
#### 1. Basic Redis StatefulSet
|
|
|
|
This StatefulSet is configured to run Redis instances in the `my-ns` namespace with 3 replicas.
|
|
|
|
```yaml
|
|
apiVersion: apps/v1
|
|
kind: StatefulSet
|
|
metadata:
|
|
name: redis
|
|
namespace: my-ns
|
|
labels:
|
|
app.kubernetes.io/name: redis
|
|
spec:
|
|
replicas: 3
|
|
selector:
|
|
matchLabels:
|
|
app.kubernetes.io/name: redis
|
|
template:
|
|
metadata:
|
|
labels:
|
|
app.kubernetes.io/name: redis
|
|
spec:
|
|
containers:
|
|
- name: redis
|
|
image: redis
|
|
```
|
|
- `apiVersion: apps/v1`: Specifies the API version.
|
|
- `kind: StatefulSet`: Defines the object as a StatefulSet.
|
|
- `metadata`: Provides metadata for the StatefulSet.
|
|
- `name`: The name of the StatefulSet (`redis`).
|
|
- `namespace`: The namespace where the StatefulSet will be created (`my-ns`).
|
|
- `labels`: Key-value pairs to categorize the StatefulSet.
|
|
- `spec`: Describes the desired state.
|
|
- `replicas`: Number of pod replicas (3).
|
|
- `selector`: Identifies the pods managed by this StatefulSet.
|
|
- `matchLabels`: Matches pods with the label `app.kubernetes.io/name: redis`.
|
|
- `template`: The pod template used by the StatefulSet.
|
|
- `metadata`: Metadata for the pod template.
|
|
- `labels`: Labels applied to the pods (`app.kubernetes.io/name: redis`).
|
|
- `spec`: Describes the pod specification.
|
|
- `containers`: Defines the containers within the pod.
|
|
- `name`: The name of the container (`redis`).
|
|
- `image`: The container image (`redis`).
|
|
|
|
#### 2. Redis StatefulSet with Volume
|
|
|
|
This StatefulSet is similar to the first one but includes persistent volume claims (PVCs) to ensure data persistence.
|
|
|
|
```yaml
|
|
apiVersion: apps/v1
|
|
kind: StatefulSet
|
|
metadata:
|
|
name: redis
|
|
namespace: my-ns
|
|
labels:
|
|
app.kubernetes.io/name: redis
|
|
spec:
|
|
replicas: 3
|
|
selector:
|
|
matchLabels:
|
|
app.kubernetes.io/name: redis
|
|
template:
|
|
metadata:
|
|
labels:
|
|
app.kubernetes.io/name: redis
|
|
spec:
|
|
containers:
|
|
- name: redis
|
|
image: redis
|
|
volumeMounts:
|
|
- name: redis-data
|
|
mountPath: /var/lib/redis
|
|
volumeClaimTemplates:
|
|
- metadata:
|
|
name: redis-data
|
|
spec:
|
|
accessModes:
|
|
- "ReadWriteOnce"
|
|
resources:
|
|
requests:
|
|
storage: 1Gi
|
|
```
|
|
- `apiVersion: apps/v1`: Specifies the API version.
|
|
- `kind: StatefulSet`: Defines the object as a StatefulSet.
|
|
- `metadata`: Provides metadata for the StatefulSet.
|
|
- `name`: The name of the StatefulSet (`redis`).
|
|
- `namespace`: The namespace where the StatefulSet will be created (`my-ns`).
|
|
- `labels`: Key-value pairs to categorize the StatefulSet.
|
|
- `spec`: Describes the desired state.
|
|
- `replicas`: Number of pod replicas (3).
|
|
- `selector`: Identifies the pods managed by this StatefulSet.
|
|
- `matchLabels`: Matches pods with the label `app.kubernetes.io/name: redis`.
|
|
- `template`: The pod template used by the StatefulSet.
|
|
- `metadata`: Metadata for the pod template.
|
|
- `labels`: Labels applied to the pods (`app.kubernetes.io/name: redis`).
|
|
- `spec`: Describes the pod specification.
|
|
- `containers`: Defines the containers within the pod.
|
|
- `name`: The name of the container (`redis`).
|
|
- `image`: The container image (`redis`).
|
|
- `volumeMounts`: Mounts the specified volume to `/var/lib/redis`.
|
|
- `name`: The name of the volume (`redis-data`).
|
|
- `mountPath`: The path to mount the volume (`/var/lib/redis`).
|
|
- `volumeClaimTemplates`: Defines the PVCs for the StatefulSet.
|
|
- `metadata`: Metadata for the PVC.
|
|
- `name`: The name of the PVC (`redis-data`).
|
|
- `spec`: Describes the PVC specification.
|
|
- `accessModes`: Access mode for the PVC (`ReadWriteOnce`).
|
|
- `resources`: Resource requests for the PVC.
|
|
- `requests`: Storage request (1Gi).
|
|
|
|
#### 3. Web StatefulSet with Volume
|
|
|
|
This StatefulSet runs NGINX instances with persistent storage.
|
|
|
|
```yaml
|
|
apiVersion: apps/v1
|
|
kind: StatefulSet
|
|
metadata:
|
|
name: web
|
|
spec:
|
|
selector:
|
|
matchLabels:
|
|
app: nginx # has to match .spec.template.metadata.labels
|
|
serviceName: "nginx"
|
|
replicas: 3 # by default is 1
|
|
minReadySeconds: 10 # by default is 0
|
|
template:
|
|
metadata:
|
|
labels:
|
|
app: nginx # has to match .spec.selector.matchLabels
|
|
spec:
|
|
terminationGracePeriodSeconds: 10
|
|
containers:
|
|
- name: nginx
|
|
image: registry.k8s.io/nginx-slim:0.8
|
|
ports:
|
|
- containerPort: 80
|
|
name: web
|
|
volumeMounts:
|
|
- name: www
|
|
mountPath: /usr/share/nginx/html
|
|
volumeClaimTemplates:
|
|
- metadata:
|
|
name: www
|
|
spec:
|
|
accessModes: [ "ReadWriteOnce" ]
|
|
storageClassName: "my-storage-class"
|
|
resources:
|
|
requests:
|
|
storage: 1Gi
|
|
```
|
|
- `apiVersion: apps/v1`: Specifies the API version.
|
|
- `kind: StatefulSet`: Defines the object as a StatefulSet.
|
|
- `metadata`: Provides metadata for the StatefulSet.
|
|
- `name`: The name of the StatefulSet (`web`).
|
|
- `spec`: Describes the desired state.
|
|
- `selector`: Identifies the pods managed by this StatefulSet.
|
|
- `matchLabels`: Matches pods with the label `app: nginx`.
|
|
- `serviceName`: The name of the service that governs this StatefulSet (`nginx`).
|
|
- `replicas`: Number of pod replicas (3).
|
|
- `minReadySeconds`: Minimum time for pods to be ready (10 seconds).
|
|
- `template`: The pod template used by the StatefulSet.
|
|
- `metadata`: Metadata for the pod template.
|
|
- `labels`: Labels applied to the pods (`app: nginx`).
|
|
- `spec`: Describes the pod specification.
|
|
- `terminationGracePeriodSeconds`: Time for the pod to terminate gracefully (10 seconds).
|
|
- `containers`: Defines the containers within the pod.
|
|
- `name`: The name of the container (`nginx`).
|
|
- `image`: The container image (`registry.k8s.io/nginx-slim:0.8`).
|
|
- `ports`: Container ports.
|
|
- `containerPort`: The container port (80).
|
|
- `name`: The name of the port (`web`).
|
|
- `volumeMounts`: Mounts the specified volume to `/usr/share/nginx/html`.
|
|
- `name`: The name of the volume (`www`).
|
|
- `mountPath`: The path to mount the volume (`/usr/share/nginx/html`).
|
|
- `volumeClaimTemplates`: Defines the PVCs for the StatefulSet.
|
|
- `metadata`: Metadata for the PVC.
|
|
- `name`: The name of the PVC (`www`).
|
|
- `spec`: Describes the PVC specification.
|
|
- `accessModes`: Access mode for the PVC (`ReadWriteOnce`).
|
|
- `storageClassName`: The storage class name (`my-storage-class`).
|
|
- `resources`: Resource requests for the PVC.
|
|
- `requests`: Storage request (1Gi).
|
|
|