• 在k8s上部署第一个php应用


    一.搭建nginx+php

    1.站点配置文件

    1.1创建nginx-configmap.yaml

    [root@master 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

    [root@master 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

    [root@master 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

    [root@master]# cat mysql-service.yaml
    apiVersion: v1
    kind: Service
    metadata:
      name: mysql-service
      namespace: default
    spec:
      ports:
      - protocol: TCP
        port: 3306
        targetPort: 3306
    
    [root@master]#kubectl create -f mysql-service.yaml
    

      

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

    [root@master]# 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
    
    [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

    应该输出连接成功

  • 相关阅读:
    安装黑苹果的config.plist
    navicat for mysql 导出数据的坑
    js中的深层复制
    js写的一个HashMap
    js前台数据校验
    nginx对上传文件大小的限制
    tomcat用户配置,内存配置,pid配置
    redis安装及使用
    程序端口被占用分析
    zookeeper+dubbo-admin开发dubbo应用
  • 原文地址:https://www.cnblogs.com/itfenqing/p/10127145.html
Copyright © 2020-2023  润新知