2024-05-13 渥太华微生活
在 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
下面是访问页面。
编者注:新闻取自各大新闻媒体,新闻内容并不代表本网立场!文字和图片来自网络,版权归原作者所有。如有侵权,请速联系小编,立即删除。
全部评论 (0) |
---|