k8s入門系列之guestbook快速部署


k8s集群以及一些擴展插件已經安裝完畢,本篇文章介紹一下如何在k8s集群上快速部署guestbook應用。

•實驗環境為集群:master(1)+node(4),詳細內容參考《k8s入門系列之集群安裝篇

•guestbook應用示例介紹:
應用包含2部分:web前端和redis(1主2從),用戶通過web前端提交數據,寫入到redis-master上,然后通過讀取同步到redis-slave上的數據展示給用戶。

提示:所有的定義文件都存放在master端,所有的操作也都是在master端操作。

實驗:

1.配置啟動redis-master服務
•編輯redis-master-rc.yml定義文件
[root@master guestbook]# cat redis-master-rc.yml

kind: ReplicationController
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: docker.gaoxiaobang.com/kubernetes/redis
        ports:
        - containerPort: 6379

•創建Pod

[root@master guestbook]# kubectl create -f redis-master-rc.yml
replicationcontroller "redis-master" created

•查看rc(ReplicationController)

[root@master guestbook]# kubectl get rc -l name=redis-master
NAME DESIRED CURRENT AGE
redis-master 1 1 29s

•查看Pod

[root@master guestbook]# kubectl get pods -o wide
NAME                     READY     STATUS    RESTARTS   AGE       NODE
redis-master-7tt3s 1/1 Running 0 15m 192.168.30.21

 

Kubernetes中Service中起到了負載均衡器的作用,通過Proxy和Selector決定服務請求傳遞給后端提供服務的Pod,對外提供固定的IP,這樣的話Redis Master Pod遷移變化也不會影響。

•編輯redis-master-svc.yml定義文件
[root@master guestbook]# cat redis-master-svc.yml

apiVersion: v1
kind: Service
metadata:
  name: redis-master
  labels:
    name: redis-master
spec:
  ports:
  - port: 6379
    targetPort: 6379
  selector:
    name: redis-master

•創建Service

[root@master guestbook]# kubectl create -f redis-master-svc.yml

•查看Service

[root@master guestbook]# kubectl get svc redis-master
NAME           CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
redis-master   10.254.59.45   <none>        6379/TCP   3m

 

2.配置啟動redis-slave服務
•編輯redis-slave-rc.yml定義文件
[root@master guestbook]# cat redis-slave-rc.yml

apiVersion: v1
kind: ReplicationController
metadata:
  name: redis-slave
  labels:
    name: redis-slave
spec:
  replicas: 2
  selector:
    name: redis-slave
  template:
    metadata:
      labels:
        name: redis-slave
    spec:
      containers:
      - name: worker
        image: docker.gaoxiaobang.com/kubernetes/redis-slave
        ports:
        - containerPort: 6379

•創建Pod

[root@master guestbook]# kubectl create -f redis-slave-rc.yml
replicationcontroller "redis-slave" created

•查看rc

[root@master guestbook]# kubectl get rc redis-slave
NAME          DESIRED   CURRENT   AGE
redis-slave   2         2         1m

•查看Pod

[root@master guestbook]# kubectl get pod -o wide
NAME                     READY     STATUS    RESTARTS   AGE       NODE
redis-master-7tt3s       1/1       Running   0          15m       192.168.30.21
redis-slave-drxok        1/1       Running   0          15m       192.168.30.23
redis-slave-h43yo        1/1       Running   0          15m       192.168.30.21

•編輯redis-slave-svc.yml定義文件
[root@master guestbook]# cat redis-slave-svc.yml

apiVersion: v1
kind: Service
metadata:
  name: redis-slave
  labels:
    name: redis-slave
spec:
  ports:
  - port: 6379
    targetPort: 6379
  selector:
    name: redis-slave

•創建Service

[root@master guestbook]# kubectl create -f redis-slave-svc.yml
service "redis-slave" created

•查看Service

[root@master guestbook]# kubectl get svc redis-slave
NAME          CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
redis-slave   10.254.172.53   <none>        6379/TCP   19m

 

3.配置啟動web端服務
•編輯guestbook-web-rc.yml定義文件
[root@master guestbook]# cat guestbook-web-rc.yml

apiVersion: v1
kind: ReplicationController
metadata:
  name: guestbook-web
  labels:
    name: guestbook-web
spec:
  replicas: 2
  selector:
    name: guestbook-web
  template:
    metadata:
      labels:
        name: guestbook-web
    spec:
      containers:
      - name: php-redis
        image: docker.gaoxiaobang.com/kubernetes/guestbook-web
        ports:
        - containerPort: 80

•創建Pod

[root@master guestbook]# kubectl create -f guestbook-web-rc.yml
replicationcontroller "guestbook-web" created

•查看rc

[root@master guestbook]# kubectl get rc guestbook-web
NAME            DESIRED   CURRENT   AGE
guestbook-web   2         2         18m

•查看Pod

[root@master guestbook]# kubectl get pods
NAME                     READY     STATUS    RESTARTS   AGE
guestbook-web-1un8o      1/1       Running   0          34m
guestbook-web-iyxpg      1/1       Running   0          34m
gxb-web-rc-afi56         1/1       Running   0          10d
redis-master-7tt3s       1/1       Running   0          38m
redis-slave-drxok        1/1       Running   0          37m
redis-slave-h43yo        1/1       Running   0          37m

 

•編輯guestbook-web-svc.yml定義文件
[root@master guestbook]# cat guestbook-web-svc.yml

apiVersion: v1
kind: Service
metadata:
  name: guestbook-web
  labels:
    name: guestbook-web
spec:
  type: NodePort
  ports:
  - port: 80
  selector:
    name: guestbook-web

•創建Service

You have exposed your service on an external port on all nodes in your
cluster. If you want to expose this service to the external internet, you may
need to set up firewall rules for the service port(s) (tcp:520) to serve traffic.

See http://releases.k8s.io/release-1.2/docs/user-guide/services-firewalls.md for more details.
service "guestbook-web" created

*提示:在集群所有node節點上都開啟了520端口,訪問任何一個node的520端口都可以。例如:192.168.30.21:520

•查看Service

[root@master guestbook]# kubectl get svc guestbook-web
NAME            CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
guestbook-web   10.254.225.216   nodes         80/TCP    34m


4.訪問guestbook,如下圖

 

參考文章:

http://dockone.io/article/542


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM