首页 » 翻译 » Kubernetes » 正文

kubernetes 实例 Hello World(php+radis)

如何使用kubernetes撘建一个 前台是php + 后台是 redis 程序, 前台通过replacationController来控制有3个pod来做负载均衡, 后台有 一个master redis ,和2个slave redis来完成一个简单的小程序

(程序来源Kubernetes 权威指南)

k8s的安装

(1)关闭防火墙

(2)安装etcd和Kubernets

(3)修改配置文件,在/etc/sysconfig/docker 中照到 OPTIONS,追加如下内容:

追加完成之后的内容如下:

然后修改文件/etc/kubernetes/apiserver 将 –admission_control 参数中的 ServiceAccount删除(如果不删除,会导致pod无法正常启动)

(4)启动相关服务

程序的部署

创建redis-master

然后执行:

创建redis-master 服务:

然后执行:

创建redis-slave

执行:

创建slave 的服务:

执行:

创建前台的frontend

执行:

创建服务:

执行:

到这个地方,我们就完整的创建了一个实例,我第一次实验的时候因为写错了端口(6379,写成了6397结果怎么也没写入成功)

(需要注意的一个地方就是我们需要iptable的支持,因为pod之间数据的交互都是走iptables的)

好,那我们来一下这个实例都做了什么…..

 

首先我们可以看到有3个服务(kubernetes那个我们就不算了),为什么需要服务呢?直接用IP不行么?

不行,因为我们的pod是持续变化的,一个pod挂了,然后replacationController会自动给我启动一个新的,新的pod的ip地址就会变,IP一变,全乱套了….比如你写了一个链接数据库的地方写了一个ip,pod一旦重启,所有数据库都连不上了….为了解决这个问题, 就引入了服务service,服务的意义就是:所有请求发给我,我给你去找具体的pod,我们就不用操心service怎么知道重启后的pod的新IP了(其实很简单,selector,每个pod都有一个label,如论怎么重启,新建,label不变,service就通过label来查找相应的pod的)

对应的pod:

 

同理:redis-slave ,frontend

然后,最重要是程序如何调用这些服务的IP

其实pod之间是通过环境变量来知道服务的ip地址的,因为可能你服务是在pod创建之后才创建的服务,而且IP随机的,我们没法提前写好,所以,每当有一个新的服务创建的时候,在所有pod中增增加一系列的环境变量,如下:

这样,我们在程序里只需要调用REDIS_MASTER_PORT 这样环境变量就可以自动转换为对应的对的IP地址了

 

 

 

 

发表评论