在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
一、介绍 本案例基于Kubernetes和Docker,其中包括 kubernetes体系架构 二、配置 0、先决条件 1、启动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 [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流量走向会有以下两步: 3、启动replicated slave pod [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 [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 [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-slave-uk8nu 172.17.0.11 centos2/192.168.1.112 name=redis-slave Running 12 minutes slave kubernetes/redis-slave:v2 Running 12 minutes 可以看到一个redis master,两个redis slave和三个frontend pods 6、创建guestbook service [root@centos1 example]# kubectl create -f frontend-service.json services/frontend [root@centos1 example]# kubectl get services NAME LABELS SELECTOR IP(S) PORT(S) frontend name=frontend name=frontend 10.254.154.111 80/TCP 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 我们可以通过frontend service(10.254.154.111)访问pods,但是这个IP明显是无法在外部访问的,下一节讲解如何在外部网络访问guestbook 7、外部网络访问guestbook [root@centos1 example]# kubectl get pods,services 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 22 minutes php-redis kubernetes/example-guestbook-php-redis:v2 Running 22 minutes frontend-gjx3t 172.17.0.14 centos2/192.168.1.112 name=frontend Running 22 minutes php-redis kubernetes/example-guestbook-php-redis:v2 Running 22 minutes frontend-v608r 172.17.0.12 centos2/192.168.1.112 name=frontend Running 22 minutes php-redis kubernetes/example-guestbook-php-redis:v2 Running 22 minutes redis-master-svar7 172.17.0.9 centos2/192.168.1.112 name=redis-master Running About an hour master redis Running About an hour redis-slave-31tkb 172.17.0.10 centos2/192.168.1.112 name=redis-slave Running 32 minutes slave kubernetes/redis-slave:v2 Running 32 minutes redis-slave-uk8nu 172.17.0.11 centos2/192.168.1.112 name=redis-slave Running 32 minutes slave kubernetes/redis-slave:v2 Running 32 minutes NAME LABELS SELECTOR IP(S) PORT(S) frontend name=frontend name=frontend 10.254.154.111 80/TCP kubernetes component=apiserver,provider=kubernetes <none> 10.254.0.2 443/TCP kubernetes-ro component=apiserver,provider=kubernetes <none> 10.254.0.1 80/TCP 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 [root@centos1 example]# kubectl get services NAME LABELS SELECTOR IP(S) PORT(S) frontend name=frontend name=frontend 10.254.154.111 80/TCP kubernetes component=apiserver,provider=kubernetes <none> 10.254.0.2 443/TCP kubernetes-ro component=apiserver,provider=kubernetes <none> 10.254.0.1 80/TCP 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 发现redis-master是在10.254.154.90上,登录到centos2上,执行iptables-save,发现其中有这样一条规则 复制代码 代码如下: -A KUBE-PORTALS-HOST -d 10.254.154.90/32 -p tcp -m comment --comment "default/redis-master:" -m tcp --dport 6379 -j DNAT --to-destination 192.168.1.112:49038 说明,centos2本机的49038端口映射到master container内的6379了,当然我们就能执行在本机访问redis了 [root@centos2 yum.repos.d]# redis-cli -p 49038 127.0.0.1:49038> set a b OK 127.0.0.1:49038> get a "b" 8、使用curl简单测试 提交数据 复制代码 代码如下: curl "localhost:8000/index.php?cmd=set&key=messages&value=jay_sais_hi" 查询数据 复制代码 代码如下: curl "localhost:8000/index.php?cmd=get&key=messages"
附本案例用到的6个.json文件 { "kind":"ReplicationController", "apiVersion":"v1beta3", "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":"redis", "ports":[ { "containerPort":6379 } ] } ] } } } } 2、redis-master-service.json { "kind":"Service", "apiVersion":"v1beta3", "metadata":{ "name":"redis-master", "labels":{ "name":"redis-master" } }, "spec":{ "ports": [ { "port":6379, "targetPort":6379 } ], "selector":{ "name":"redis-master" } } } 3、redis-slave-controller.json { "kind":"ReplicationController", "apiVersion":"v1beta3", "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":"kubernetes/redis-slave:v2", "ports":[ { "containerPort":6379 } ] } ] } } } } 4、redis-slave-service.json { "kind":"Service", "apiVersion":"v1beta3", "metadata":{ "name":"redis-slave", "labels":{ "name":"redis-slave" } }, "spec":{ "ports": [ { "port":6379 } ], "selector":{ "name":"redis-slave" } } } 5、frontend-controller.json { "kind":"ReplicationController", "apiVersion":"v1beta3", "metadata":{ "name":"frontend", "labels":{ "name":"frontend" } }, "spec":{ "replicas":3, "selector":{ "name":"frontend" }, "template":{ "metadata":{ "labels":{ "name":"frontend" } }, "spec":{ "containers":[ { "name":"php-redis", "image":"kubernetes/example-guestbook-php-redis:v2", "ports":[ { "containerPort":80 } ] } ] } } } } 6、frontend-service.json { "kind":"Service", "apiVersion":"v1beta3", "metadata":{ "name":"frontend", "labels":{ "name":"frontend" } }, "spec":{ "ports": [ { "port":80 } ], "selector":{ "name":"frontend" } } } 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持极客世界。 |
请发表评论