1. 程式人生 > 實用技巧 >Day0-1. Docker環境準備

Day0-1. Docker環境準備

1.1 軟體環境

1.2 升級核心

CentOS 7.x 系統自帶的 3.10.x 核心存在一些 Bugs,導致執行的 Docker、Kubernetes 不穩定,例如:

  • 高版本的 docker(1.13 以後) 啟用了 3.10 kernel 實驗支援的 kernel memory account 功能(無法關閉),當節點壓力大如頻繁啟動和停止容器時會導致 cgroup memory leak;
  • 網路裝置引用計數洩漏,會導致類似於報錯:"kernel:unregister_netdevice: waiting for eth0 to become free. Usage count = 1";

解決方案如下:

  • 升級核心到 4.4.X 以上;
  • 或者,手動編譯核心,disable CONFIG_MEMCG_KMEM 特性;
  • 或者,安裝修復了該問題的 Docker 18.09.1 及以上的版本。但由於 kubelet 也會設定 kmem(它 vendor 了 runc),所以需要重新編譯 kubelet 並指定 GOFLAGS="-tags=nokmem";
shell> git clone --branch v1.14.1 --single-branch --depth 1 https://github.com/kubernetes/kubernetes
shell> cd kubernetes
shell> KUBE_GIT_VERSION=v1.14.1 ./build/run.sh make kubelet GOFLAGS="-tags=nokmem"

這裡採用升級核心的解決方法:

shell> rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
shell> yum --enablerepo=elrepo-kernel install -y kernel-lt
# 設定開機從新核心啟動
shell> grub2-set-default 0
shell> reboot