CentOS7.3下yum安装Kubernetes1.4入门教程(3)

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@master guestbook]# kubectl create -f redis-master-service.yaml service "redis-master" created [root@master guestbook]# root@master guestbook]# kubectl get svc NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes 10.254.0.1 443/TCP 33m redis-master 10.254.203.144 6379/TCP 58s [root@master guestbook]#

  上面的运行成功后,所有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@master guestbook]# kubectl create -f redis-slave-deployment.yaml deployment "redis-slave" created [root@master guestbook]# [root@master guestbook]# kubectl get deploy NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE redis-master 1 1 1 1 17m redis-slave 2 2 2 2 24s [root@master guestbook]# [root@master guestbook]# kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE redis-master-517881005-c3qek 1/1 Running 0 18m 10.255.73.2 node2 redis-slave-1885102530-brg9b 1/1 Running 0 1m 10.255.73.3 node2 redis-slave-1885102530-o8y5p 1/1 Running 0 1m 10.255.70.2 node1 [root@master guestbook]# 可以看到一个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@master guestbook]# kubectl create -f redis-slave-service.yaml
service “redis-slave” created
[root@master guestbook]#

[root@master guestbook]# kubectl get svc -o wide
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
kubernetes 10.254.0.1 443/TCP 44m
redis-master 10.254.203.144 6379/TCP 12m app=redis,role=master,tier=backend
redis-slave 10.254.0.214 6379/TCP 38s app=redis,role=slave,tier=backend
[root@master guestbook]#

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

[root@master guestbook]# kubectl create -f frontend-deployment.yaml deployment "frontend" created [root@master guestbook]# [root@master guestbook]# kubectl get deploy NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE frontend 3 3 3 2 13s redis-master 1 1 1 1 22m redis-slave 2 2 2 2 5m [root@master guestbook]# [root@master guestbook]# kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE frontend-941252965-8rvrb 1/1 Running 0 1m 10.255.73.4 node2 frontend-941252965-ka3vd 1/1 Running 0 1m 10.255.70.3 node1 frontend-941252965-qqamp 1/1 Running 0 1m 10.255.70.4 node1 redis-master-517881005-c3qek 1/1 Running 0 24m 10.255.73.2 node2 redis-slave-1885102530-brg9b 1/1 Running 0 7m 10.255.73.3 node2 redis-slave-1885102530-o8y5p 1/1 Running 0 7m 10.255.70.2 node1 [root@master guestbook]# 可以看到一个redis master,两个redis slave和三个frontend pods

6、创建guestbook service
和其他service一样,你可以创建一个service管理frontend pods

[root@master guestbook]# kubectl create -f frontend-service.yaml service "frontend" created [root@master guestbook]# [root@master guestbook]# kubectl get svc -o wide NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR frontend 10.254.18.215 80/TCP 44s app=guestbook,tier=frontend kubernetes 10.254.0.1 443/TCP 50m redis-master 10.254.203.144 6379/TCP 18m app=redis,role=master,tier=backend redis-slave 10.254.0.214 6379/TCP 6m app=redis,role=slave,tier=backend [root@master guestbook]#

我们可以通过frontend service(10.254.18.215)访问pods

7、外部网络访问guestbook
:30001 可以直接访问了
[root@node2 ~]# curl :30001

Guestbook
Guestbook
Submit
{{msg}}
[root@node2 ~]#

附: 本案例用到的6个.yaml文件

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/d1d899bb415c375f0627e2705c28ab06.html