本文所说的Hello world是一个web留言板应用,并且是基于PHP+Redis的两层分布式架构的web应用,前端PHP web网站通过访问后端Redis数据库完成用户留言的查询和添加功能,具备读写分离能力,留言板内容是从redis中查询到的,首页中添加刘潭并提交之后留言会被添加到redis中。

Redis层采用一个Master与两个salve,Master负责写操作,slave负责读操作,PHPweb层启动三个实例组成集群,对网站的访问进行负载均衡。 
本文的例子首选需要将Docker环境和k8s环境搭建完毕,这个在前一节中已经做了讲解,有需要的可以参考前一节内容部署一下Docker和k8s环境。 
实验环境: Centos7.2 64位,虚拟机。 
下面进行实例的具体操作。

1. 创建redis-master Pod和服务

先定义RC来创建pod,然后定义与之关联的service。 
为redis-master服务新建一个名为redis-master-controller.yaml的RC定义文件,内容为:


apiVersion: v1
kind: ReplicationController
metadata:
name: redis-master
labels:
name: redis-master
spec:
replicas: 1
selector:
name: redis-master
template:
metadata:
labels:
name: redis-master
spec:
containers:
- name: master
image: kubeguide/redis-master
ports:
- containerPort: 6379

新建好文件之后执行如下命令:


kuberctl create -f redis-master-controller.yaml

删除:将create换为delete即可。 
查看刚刚新建的redis-master:


kuberctl get rc

检查pod信息:


kuberctl get pods

解决kubectl get pods时 No resources found.问题

  1. 使用yum直接安装etcd, kubectl,按顺序启动如下服务:etcd, docker, kube-apiserver, kube-controller-manager, kube-scheduler, kubelet, kube-proxy.
  2. 创建了mysql-rc.yaml.
  3. 执行kubectl create -f mysql-rc.yaml,反馈正常
  4. 执行kubectl get rc, 反馈正常
  5. 执行kubectl get pods,显示no resources found.
  6. 解决方法:
  7. 1、$ vi /etc/kubernetes/apiserver
  8. 2、找到这一行 "KUBE_ADMISSION_CONTROL="--admission_control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota",去掉ServiceAccount,保存退出。
  9. 3、重新启动kube-apiserver服务即可
  10. 此时执行kubectl get pods, no resources found问题得以解决

下面新建与上面建的pod相关联的service,service对应的文件redis-master-service.yaml,内容如下:


apiVersion: v1
kind: Service
metadata:
name: redis-master
labels:
name: redis-master
spec:
ports:
- port: 6379
targetPort: 6379
selector:
name: redis-master

创建service:


kubectl create -f redis-master-service.yaml

查看新建的service:


kubectl get services

2. redis-salve Pod和服务

步骤和redis-master的一样。 
新建文件redis-salve-controller.yaml,内容如下:


apiVersion: v1
kind: ReplicationController
metadata:
name: redis-slave
labels:
name: redis-slave
spec:
replicas: 2
selector:
name: redis-slave
template:
metadata:
labels:
name: redis-slave
spec:
containers:
- name: slave
image: kubeguide/guestbook-redis-slave
env:
- name: GET_HOSTS_FROM
value: env
ports:
- containerPort: 6379

运行kubectl create命令:


kubectl create -f redis-salve-controller.yaml

查看RC:


kubectl get rc

查看pod:


kubectl get pods

配置文件redis-salve-service.yaml内容如下:


apiVersion: v1
kind: Service
metadata:
name: redis-slave
labels:
name: redis-slave
spec:
ports:
- port: 6379
selector:
name: redis-slave

创建service:


kubectl create -f redis-slave-service.yaml

检查service:


kubectl get services;

3. 创建frontend Pod和服务

文件frontend-controller.yaml内容如下:


apiVersion: v1
kind: ReplicationController
metadata:
name: frontend
labels:
name: frontend
spec:
replicas: 3
selector:
name: frontend
template:
metadata:
labels:
name: frontend
spec:
containers:
- name: frontend
image: kubeguide/guestbook-php-frontend
env:
- name: GET_HOSTS_FROM
value: env
ports:
- containerPort: 80

执行命令kubectl create:


kubectl create -f frontend-controller.yaml

检查RC:


kunectl get rc

检查pod:


kubectl get pods

文件frontend-service.yaml内容如下:


apiVersion: v1
kind: Service
metadata:
name: frontend
labels:
name: frontend
spec:
type: NodePort
ports:
- port: 80
nodePort: 30001
selector:
name: frontend

创建服务:


kubectl create -f frontend-service.yaml

检查service:


kubectl get services;

4. 访问网站

如我的虚拟机IP为xx.xx.xx.xx
则浏览器访问: xx.xx.xx.xx:30001 
成功的话会出现简单的留言板界面,并可进行留言commit。

