一.搭建nginx+php

1.站点配置文件

1.1创建nginx-configmap.yaml

  1. [root@master k8s]# cat nginx-configmap.yaml
  2. apiVersion: v1
  3. kind: ConfigMap
  4. metadata:
  5. name: nginx-config
  6. data:
  7. default.conf: |
  8. server {
  9. listen 80;
  10. server_name localhost;
  11. root /usr/share/nginx/html;
  12. access_log /var/log/nginx/host_access.log;
  13. error_log /var/log/nginx/host_error.log debug;
  14. location / {
  15. root /usr/share/nginx/html;
  16. index index.html index.htm index.php;
  17. }
  18. error_page 500 502 503 504 /50x.html;
  19. location = /50x.html {
  20. root /usr/share/nginx/html;
  21. }
  22. location ~ \.php$ {
  23. root /usr/share/nginx/html;
  24. fastcgi_pass 10.254.235.214:9000;
  25. fastcgi_index index.php;
  26. fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  27. include fastcgi_params;
  28. }
  29. }

  

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

1.2 应用该配置文件

  1. #kubectl create -f nginx-configmap.yaml

  

2.nginx

2.1创建nginx-deployment.yaml

  1. [root@master k8s]# cat nginx-deployment.yaml
  2. apiVersion: v1
  3. kind: Service
  4. metadata:
  5. name: nginx-service
  6. spec:
  7. type: NodePort
  8. selector:
  9. app: nginx
  10. ports:
  11. - protocol: TCP
  12. port: 80
  13. targetPort: 80
  14. ---
  15. apiVersion: extensions/v1beta1
  16. kind: Deployment
  17. metadata:
  18. name: nginx-deployment
  19. spec:
  20. selector:
  21. matchLabels:
  22. app: nginx
  23. template:
  24. metadata:
  25. labels:
  26. app: nginx
  27. spec:
  28. containers:
  29. - name: nginx
  30. image: nginx:alpine
  31. volumeMounts:
  32. - name: nginx-config
  33. mountPath: /etc/nginx/conf.d
  34. - name: web-root
  35. mountPath: /usr/share/nginx/html
  36. volumes:
  37. - name: nginx-config
  38. configMap:
  39. name: nginx-config
  40. - name: web-root
  41. nfs:
  42. server: 192.168.2.17
  43. path: /data/nfs

  

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

2.2 应用该配置文件

  1. #kubectl create -f nginx-configmap.yaml

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

3.php

3.1 php-deployment.yaml

  1. [root@master k8s]# cat php-deployment.yaml
  2. apiVersion: v1
  3. kind: Service
  4. metadata:
  5. name: php-service
  6. spec:
  7. clusterIP: 10.254.235.214
  8. selector:
  9. app: php
  10. ports:
  11. - name: php
  12. port: 9000
  13. targetPort: 9000
  14. ---
  15. apiVersion: extensions/v1beta1
  16. kind: Deployment
  17. metadata:
  18. name: php-deployment
  19. spec:
  20. replicas: 1
  21. selector:
  22. matchLabels:
  23. app: php
  24. template:
  25. metadata:
  26. labels:
  27. app: php
  28. spec:
  29. containers:
  30. - name: php
  31. image: php:7.2-fpm
  32. volumeMounts:
  33. - name: web-root
  34. mountPath: /usr/share/nginx/html
  35. volumes:
  36. - name: web-root
  37. nfs:
  38. server: 192.168.2.17
  39. path: /data/nfs

  

3.2 应用该配置文件

  1. #kubectl create -f php-configmap.yaml

  

二.创建mysql服务

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

  1. [root@master]# cat mysql-service.yaml
  2. apiVersion: v1
  3. kind: Service
  4. metadata:
  5. name: mysql-service
  6. namespace: default
  7. spec:
  8. ports:
  9. - protocol: TCP
  10. port: 3306
  11. targetPort: 3306
  12.  
  13. [root@master]#kubectl create -f mysql-service.yaml

  

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

  1. [root@master]# cat mysql-endpoint.yaml
  2. apiVersion: v1
  3. kind: Endpoints
  4. metadata:
  5. name: mysql-service
  6. namespace: default
  7. subsets:
  8. - addresses:
  9. - ip: 192.168.2.10
  10. ports:
  11. - port: 3306
  12. protocol: TCP
  13.  
  14. [root@master]#kubectl create -f mysql-endpoint.yaml

  

三.应用程序文件

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

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

  

2.运行该文件,提示

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

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

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

  

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

  1. docker restart 4cf7949cfc30

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

四.访问

在任意节点上或master上访问

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

应该输出连接成功

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

  1. kubernetes之三 使用kubectl在k8s上部署应用

    在上一篇中,我们学习了使用minikube来搭建k8s集群.k8s集群启动后,就可以在上面部署应用了.本篇,我们就来学习如何使用kubectl在k8s上部署应用. 学习之前,可以先从下面这篇博客上了解 ...

  2. 在k8s上部署日志系统elfk

    日志系统elfk 前言 经过上周的技术预研,在本周一通过开会研究,根据公司的现有业务流量和技术栈,决定选择的日志系统方案为:elasticsearch(es)+logstash(lo)+filebea ...

  3. 优化:在k8s上部署的gitlab

    gitlab组件图 gitlab在k8s上占用资源 # kubectl top pods -n default | grep git* gitlab-gitaly-0 9m 444Mi gitlab- ...

  4. 使用Rancher在K8S上部署高性能PHP应用程序

    介 绍 PHP是网络上最流行的编程语言之一,许多被广泛使用的内容管理系统都使用它开发,如WordPress和Drupal,并为现代服务器端框架(如Laravel和Symfony)提供核心代码. 尽管P ...

  5. 容器化 | 在 K8s 上部署 RadonDB MySQL Operator 和集群

    作者:程润科 数据库研发工程师 编辑:张莉梅 高级文档工程师 视频:钱芬 高级测试工程师 本文将演示在 Kubernetes 上部署 RadonDB MySQL Kubernetes 2.X(Oper ...

  6. k8s 上部署 Redis 三主三从 集群

    目录 介绍 为什么要使用Redis? 什么是Redis群集? 在Kubernetes中部署Redis集群 从 GitHub 上下载: 创建pv 创建statefulset 创建service 初始化 ...

  7. 通过重新上传修改后的docker镜像来在kubeapps上实现k8s上部署的nginx版本更新,回退等

    docker操作:制作自定义镜像 # docker下载官方nginx镜像 docker pull nginx # 基于该镜像运行一个容器 docker run -it -d --name nginx_ ...

  8. K8S 上部署 Redis-cluster 三主三从 集群

    介绍 Redis代表REmote DIctionary Server是一种开源的内存中数据存储,通常用作数据库,缓存或消息代理.它可以存储和操作高级数据类型,例如列表,地图,集合和排序集合. 由于Re ...

  9. 在 K8S 上部署以 mysql 数据库作为后端存储的单机版 nacos

    Nacos 被用于: 服务发现 微服务配置信息管理 部署 nacos 时,需要用到如下两个镜像,这两个镜像均来自于 nacos 官方发布到 docker hub 的镜像, nacos/nacos-se ...

随机推荐

  1. 洛谷P1074 靶形数独 [搜索]

    题目传送门 题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他 们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教, Z 博士拿出了 ...

  2. 【SQL】oralce中使用group by和case when按照条件求和

    假设我们有一个Salary 薪水表.这个表的字段分别为:id, name, salary, level  在这个表中,每个人有不同的级别(level).我们要根据不同的级别统计相同级别员工的薪水总和. ...

  3. HZAU 1205 Sequence Number(双指针)

    题目链接:http://acm.hzau.edu.cn/problem.php?id=1205 [题意]给你一串数,要求你找到两个数a[i],a[j],使得a[i]<=a[j]且j>=i且 ...

  4. 【POJ 2154】 Color (置换、burnside引理)

    Color Description Beads of N colors are connected together into a circular necklace of N beads (N< ...

  5. 【BZOJ 2646】【NEERC 2011】flight

    http://www.lydsy.com/JudgeOnline/problem.php?id=2646 夏令营alpq654321讲课时说这道题很简单但并没有几个人提交,最近想复习一下线段树,脑袋一 ...

  6. luogu P1220 关路灯

    题目描述 某一村庄在一条路线上安装了n盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少).老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏地关掉这些路灯. 为了给村 ...

  7. code M资格赛 补题

    A: 音乐研究 时间限制:1秒 空间限制:32768K 美团外卖的品牌代言人袋鼠先生最近正在进行音乐研究.他有两段音频,每段音频是一个表示音高的序列.现在袋鼠先生想要在第二段音频中找出与第一段音频最相 ...

  8. JDK源码学习笔记——Integer

    一.类定义 public final class Integer extends Number implements Comparable<Integer> 二.属性 private fi ...

  9. “过时”的SpringMVC我们到底在用什么?深入分析DispatchServlet源码

    之前已经分析过了Spring的IOC(<零基础带你看Spring源码--IOC控制反转>)与AOP(<从源码入手,一文带你读懂Spring AOP面向切面编程>)的源码,本次就 ...

  10. 浅谈分布式CAP定理

    互联网发展到现在,由于数据量大.操作并发高等问题,大部分网站项目都采用分布式的架构.而分布式系统最大的特点数据分散,在不同网络节点在某些时刻(数据未同步完,数据丢失),数据会不一致. 在2000年,E ...