⑴ 使用k3s減少k8s成本
愛飛狗後台的數據爬蟲以及數據伺服器資源都部署在k8s上,使用rancher搭建。在不影響太多性能的情況下盡量選擇最低配置的機器。對於內存不足的情況適當的使用交換文件代替(swap)。整個集群大致結構如下:
一個月的開銷大概在60美元左右。分析上面的集群可以發現,rancher和etcd兩個節點是浪費了錢,每個月有20美元的開銷。DigitalOcean提供了k8s的託管集群,可以將這部分開銷節省。但託管集群的droplet無法定製化,無法使用交換分區和bbr,造成性能瓶頸。另外託管的droplet的最低要求也是2G的內存,造成不必要的開支。
k8s有一個非常不好的地方就是最低的機器要求比較高,1G內存的worker node已經完全低於推薦配置,如果在上面部署worker node直接的內存佔用就要300M左右,剩餘的內存空間並不多,必須要使用交換分區。etcd節點之前也用過1G的內存,但經常會由於大量使用交換分區導致性能問題,最後集群崩潰,所以無論如何也需要使用2G的內存才行。
最近rancher公司推出了k3s,其主打就是簡易的部署和極地的機器消耗。這點對於節約成本來講非常的重要。我試了下k3s的server大概只佔用200M左右的內存,agent只佔用幾十兆內存,非常的節約。k3s也可以完全使用kubectl來進行管理,配置文件和k8s保持一致,非常方便。
我將etcd節點和rancher主機刪除,替換成了1G 1CPU的機器(5美元),節約了15美元,然後將aiflygo的伺服器進行降配置到2G 2CPU (15美元),總共節約20美元。得益於更多的可用內存,目前爬蟲的性能比以前更好,整體集群的性能也非常的高。
至於HA,既然都窮到了用k3s來減少開銷,對於我這樣的小型的集群和不是關鍵系統來講都不是需要考慮的了。
⑵ 【K8s 精選】CKA - 如何配置和使用 CoreDNS
CoreDNS 是 插拔化 的 DNS 伺服器,即 CoreDNS 內部採用插件機制,所有功能都是插件形式編寫。用戶可以使用 Corefile 來配置功能,甚至可以自定義插件擴展 CoreDNS。 CoreDNS 總體的工作流程 如下:
CoreDNS 的 Corefile 配置文件:
通過 Corefile 配置文件可知,兩個定義的 DNS Server,分別監聽 5300 和 53 埠,即 CoreDNS 的請求處理邏輯,如下圖所示。
集群管理員可以修改 CoreDNS Corefile 的 ConfigMap ,以更改服務發現的工作方式。
Corefile 配置文件格式如下:
在 Kubernetes 中,CoreDNS 安裝時使用如下默認 Corefile 配置:
自定義 DNS 設置的 Pod 示例:
創建上面的 Pod 後,容器 test 會在其 /etc/resolv.conf 文件內容如下所示,可以查看命令是 kubectl exec -it dns-example -- cat /etc/resolv.conf 。
⑶ 玩轉 K8s 許可權控制:RBAC + kubeconfig 搞定 kubectl 許可權管理那些事
當一個Kubernetes集群需要被多個租戶共享時,許可權控制變得至關重要。首要需求包括為每個用戶分配特定的命名空間,以及限制特定用戶只能執行特定操作,比如禁止「張三」執行kubectl delete node命令。
在上一篇文章中,我們討論了如何在不暴露NodePort的情況下,使用VS Code更新Pod內的代碼。其實,要實現多租戶通過VS Code連接自己的Pod的需求,涉及到為不同租戶創建合適的最小許可權kubeconfig。今天,我們就來解決這個問題。
許可權控制的核心是RBAC(Role-Based Access Control),它允許管理員精確控制用戶、ServiceAccount或實體對集群資源的操作許可權。RBAC通過角色、角色綁定和許可權規則來實現。在Kubernetes中,RBAC機制使得管理員能夠定義精細的訪問控制策略,從而提高集群的安全性和管理靈活性。
要開始RBAC配置,首先創建ServiceAccount、Role、RoleBinding和Secret。在Role中定義角色許可權,RoleBinding將角色綁定到特定用戶或ServiceAccount。Secret存儲了ServiceAccount的訪問憑證,如token。通過kubectl apply命令部署這些資源,Secret會自動包含CA證書和token信息,供後續使用。
接下來是配置kubeconfig文件,這是Kubernetes的配置文件,包含了訪問集群所需的所有信息。kubeconfig文件通常存儲在用戶主目錄的.kube目錄下,名為config。配置文件由clusters、users、contexts三個部分組成,分別對應集群信息、用戶信息和上下文切換功能。通過定義不同的上下文,用戶可以在多個集群和命名空間之間切換。
為了將用戶許可權配置應用於kubeconfig,需要將之前創建的Secret中的token復制到kubeconfig文件中。在kubeconfig中定義用戶和集群信息,並通過context將用戶和集群關聯起來。這樣,用戶可以通過切換context在不同的集群和命名空間之間進行切換。
完成配置後,可以通過測試來驗證kubeconfig是否正常工作。最簡單的方法是備份$HOME/.kube/config文件,替換為新的kubeconfig文件。另外,也可以通過設置KUBECONFIG環境變數來指定新的kubeconfig路徑。使用kubectx工具可以更方便地切換context,從而測試用戶的許可權是否正確應用於特定的集群和命名空間。
總結而言,通過RBAC和自定義kubeconfig文件,可以實現對Kubernetes集群的精細許可權控制。從創建角色、角色綁定到配置kubeconfig文件,再到測試和切換上下文,整個流程確保了集群資源的安全訪問控制。在這個過程中,理解RBAC機制和正確配置kubeconfig文件是關鍵步驟,它們共同為多租戶環境下的Kubernetes集群管理提供了強大的許可權控制能力。