FAQ寶典之常見問題排查與修復方法

科技小能手發表於2017-11-12

一、服務/容器

1、為什麼我只能編輯容器的名稱?

Docker容器在建立之後就不可更改了。唯一可更改的內容是我們要儲存的不屬於Docker容器本身的那一部分資料。無論是停止、啟動或是重新啟動,它始終在使用相同的容器。如需改變任何內容都需要刪除或重新建立一個容器。

你可以克隆,即選擇已存在的容器,並基於已有容器的配置提前在新增服務介面中填入所有要設定的內容,如果你忘記填入某項內容,可以通過克隆來改變它之後刪除舊的容器。

2、service-link的容器/服務在Rancher中是如何工作的?

在Docker中,關聯容器(在docker run中使用–link)的ID和IP地址會出現在容器的/etc/hosts中。在Rancher中,我們不需要更改容器的/etc/hosts檔案,而是通過執行一個內部DNS伺服器來關聯容器,DNS伺服器會返回給我們正確的IP。

3、不能通過Rancher的介面開啟命令列或檢視日誌,如何去訪問容器的命令列和日誌?

Agent主機有可能會暴露在公網上,Agent上接受到的訪問容器命令列或者日誌的請求是不可信的。Rancher Server中發出的請求包括一個JWT(JSON Web Token),JWT是由伺服器簽名並且可由Agent校驗的,Agent可以判斷出請求是否

來自伺服器,JWT中包括了有效期限,有效期為5分鐘。這個有效期可以防止它被長時間使用。如果JWT被攔截而且沒有用SSL時,這一點尤為重要。

如果你執行docker logs -f (rancher-agent名稱或ID)。日誌會顯示令牌過期的資訊,隨後檢查Rancher Server主機和Rancher Agent主機的時鐘是否同步。

4、在哪裡可以看到我的服務日誌?

在服務的詳細頁中,我們提供了一個服務日誌的頁籤日誌。在日誌頁籤中,列出了和服務相關的所有事件,包括時間戳和事件相關描述,這些日誌將會保留24小時。

5、RANCHER SERVER 點選WEB shell螢幕白屏

如果RANCHER SERVER 執行在V1.6.2版本,點選WEB shell出現白屏,這是UI上的一個BUG,請選擇升級server服務。

二、跨主機通訊

如果容器執行在不同主機上,不能夠ping通彼此,可能是由一些常見的問題引起的。

1、如何檢查跨主機通訊是否正常?

在應用->基礎設施中,檢查 healthcheck 應用的狀態。如果是active跨主機通訊就是正常的。

手動測試,你可以進入任何一個容器中,去ping另一個容器的內部IP。在主機頁面中可能會隱藏掉基礎設施的容器,如需檢視點選“顯示系統容器”的核取方塊。

2、UI中顯示的主機IP是否正確?

有時,Docker網橋的IP地址會被錯誤的作為了主機IP,而並沒有正確的選擇真實的主機IP。這個錯誤的IP通常是172.17.42.1或以172.17.x.x開頭的IP。如果是這種情況,在使用docker run命令新增主機時,請用真實主機的IP地址來配置CATTLE_AGENT_IP環境變數。

sudo docker run -d -e CATTLE_AGENT_IP=<HOST_IP> --privileged 
-v /var/run/docker.sock:/var/run/docker.sock 
rancher/agent:v0.8.2 http://SERVER_IP:8080/v1/scripts/xxxx

3、Rancher的預設子網(10.42.0.0/16)在我的網路環境中已經被使用或禁止使用,我應該怎麼去更改這個子網?

Rancher Overlay網路預設使用的子網是10.42.0.0/16。如果這個子網已經被使用,你將需要更改Rancher網路中使用的預設子網。你要確保基礎設施服務裡的Network元件中使用著合適的子網。這個子網定義在該服務的rancher-compose.yml檔案中的default_network裡。

要更改Rancher的IPsec或VXLAN網路驅動,你將需要在環境模版中修改網路基礎設施服務的配置。建立新環境模板或編輯現有環境模板時,可以通過單擊編輯來配置網路基礎結構服務的配置。在編輯頁面中,選擇配置選項>子網輸入不同子網,點選配置。在任何新環境中將使用環境模板更新後的子網,編輯已經有的環境模板不會更改現在已有環境的子網。

這個例項是通過升級網路驅動的rancher-compose.yml檔案去改變子網為10.32.0.0/16。

