雲計算之路-阿里雲上-容器難容:優化自建 docker swarm 集羣的部署

在上週六遭遇阿里雲容器服務 swarm 版的故障以後,咱們決定仍是走自建 docker swarm 之路,只要不是阿里雲底層的問題,咱們相信會找到辦法解決或避開自建 docker swarm 不穩定的問題。html

如下是咱們即將採用的 docker swarm 集羣部署優化措施。nginx

1)2 個 overlay 網絡合併爲 1 個,以減小維護多個 overlay 網絡的開銷docker

以前用了 2 個 overlay 網絡 cnblogs 與 proxy ,路由容器 docker-flow-proxy 只加入 proxy 網絡,全部容器加入 cnblogs 網絡,須要路由的容器才加入 proxy 網絡。現改成 1 個 overlay 網絡,全部容器(包括 docker-flow-proxy)都加入同一個網絡。ubuntu

2)限制每一個容器最大可使用的 CPU 與 內存,以避免有應用消耗過多 CPU 或內存而拖垮節點centos

如下是 docker swarm compose 文件中的配置服務器

deploy:
    resources:
    limits:
        cpus: "1.5"
        memory: 1.5G

3)將 service 的更新順序由 stop-first 改成 start-first ,以避免更新時形成單個容器負載太高網絡

stop-first 是 docker swarm 的默認方式,更新時先中止舊容器,而後啓動新容器。咱們的每一個服務部署了 2 個容器,先中止 1 個容器會將負載集中到另外 1 個容器,從而增長容器所在節點的負載。改成 start-first ,先啓動新容器,後中止舊容器,可避免這個問題。優化

deploy:
  update_config:
    order: start-first

4)將 docker-flow-proxy 的 proxy_proxy 服務改成全局部署阿里雲

proxy_proxy 是訪問的入口,全部外部訪問請求都由它轉發給對應的容器,全局部署(每一個節點部署)能夠減小跨主機網絡通訊。操作系統

deploy:
  mode: global

5)使用阿里雲彈性網卡,彈性網卡放在同一個專屬的 VPC 交換機中,全部節點都綁定彈性網卡,這樣每一個節點有 2 塊網卡,節點之間的 docker swarm 通訊走彈性網卡。

docker swarm init --advertise-addr 彈性網卡IP

6)將操做系統由 ubuntu 16.04 換成 centos 7.3

原本沒打算進行這個更換,更換是因爲 ubuntu 16.04 不直接支持阿里雲彈性網卡(須要另外手工配置),以前一直用的是 ubuntu 16.04 跑 docker swarm ,正好藉此機會換上 centos 看看效果。

 

2018年5月15日更新

後來實際採用的部署:

1)仍是用了 2 個 overlay 網絡,以便於進行內外網應用之間的隔離

2)繼續採用

3)繼續採用

4)用基於約定的靜態配置的 nginx 取代了 docker-flow-proxy ,nginx 也是全局部署

5)因爲 docker swarm 對多網卡的支持有問題,放棄使用多網卡

6)繼續採用

7)設置 reserve memory

    7.1)藉助一個容器爲系統保留內存

resources:
  limits:
    memory: 600M
  reservations:
    memory: 600M

    7.2)給每一個應用容器設置了 reservations - memory ,以免將太多容器部署在一個節點上

8)設置 task-history-limit 以減小 manager 解決的資源消耗

docker swarm update --task-history-limit 2

9)在服務器資源配置上由「保 manager 節點爲主」改成「保 worker 節點爲主」,即便 manager 節點宕機,已運行於 worker 節點上的應用容器依然能夠正常工做。

相關文章
相關標籤/搜索