Reputation: 167
I'm learning Kubernetes at the moment. I learned first docker and made my own Dockerfiles and built my own images. It's a basic PHP application, which tries to connect to a MariaDB database via PDO and which invokes the phpinfo() function. So via docker-compose, it works fine. The next step for me is to run it in a Kubernetes cluster. I tried it in different ways and it doesn't work. I can't reach the index.php on my browser :(
PHP-Deployment:
apiVersion: apps/v1
kind: Deployment
metadata:
name: php-app-deployment
labels:
app: php-app
spec:
replicas: 2
selector:
matchLabels:
app: php-app
template:
metadata:
labels:
app: php-app
spec:
containers:
- name: php-app
image: amannti/my_php_image:1.2
ports:
- containerPort: 80
PHP-Service:
kind: Service
apiVersion: v1
metadata:
name: php-app-service
spec:
selector:
app: php-app
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 31000
type: NodePort
DB-Deployment:
apiVersion: apps/v1
kind: Deployment
metadata:
name: db-deployment
labels:
app: db
spec:
replicas: 1
selector:
matchLabels:
app: db
template:
metadata:
labels:
app: db
spec:
containers:
- name: db
image: amannti/carpool_maria_db:1.1
ports:
- containerPort: 3306
DB-Service:
kind: Service
apiVersion: v1
metadata:
name: db-service
spec:
selector:
app: db
ports:
- protocol: TCP
port: 3306
targetPort: 3306
I deployed all files on my minikube cluster with kubectl apply -f fileName.
The php application only contains this code:
<?php
$servername = "oldcarpoolsystem_db_1";
$username = "root";
$password = "root";
$dbName = "carpoolSystem";
try {
$conn = new PDO("mysql:host=$servername;dbname=" . $dbName,
$username, $password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "PDO: Connected successfully<br>";
}
catch(PDOException $e) {
echo "PDO: Connection failed: " . $e->getMessage() . "<br>";
}
phpinfo();
The database only contains few tables and is named carpoolSystem.
I tried to connect via http://127.0.0.1:31000/ to my website. But it says "connection refused" :( On Kubernetes dashboard all services run, but on deployments, pods and replica set the DB part don't run. In pods it says "Waiting: CrashLoopError".
What are my mistakes, what can I learn by this fail?
The whole application runs perfectly with this docker-compose file:
version: '3'
services:
db:
image: amannti/carpool_maria_db:1.1
environment:
MYSQL_ROOT_PASSWORD: root
ports:
- "3306:3306" #Left Container | Right Output
web:
image: amannti/my_php_image:1.2
container_name: php_web
depends_on:
- db
ports:
- "80:80"
In the minikube dashboard all deployments, pods and the rest are green... But I have still no access to my application because of connection is refused :/ I tried to access via : (http://127.0.0.1:31000/), but still the same response. Any ideas how to troubleshoot it?
Dockerfile DB:
FROM mariadb/server:latest
COPY dump.sql /docker-entrypoint-initdb.d/
Dockerfile PHP:
# This Dockerfile uses the first version of my php image
FROM amannti/my_php_image:1.0
# Copy app's source code to the /src directory
COPY ./src /var/www/html
# The source directory will be the working directory
WORKDIR /
Upvotes: 2
Views: 1146
Reputation: 11436
You should check on what IP is your minikube configured and use it instead of localhost.
This can be checked in dashboard
following Cluster > Nodes > minikube
path, or using this command minikube ip
and this should be used to check if service is working.
I also strongly advice to check Set up Ingress on Minikube with the NGINX Ingress Controller.
Upvotes: 1
Reputation: 340
If you do a kubectl describe pod <YOUR DB POD>
you'll see a bit more informations on why the pod is crashing.
If that's not enough, try kubectl logs <YOUR DB POD>
, you'll have logs with all errors and warning.
Upvotes: 1