在k8s上部署第一个php应用

一.搭建nginx+php

1.站点配置文件

1.1创建nginx-configmap.yaml

[[email protected] k8s]# cat nginx-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
    name: nginx-config
data:
    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

[[email protected] k8s]# cat nginx-deployment.yaml
apiVersion: v1
kind: Service
metadata:
    name: nginx-service
spec:
    type: NodePort
    selector:
        app: nginx
    ports:
        - protocol: TCP
          port: 80
          targetPort: 80
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
    name: nginx-deployment
spec:
    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

[[email protected] k8s]# cat php-deployment.yaml
apiVersion: v1
kind: Service
metadata:
    name: php-service
spec:
    clusterIP: 10.254.235.214
    selector:
        app: php
    ports:
        - name: php
          port: 9000
          targetPort: 9000
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
    name: php-deployment
spec:
    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

[[email protected]]# cat mysql-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: mysql-service
  namespace: default
spec:
  ports:
  - protocol: TCP
    port: 3306
    targetPort: 3306

[[email protected]]#kubectl create -f mysql-service.yaml

  

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

[[email protected]]# cat mysql-endpoint.yaml
apiVersion: v1
kind: Endpoints
metadata:
  name: mysql-service
  namespace: default
subsets:
- addresses:
  - ip: 192.168.2.10
  ports:
  - port: 3306
    protocol: TCP

[[email protected]]#kubectl create -f mysql-endpoint.yaml

  

三.应用程序文件

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

[[email protected]]#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

应该输出连接成功

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

时间: 2024-10-30 14:13:50

在k8s上部署第一个php应用的相关文章

虚拟机评估——如何确定一个CPU核上部署的虚拟机数量?

最近研究虚拟化技术,不可避免遇到一个问题:如何评估物理主机上虚拟主机的容量?下面这篇文章的思路有一定的启发性,转发一下. 如何确定一个CPU核上部署的虚拟机数量? 摘要:本文说明一个CPU核上部署虚拟机的理想数量. 用户经常会问我这样一个问题,“在一个CPU核上部署虚拟机的理想数量是多少?”我试图从下面两个答案中其中一方面回答:要么用户基于业内测试实例做出决定,要么基于他们自己的桌面PC机来验证性能.评估CPU需求量. 用业内标准来评判,一个3.0GHz四核心双CPU的服务器通常可以负载的虚拟机

K8S CoreDNS部署失败,发现的一个问题

K8S CoreDNS部署失败,查看错误日志,提示如下 root >> kubectl get all --all-namespaces -o wide root >> kubectl logs -f coredns-56f56989d6-krs6h -n kube-system 错误提示,如下: Failed to list *v1.Namespace: Get https://10.3.0.1:443/api/v1/namespaces?limit=500&resour

部署第一个servlet应用到tomcat上

部署第一个servlet应用到tomcat上 搭建环境 eclipse的EE版本 eclipse官网 创建一个java的应用程序 1.File->new java project 导入servlet包 右键点击项目 -> properties -> Java Build Path ->Libraries -> Add External JARs servlet.jar包的下载地址 链接:https://pan.baidu.com/s/17aJimvcbiip9E6M-vM6S

教你如何在WINDOWS Server2003上部署一个Asp.Net的网站

对于许多新手来说,如何在服务器上部署网站并不了解,这个教程希望对新手有帮助. 1.IIS服务器 2..Net Framework3.5 (方便起见,我们这里Framework说的都是指的这个版本) 这两个软件都需要我们自己手动操作安装到服务器里面.那到底是先装哪一个呢,为了方便起见,一般我们都先安装IIS服务器,然后再安装Framework. 当然偶也遇到过几次部署人员先安装了Framework再安装IIS服务器的,这样的操作步骤就会导致Framework不会被注册进IIS服务器里面.就是说在网

持续集成之应用k8s自动部署

原文:持续集成之应用k8s自动部署 持续集成之应用k8s自动部署 Intro 上次我们提到了docker容器化及自动化部署,这仅仅适合个人项目或者开发环境部署,如果要部署到生产环境,必然就需要考虑很多因素,比如访问量大了如何调整部署,如何更好的应对大并发的情况,如何不停机更新应用,如果想要将Docker应用于具体的业务实现,是存在困难的--编排.管理和调度等各个方面,都不容易.于是,人们迫切需要一套管理系统,对Docker及容器进行更高级更灵活的管理,于是 k8s 就出现了. K8S,就是基于容

k8s二进制部署

k8s二进制部署 1.环境准备 主机名 ip地址 角色 k8s-master01 10.0.0.10 master k8s-master02 10.0.0.11 master k8s-node01 10.0.0.12 node k8s-node02 10.0.0.13 node 初始化操作 关闭防火墙 关闭selinux 关闭swap 安装ntp使时间同步 配置域名解析 配置免密 k8s-master01 到其他机器. 安装docker 2.生成配置CFSSL CFFSL能够构建本地CA,生成后

Spark on K8S环境部署细节

Spark on K8S环境部署细节 sparkk8s time: 2020-1-3 Spark on K8S环境部署细节 Spark operator安装 准备kubectl客户端和Helm客户端 安装spark operator Spark wordcount 读写OSS 准备oss依赖的jar包 准备core-site.xml 打包支持读写oss的镜像 下载spark安装包解压 打包发布镜像 准备wordcount作业 1. spark submit 提交 2. spark operato

Linode VPS上部署类V2EX论坛应用Django forum

Django是Python Web比较著名的框架,很多有名的网站如Instagram都是利用该框架来搭建的.V2EX是一个界面简洁,功能丰富完整的论坛类型,基于Google APP Engine开发部署,部分源码尚未开源.网络上有很多模仿V2EX使用其它框架来开发部署的.今天记录下自己在Linode VPS上部署类V2EX Django应用. 登录Linode VPS账号 这里使用的是Ubuntu16.04LTS PuTTY远程登录Linode VPS主机 键入"Python",可以看

在LINUX上部署带有JAR包的JAVA项目

         在LINUX上部署带有JAR包的JAVA项目 首先eclipse上要装上一个小插件,叫做Fat Jar 点击Fat Jar 红框里选上主类点击Next 如图把勾打上 在该路径下找到jar包 通过ftp协议把jar包放在linux服务器下 进入到jar包路径 输入指令 java -jar XXX.jar 运行成功! 注意!!!!!!!!!!!!!!!! 当你断开服务器连接时,工程会停止! 所以要用下面的指令 指令:nohup java -jar XXX.jar 通过指令ps -e