首页 > 网站 > 建站经验 > 正文

基于Kubernetes和Docke实现留言簿案例

2019-11-02 16:20:30
字体:
来源:转载
供稿:网友

一、介绍

本案例基于Kubernetes和Docker,其中包括

1、web前端

2、redis master

3、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
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表