在 Kubernetes 集群上部署 PHP / MySQL网络应用

2024-05-13 渥太华微生活

kubernetes-mysql-operator.png

在 Kubernetes 集群上部署 PHP / MySQL网络应用


一、配置和部署 MySQL:

1、部署持久卷PV和PVC:

1)创建 mysql-pv.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: mysql-pv
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/data"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pvc
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi

2)部署 mysql-pv.yaml

kubectl apply -f mysql-pv.yaml

3)检查部署状态

kubectl get pv
kubectl get pvc

2、部署secret和configmap:

1)创建 secret.yaml

apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  # root_password
  MYSQL_ROOT_PASSWORD: cm9vdF9wYXNzd29yZA==
  # my_user
  MYSQL_USER: bXlfdXNlcg==
  # my_password
  MYSQL_PASSWORD: bXlfcGFzc3dvcmQ=

2)创建 configmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: myconfigmap
data:
  MYSQL_DATABASE: my_db

3)部署 secret.yaml 和 configmap.yaml

kubectl apply -f secret.yaml -f configmap.yaml

4)检查部署状态

kubectl get secret
kubectl get configmap

3、部署 MySQL Pod和服务:

1)创建 mysql-deployment-service.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql-deployment
spec:
  selector:
    matchLabels:
      app: mysql
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - name: mysql-container
        image: mysql
        env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysecret
              key: MYSQL_ROOT_PASSWORD
        - name: MYSQL_USER
          valueFrom:
            secretKeyRef:
              name: mysecret
              key: MYSQL_USER
        - name: MYSQL_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysecret
              key: MYSQL_PASSWORD
        - name: MYSQL_DATABASE
          valueFrom:
            configMapKeyRef:
              name: myconfigmap
              key: MYSQL_DATABASE
        ports:
        - containerPort: 3306
          name: mysql
        volumeMounts:
        - name: mysql-storage
          mountPath: /var/lib/mysql
      volumes:
      - name: mysql-storage
        persistentVolumeClaim:
          claimName: mysql-pvc
---
apiVersion: v1
kind: Service
metadata:
  name: mysql-service
spec:
  selector:
    app: mysql
  ports:
  - port: 3306
    targetPort: 3306

2)部署 mysql-deployment-service.yaml

kubectl apply -f mysql-deployment-service.yaml

3)检查部署状态

kubectl get deployment
kubectl get pods
kubectl get service

二、配置和部署 PHP/Apache:

1、创建PHP网页

在项目根目录下,创建一个src文件夹,并创建一个名为index.php的PHP页面。

<?php
    echo 'start to connect to MySQL.<br>';

    $conn = new mysqli("mysql-service", "root", "root_password", "mysql");
    // Check connection
    if ($conn->connect_error) {
        echo "Failed to connect to MySQL: " . $conn->connect_error;
        exit();
    }

    $sql = "SELECT user FROM user";
    $result = $conn->query($sql);
    if ($result->num_rows > 0) {
            // output data of each row
            while($row = $result->fetch_assoc()) {
                    echo $row['user']."<br>";
            }
    } else {
            echo "0 results";
    }
    $conn->close();

2、创建Dockerfile

1)在根目录中创建apache.conf配置文件:

<VirtualHost *:80>
  DocumentRoot /var/www/html

  <Directory "/var/www/html">
    AllowOverride all
    Require all granted
  </Directory>

  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

2)在项目根目录下,创建一个名为 Dockerfile 的 docker 文件。

FROM php:8.2.18-apache
RUN docker-php-ext-install mysqli
EXPOSE 80
COPY ./src /var/www/html/
COPY ./apache.conf /etc/apache2/sites-available/000-default.conf
RUN chown -R www-data:www-data /var/www/html && a2enmod rewrite

3、构建镜像,并将其推送到 docker hub 中

1)为 html 应用程序构建镜像:

docker build -t mydockerid/kubernetes-php .

2)登录 docker hub 并将该镜像推送到 docker hub 中:

docker login
docker push mydockerid/kubernetes-php

4、创建部署和服务

1) 编写一个 YAML 文件 php-deployment-service.yaml,包括部署和服务。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deployment
  labels:
    app: myapp
spec:
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp-container
        image: mydockerid/kubernetes-php
        ports:
          - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: myapp-service
spec:
  selector:
    app: myapp
  type: NodePort
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
    nodePort: 30270

2) 使用以下命令创建部署。

kubectl apply -f php-deployment-service.yaml

3) 检查部署和服务是否创建成功。

kubectl get deployment
kubectl get pods
kubectl get service

三、访问网页进行测试:

现在您可以访问:

http://<节点IP地址>:30270

如果是本地服务器,可以访问:

localhost:30270

下面是访问页面。

2024-05-14_171704.jpg

二维码 | 渥太华微生活

编者注:新闻取自各大新闻媒体,新闻内容并不代表本网立场!文字和图片来自网络,版权归原作者所有。如有侵权,请速联系小编,立即删除。

242
全部评论 (0)
展开快速发表评论

科技专栏