實例:Guestbook留言板系統將經過Pod、RC、Service等資源對象搭建完成,成功啓動後在網頁中顯示一條「Hello World」留言。其系統架構是一個基於PHP+Redis的分佈式Web應用,前端PHP Web網站經過訪問後端的Redis來完成用戶留言的查詢和添加功能。同時Redis以Master+Slave的模式進行部署,實現數據的讀寫分離能力。php
架構圖:前端
apiVersion: v1 kind: ReplicationController #代表這是一個RC metadata: name: redis-master labels: name: redis-master spec: replicas: 1 selector: #spec.selector是RC的Pod選擇器,監控和管理擁有這些標籤(Label)的Pod實例,確保當前集羣上始終有且僅有replicas個Pod實例在運行,這裏設置replicas=1表示只運行一個名爲redis-master的Pod實例,當集羣中運行的Pod數量小於replicas時,RC會根據spec.template段定義的Pod模塊來生成一個新的Pod實例,lebels屬性指定了該Pod的標籤,這裏的labels必須匹配RC的spec.selector name: redis-master template: metadata: labels: name: redis-master spec: containers: - name: master image: kubeguide/redis-master ports: - containerPort: 6379
kubectl create -f redis-master-controller.yaml
apiVersion: v1 kind: Service metadata: name: redis-master #metadata.name是Service的服務名 labels: name: redis-master spec: ports: - port: 6379 #port屬性定義的是Service的虛擬端口號 targetPort: 6379 #targetPort屬性指定後端Pod內容器應用監聽的端口號 selector: #spec.selector肯定了選擇哪些Pod name: redis-master
kubectl create -f redis-master-service.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
apiVersion: v1 kind: Service metadata: name: redis-slave labels: name: redis-slave spec: ports: - port: 6379 selector: name: redis-slave
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
apiVersion: v1 kind: Service metadata: name: frontend labels: name: frontend spec: type: NodePort ports: - port: 80 nodePort: 30001 selector: name: frontend
七、經過瀏覽器訪問frontend頁面node