<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 適用于kubernetes的應用開發部署流程 本文講解了如何開發容器化應用,并使用Wercker持續集成工具構建docker鏡像上傳到docker鏡像倉庫中,然后在本地使用*docker-compose*測試后,再使用`kompose`自動生成kubernetes的yaml文件,再將注入Envoy sidecar容器,集成Istio service mesh中的詳細過程。 整個過程如下圖所示。 ![流程圖](https://box.kancloud.cn/52c9aafd719b43dc62b34de928cd854d_1115x960.jpg) 為了講解詳細流程,我特意寫了用Go語言開發的示例程序放在GitHub中,模擬監控流程: - [k8s-app-monitor-test](https://github.com/rootsongjc/k8s-app-monitor-test):生成模擬的監控數據,在接收到http請求返回json格式的metrics信息 - [K8s-app-monitor-agent](https://github.com/rootsongjc/k8s-app-monitor-agent):獲取監控metrics信息并繪圖,訪問該服務將獲得監控圖表 API文檔見[k8s-app-monitor-test](https://github.com/rootsongjc/k8s-app-monitor-test)中的`api.html`文件,該文檔在API blueprint中定義,使用[aglio](https://github.com/danielgtaylor/aglio)生成,打開后如圖所示: ![API](https://box.kancloud.cn/6f47f72179cc2276872336b1a2ed31d2_958x941.jpg) ## 關于服務發現 `K8s-app-monitor-agent`服務需要訪問`k8s-app-monitor-test`服務,這就涉及到服務發現的問題,我們在代碼中直接寫死了要訪問的服務的內網DNS地址(kubedns中的地址,即`k8s-app-monitor-test.default.svc.cluster.local`)。 我們知道Kubernetes在啟動Pod的時候為容器注入環境變量,這些環境變量在所有的 namespace 中共享(環境變量是不斷追加的,新啟動的Pod中將擁有老的Pod中所有的環境變量,而老的Pod中的環境變量不變)。但是既然使用這些環境變量就已經可以訪問到對應的service,那么獲取應用的地址信息,究竟是使用變量呢?還是直接使用DNS解析來發現? 答案是使用DNS,詳細說明見[Kubernetes中的服務發現與Docker容器間的環境變量傳遞源碼探究](https://jimmysong.io/posts/exploring-kubernetes-env-with-docker/)。 ## 持續集成 因為我使用wercker自動構建,構建完成后自動打包成docker鏡像并上傳到docker hub中(需要現在docker hub中創建repo)。 構建流程見:https://app.wercker.com/jimmysong/k8s-app-monitor-agent/ ![wercker構建頁面](https://box.kancloud.cn/848f0077d364251f87d972e38e627032_3316x1536.jpg) 生成了如下兩個docker鏡像: - jimmysong/k8s-app-monitor-test:9c935dd - jimmysong/k8s-app-monitor-agent:234d51c ## 測試 在將服務發布到線上之前,我們可以先使用*docker-compose*在本地測試一下,這兩個應用的`docker-compose.yaml`文件如下: ```yaml version: '2' services: k8s-app-monitor-agent: image: jimmysong/k8s-app-monitor-agent:234d51c container_name: monitor-agent depends_on: - k8s-app-monitor-test ports: - 8888:8888 environment: - SERVICE_NAME=k8s-app-monitor-test k8s-app-monitor-test: image: jimmysong/k8s-app-monitor-test:9c935dd container_name: monitor-test ports: - 3000:3000 ``` 執行下面的命令運行測試。 ```bash docker-compose up ``` 在瀏覽器中訪問<http://localhost:8888/k8s-app-monitor-test>就可以看到監控頁面。 ## 發布 所有的kubernetes應用啟動所用的yaml配置文件都保存在那兩個GitHub倉庫的`manifest.yaml`文件中。也可以使用[kompose](https://github.com/kubernetes/kompose)這個工具,可以將*docker-compose*的YAML文件轉換成kubernetes規格的YAML文件。 分別在兩個GitHub目錄下執行`kubectl create -f manifest.yaml`即可啟動服務。也可以直接在*k8s-app-monitor-agent*代碼庫的`k8s`目錄下執行`kubectl apply -f kompose `。 在以上YAML文件中有包含了Ingress配置,是為了將*k8s-app-monitor-agent*服務暴露給集群外部訪問。 **方式一** 服務啟動后需要更新ingress配置,在[ingress.yaml](../manifests/traefik-ingress/ingress.yaml)文件中增加以下幾行: ```yaml - host: k8s-app-monitor-agent.jimmysong.io http: paths: - path: /k8s-app-monitor-agent backend: serviceName: k8s-app-monitor-agent servicePort: 8888 ``` 保存后,然后執行`kubectl replace -f ingress.yaml`即可刷新ingress。 修改本機的`/etc/hosts`文件,在其中加入以下一行: ```ini 172.20.0.119 k8s-app-monitor-agent.jimmysong.io ``` 當然你也可以將該域名加入到內網的DNS中,為了簡單起見我使用hosts。 **方式二** 或者不修改已有的Ingress,而是為該隊外暴露的服務單獨創建一個Ingress,如下: ```yaml apiVersion: extensions/v1beta1 kind: Ingress metadata: name: k8s-app-monitor-agent-ingress annotations: kubernetes.io/ingress.class: "treafik" spec: rules: - host: k8s-app-monitor-agent.jimmysong.io http: paths: - path: / backend: serviceName: k8s-app-monitor-agent servicePort: 8888 ``` 詳見[邊緣節點配置](../practice/edge-node-configuration.md)。 ## 集成Istio service mesh 上一步中我們生成了kubernetes可讀取的應用的YAML配置文件,我們可以將所有的YAML配置和并到同一個YAML文件中假如文件名為`k8s-app-monitor-istio-all-in-one.yaml`,如果要將其集成到Istio service mesh,只需要執行下面的命令。 ```bash kubectl apply -n default -f <(istioctl kube-inject -f k8s-app-monitor-istio-all-in-one.yaml) ``` 這樣就會在每個Pod中注入一個sidecar容器。 ## 驗證 如果您使用的是Traefik ingress來暴露的服務,那么在瀏覽器中訪問<http://k8s-app-monitor-agent.jimmysong.io/k8s-app-monitor-agent>,可以看到如下的畫面,每次刷新頁面將看到新的柱狀圖。 ![圖表](https://box.kancloud.cn/c97597566d577c0d43f04fa039edf74f_1015x579.jpg) 使用[kubernetes-vagrant-centos-cluster](https://github.com/rootsongjc/kubernetes-vagrant-centos-cluster)來部署的kubernetes集群,該應用集成了Istio service mesh后可以通過<http://172.17.8.101:32000/k8s-app-monitor-agent>來訪問。 在對*k8s-app-monitor-agent*服務進行了N此訪問之后,再訪問<http://grafana.istio.jimmysong.io>可以看到Service Mesh的監控信息。 ![Grafana頁面](https://box.kancloud.cn/a941a0a2279e53c24cc7049d6d0e98fc_2582x1688.png) 訪問<http://servicegraph.istio.jimmysong.io/dotviz>可以看到服務的依賴和QPS信息。 ![servicegraph頁面](https://box.kancloud.cn/05c6410198b879d38a450d70244cc4ea_1168x1046.png) 訪問<http://zipkin.istio.jimmysong.io>可以選擇查看`k8s-app-monitor-agent`應用的追蹤信息。 ![Zipkin頁面](https://box.kancloud.cn/6a575e9b4cd77c7505023710d0b7dcc4_2582x1688.png) 至此從代碼提交到上線到Kubernetes集群上并集成Istio service mesh的過程就全部完成了。
                  <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>

                              哎呀哎呀视频在线观看