BoHong Li

@raccoon

Joined on Aug 7, 2015

  • else 後面可以接很多東西.. 根據 ECMAScript 2020 的定義: 以下程式碼合法: else 後面接 for const a = [1,2,3] if (!Array.isArray(a)) { console.log('...'); // do something...
     Like 2 Bookmark
  • 在使用 Express 搭配 view engine 時,為了避免每次需要渲染 view,導致效能過低,因此 express 內有快取機制,當 view 已經被渲染過,且在快取中有快取,就會直接使用快取中的結果。 這時候可以關閉 express 的 view cache 功能,這樣就能在編輯 view file 後,直接 reload 就能看到結果,不需要重開 server。 關閉 view 的方式很簡單,只要透過 app.disable 關閉 view cache 的設定即可。 "use strict"; const express = require('express'); const app = express();
     Like 2 Bookmark
  • :::warning 此篇文章討論的 Docker 為 Linux Container,有些內容可能不適用於 Windows Container 技術。 ::: 為什麼 Docker for Mac 會遇到硬碟空間不足的問題? Docker 的技術是基於 Linux Namespaces 與 cgroup 等功能做邏輯隔離,並在隔離的環境中透過同一個 Linux Kernel 執行程式,因此要執行 Docker 的首要條件就是需要有執行 Linux distribution 的機器。 而 Docker 公司為了普及 Docker 技術,推出了在各個主流開發平台上 (Windows, macOS) 透過運行 Linux 虛擬機的方式來滿足跨平台執行 Docker 的需求。 Docker for Mac 的原理是在 macOS 上使用 xhyve 執行虛擬機 ( xhyve 是透過 macOS 原生的虛擬化技術 Hypervisor.framework 執行虛擬機的軟體)。而虛擬機的作業系統是使用 Docker 推出的 Linux Kit 產生的作業系統。
     Like 2 Bookmark
  • Context 在 Kubernetes 中刪除 Namespae 的操作通常在 5 分鐘內會完成 (如果 namespace 中沒有太多 resources 的話),但有時候會發生超過 1 小時 Namespace 的狀態還在 Terminating 的狀態(如下圖),查看 GitHub 中相關的 Issue [^k8s-issue-1],發現原因可能就是 Kubernetes 刪除 Namespace 的流程出了問題,導致沒有正確執行 finalizer。 這時可以使用 kubectl get namespaces <NAMESPACE> -o yaml 查看該 namespace 中的 finalizers 是否有設定東西,通常都是這個引起 namespace 無法正常刪除。 Solution 遇到這件事,可以手動修改 finalizers,將 finalizers 刪除,但刪除 finalizers 沒辦法透過 kubectl edit 指令完成,也無法透過 kubectl apply apply 新的 resource configurations。 根據 issue 內的說明,可以透過 kubernetes 的 Update finalize of a Namespace API 修改 finalizers 的值。
     Like 3 Bookmark
  • 本文主要介紹在使用多個網路介面時,一張路由表可能無法做到複雜的封包路由功能,透過多重路由表搭配路由規則、iptables,讓封包使用不同的路由表,使用不同的介面轉送。 [TOC] Context 圖1:環境拓樸 如上圖,web server上有兩個網路介面,eth0連接內部私人網路;eth1直接連接 internet 提供對外存取服務。因為公司 IT 政策的關係,web server 自身產生的任何流量(系統更新、套件下載等...)都必須經過內部網路的邊界伺服器( Edge Router ),而 eth1 則是作為專線,用來服務由外對內的網頁伺服器流量。以此做到讓服務網路與管理網路分離。
     Like 3 Bookmark
  • [TOC] 簡介 (ChartMuseum)[https://github.com/helm/chartmuseum] 是一套儲存 Helm Chart 的伺服器,它解決了以往存放 Helm Chart 的不便。並提供與 Helm 整合的功能,可以透過 Helm 連接 ChartMuseum 做到上傳、部署 Chart 。 ChartMuseum 主要提供兩個功能 可以支援多個主流雲端儲存空間 (Cloud Storage) 提供上傳 Chart 的 API
     Like 3 Bookmark
  • iptables 是在 Linux 系統上實用的防火牆、NAT、封包管理系統,但如果需要在複雜的環境當中使用 iptables ,並且將 iptables 的規則保存的話,就需要使用一些技巧 Context 以往在 Linux 當中,我們可以透過 iptables 來當作防火牆使用,只要透過 iptables 中預設的 filter tables,即可做到封包的過濾功能。 但 iptables 的資料是於執行時新增規則,如果想要將規則存檔,並於開機時自動載入的話,我們就需要透過 iptables-save 與 iptables-restore 這兩個指令來完成。 根據 Debian Wiki^debian-wiki-iptables 中提到的方法,可以使用 iptables > /etc/iptables.up.rules 的方式將 iptables 的 rule 匯出至檔案,再透過 iptables < /etc/iptable.up.rules 指令將規則檔案還原。 文中也提到,可以在 /etc/network/if-pre-up.d/ 路徑中,放置 bash 檔案,這樣就會在網卡啟動前,呼叫 iptables-restore 指令,載入 iptables 的規則。
     Like 2 Bookmark