在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
应该输出连接成功
在k8s上部署第一个php应用的更多相关文章
- kubernetes之三 使用kubectl在k8s上部署应用
在上一篇中,我们学习了使用minikube来搭建k8s集群.k8s集群启动后,就可以在上面部署应用了.本篇,我们就来学习如何使用kubectl在k8s上部署应用. 学习之前,可以先从下面这篇博客上了解 ...
- 在k8s上部署日志系统elfk
日志系统elfk 前言 经过上周的技术预研,在本周一通过开会研究,根据公司的现有业务流量和技术栈,决定选择的日志系统方案为:elasticsearch(es)+logstash(lo)+filebea ...
- 优化:在k8s上部署的gitlab
gitlab组件图 gitlab在k8s上占用资源 # kubectl top pods -n default | grep git* gitlab-gitaly-0 9m 444Mi gitlab- ...
- 使用Rancher在K8S上部署高性能PHP应用程序
介 绍 PHP是网络上最流行的编程语言之一,许多被广泛使用的内容管理系统都使用它开发,如WordPress和Drupal,并为现代服务器端框架(如Laravel和Symfony)提供核心代码. 尽管P ...
- 容器化 | 在 K8s 上部署 RadonDB MySQL Operator 和集群
作者:程润科 数据库研发工程师 编辑:张莉梅 高级文档工程师 视频:钱芬 高级测试工程师 本文将演示在 Kubernetes 上部署 RadonDB MySQL Kubernetes 2.X(Oper ...
- k8s 上部署 Redis 三主三从 集群
目录 介绍 为什么要使用Redis? 什么是Redis群集? 在Kubernetes中部署Redis集群 从 GitHub 上下载: 创建pv 创建statefulset 创建service 初始化 ...
- 通过重新上传修改后的docker镜像来在kubeapps上实现k8s上部署的nginx版本更新,回退等
docker操作:制作自定义镜像 # docker下载官方nginx镜像 docker pull nginx # 基于该镜像运行一个容器 docker run -it -d --name nginx_ ...
- K8S 上部署 Redis-cluster 三主三从 集群
介绍 Redis代表REmote DIctionary Server是一种开源的内存中数据存储,通常用作数据库,缓存或消息代理.它可以存储和操作高级数据类型,例如列表,地图,集合和排序集合. 由于Re ...
- 在 K8S 上部署以 mysql 数据库作为后端存储的单机版 nacos
Nacos 被用于: 服务发现 微服务配置信息管理 部署 nacos 时,需要用到如下两个镜像,这两个镜像均来自于 nacos 官方发布到 docker hub 的镜像, nacos/nacos-se ...
随机推荐
- 洛谷P1074 靶形数独 [搜索]
题目传送门 题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他 们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教, Z 博士拿出了 ...
- 【SQL】oralce中使用group by和case when按照条件求和
假设我们有一个Salary 薪水表.这个表的字段分别为:id, name, salary, level 在这个表中,每个人有不同的级别(level).我们要根据不同的级别统计相同级别员工的薪水总和. ...
- HZAU 1205 Sequence Number(双指针)
题目链接:http://acm.hzau.edu.cn/problem.php?id=1205 [题意]给你一串数,要求你找到两个数a[i],a[j],使得a[i]<=a[j]且j>=i且 ...
- 【POJ 2154】 Color (置换、burnside引理)
Color Description Beads of N colors are connected together into a circular necklace of N beads (N< ...
- 【BZOJ 2646】【NEERC 2011】flight
http://www.lydsy.com/JudgeOnline/problem.php?id=2646 夏令营alpq654321讲课时说这道题很简单但并没有几个人提交,最近想复习一下线段树,脑袋一 ...
- luogu P1220 关路灯
题目描述 某一村庄在一条路线上安装了n盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少).老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏地关掉这些路灯. 为了给村 ...
- code M资格赛 补题
A: 音乐研究 时间限制:1秒 空间限制:32768K 美团外卖的品牌代言人袋鼠先生最近正在进行音乐研究.他有两段音频,每段音频是一个表示音高的序列.现在袋鼠先生想要在第二段音频中找出与第一段音频最相 ...
- JDK源码学习笔记——Integer
一.类定义 public final class Integer extends Number implements Comparable<Integer> 二.属性 private fi ...
- “过时”的SpringMVC我们到底在用什么?深入分析DispatchServlet源码
之前已经分析过了Spring的IOC(<零基础带你看Spring源码--IOC控制反转>)与AOP(<从源码入手,一文带你读懂Spring AOP面向切面编程>)的源码,本次就 ...
- 浅谈分布式CAP定理
互联网发展到现在,由于数据量大.操作并发高等问题,大部分网站项目都采用分布式的架构.而分布式系统最大的特点数据分散,在不同网络节点在某些时刻(数据未同步完,数据丢失),数据会不一致. 在2000年,E ...