一、介绍
本案例基于Kubernetes和Docker,其中包括
1、web前端2、redis master3、redis slave其中web前端通过javascript redis api和redis master交互kubernetes体系架构
二、配置
0、先决条件
Kubernetes 集群1、启动redis master使用replication controller确保只有一个pod在运行(当某个节点down了,rc会在另一个健康的node启动redis master),但可能会有数据丢失。
[root@centos1 example]# kubectl create -f redis-master-controller.json replicationcontrollers/redis-master[root@centos1 example]# kubectl get rcCONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICASredis-master master redis name=redis-master 1
验证master运行成功,如下展示了pod运行在centos2/192.168.1.112这台机器上
[root@centos1 example]# kubectl get podsPOD IP CONTAINER(S) IMAGE(S) HOST LABELS STATUS CREATED MESSAGEredis-master-svar7 172.17.0.9 centos2/192.168.1.112 name=redis-master Running 55 seconds master redis Running 55 seconds
SSH到centos2/192.168.1.112查看docker状态
[root@centos2 yum.repos.d]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES91689ce56668 redis:latest "/entrypoint.sh redi 3 minutes ago Up 3 minutes k8s_master.52732b08_redis-master-svar7_default_5b6d5485-1894-11e5-b3ad-000c293c8c19_97e79b7b 38c3180813c3 gcr.io/google_containers/pause:0.8.0 "/pause" 3 minutes ago Up 3 minutes k8s_POD.49eee8c2_redis-master-svar7_default_5b6d5485-1894-11e5-b3ad-000c293c8c19_298e038f
注意:kubectl create执行后,如果镜像不存在,会执行docker pull,根据网络情况,下载中的pods 在kubertnetes UI上会显示pending状态
2、启动master service一个kubernetes service会对一个或多个container进行负载均衡,这是通过我们上面redis-master中定义的labels元数据实现的,值得注意的是,在redis中只有一个master,但是我们依然为它创建一个service,这是因为这样我们就能使用一个elastic IP来路由到具体某一个master。
kubernetes集群中的service是通过container中的环境变量实现服务发现的,service基于pod label实现container的负载均衡。在第一步中创建的pod包含了一个label“name=redis-master”,service的selector字段决定了service将流量转发给哪个pod,port和targetPort信息定义了service proxy运行在什么端口。[root@centos1 example]# kubectl create -f redis-master-service.json services/redis-master[root@centos1 example]# kubectl get servicesNAME LABELS SELECTOR IP(S) PORT(S)redis-master name=redis-master name=redis-master 10.254.154.90 6379/TCP
新闻热点
疑难解答