Kubernetes pod/deploy/sts/ds example
March 4, 2023
Deployment/Pod/Statefulset c PV emptyDir
Для создания таких ресурсов можно использовать следующие манифесты.
cat <<EOF | kubectl apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:
name: cam-nginx
namespace: default
labels:
env: prod
annotations:
author: cameda
spec:
replicas: 3
selector:
matchLabels:
app: nginx
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
type: RollingUpdate
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: cam-nginx
image: nginx:latest
imagePullPolicy: IfNotPresent
resources:
requests:
cpu: 250m
memory: 300Mi
limits:
memory: 300Mi
ports:
- containerPort: 80
- containerPort: 443
livenessProbe:
failureThreshold: 3
successThreshold: 1
httpGet:
path: /
port: 80
periodSeconds: 10
timeoutSeconds: 5
initialDelaySeconds: 20
readinessProbe:
failureThreshold: 3
successThreshold: 1
exec:
command:
- curl
- http://127.0.0.1:80
periodSeconds: 10
timeoutSeconds: 5
initialDelaySeconds: 20
volumeMounts:
- name: cameda-volume
mountPath: /cameda
restartPolicy: Always
volumes:
- name: cameda-volume
emptyDir: {}
EOFПроверяем, что все загрузилось:
kubectl get deploy NAME READY UP-TO-DATE AVAILABLE AGE cam-nginx 3/3 3 3 48m
Все 3 реплики пода создались и находятся в Ready.
kubectl get po
kubectl describe po pod_name.
Видим там, что все успешно примонтировалось:
Mounts:
/cameda from cameda-volume (rw)
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-ptbcq (ro)
Volumes:
cameda-volume:
Type: EmptyDir (a temporary directory that shares a pod's lifetime)
Зайдем в под и убедимся, что в примонтированную директорию можно записать информацию:
kubectl exec --stdin --tty cam-nginx-pod -- /bin/bash cd /cameda && touch file && ls
Запись проводится. Все в порядке.
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
name: cameda-nginx
namespace: default
labels:
app: nginx
annotations:
author: cameda
spec:
containers:
- name: cameda-nginx
image: nginx:latest
imagePullPolicy: IfNotPresent
resources:
requests:
cpu: 300m
memory: 500Mi
limits:
memory: 800Mi
ports:
- containerPort: 80
- containerPort: 443
livenessProbe:
failureThreshold: 3
successThreshold: 1
httpGet:
path: /
port: 80
periodSeconds: 10
timeoutSeconds: 5
initialDelaySeconds: 20
readinessProbe:
failureThreshold: 3
successThreshold: 1
exec:
command:
- curl
- http://127.0.0.1:80
periodSeconds: 10
timeoutSeconds: 5
initialDelaySeconds: 20
volumeMounts:
- name: dir-volume
mountPath: /dir
restartPolicy: OnFailure
volumes:
- name: dir-volume
emptyDir: {}
EOFcat <<EOF | kubectl apply -f -
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: cam-redis
namespace: default
labels:
app: redis
annotations:
author: cameda
spec:
serviceName: cam-redis
replicas: 1
selector:
matchLabels:
app: cam-redis
template:
metadata:
labels:
app: cam-redis
spec:
containers:
- name: redis
image: redis:latest
imagePullPolicy: IfNotPresent
resources:
requests:
cpu: 1
memory: 1Gi
limits:
memory: 2Gi
ports:
- containerPort: 6379
- containerPort: 26379
- containerPort: 80
volumeMounts:
- name: cameda-volume
mountPath: /cameda
restartPolicy: Always
volumes:
- name: cameda-volume
emptyDir: {}
EOFMarch 4, 2023, 09:11
0 views
0 reposts