ipsec:
  network_driver:
    name: Rancher IPsec
    default_network:
      name: ipsec
      host_ports: true
      subnets:
      # After the configuration option is updated, the default subnet address is updated
      - network_address: 10.32.0.0/16
      dns:
      - 169.254.169.250
      dns_search:
      - rancher.internal
    cni_config:
      `10-rancher.conf`:
        name: rancher-cni-network
        type: rancher-bridge
        bridge: docker0
        # After the configuration option is updated, the default subnet address is updated
        bridgeSubnet: 10.32.0.0/16
        logToFile: /var/log/rancher-cni.log
        isDebugLevel: false
        isDefaultGateway: true
        hostNat: true
        hairpinMode: true
        mtu: 1500
        linkMTUOverhead: 98
        ipam:
          type: rancher-cni-ipam
          logToFile: /var/log/rancher-cni.log
          isDebugLevel: false
          routes:
          - dst: 169.254.169.250/32

注意:隨著Rancher通過升級基礎服務來更新子網,以前通過API更新子網的方法將不再適用。

4、VXLAN 網路模式下,跨主機容器無法通訊

Vxlan 通過4789埠實現通訊,檢查防火牆有沒有開放此埠;

執行iptables -t filter -L -n參看IPtable表,檢視chain FORWARD 是不是被丟棄,如果是,執行sudo iptables -P FORWARD ACCEPT

三、DNS

1、如何檢視我的DNS是否配置正確?

如果你想檢視Rancher DNS配置,點選應用 > 基礎服務。點選network-services應用,選擇metadata,在metadata中,找到名為network-services-metadata-dns-X的容器,通過UI點選執行命令列後,可以進入該容器的命令列,然後執行如下命令。

cat /etc/rancher-dns/answers.json

2、在Ubuntu上執行容器時彼此間不能正常通訊。

如果你的系統開啟了UFW,請關閉UFW或更改/etc/default/ufw中的策略為:

DEFAULT_FORWARD_POLICY="ACCEPT"

四、負載均衡

1、為什麼我的負載均衡一直是Initializing狀態?

負載均衡器自動對其啟用健康檢查。如果負載均衡器處於初始化狀態,則很可能主機之間無法進行跨主機通訊。

2、我如何檢視負載均衡的配置?

如果要檢視負載均衡器的配置,你需要用進入負載均衡器容器內部查詢配置檔案,你可以在頁面選擇負載均衡容器的執行命令列

cat /etc/haproxy/haproxy.cfg

該檔案將提供負載均衡器的所有配置詳細資訊。

3、我在哪能找到HAproxy的日誌?

HAProxy的日誌可以在負載均衡器容器內找到。負載均衡器容器的docker logs只提供與負載均衡器相關的服務的詳細資訊,但不提供實際的HAProxy日誌記錄。

cat /var/log/haproxy

4、如何自定義負載均衡的配置

FAQ寶典之常見問題排查與修復方法

如圖,在自定義配置中,按照global、defaults、frontend、backend的格式配置。

五、健康檢查

1、為什麼健康檢查服務一直顯示×××初始化狀態?

healthcheck不僅為其他服務提供健康檢查,對系統元件(比如排程服務)也提供健康檢查服務,healthcheck也對自己進行健康檢查。多個healthcheck元件時,它們會相互交叉檢查,只有健康檢查通過後,容器狀態才會變成綠色。而healthcheck一直顯示×××初始化狀態,說明一直沒有通過健康檢查。健康檢查都是通過網路訪問的,所以一定是網路通訊異常導致。

六、排程

為什麼節點關機後,應用沒有自動排程到其他節點上?Rancher上應用的排程,需要配合健康檢查功能。當健康檢查檢查到應用不健康才會重新排程,如果沒有配置健康檢查,即使關機,cattle也不會對應用做排程處理。

七、CentOS

1、為什麼容器無法連線到網路?

如果你在主機上執行一個容器(如:docker run -it ubuntu)該容器不能與網際網路或其他主機通訊,那可能是遇到了網路問題。Centos預設設定/proc/sys/net/ipv4/ip_forward為0,這從底層阻斷了Docker所有網路。

解決辦法:

vi /usr/lib/sysctl.d/00-system.conf

新增如下程式碼:

net.ipv4.ip_forward=1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-arptables = 1

重啟network服務

systemctl restart network

檢視是否修改成功

sysctl net.ipv4.ip_forward

如果返回為net.ipv4.ip_forward = 1則表示成功了

##八、京東雲

1、京東雲執行rancher server出現以下問題

FAQ寶典之常見問題排查與修復方法

解決辦法:sudo sysctl -w net.ipv4.tcp_mtu_probing=1

推薦閱讀:《FAQ寶典之Rancher Server》《FAQ寶典之Rancher Server、K8s、Docker》

本文轉自 RancherLabs 51CTO部落格,原文連結:http://blog.51cto.com/12462495/2055816


相關文章