Kubernetes部署php测试应用程序

时间:2019-10-16 09:36:17

标签: php docker kubernetes docker-compose mariadb

我现在正在学习Kubernetes。我首先学习了docker,并创建了自己的Dockerfile,并构建了自己的映像。这是一个基本的PHP应用程序,它尝试通过PDO连接到MariaDB数据库,并调用phpinfo()函数。因此,通过docker-compose,它可以正常工作。对我而言,下一步是在Kubernetes集群中运行它。我以不同的方式尝试了它,但是没有用。我无法在浏览器上到达index.php:(

PHP部署:

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服务

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 

数据库部署:

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

数据库服务:

kind: Service 
apiVersion: v1 
metadata: 
  name: db-service 
spec: 
  selector: 
    app: db 
  ports: 
  - protocol: TCP 
    port: 3306 
    targetPort: 3306

我使用 kubectl apply -f fileName 将所有文件部署在minikube集群上。

php应用程序仅包含以下代码:

<?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();

该数据库仅包含几个表,并被命名为carpoolSystem。

我试图通过 http://127.0.0.1:31000/ 连接到我的网站。但它说“连接被拒绝” :( 在Kubernetes仪表板上,所有服务都运行,但是在部署,pod和副本集上,数据库部分不运行。在广告连播中显示“正在等待:CrashLoopError”。

我有什么错误,这次失败我能学到什么?

整个应用程序使用此docker-compose文件完美运行:

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"

更新

在minikube仪表板中,所有部署,pod和其余的都是绿色的...但是由于连接被拒绝,我仍然无法访问我的应用程序://我尝试通过:(http://127.0.0.1:31000/)访问,但是还是一样的反应。任何想法如何解决它?

PHP App Service


更新

Dockerfile数据库:

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 /

2 个答案:

答案 0 :(得分:1)

如果您执行kubectl describe pod <YOUR DB POD>,将会看到有关吊舱崩溃原因的更多信息。

如果这还不够,请尝试kubectl logs <YOUR DB POD>,您将获得所有错误和警告的日志。

答案 1 :(得分:0)

您应该检查minikube配置了哪些IP,并使用它代替localhost。

可以在dashboard路径后的Cluster > Nodes > minikube中进行检查,也可以使用此命令minikube ip进行检查,这应该用于检查服务是否正常工作。

我也强烈建议您检查Set up Ingress on Minikube with the NGINX Ingress Controller