Kubernetes实践--hello world 示例的更多相关文章

  1. CentOS7 安装 RocketMQ 实践和小示例

    CentOS7 安装 RocketMQ 实践和小示例 1.通过 SSH 工具(比如 XShell)连接到 CentOS7 服务器上: 2.进入到 /usr/local 目录中: cd /usr/loc ...

  2. kubernetes实践之运行aspnetcore webapi微服务

    1.预备工作 unbuntu 16.04 and above docker kubernetes 集群 2.使用vs2017创建一个web api应用程序,并打包镜像到本地. 3.推送本地镜像到doc ...

  3. kubernetes实践之一:kubernetes二进制包安装

    kubernetes二进制部署 1.环境规划 软件 版本 Linux操作系统 CentOS Linux release 7.6.1810 (Core) Kubernetes 1.9 Docker 18 ...

  4. Kubernetes 实践指南之Kubernetes 的命令行工具详解

    kubectl作为客户端CLI工具,可以让用户通过命令行的方式对Kubernetes集群进行管理.本节内容将对kubectl的子命令和用法进行详细描述. 一.kubectl 用法概述 kubectl语 ...

  5. Kubernetes实践技巧:Windows 系统最佳实践

    有部分同学是使用的 Windows 系统,我们的直播课程也是在 Windows 系统下面进行的,然后通过 SSH 方式连接到 服务器上面操作 Kubernetes,由于对 vim 不是很熟悉,所以又通 ...

  6. kubernetes实践之五:深入理解Service及内部DNS搭建

    一.Service存在的意义: 防止Pod失联(服务发现) 定义一组Pod的访问策略(负载均衡) 支持ClusterIP,NodePort以及LoadBalancer三种类型 Service的底层实现 ...

  7. kubernetes实践之四:深入理解控制器(workload)

    一.Pod与controllers的关系 controllers:在集群上管理和运行容器的对象 通过label-selector相关联 Pod通过控制器实现应用的运维,如伸缩,升级等 二.Deploy ...

  8. kubernetes实践之三:深入理解Pod对象

    一.Pod定义 最小部署单元 一组容器集合 一个pod中的容器共享网络命名空间 Pod是短暂的 二.Pod容器分类 基础容器 维护整个Pod的网络命名空间 初始化容器 先于业务容器开始执行,在应用启动 ...

  9. kubernetes实践之二:Kubernetes可视WEB UI Dashboard搭建

    Kubernetes可视WEBUI Dashboard搭建 支持浏览器:火狐 一.Dashboard下载地址 git clone https://github.com/kubernetes/kuber ...

随机推荐

  1. RedHat 6.6下安装nginx,配置HTTPS

    1.安装依赖包 yum -y install pcre-devel openssl-devel zlib-devel 2.下载nginx安装包到服务器上,当前使用版本nginx-1.15.5.tar. ...

  2. nodejs中Async详解之一:流程控制

    为了适应异步编程,减少回调的嵌套,我尝试了很多库.最终觉得还是async最靠谱. 地址:https://github.com/caolan/async Async的内容分为三部分: 流程控制:简化十种 ...

  3. 跟我学Makefile(四)

    使用函数:函数调用,很像变量的使用,也是以“$”来标识的,其语法如下: $(<function> <arguments>) 或是 ${<function> < ...

  4. MySql数据库批量备份命令

    rd d:\mysql_data-BAK /s /qmd d:\mysql_data-BAKxcopy d:\mysql_data d:\mysql_data-BAK /e

  5. [golang note] 协程通信

    channel基本语法 • channel介绍 √ golang社区口号:不要通过共享内存来通信,而应该通过通信来共享内存. √ golang提供一种基于消息机制而非共享内存的通信模型.消息机制认为每 ...

  6. h5前端项目常见问题汇总

    原文作者:FrontEndZQ 原文链接:https://github.com/FrontEndZQ/HTML5-FAQ H5项目常见问题及注意事项 Meta基础知识: H5页面窗口自动调整到设备宽度 ...

  7. Java基础知识陷阱(十)

    本文发表于本人博客. 上个星期由于时间比较紧所以未能继续写下去,今天再接再厉,专心 + 坚持这样离目标就越来越近了!废话少说说正题,今天我们还是来说说java中比较基础的知识,大家知道编写java程序 ...

  8. 39XML文档类

    Xml源代码 domxml.h #ifndef DOMXML_H #define DOMXML_H #include <QString> #include <QStringList& ...

  9. 15信号sigaction

    信号处理 信号值小于 SIGRTMIN 的信号 (1~31) 都是不可靠信号 某些unix版本中,调用信号函数处理后会自动恢复默认信号处理,所以在信号处理函数中还需要继续调用signal函数设置信号处 ...

  10. hdu5184 数论证明

    这题说的给了一个整数n 和一串的括号, 那么要我们计算 最后有n/2对括号的 方案数有多少. 我们可以先预先判断一些不可能组成正确括号对的情况, 然后我们可以将这个问题转化到二维平面上, 令 m = ...