• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
导航菜单
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • windows
  • 服务器硬件
  • 服务器运维
  • 云计算
  • 虚拟化
  • IIS教程
  • Linux
  • Apache
  • Ftp
  • DNS
  • Nginx
您的位置:首页 > 服务器 >虚拟化 > 基于Kubernetes和Docke实现留言簿案例

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

作者:opensure 字体:[增加 减小] 来源:互联网

本文主要包含Kubernetes,Docke,留言簿等服务器相关知识,opensure 希望可以进行参考

一、介绍

本案例基于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 rc
CONTROLLER   CONTAINER(S)  IMAGE(S)  SELECTOR      REPLICAS
redis-master  master     redis   name=redis-master  1

验证master运行成功,如下展示了pod运行在centos2/192.168.1.112这台机器上   

[root@centos1 example]# kubectl get pods
POD         IP      CONTAINER(S)  IMAGE(S)  HOST          LABELS       STATUS  CREATED   MESSAGE
redis-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 ps
CONTAINER ID    IMAGE                 COMMAND        CREATED       STATUS       PORTS        NAMES
91689ce56668    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 services
NAME      LABELS                  SELECTOR      IP(S)      PORT(S)
redis-master  name=redis-master             name=redis-master  10.254.154.90  6379/TCP

上面的运行成功后,所有pods都能发现redis master运行在6379端口,从salve到master流量走向会有以下两步:
1、一个redis slave会连接到redis master service的port上
2、流量会从service节点上的port到targetPort
如果targetPort未指定,默认和port一致

3、启动replicated slave pod
虽然redis master是一个单独的pod,redis slaves是一个replicated pod,在Kubernetes中,一个Replication Controller负责管理一个replicated pod的多个实例,RC会自动拉起down掉的replica(可以通过杀死docker 进程方式简单测试)

[root@centos1 example]# kubectl create -f redis-slave-controller.json 
replicationcontrollers/redis-slave
[root@centos1 example]# kubectl get rc
CONTROLLER   CONTAINER(S)  IMAGE(S)          SELECTOR      REPLICAS
redis-master  master     redis            name=redis-master  1
redis-slave  slave     kubernetes/redis-slave:v2  name=redis-slave  2
[root@centos1 example]# kubectl get pods
POD         IP      CONTAINER(S)  IMAGE(S)          HOST          LABELS       STATUS  CREATED   MESSAGE
redis-master-svar7  172.17.0.9                        centos2/192.168.1.112  name=redis-master  Running  41 minutes  
                  master     redis                                  Running  41 minutes  
redis-slave-31tkb  172.17.0.10                       centos2/192.168.1.112  name=redis-slave  Running  29 seconds  
                  slave     kubernetes/redis-slave:v2                        Running  28 seconds  
redis-slave-uk8nu  172.17.0.11                       centos2/192.168.1.112  name=redis-slave  Running  29 seconds  
                  slave     kubernetes/redis-slave:v2                        Running  28 seconds  

可以看到一个master pod和两个slave pod

4、启动slave service
和master一样,我们希望有一个代理服务连接到redis slave,除了服务发现之外,slave service还为web app client提供了透明代理。
这次service 的selector是name=redis-slave,我们可以方便的使用kubectl get services -l "label=value"命令来定位这些服务

[root@centos1 example]# kubectl create -f redis-slave-service.json 
services/redis-slave
[root@centos1 example]# kubectl get services
NAME      LABELS                  SELECTOR      IP(S)      PORT(S)
redis-master  name=redis-master             name=redis-master  10.254.154.90  6379/TCP
redis-slave   name=redis-slave             name=redis-slave  10.254.159.145  6379/TCP

5、创建frontend pod
这是一个简单的PHP 服务,用来和master service(写请求)或slave service(读请求)交互

[root@centos1 example]# kubectl create -f frontend-controller.json 
replicationcontrollers/frontend
[root@centos1 example]# kubectl get rc
CONTROLLER   CONTAINER(S)  IMAGE(S)                  SELECTOR      REPLICAS
frontend    php-redis   kubernetes/example-guestbook-php-redis:v2  name=frontend    3
redis-master  master     redis                    name=redis-master  1
redis-slave  slave     kubernetes/redis-slave:v2          name=redis-slave  2

运行成功后,查看当前pod运行状态

[root@centos1 example]# kubectl get pods
POD         IP      CONTAINER(S)  IMAGE(S)                  HOST          LABELS       STATUS  CREATED   MESSAGE
frontend-fr5z1    172.17.0.13                               centos2/192.168.1.112  name=frontend    Running  2 minutes  
                  php-redis   kubernetes/example-guestbook-php-redis:v2                        Running  2 minutes  
frontend-gjx3t    172.17.0.14                               centos2/192.168.1.112  name=frontend    Running  2 minutes  
                  php-redis   kubernetes/example-guestbook-php-redis:v2                        Running  2 minutes  
frontend-v608r    172.17.0.12                               centos2/192.168.1.112  name=frontend    Running  2 minutes  
                  php-redis   kubernetes/example-guestbook-php-redis:v2                        Running  2 minutes  
redis-master-svar7  172.17.0.9                                centos2/192.168.1.112  name=redis-master  Running  53 minutes  
                  master     redis                                          Running  53 minutes  
redis-slave-31tkb  172.17.0.10                               centos2/192.168.1.112  name=redis-slave  Running  12 minutes  
                  slave     kubernetes/redis-slave:v2                                Running  12 minutes  
redis-sla
  


 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Kubernetes(k8s)基础介绍
  • centos7搭建docker私人仓库的方法(kubernetes)
  • Docker实践—CentOS7上部署Kubernetes详解
  • 基于Kubernetes和Docke实现留言簿案例
  • docker kubernetes dashboard安装部署详细介绍

相关文章

  • Docker安装运行apache2服务器做图片服务器的方法
  • 蘑菇街 私有云Docker实例应用
  • 30分钟带你了解Docker(推荐)
  • Windows10下安装Docker的步骤图文教程
  • 在docker中安装mysql详解
  • linux常用命令之VMware10中安装CentOS 6.4图文教程
  • docker 如何删除none镜像
  • Docker教程之Ubuntu 安装 Docker详细介绍
  • 详解Windows下运用Docker部署Node.js开发环境
  • 详解利用ELK搭建Docker容器化应用日志中心

文章分类

  • windows
  • 服务器硬件
  • 服务器运维
  • 云计算
  • 虚拟化
  • IIS教程
  • Linux
  • Apache
  • Ftp
  • DNS
  • Nginx

最近更新的内容

    • docker centos7 安装ssh具体步骤
    • Mac系统上用Docker搭建lamp环境
    • Docker 容器指定自定义网段的固定IP/静态IP地址
    • 使用docker搭建gitlab详解
    • Openstack 创建项目和虚拟机详细介绍
    • Docker 教程之基本概念(镜像,容器,仓库)详解
    • 一次因为数据问题引起的reduce被卡住streaming作业问题排查,reducestreaming
    • 使用docker快速搭建Spark集群的方法教程
    • Docker多阶段镜像构建的实现
    • OpenStack Mitaka 版本中的 domain 和 admin详解

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有