Kubernetes實踐--hello world 示例

本文所說的Hello world是一個web留言板應用,而且是基於PHP+Redis的兩層分佈式架構的web應用,前端PHP web網站經過訪問後端Redis數據庫完成用戶留言的查詢和添加功能,具有讀寫分離能力,留言板內容是從redis中查詢到的,首頁中添加劉潭並提交以後留言會被添加到redis中。php

Redis層採用一個Master與兩個salve,Master負責寫操做,slave負責讀操做,PHPweb層啓動三個實例組成集羣,對網站的訪問進行負載均衡。 
本文的例子首選須要將Docker環境和k8s環境搭建完畢,這個在前一節中已經作了講解,有須要的能夠參考前一節內容部署一下Docker和k8s環境。 
實驗環境: Centos7.2 64位,虛擬機。 
下面進行實例的具體操做。前端

1. 建立redis-master Pod和服務

先定義RC來建立pod,而後定義與之關聯的service。 
爲redis-master服務新建一個名爲redis-master-controller.yaml的RC定義文件,內容爲:node

apiVersion: v1
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: kubeguide/redis-master
        ports:
        - containerPort: 6379

新建好文件以後執行以下命令:mysql

kuberctl create -f redis-master-controller.yaml

刪除:將create換爲delete便可。 
查看剛剛新建的redis-master:web

kuberctl get rc

檢查pod信息:redis

kuberctl get pods

解決kubectl get pods時 No resources found.問題

  1. 使用yum直接安裝etcd, kubectl,按順序啓動以下服務:etcd, docker, kube-apiserver, kube-controller-manager, kube-scheduler, kubelet, kube-proxy.
  2. 建立了mysql-rc.yaml.
  3. 執行kubectl create -f mysql-rc.yaml,反饋正常
  4. 執行kubectl get rc, 反饋正常
  5. 執行kubectl get pods,顯示no resources found.
  6. 解決方法:
  7. 一、$ vi /etc/kubernetes/apiserver
  8. 二、找到這一行 "KUBE_ADMISSION_CONTROL="--admission_control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota",去掉ServiceAccount,保存退出。
  9. 三、從新啓動kube-apiserver服務便可
  10. 此時執行kubectl get pods, no resources found問題得以解決

 

下面新建與上面建的pod相關聯的service,service對應的文件redis-master-service.yaml,內容以下:sql

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

建立service:docker

kubectl create -f redis-master-service.yaml

查看新建的service:數據庫

kubectl get services

2. redis-salve Pod和服務

步驟和redis-master的同樣。 
新建文件redis-salve-controller.yaml,內容以下:後端

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: slave
        image: kubeguide/guestbook-redis-slave
        env:
        - name: GET_HOSTS_FROM
          value: env
        ports:
        - containerPort: 6379

運行kubectl create命令:

kubectl create -f redis-salve-controller.yaml

查看RC:

kubectl get rc

查看pod:

kubectl get pods

配置文件redis-salve-service.yaml內容以下:

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

建立service:

kubectl create -f redis-slave-service.yaml

檢查service:

kubectl get services;

3. 建立frontend Pod和服務

文件frontend-controller.yaml內容以下:

apiVersion: v1
kind: ReplicationController
metadata:
  name: frontend
  labels:
    name: frontend
spec:
  replicas: 3
  selector:
    name: frontend
  template:
    metadata:
     labels:
       name: frontend
    spec:
      containers:
      - name: frontend
        image: kubeguide/guestbook-php-frontend
        env:
        - name: GET_HOSTS_FROM
          value: env
        ports:
        - containerPort: 80

執行命令kubectl create:

kubectl create -f frontend-controller.yaml

檢查RC:

kunectl get rc

檢查pod:

kubectl get pods

文件frontend-service.yaml內容以下:

apiVersion: v1
kind: Service
metadata:
  name: frontend
  labels:
    name: frontend
spec:
  type: NodePort
  ports:
  - port: 80
    nodePort: 30001
  selector:
    name: frontend

建立服務:

kubectl create -f frontend-service.yaml

檢查service:

kubectl get services;

4. 訪問網站

如個人虛擬機IP爲xx.xx.xx.xx則瀏覽器訪問: xx.xx.xx.xx:30001 成功的話會出現簡單的留言板界面,並可進行留言commit。

相關文章
相關標籤/搜索