Я согласен со всеми предыдущими ответами.Я просто пытаюсь сделать вещи проще, выполнив одну команду.
Во-первых, создайте необходимые манифесты для redis в файле скажем redis.yaml
и сервис для его показа снаружи.
apiVersion: v1
kind: Service
metadata:
name: redis
labels:
app: node-redis
spec:
ports:
- name: redis
port: 6379
targetPort: 6379
type: NodePort
selector:
app: node-redis
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis
spec:
selector:
matchLabels:
app: node-redis
replicas: 1
template:
metadata:
labels:
app: node-redis
spec:
containers:
- name: redis
image: redis:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 6379
# data volume where redis writes data
volumeMounts:
- name: data
mountPath: /data
readOnly: false
volumes:
- name: data
persistentVolumeClaim:
claimName: redis-data
---
# data volume
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: redis-data
labels:
app: node-redis
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Mi
Затем поместите манифесты для вашего приложения в другом файле, скажем my-app.yaml
.Здесь я поместил поле громкости, чтобы вы могли использовать данные, которые хранятся в Redis.
apiVersion: v1
kind: Pod
metadata:
name: my-app
labels:
app: node-redis
spec:
containers:
- name: my-app
image: my-app:latest
ports:
- containerPort: 8080
# data volume from where my-app read data those are written by redis
volumeMounts:
- name: data
mountPath: /data
readOnly: false
volumes:
- name: data
persistentVolumeClaim:
claimName: redis-data
Теперь мы можем использовать следующий файл bash my-app.sh
.
#!/bin/bash
kubectl create -f redis.yaml
pod_name=$(kubectl get po -l app=node-redis | grep app-with-redis | awk '{print $1}')
# check whether redis server is ready or not
while true; do
pong=$(kubectl exec -it $pod_name -c redis redis-cli ping)
if [[ "$pong" == *"PONG"* ]]; then
echo ok;
break
fi
done
kubectl create -f my-app.yaml
Просто запуститеchmod +x my-app.sh; ./my-app.sh
для развертывания.Чтобы получить URL, запустите minikube service redis --url
.Вы также можете получить URL для вашего приложения.Единственное, вам нужен сервис типа nodePort
, чтобы приложение могло обращаться к нему из-за пределов кластера.
Итак, все в ваших руках.