<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Kubernetes on omegaatt</title>
    <link>https://www.omegaatt.com/tags/kubernetes/</link>
    <description>Recent content in Kubernetes on omegaatt</description>
    <generator>Hugo -- 0.164.0</generator>
    <language>zh-TW</language>
    <managingEditor>raiven.kao@gmail.com (Raiven Kao)</managingEditor>
    <webMaster>raiven.kao@gmail.com (Raiven Kao)</webMaster>
    <copyright>Raiven Kao 2020 - 2026</copyright>
    <lastBuildDate>Sun, 24 May 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://www.omegaatt.com/tags/kubernetes/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>把 k3s 從 Ubuntu 搬到 OpenSUSE MicroOS，順便換上 FluxCD GitOps</title>
      <link>https://www.omegaatt.com/blogs/develop/2026/migrate_k3s_lab_from_ubuntu_to_opensuse_micro_os/</link>
      <pubDate>Sun, 24 May 2026 00:00:00 +0000</pubDate><author>raiven.kao@gmail.com (Raiven Kao)</author>
      <guid>https://www.omegaatt.com/blogs/develop/2026/migrate_k3s_lab_from_ubuntu_to_opensuse_micro_os/</guid>
      <description>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;我的 Homelab 跑著一台 Proxmox VE，底下有一個 Ubuntu Server 24.04 的 VM 負責跑 k3s cluster，這個 cluster 接管了家裡所有的自架服務：從 &lt;a href=&#34;https://www.omegaatt.com/blogs/develop/2023/bitwarden_with_self_hosted_password_backend/&#34;&gt;Vaultwarden 密碼管理&lt;/a&gt;、&lt;a href=&#34;https://karakeep.app/&#34;&gt;Karakeep&lt;/a&gt; 書籤、&lt;a href=&#34;https://github.com/filebrowser/filebrowser&#34;&gt;Filebrowser&lt;/a&gt; 文件管理，到 &lt;a href=&#34;https://www.wakapi.dev/&#34;&gt;Wakapi&lt;/a&gt; 開發時間追蹤，大大小小跑了十幾個服務。&lt;/p&gt;
&lt;p&gt;這個架構一直跑得很穩。直到 Linux kernel 7.0 發布，我才開始動搖。&lt;/p&gt;
&lt;p&gt;kernel 7.0 的各種新特性讓我心癢，Ubuntu 26.04 LTS 剛好以 kernel 7.0 作為預設核心，理論上從 24.04 升上去就能一步到位。但在一個跑著十幾個服務的生產 VM 上執行 &lt;code&gt;do-release-upgrade&lt;/code&gt;，那種心臟發抖的感覺，即便有做好備份，還是讓我遲遲下不了手。&lt;/p&gt;
&lt;p&gt;就在猶豫要不要升級的當下，我問了自己一個問題：「我要繼續用 Ubuntu 嗎？」&lt;/p&gt;
&lt;p&gt;這個問題打開了一扇門。我的 Linux desktop 是 openSUSE Tumbleweed + KDE Plasma，用了三年、換過兩台裝置（筆電和桌電），沒有遇到太多問題。Tumbleweed 的滾動更新讓我一直跑著最新的 kernel，升級這件事從來不是一個需要另外排行程的壓力事件。&lt;/p&gt;
&lt;p&gt;既然 desktop 側已經對 openSUSE 生態有信心，server 側為什麼不試試看？&lt;/p&gt;
&lt;p&gt;這讓我開始認真考慮：有沒有一種 OS，讓 server 的升級這件事也變成「預設安全」而不是「需要勇氣」？&lt;/p&gt;
&lt;h2 id=&#34;為什麼選-opensuse-microos&#34;&gt;為什麼選 OpenSUSE MicroOS&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://microos.opensuse.org/&#34;&gt;OpenSUSE MicroOS&lt;/a&gt; 是一個 Immutable OS（不可變作業系統），核心特性有幾個：&lt;/p&gt;</description>
    </item>
    <item>
      <title>k3s Ingress Controller 從 Nginx 遷移到 Traefik 同時整合 CrowdSec</title>
      <link>https://www.omegaatt.com/blogs/develop/2026/migrate_ingress_controller_from_nginx_to_traefik/</link>
      <pubDate>Sat, 11 Apr 2026 00:00:00 +0000</pubDate><author>raiven.kao@gmail.com (Raiven Kao)</author>
      <guid>https://www.omegaatt.com/blogs/develop/2026/migrate_ingress_controller_from_nginx_to_traefik/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;TL;DR 馬上就看到有小王八蛋想壞壞&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://www.omegaatt.com/blogs/develop/2026/migrate_ingress_controller_from_nginx_to_traefik/images/SCR-20260411-nmjr.webp&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;2025 年 11 月，Kubernetes SIG Network 發布了一篇公告：&lt;a href=&#34;https://kubernetes.io/blog/2025/11/11/ingress-nginx-retirement/&#34;&gt;ingress-nginx 將正式退役&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;這個消息讓不少人震驚，但嚴格來說有個細節需要釐清。目前市場上有兩個長得很像的 nginx ingress controller：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubernetes/ingress-NGINX&#34;&gt;kubernetes/ingress-nginx&lt;/a&gt;：由 Kubernetes SIG Network 維護，這次宣布 EOL 的就是它。&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/nginx/kubernetes-ingress&#34;&gt;nginx/kubernetes-ingress&lt;/a&gt;（又稱 NKS）：由 F5 / NGINX Inc. 維護，目前仍持續開發中。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;我的 homelab k3s cluster 一直以來用的是 F5 維護的版本，嚴格來說不在這次 EOL 的範圍內。但這個公告還是給了我一個動力，與其繼續追蹤兩個版本之間的差異、擔心哪天又有什麼變化，不如趁這個機會把遷移一次做完。&lt;/p&gt;
&lt;p&gt;遷移目標選定 Traefik v3，原因有兩個：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;k3s 內建 Traefik 作為預設 Ingress Controller，&lt;a href=&#34;https://docs.k3s.io/networking/networking-services&#34;&gt;1.32 版本後升級為 Traefik v3&lt;/a&gt;，搭配 &lt;code&gt;HelmChartConfig&lt;/code&gt; 管理，和 cluster 的整合度最高。&lt;/li&gt;
&lt;li&gt;順手引入 CrowdSec 主動防護——長期以來我的服務靠著 Cloudflare proxy 當唯一守門人，但我一直想要在 Ingress 層就能即時判斷並封鎖攻擊者 IP，而不只是依賴前端的 CDN 過濾。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;為什麼不選-cilium-gateway-api&#34;&gt;為什麼不選 Cilium Gateway API&lt;/h2&gt;
&lt;p&gt;在決定遷移到 Traefik 之前，我也閱讀了 Gene 的&lt;a href=&#34;https://igene.tw/cilium-gateway-api-migration&#34;&gt;告別 ingress-nginx：Cilium Gateway API 遷移筆記&lt;/a&gt;，評估過 Cilium Gateway API 方案。Cilium 在 CNI 層整合了 Gateway API，理論上能提供更底層、效能更好的流量控制，且完全符合 Kubernetes Gateway API 的標準規範。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Helm Smart Resource：讓你的 Chart 學會與既有資源和平共處</title>
      <link>https://www.omegaatt.com/blogs/develop/2025/helm_smart_resource/</link>
      <pubDate>Sat, 22 Nov 2025 00:00:00 +0000</pubDate><author>raiven.kao@gmail.com (Raiven Kao)</author>
      <guid>https://www.omegaatt.com/blogs/develop/2025/helm_smart_resource/</guid>
      <description>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;在 Kubernetes 的世界裡，Helm 無疑是管理應用程式部署的霸主。它標準化了資源的定義，讓我們可以用宣告式的方式管理整套系統。然而，在真實世界的維運場景中，事情往往沒那麼單純。&lt;/p&gt;
&lt;p&gt;我們常遇到一種尷尬的情況：某些資源（例如 Database 的 Secret、外部系統的 ConfigMap）可能在 Helm Chart 安裝之前就已經由維運人員手動建立，或是由另一個流程（如 Terraform）預先準備好了。&lt;/p&gt;
&lt;p&gt;這時候，如果直接執行 &lt;code&gt;helm install&lt;/code&gt;，往往會收到 &amp;ldquo;resource already exists&amp;rdquo; 的錯誤；如果使用 &lt;code&gt;helm upgrade --install&lt;/code&gt;，又擔心 Helm 會覆蓋掉這些既有設定。&lt;/p&gt;
&lt;p&gt;這篇文章將分享一種「Smart Resource」的設計模式，透過 Helm 的 &lt;code&gt;lookup&lt;/code&gt; 函數與樣板邏輯，讓你的 Chart 能夠聰明地判斷：「這東西是我管的嗎？如果是，我才動它；如果不是，我就尊重現狀。」&lt;/p&gt;
&lt;h2 id=&#34;核心難題ownership&#34;&gt;核心難題：Ownership&lt;/h2&gt;
&lt;p&gt;在 Kubernetes 中，資源的「所有權」觀念至關重要。Helm 預設認為它 release 中的所有資源都應該由它全權管理。但當我們需要與外部資源協作時，我們需要更細緻的控制。&lt;/p&gt;
&lt;p&gt;我們的目標很明確：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;若資源不存在：建立它，並標記為 Helm 管理。&lt;/li&gt;
&lt;li&gt;若資源已存在且由 Helm 管理：更新它（Patch/Merge）。&lt;/li&gt;
&lt;li&gt;若資源已存在但由外部管理：保持原狀，不進行覆蓋或刪除。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;為了達成這個目標，我們需要一個輔助函數來判斷資源的歸屬權。&lt;/p&gt;
&lt;h2 id=&#34;實作細節&#34;&gt;實作細節&lt;/h2&gt;
&lt;h3 id=&#34;1-定義所有權檢查&#34;&gt;1. 定義所有權檢查&lt;/h3&gt;
&lt;p&gt;首先，我們在 &lt;code&gt;_helpers.tpl&lt;/code&gt; 中定義一個檢查函數。Helm 會在它建立的資源上打上特定的 Annotations（&lt;code&gt;meta.helm.sh/release-name&lt;/code&gt; 和 &lt;code&gt;meta.helm.sh/release-namespace&lt;/code&gt;）。我們可以利用這一點來判斷資源是否屬於當前的 Release。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{{&lt;span style=&#34;color:#ae81ff&#34;&gt;/*&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;Check if a resource is owned by this Helm release&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;Returns &amp;#34;true&amp;#34; or &amp;#34;false&amp;#34; as string for stable piping&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;*/}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{{- &lt;span style=&#34;color:#ae81ff&#34;&gt;define &amp;#34;visionone-filesecurity.isOwnedByRelease&amp;#34; -}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{{- &lt;span style=&#34;color:#ae81ff&#34;&gt;$resource := .resource -}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{{- &lt;span style=&#34;color:#ae81ff&#34;&gt;$releaseName := .releaseName -}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{{- &lt;span style=&#34;color:#ae81ff&#34;&gt;$releaseNamespace := .releaseNamespace -}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{{- &lt;span style=&#34;color:#ae81ff&#34;&gt;$owned := and $resource&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#ae81ff&#34;&gt;(hasKey $resource.metadata &amp;#34;annotations&amp;#34;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#ae81ff&#34;&gt;(eq (get $resource.metadata.annotations &amp;#34;meta.helm.sh/release-name&amp;#34;) $releaseName)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#ae81ff&#34;&gt;(eq (get $resource.metadata.annotations &amp;#34;meta.helm.sh/release-namespace&amp;#34;) $releaseNamespace)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-}}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{{ &lt;span style=&#34;color:#ae81ff&#34;&gt;printf &amp;#34;%t&amp;#34; $owned }}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{{- &lt;span style=&#34;color:#ae81ff&#34;&gt;end -}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;這段程式碼邏輯很簡單：只有當資源存在，且其 Annotations 中的 Release Name 與 Namespace 都與當前 Release 相符時，才視為「Owned」。&lt;/p&gt;</description>
    </item>
    <item>
      <title>告別 Docker Desktop 束縛！macOS 容器實戰：colima &#43; k8s &#43; containerd 踩坑遷移全記錄</title>
      <link>https://www.omegaatt.com/blogs/develop/2025/colima_docker_alternative_on_macos/</link>
      <pubDate>Sat, 19 Apr 2025 00:00:00 +0000</pubDate><author>raiven.kao@gmail.com (Raiven Kao)</author>
      <guid>https://www.omegaatt.com/blogs/develop/2025/colima_docker_alternative_on_macos/</guid>
      <description>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;身為一個開發者，特別是在 macOS 環境下，Docker Desktop 幾乎是容器化開發的標配。然而，自從 Docker Desktop 開始針對大型企業調整其&lt;a href=&#34;https://www.ithome.com.tw/news/146537&#34;&gt;授權模式&lt;/a&gt;後，許多開發者開始尋找替代方案。&lt;/p&gt;
&lt;p&gt;市面上確實出現了一些選擇，例如閉源但功能強大的 &lt;a href=&#34;https://orbstack.dev/&#34;&gt;OrbStack&lt;/a&gt;。但對於熱愛開源的我來說，目光自然投向了社群。這時，&lt;a href=&#34;https://github.com/abiosoft/colima&#34;&gt;colima&lt;/a&gt; 這個開源專案進入了我的視野。它不僅提供了一個在 macOS 上運行 Linux 容器的輕量級方式，還內建了 Kubernetes 支援，引起了我極大的興趣。&lt;/p&gt;
&lt;p&gt;這篇文章，想記錄一下我從 Docker Desktop 轉換到 colima，並且在 colima 的 Kubernetes 環境中，從原本依賴 Docker Engine 逐步遷移到使用 containerd 作為容器執行時（Container Runtime）的心路歷程與踩坑經驗。&lt;/p&gt;
&lt;h2 id=&#34;lima-與-colima-簡介&#34;&gt;lima 與 colima 簡介&lt;/h2&gt;
&lt;p&gt;在深入 colima 之前，得先提一下 &lt;a href=&#34;https://github.com/lima-vm/lima&#34;&gt;lima (Linux virtual machines on macOS)&lt;/a&gt;。lima 是一個旨在於 macOS 上輕鬆運行 Linux 虛擬機的開源專案。它底層利用了 macOS 的虛擬化框架（如 QEMU 或更高效的 &lt;code&gt;vz&lt;/code&gt;），提供了一個相對輕量的 Linux VM 環境。&lt;/p&gt;
&lt;p&gt;而 colima 則可以看作是建立在 lima 之上的「使用者友善層」。它簡化了 lima 的配置，並專注於提供容器執行時環境。colima 可以讓你輕鬆地啟動一個配置好 Docker 或 containerd 的 Linux VM，並且可以選擇性地啟用 Kubernetes (K3s) 支援。簡單來說，colima 幫你處理了建立 VM、安裝 Runtime 等繁瑣步驟，讓你專注在容器本身。&lt;/p&gt;</description>
    </item>
    <item>
      <title>proxmox ve shrink vm disk size</title>
      <link>https://www.omegaatt.com/blogs/develop/2022/pve-shrink-vm-disk/</link>
      <pubDate>Sun, 04 Sep 2022 00:00:00 +0000</pubDate><author>raiven.kao@gmail.com (Raiven Kao)</author>
      <guid>https://www.omegaatt.com/blogs/develop/2022/pve-shrink-vm-disk/</guid>
      <description>&lt;p&gt;由於 zpool 吃超過 80%，故將其中一個 VM(k8s-worker) 的硬碟縮小(200GB=&amp;gt;100GB)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;pve: 7.2.7&lt;/li&gt;
&lt;li&gt;zfs:
&lt;ul&gt;
&lt;li&gt;zfs-2.1.5-pve1&lt;/li&gt;
&lt;li&gt;zfs-kmod-2.1.5-pve1&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;確認 vm disk 剩餘空間&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ df -h
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Filesystem      Size  Used Avail Use% Mounted on
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/dev/vda1        197G   14G   178G  7% /
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;vm 關機&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;下載 &lt;a href=&#34;https://sourceforge.net/projects/gparted/&#34;&gt;gparded iso&lt;/a&gt; 到 pve&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;vm 從 gparded iso 開機並&lt;a href=&#34;https://www.howtogeek.com/114503/how-to-resize-your-ubuntu-partitions/&#34;&gt;縮減 disk 大小&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;pve server 針對 vm 的 hard disk 調整占用大小
switch(allocate storage type)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;case LV:
&lt;code&gt;lvreduce -L 5G /dev/pve/disk-name (縮小到只剩 5G)&lt;/code&gt;
or
&lt;code&gt;lvreduce -L -5G /dev/pve/disk-name (縮小 5G)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;case qcow2:
&lt;code&gt;qemu-img resize --shrink &amp;lt;vmfile.qcow2&amp;gt; [+-] or size&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;case ZFS:
&lt;code&gt;zfs set volsize=&amp;lt;new size&amp;gt;G rpool/vm-&amp;lt;vm id&amp;gt;-disk-&amp;lt;disk number&amp;gt;&lt;/code&gt;
舉例:
vm(&lt;code&gt;205&lt;/code&gt;) 的虛擬硬碟(&lt;code&gt;vm-205-disk-0&lt;/code&gt;)放在 zpool &lt;code&gt;land&lt;/code&gt; 上面，已經將 vm 縮小至 100GB
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;❯ zfs list
NAME USED AVAIL REFER MOUNTPOINT
land/vm-205-disk-0 236G 354G 119.3G -

    ❯ zfs set volsize=100G land/vm-205-disk-0

    ❯ zfs list
    NAME                     USED  AVAIL     REFER  MOUNTPOINT
    land/vm-205-disk-0       136G   354G     19.3G  -
    ```
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在網頁 GUI 中修改強制刷新 disk。修改 disk 的設定，再調整回來
&lt;img loading=&#34;lazy&#34; src=&#34;https://md.stranity.org/uploads/upload_d7fbc8d92382438b1b485a23f3e008e9.png&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>CentOS 7 kubernetes &#43; containerd &#43; calico basic installation tutorial</title>
      <link>https://www.omegaatt.com/blogs/develop/2022/centos-7-kubernetes-install/</link>
      <pubDate>Sun, 20 Feb 2022 00:00:00 +0000</pubDate><author>raiven.kao@gmail.com (Raiven Kao)</author>
      <guid>https://www.omegaatt.com/blogs/develop/2022/centos-7-kubernetes-install/</guid>
      <description>&lt;h1 id=&#34;前言&#34;&gt;前言&lt;/h1&gt;
&lt;p&gt;鑒於最近接到 1 CentOS master + 2 Gentoo node k8s cluster 建置雜事，被自己不熟系統雷到，做個筆記紀錄一下，未來敲敲指令就可以了&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                 ..                    root@master
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               .PLTJ.                  -----------
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              &amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;                 OS: CentOS Linux &lt;span style=&#34;color:#ae81ff&#34;&gt;7&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;Core&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; x86_64
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     KKSSV&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39; 4KKK LJ KKKL.&amp;#39;&lt;/span&gt;VSSKK        Host: KVM/QEMU &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;Standard PC &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;i440FX + PIIX, 1996&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; pc-i440fx-6.1&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     KKV&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39; 4KKKKK LJ KKKKAL &amp;#39;&lt;/span&gt;VKK        Kernel: 5.4.180-1.el7.elrepo.x86_64
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     V&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;VKKKK LJ KKKKV&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt;V        Uptime: &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt; mins
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     .4MA.&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt;VKK LJ KKV&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt;.4Mb.        Packages: &lt;span style=&#34;color:#ae81ff&#34;&gt;359&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;rpm&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   . KKKKKA.&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt;V LJ V&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt;.4KKKKK .      Shell: bash 4.2.46
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; .4D KKKKKKKA.&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt; LJ &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;.4KKKKKKK FA.    Terminal: /dev/pts/0
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;QDD ++++++++++++  ++++++++++++ GFD&amp;gt;   CPU: Common KVM processor &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;4&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; @ 3.493GHz
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;VD KKKKKKKK&amp;#39;&lt;/span&gt;.. LJ ..&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;KKKKKKKK FV     Memory: 97MiB / 16015MiB
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;   &amp;#39;&lt;/span&gt; VKKKKK&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;. .4 LJ K. .&amp;#39;&lt;/span&gt;KKKKKV &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      &amp;#39;&lt;/span&gt;VK&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;. .4KK LJ KKA. .&amp;#39;&lt;/span&gt;KV&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;     A. . .4KKKK LJ KKKKA. . .4
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;     KKA. &amp;#39;&lt;/span&gt;KKKKK LJ KKKKK&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39; .4KK
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;     KKSSA. VKKK LJ KKKV .4SSKK
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;              &amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;               &amp;#39;&lt;/span&gt;MKKM&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;                 &amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;此篇 CentOS 寄宿於 PVE 下，kernel 已升級為 &lt;code&gt;5.4.180-1.el7.elrepo.x86_64&lt;/code&gt;
使用 containerd 作為 cri
使用 calico 作為 cni，並使用 host 唯一的網卡，不做其他進階設定。&lt;/p&gt;</description>
    </item>
    <item>
      <title>改善 Proxmox VE/Debian 始終跑在最高頻率</title>
      <link>https://www.omegaatt.com/blogs/develop/2022/pve_power-save/</link>
      <pubDate>Sun, 09 Jan 2022 00:00:00 +0000</pubDate><author>raiven.kao@gmail.com (Raiven Kao)</author>
      <guid>https://www.omegaatt.com/blogs/develop/2022/pve_power-save/</guid>
      <description>&lt;p&gt;這幾天把便宜撿到的 Threadripper 2950X 平台也上 Proxmox VE 玩玩了，裝完系統後才發現自己太習慣於 windows 下的電源管理，一直都沒發現 linux 下 CPU 頻率都是拉滿的狀態，找了&lt;a href=&#34;https://forum.proxmox.com/threads/fix-always-high-cpu-frequency-in-proxmox-host.84270/&#34;&gt;debian 下進行電源管理的電源計畫設定教學&lt;/a&gt;達到降溫省電，順便做做紀錄。&lt;/p&gt;
&lt;p&gt;此篇文章的硬體基於&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;root@raiven:~# neofetch
       _,met$$$$$gg.          root@raiven
    ,g$$$$$$$$$$$$$$$P.       -----------
  ,g$$P&amp;#34;     &amp;#34;&amp;#34;&amp;#34;Y$$.&amp;#34;.        OS: Debian GNU/Linux 10 (buster) x86_64
 ,$$P&amp;#39;              `$$$.     Host: HP Z2 SFF G4 Workstation
&amp;#39;,$$P       ,ggs.     `$$b:   Kernel: 5.4.106-1-pve
`d$$&amp;#39;     ,$P&amp;#34;&amp;#39;   .    $$$    Uptime: 276 days, 9 hours, 51 mins
 $$P      d$&amp;#39;     ,    $$P    Packages: 719 (dpkg)
 $$:      $$.   -    ,d$$&amp;#39;    Shell: bash 5.0.3
 $$;      Y$b._   _,d$P&amp;#39;      Terminal: /dev/pts/1
 Y$$.    `.`&amp;#34;Y$$$$P&amp;#34;&amp;#39;         CPU: Intel Xeon E-2278G (16) @ 5.000GHz
 `$$b      &amp;#34;-.__              GPU: Intel Device 3e9a
  `Y$$                        Memory: 48763MiB / 64099MiB
   `Y$$.
     `$$b.
       `Y$$b.
          `&amp;#34;Y$b._
              `&amp;#34;&amp;#34;&amp;#34;

root@raiven:~# ^C
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;用 &lt;code&gt;watch -n 1 &amp;quot;cat /proc/cpuinfo | grep MHz&amp;quot;&lt;/code&gt; 可以查看當下的 cpu 頻率狀態。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Kubernetes 學習筆記 - Ubuntu kubeamd 建置 cluster</title>
      <link>https://www.omegaatt.com/blogs/develop/2021/kubeadm-init/</link>
      <pubDate>Sun, 19 Sep 2021 00:00:00 +0000</pubDate><author>raiven.kao@gmail.com (Raiven Kao)</author>
      <guid>https://www.omegaatt.com/blogs/develop/2021/kubeadm-init/</guid>
      <description>&lt;h2 id=&#34;環境&#34;&gt;環境&lt;/h2&gt;
&lt;p&gt;物理機: 2278G/16G DDR4 ECC*4/1T MX500
OS: - master: Ubuntu server 20.04 - node: Ubuntu server 20.04&lt;/p&gt;
&lt;h2 id=&#34;安裝-dockerkubeadmkubeletkubectl&#34;&gt;安裝 docker、kubeadm、kubelet、kubectl&lt;/h2&gt;
&lt;h3 id=&#34;安裝-docker&#34;&gt;安裝 docker&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common -y
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo add-apt-repository &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;deb [arch=amd64] https://download.docker.com/linux/ubuntu &lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;lsb_release -cs&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; stable&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo apt-get update
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo apt-get install docker-ce docker-ce-cli containerd.io -y
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo usermod -aG docker $USER
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;登出再登入&lt;/p&gt;
&lt;h3 id=&#34;安裝-kubeadm-kubelet-kubectl&#34;&gt;安裝 kubeadm kubelet kubectl&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo apt-get install -y apt-transport-https curl
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo su
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo cat &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;lt;&amp;lt;EOF &amp;gt;/etc/apt/sources.list.d/kubernetes.list
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;deb https://apt.kubernetes.io/ kubernetes-xenial main
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;EOF&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;exit
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo apt-get update
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# apt-cache madison kubeadm&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# K_VER=&amp;#34;1.20.5-00&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# apt install -y kubelet=${K_VER} kubectl=${K_VER} kubeadm=${K_VER}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 不指定版本的話直接安裝即可&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo apt install -y kubelet kubeadm kubectl
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 若需要鎖定版本可以使用 apt-mark hold&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo apt-mark hold kubelet kubeadm kubectl
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;設定-kubeadm&#34;&gt;設定 kubeadm&lt;/h3&gt;
&lt;h4 id=&#34;master&#34;&gt;master&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo kubeadm init &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    --pod-network-cidr 網路區段 &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    --apiserver-advertise-address 本機IP &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    --apiserver-cert-extra-sans gcp IP
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# kubeadm init --pod-network-cidr 172.100.0.0/16 --apiserver-advertise-address 10.140.0.2 --apiserver-cert-extra-sans 130.211.253.131&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;結束後會看到&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
