核心數太多導致的 Docker 問題

因為之前在使用 ARM Server ,核心數高達 96 ,所以 Golang 的軟體預設就會使用 96 個程序,有時候就會讓 docker 卡卡的,很難使用,問題會超級多。之前使用 Kolla-Ansible 部署 OpenStack 的時候就經常遇到 Gather Facts 卡住,ARM Server 本身必須要重新啟動才會正常的情況。

所以建議用 GOMAXPROCS 把 docker.service 與 containerd.service 的程序使用量限制在一個合理範圍,目前看起來設定 GOMAXPROCS=4 ,dockerd 與 containerd 都還是會複製成 12 個程序,所以我設定為 GOMAXPROCS=12 ,讓程序使用量為 36 左右,目前測試起來沒有太大的問題。

CloneZilla Bittorrent Deploy

這篇就隨便打打吧。就是篇剛剛幫國網中心 debug 完的心得。

當初就只是很單純覺得 CloneZilla Multicast Mode 為甚麼速度這麼不穩,而研究並思考可以用什麼方案取代,沒想到黃秉鈞學長隨口講講的 BT Solution ,最後真的被我跟我室友顏靖軒做出來了。從 2016 年底開發至今,總算是迎來第一個完整且穩定的 CloneZilla Bittorrent Mode (>=2.6.1-2 or 20190123-* amd64)。附上國網中心蕭志榥研究員做的教學文件

可是做完這個之後,我卻沒有任何地方可以真的大規模測試,畢竟我從一開始就不是做網管的,所以也只好請大家幫忙測試看看啦。

Clonezilla live 2.6.1-2

The underlying GNU/Linux operating system was upgraded. This release is based on the Debian Sid repository (as of 2019/Jan/22).
Enable secure boot support when creating Debian live system (create-debian-live). However, it's still not ready for secure boot: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=920144
Add nuttcp as an alternative to netcat in ocs-onthefly. Add dialog for choosing compression algorithm in expert mode. Option "-u" was added in the dialog of expert mode to use nuttcp.
Bug fixed: For CentOS 7, the ncat need the option "--recv-only" in the client.
To avoid OOM killer to kill ezio, we use the multi torrent files support (ezio >= 1.1.6) and limit the cache size. It can be tuned by ezio_cache_ratio in drbl-ocs.conf.
Add a mechanism to reuse image for BT from disk mode. The option -mdst-img can be used to assign the existing pseudo image.
New mechanism was added: instead of using Partclone image as the BT source, the local device (whole disk or partitions) can be as the source, too.
-- Steven Shiau <steven at clonezilla org> Tue, 22 Jan 2019 22:47:00 +0800

Intel 82599ES 10G 網卡啟用 PXE

最近在測試 CloneZilla EZIO 模式,想說自己有三台 server 閒置,那就拿來跑看看,結果沒想到有一張網卡沒有辦法 PXE 開機,所以只好研究下怎麼處理了。

解決方式

先下載 82599ES 的 firmware,應該會得到一個 IBABUILD.exe 的 DOS 執行檔,然後在透過 DOS 執行編譯還有 flash firmware,就可以搞定了。指令有點忘記了,之後想到在補。

Kolla-Ansible Nova Ephemeral Storage on NFS

OpenStack 通常會有兩種儲存 VM 的方式,一個是直接在 Nova-Compute Node 上面的 /var/lib/nova/instances ,另外一種則是儲存在 Cinder。前者通常也不會真的直接儲存在 Node 上,而是會透過 Shared Storage 儲存,例如 NFS 等等。

但是因為 OpenStack 會有一些 Lock 機制,偏偏 NFS 不一定實作全部的 Lock 種類,所以會導致 Lock 失敗,進而製作 VM 也跟著失敗。

Nova 在新增 VM 或是複製 Image 的時候,會考慮處理程序處理的問題,所以會使用 Lock ,以確保沒有正確無誤。透過 oslo.concurrency 處理 Lock,底層透過 fasteners 呼叫 fcntl ,進而失敗。所以我們將 Lock 機制暫時取消掉。目前還無法確定取消掉之後會不會有其他問題存在。

繼續閱讀 “Kolla-Ansible Nova Ephemeral Storage on NFS”

OpenStack Rocky Cinder NFS Driver Issue

最近使用 Kolla-Ansible 部署 OpenStack Rocky on AArch64/ARM64 發生一些問題,這問題並不只是存在 ARM 上,而是因為發行版所維護的 QEMU 版本已經跟到了 commit ca749954b09b89e22cd69c4949fb7e689b057963 ,這個 commit 使用到了 F_OFD_SETLK, NFSv3 正好不支援這類型 lock 操作。

而這個修改,並沒有根據不同檔案系統不支援 F_OFD_SETLK 回退 F_SETLK 的操作,所以只要在現代 Linux 中編譯 QEMU,就會直接使用 F_OFD_SETLK ,而造成在 NFSv3 上無法使用 lock 進而導致失敗的現象。

而這問題也不單單只影響 Cinder-Volume,也間接影響 Nova-Compute,如果 VM 要掛載 Volume,而 Cinder 使用 NFS Driver,則會在 Nova-Compute 上也把 NFS 掛載上去給 QEMU 使用。

繼續閱讀 “OpenStack Rocky Cinder NFS Driver Issue”