Fondamentalement, j'ai un déploiement qui crée 3 conteneurs qui évoluent automatiquement: PHP-FPM, NGINX et le conteneur qui contient l'application, tous configurés avec des secrets, des services et des entrées. L'application partage également le projet entre PHP-FPM et NGINX, donc tout est configuré.
Comme je veux explorer davantage avec K8s, j'ai décidé de créer un pod avec Redis qui monte également un disque persistant (mais ce n'est pas important). J'ai également créé un service pour redis et tout fonctionne parfaitement bien si je SSH dans le conteneur Redis et exécutez redis-cli
.
La partie amusante est que le projet ne peut pas se connecter au pod sur lequel Redis est activé. Je comprends que les conteneurs entre les pods partagent le même réseau "local" et qu'ils sont accessibles en utilisant localhost
.
Comment connecter mon projet au serveur redis qui s'exécute dans un autre pod, qui évolue indépendamment? Quel est le problème avec le service Redis?
Mon service Redis est le suivant:
apiVersion: v1
kind: Service
metadata:
name: redis-service
spec:
ports:
- port: 6379
targetPort: 6379
selector:
app: redis
Mon pod Redis est alimenté par un fichier de configuration de déploiement (je ne le fais pas nécessairement évoluer, mais j'attendrai avec impatience):
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis
labels:
app: redis
spec:
selector:
matchLabels:
app: redis
strategy:
type: Recreate
template:
metadata:
labels:
app: redis
spec:
volumes:
- name: redis-persistent-volume
persistentVolumeClaim:
claimName: redis-pvc
containers:
- image: redis:4.0.11
command: ['redis-server']
name: redis
imagePullPolicy: Always
resources:
limits:
cpu: 250m
memory: 512Mi
requests:
cpu: 250m
memory: 512Mi
ports:
- containerPort: 6379
name: redis
volumeMounts:
- name: redis-persistent-volume
mountPath: /data
De plus, lorsque je puise dans le kubectl get service
, le serveur Redis a une IP de cluster:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 21h
nginx-service NodePort 10.100.111.16 <none> 80:30312/TCP 21h
redis-service ClusterIP 10.99.80.141 <none> 6379/TCP 6s
Si vous utilisez MicroK8s , alors consultez leur documentation
J'ai eu du mal à communiquer avec un pod d'un autre, et l'autre chose qui n'a pas fonctionné comme prévu était de communiquer avec les services en utilisant leur nom (la recherche DNS semblait ne pas être en mesure de traduire le nom du service en IP).
Dans tous les cas, il y avait quelques étapes pertinentes dans la documentation MicroK8s que je devais exécuter et puis tout a soudainement commencé à fonctionner.
Assurez-vous également que vous avez réellement installé le service DNS MicroK8s:
microk8s.enable dns
Veuillez vous référer à la documentation MicroK8s pour la dernière version, mais voici les étapes à partir d'aujourd'hui: