分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 代码编程

在k8s上部署第一个php应用

发布时间:2023-09-06 02:26责任编辑:彭小芳关键词:暂无标签

一.搭建nginx+php

1.站点配置文件

1.1创建nginx-configmap.yaml

[root@master k8s]# cat nginx-configmap.yamlapiVersion: v1kind: ConfigMapmetadata: ???name: nginx-configdata: ???default.conf: | ???????server { ???????????listen ??????80; ???????????server_name ?localhost; ???????????root ??/usr/share/nginx/html; ???????????access_log ?/var/log/nginx/host_access.log; ???????????error_log ?/var/log/nginx/host_error.log debug; ???????????location / { ???????????root ??/usr/share/nginx/html; ???????????index ?index.html index.htm index.php; ???????????} ???????????error_page ??500 502 503 504 ?/50x.html; ???????????location = /50x.html { ???????????root ??/usr/share/nginx/html; ???????????} ???????????location ~ \.php$ { ???????????root ??/usr/share/nginx/html; ???????????fastcgi_pass ??10.254.235.214:9000; ???????????fastcgi_index ?index.php; ???????????fastcgi_param ?SCRIPT_FILENAME ?$document_root$fastcgi_script_name; ???????????include ???????fastcgi_params; ???????????} ???????????}

  

ps:
10.254.235.214: 是下文中配置的php-service服务的集群ip

1.2 应用该配置文件

#kubectl create -f nginx-configmap.yaml

  

2.nginx

2.1创建nginx-deployment.yaml

[root@master k8s]# cat nginx-deployment.yamlapiVersion: v1kind: Servicemetadata: ???name: nginx-servicespec: ???type: NodePort ???selector: ???????app: nginx ???ports: ???????- protocol: TCP ?????????port: 80 ?????????targetPort: 80---apiVersion: extensions/v1beta1kind: Deploymentmetadata: ???name: nginx-deploymentspec: ???selector: ???????matchLabels: ???????????app: nginx ???template: ???????metadata: ???????????labels: ???????????????app: nginx ???????spec: ???????????containers: ???????????????- name: nginx ?????????????????image: nginx:alpine ?????????????????volumeMounts: ?????????????????????- name: nginx-config ???????????????????????mountPath: /etc/nginx/conf.d ?????????????????????- name: web-root ???????????????????????mountPath: /usr/share/nginx/html ???????????volumes: ???????????????- name: nginx-config ?????????????????configMap: ?????????????????????name: nginx-config ???????????????- name: web-root ?????????????????nfs: ?????????????????????server: 192.168.2.17 ?????????????????????path: /data/nfs

  

ps:请提前搭建好nfs环境,nfs中的server为局域网ip

2.2 应用该配置文件

#kubectl create -f nginx-configmap.yaml

ps:
因为使用了NodePort类型,现在你可以在外部通过任意节点服务器ip+端口访问到nginx服务
你可以可以通过pod上的ip来访问到nginx服务

3.php

3.1 php-deployment.yaml

[root@master k8s]# cat php-deployment.yamlapiVersion: v1kind: Servicemetadata: ???name: php-servicespec: ???clusterIP: 10.254.235.214 ???selector: ???????app: php ???ports: ???????- name: php ?????????port: 9000 ?????????targetPort: 9000---apiVersion: extensions/v1beta1kind: Deploymentmetadata: ???name: php-deploymentspec: ???replicas: 1 ???selector: ???????matchLabels: ???????????app: php ???template: ???????metadata: ???????????labels: ???????????????app: php ???????spec: ???????????containers: ???????????????- name: php ?????????????????image: php:7.2-fpm ?????????????????volumeMounts: ?????????????????????- name: web-root ???????????????????????mountPath: /usr/share/nginx/html ???????????volumes: ???????????????- name: web-root ?????????????????nfs: ?????????????????????server: 192.168.2.17 ?????????????????????path: /data/nfs

  

3.2 应用该配置文件

#kubectl create -f php-configmap.yaml

  

二.创建mysql服务

1.一般我们将数据库放在单独的物理服务器上或另一个集群上,我们创建一个mysql-service.yaml

[root@master]# cat mysql-service.yamlapiVersion: v1kind: Servicemetadata: ?name: mysql-service ?namespace: defaultspec: ?ports: ?- protocol: TCP ???port: 3306 ???targetPort: 3306[root@master]#kubectl create -f mysql-service.yaml

  

2.创建同名的endpoint,这样子service可以使用endpoint

[root@master]# cat mysql-endpoint.yamlapiVersion: v1kind: Endpointsmetadata: ?name: mysql-service ?namespace: defaultsubsets:- addresses: ?- ip: 192.168.2.10 ?ports: ?- port: 3306 ???protocol: TCP[root@master]#kubectl create -f mysql-endpoint.yaml

  

三.应用程序文件

1.一个简单的php程序文件:

[root@master]#cat b.php<?php$dbms=‘mysql‘;$host= getenv(‘MYSQL_SERVICE_SERVICE_HOST‘); // 获得环境变量,对应php-service;可以进入pod容器内使用env查看$dbName=‘test‘;$user=‘test‘; $pass=‘1983512gx‘;$dsn="$dbms:host=$host;dbname=$dbName";try { ???$dbh = new PDO($dsn, $user, $pass); ????echo "连接成功<br/>"; ???$dbh = null;} catch (PDOException $e) { ???die ("Error!: " . $e->getMessage() . "<br/>");}

  

2.运行该文件,提示

Error!: could not find driver
这是因为用到了pdo,但php-fpm2镜像并没有这个扩展

3.安装php-pdo扩展(更好的办法是你应该制作一个运行php环境的容器)

kubectl exec -it php-deployment-3540934081-75sqv -- /usr/local/bin/docker-php-ext-install pdo_mysql

  

4.重启节点上对应的php 容器

docker restart 4cf7949cfc30

ps:
实际操作中在容器内无法连同service,重启了节点的docker才可以.

四.访问

在任意节点上或master上访问

#curl http://192.168.2.18:31746/b.php

应该输出连接成功

在k8s上部署第一个php应用

原文地址:https://www.cnblogs.com/itfenqing/p/10127145.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved