<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                # 1、啟動Kubernates 開始我們需要一個運行的K8s集群。詳細的已經在啟動K8s集群的章節解釋過了。 ## Task 啟動一個單節點的集群使用幫助腳本。幫助腳本將會啟動API server,Master,一個代理和DNS發現。Web App使用DNS發現找到Redis從節點來存儲數據。 ``` launch.sh ``` launch.sh文件: ``` #!/bin/bash echo Waiting for Kubernetes to start... while [ ! -f /root/.kube/config ] do sleep 1 done echo Kubernetes started if [ -f /root/.kube/start ]; then /root/.kube/start fi ``` ## 健康檢查 檢查所有組件是否啟動使用下面的健康檢查: ``` kubectl cluster-info kubectl get nodes ``` 如果節點返回NotReady,然后需要繼續等待。重試之前多等一會。 # 2、Redis 主節點控制器 啟動應用的第一步是啟動Redis主節點。一個K8s服部署只要有兩個部署,一個RC(復制控制器)和一個Service。 復制控制器定義了有多少個實例應該被運行,要使用的Docker鏡像,標識服務的名稱。其他選項用于配置和發現。使用上面的編輯器查看YAML定義。 如果Redis出故障了,復制控制器將重啟它在另一個活動的節點上。 redis-master.service.yaml ``` 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: redis:3.0.7-alpine ports: - containerPort: 6379 ``` ## 創建復制控制器(RC) 在這個例子上,YAML文件定義了一個名叫redis-master的redis服務器,它使用官方的redis運行在6379端口。kubectl create命令使用YAML定義并指示主節點啟動控制器。 ``` kubectl create -f redis-master-controller.yaml ``` ## 運行了什么? 上面的命令運行了復制控制器,查看: ``` kubectl get rc ``` 所有的容器描述為Pod。pod是組成特定應用程序的容器的集合,例如Redis。你可以查看這個使用: ``` kubectl get pods ``` # 3、Redis 主節點 Service 第二部分就是Service,一個K8s服務就是一個命名的負載均衡器,它代理流量到一個或更多容器。即使容器是在不同的節點上,這個代理仍是有用的。 Service代理在集群內進行通信,很少向外部接口公開端口。 當你啟動一個service,看起來你不能使用curl或者netcat連接它,除非你作為K8s的一部分啟動它。推薦的方法是用一個負載均衡器服務去處理外部通信。 redis-master-service.yaml文件: ```yaml apiVersion: v1 kind: Service metadata: name: redis-master labels: name: redis-master spec: ports: # the port that this service should serve on - port: 6379 targetPort: 6379 selector: name: redis-master ``` ## 創建Service 這個YAML文件定義了復制控制器的名字redis-master,和應該被代理的端口。 ``` kubectl create -f redis-master-service.yaml ``` 列出和描述 Service ``` kubectl get services ``` ``` kubectl describe service redis-master ``` # 4、復制從節點pods 在這個例子中,我們將會運行redis從節點,它從主節點復制數據。更多Redis復制的詳細信息查閱[http://redis.io/topics/replication](http://redis.io/topics/replication)。 想先前描述的那樣,控制器定義服務如何運行。在這個例子中,我們需要決定服務如何發現其他pods。這個YAML將GET\_HOSTS\_FROM屬性表示為DNS。您可以將其更改為使用yaml中的環境變量,但這會引入創建順序依賴關系,因為需要運行服務才能定義環境變量。 redis-slave-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: worker image: gcr.io/google_samples/gb-redisslave:v1 env: - name: GET_HOSTS_FROM value: dns # If your cluster config does not include a dns service, then to # instead access an environment variable to find the master # service's host, comment out the 'value: dns' line above, and # uncomment the line below. # value: env ports: - containerPort: 6379 ``` ## 啟動Redis從節點控制器 在這種情況下,我們將會使用鏡像kubernates/redis-slave:v2啟動兩個pod實例。它將通過DNS連接到redis-master。 ``` kubcetl create -f redis-slave-controller.yaml ``` 列出復制控制器 ``` kubectl get rc ``` # 5、Redis 從節點 Service 與前面一樣,我們需要使我們的從節點能夠被傳入的請求訪問。這是通過啟動一個知道如何與redis-slave通信的服務來實現的。 因為我們有兩個復制的pod,service將會在這兩個pod之間提供負載均衡。 啟動Redis從節點Service ``` kubectl create -f redis-slave-service.yaml ``` ``` kubectl get services ``` # 6、前端復制pod 數據服務啟動后,現在我們可以部署web應用。部署web應用的方式和我們之前部署pod是一樣的。 ## 啟動前臺 YAML定義了一個叫做frontend的service。它使用鏡像 gcr.io/googlesamples/gb-frontend:v3 。這個復制控制器將會確保總有3個pod存在。 fronted-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: php-redis image: gcr.io/google_samples/gb-frontend:v3 env: - name: GET_HOSTS_FROM value: dns # If your cluster config does not include a dns service, then to # instead access environment variables to find service host # info, comment out the 'value: dns' line above, and uncomment the # line below. # value: env ports: - containerPort: 80 ``` ``` kubectl create -f fronted-controller.yaml ``` 列出控制器和pods ``` kubectl get rc ``` ``` kubectl get pods ``` ## PHP 代碼 這個PHP代碼使用HTTP和JSON與Redis通信。寫操作請求redis-master,讀操作請求redis-slave節點。 # 7、Guestbook 前端 Service 訪問前端,我們需要啟動一個service,配置代理。 ## 啟動代理 YAML文件定義了一個NodePort的service。NodePort可以設置一個在整個集群都眾所周知的端口。這類似于在Docker中的 -p 80:80。 在這里,我們定義我們的web app運行在80端口,但是我們在30080端口暴露服務。 fronted-service.yaml文件: ``` apiVersion: v1 kind: Service metadata: name: frontend labels: name: frontend spec: # if your cluster supports it, uncomment the following to automatically create # an external load-balanced IP for the frontend service. # type: LoadBalancer type: NodePort ports: # the port that this service should serve on - port: 80 nodePort: 30080 selector: name: frontend ``` ``` kubectl create -f fronted-service.yaml ``` ``` kubectl get services ``` 我們將會在將來的章節討論NortPort。 # 8、訪問Guestbook 前端 當所有的控制器和servies定義好,K8s將會把他們作為pod啟動。一個pod可以根據正在發生的動作有不同的狀態。例如,如果Docker鏡像正在下載,pod將會是pending狀態,因此它不能啟動。一旦準備好,它的狀態將會轉變為運行中。 ## 查看Pod狀態 你可以查看相應的狀態,使用下面的命令: ``` kubectl get pods ``` ## 查看 NortPort 如果你沒有分配一個都知道的NortPort,K8s會隨機分配一個可用的端口。你可以使用kubectl找到這個已分配的NortPort。 ``` kubcetl describe service frontend | grep NodePort ``` ## 查看UI 一旦pod是運行狀態,你可以通過端口30080查看UI。訪問: [https://2886795308-30080-cykoria08.environments.katacoda.com](https://2886795308-30080-cykoria08.environments.katacoda.com/) 在背后,PHP服務通過DNS發現了Redis實例。現在你在K8s上部署了一個多層應用。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看