<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Antony 筆記：技術原理與實務經驗 – Rancher / RKE2</title><link>https://blog.kubeantony.com/archive/rancher/</link><description>Recent content in Rancher / RKE2 on Antony 筆記：技術原理與實務經驗</description><generator>Hugo -- gohugo.io</generator><language>zh-TW</language><lastBuildDate>Tue, 31 Mar 2026 04:15:32 +0800</lastBuildDate><atom:link href="https://blog.kubeantony.com/archive/rancher/index.xml" rel="self" type="application/rss+xml"/><item><title>RKE2 &amp; Rancher Prime Installation</title><link>https://blog.kubeantony.com/archive/rancher/rke2-rancher-prime-installation/</link><pubDate>Tue, 31 Mar 2026 04:15:32 +0800</pubDate><guid>https://blog.kubeantony.com/archive/rancher/rke2-rancher-prime-installation/</guid><description>
&lt;style&gt;
.indent-title-1{
margin-left: 1em;
}
.indent-title-2{
margin-left: 2em;
}
.indent-title-3{
margin-left: 3em;
}
&lt;/style&gt;
&lt;h2&gt;Preface&lt;span class="hx:absolute hx:-mt-20" id="preface"&gt;&lt;/span&gt;
&lt;a href="#preface" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;本篇文章會主要會介紹，如何安裝 Rancher Kubernetes Engine 2 或 K3S，並在 Kubernetes 之中部署 Rancher Prime&lt;/p&gt;
&lt;p&gt;可以透過點擊以下目錄，選擇想看的內容，跳轉至特定章節&lt;/p&gt;
&lt;/div&gt;
&lt;h1&gt;Install RKE2 v1.34.4&lt;/h1&gt;&lt;h2&gt;一、 安裝前環境檢查&lt;span class="hx:absolute hx:-mt-20" id="一-安裝前環境檢查"&gt;&lt;/span&gt;
&lt;a href="#%e4%b8%80-%e5%ae%89%e8%a3%9d%e5%89%8d%e7%92%b0%e5%a2%83%e6%aa%a2%e6%9f%a5" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;請確保你的環境符合要求
&lt;ul&gt;
&lt;li&gt;&lt;a
href="https://docs.rke2.io/install/requirements"target="_blank" rel="noopener"&gt;RKE2 Requirements&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;如果你的主機上安裝並啟用了 NetworkManager，確保它被配置為忽略 CNI 管理的接口。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;對於 1.21 及以上版本的 RKE2，如果主機核心支持 AppArmor，那麼在安裝 RKE2 之前還必須有 AppArmor 工具（通常通過 apparmor-parser 軟件包獲得）。&lt;/li&gt;
&lt;li&gt;RKE2 的安裝過程必須以 root 用戶或通過 sudo 運行。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Hardware&lt;span class="hx:absolute hx:-mt-20" id="hardware"&gt;&lt;/span&gt;
&lt;a href="#hardware" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;Linux/Windows&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;RAM: 4GB Minimum (we recommend at least 8GB)&lt;/li&gt;
&lt;li&gt;CPU: 2 Minimum (we recommend at least 4CPU)&lt;/li&gt;
&lt;li&gt;Disks: SSD&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a
href="https://docs.rke2.io/install/requirements#hardware"target="_blank" rel="noopener"&gt;RKE2 Hardware&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;h2&gt;二、Server Node Installation&lt;span class="hx:absolute hx:-mt-20" id="二server-node-installation"&gt;&lt;/span&gt;
&lt;a href="#%e4%ba%8cserver-node-installation" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;1. Config RKE2 Basic Parameters&lt;span class="hx:absolute hx:-mt-20" id="1-config-rke2-basic-parameters"&gt;&lt;/span&gt;
&lt;a href="#1-config-rke2-basic-parameters" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;&lt;strong&gt;1-1. 下載 RKE2 的安裝腳本，並賦予執行權限&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在 Server node 的機器上執行以下命令&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;curl -sfL https://get.rke2.io --output install.sh &amp;amp;&amp;amp; chmod &amp;#43;x install.sh&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;RKE2 提供了一個安裝腳本，在 systemd 的系統上將其作為一個服務來安裝。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;&lt;strong&gt;1-2. 編輯 Server Node 設定檔&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;advertise-address&lt;/code&gt;, &lt;code&gt;node-ip&lt;/code&gt; 和 &lt;code&gt;tls-san&lt;/code&gt; 的 IP 需要依據不同的環境來設定。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# 定義 K8s 要跑在哪張網卡上(以下指令預設會去找 default gateway 的網卡)
NIC=&amp;#34;$(ip route show default | cut -d&amp;#39; &amp;#39; -f5)&amp;#34;
IP=$(ip -4 -o addr show ${NIC} | awk &amp;#39;{print $4}&amp;#39; | cut -d/ -f1)
# 定義節點名稱
NODE_NAME=&amp;#34;$(hostname -f 2&amp;gt;/dev/null)&amp;#34;
NODE_NAME=&amp;#34;${NODE_NAME:-$(hostname)}&amp;#34;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;sudo mkdir -p /etc/rancher/rke2/ &amp;amp;&amp;amp; \
cat &amp;lt;&amp;lt;EOF | sudo tee /etc/rancher/rke2/config.yaml
write-kubeconfig-mode: &amp;#34;0644&amp;#34;
debug: false
# =============================================
# 每台節點不同的設定
# =============================================
# 本機對外廣播的 IP（其他節點透過此 IP 連線）
advertise-address: &amp;#34;${IP}&amp;#34;
# 本機 IP
node-ip: &amp;#34;${IP}&amp;#34;
# 節點名稱（每台不同）
node-name: &amp;#34;${NODE_NAME}&amp;#34;
# TLS 憑證允許的 SAN（第一台 server 需完整設定）
tls-san:
- &amp;#34;${NODE_NAME}&amp;#34;
- &amp;#34;${IP}&amp;#34;
- &amp;#34;127.0.0.1&amp;#34;
# 第二台以後需加入此行，指向第一台 server（第一台不需要）
# server: &amp;#34;https://&amp;lt;第一台IP&amp;gt;:9345&amp;#34;
# =============================================
# 所有 Server Node 必須相同的設定
# =============================================
# 叢集加入金鑰
token: &amp;#34;hehe&amp;#34;
# 各元件時區設定
etcd-extra-env:
- &amp;#34;TZ=Asia/Taipei&amp;#34;
kube-apiserver-extra-env:
- &amp;#34;TZ=Asia/Taipei&amp;#34;
kube-controller-manager-extra-env:
- &amp;#34;TZ=Asia/Taipei&amp;#34;
kube-scheduler-extra-env:
- &amp;#34;TZ=Asia/Taipei&amp;#34;
cloud-controller-manager-extra-env:
- &amp;#34;TZ=Asia/Taipei&amp;#34;
# kubelet 參數
kubelet-arg:
- &amp;#34;container-log-max-files=5&amp;#34; # 最多保留 5 個 log 檔
- &amp;#34;container-log-max-size=10Mi&amp;#34; # 每個 log 檔最大 10Mi
- &amp;#34;config=/etc/kubernetes/kubeletconfig.yml&amp;#34;
- &amp;#34;eviction-hard=memory.available&amp;lt;1000Mi,imagefs.available&amp;lt;5%,nodefs.available&amp;lt;5%&amp;#34; # 資源不足時驅逐 Pod 的閾值
# 停用內建 cloud controller
disable-cloud-controller: true
# 停用 kube-proxy，改由 Cilium 接管
disable-kube-proxy: true
# 停用不需要的內建元件
disable:
- rke2-canal # 停用預設 CNI Canal
- rke2-kube-proxy # 停用內建 kube-proxy
# 使用 Cilium 作為 CNI
cni:
- &amp;#34;cilium&amp;#34;
# 啟用 CIS security profile
#profile: &amp;#34;cis&amp;#34;
# API Server 額外參數
#kube-apiserver-arg:
# - &amp;#34;service-account-extend-token-expiration=false&amp;#34;
EOF&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;&lt;strong&gt;1-3. 編輯 cilium 設定檔&lt;/strong&gt;&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;sudo mkdir -p /var/lib/rancher/rke2/server/manifests &amp;amp;&amp;amp; \
cat &amp;lt;&amp;lt;EOF | sudo tee /var/lib/rancher/rke2/server/manifests/rke2-cilium-config.yaml
apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
name: rke2-cilium
namespace: kube-system
spec:
valuesContent: |-
operator:
replicas: 1
podAnnotations:
container.apparmor.security.beta.kubernetes.io/cilium-agent: &amp;#34;unconfined&amp;#34;
container.apparmor.security.beta.kubernetes.io/clean-cilium-state: &amp;#34;unconfined&amp;#34;
container.apparmor.security.beta.kubernetes.io/mount-cgroup: &amp;#34;unconfined&amp;#34;
container.apparmor.security.beta.kubernetes.io/apply-sysctl-overwrites: &amp;#34;unconfined&amp;#34;
devices: &amp;#34;$NIC&amp;#34;
nodePort:
directRoutingDevice: &amp;#34;$NIC&amp;#34;
autoDirectNodeRoutes: true
hubble:
enabled: false
relay:
enabled: false
ui:
enabled: false
frontend:
server:
ipv6:
enabled: false
service:
type: NodePort
enableLBIPAM: false
ipv4NativeRoutingCIDR: 10.42.0.0/16
k8sServiceHost: 127.0.0.1
k8sServicePort: 6443
kubeProxyReplacement: true
routingMode: native
l2announcements:
enabled: true
EOF&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;1-4. 編輯 kubelet 設定檔&lt;/strong&gt;&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;sudo mkdir -p /etc/kubernetes &amp;amp;&amp;amp; \
cat &amp;lt;&amp;lt;EOF | sudo tee /etc/kubernetes/kubeletconfig.yml
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
systemReserved:
memory: &amp;#34;1Gi&amp;#34;
kubeReserved:
memory: &amp;#34;2Gi&amp;#34;
EOF&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;evictionHard&lt;/code&gt;&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;用途&lt;/strong&gt;：設定強制驅逐的值，當系統資源（如記憶體）低於此設定值時，kubelet 會立即終止部分 Pod，以釋放資源，確保系統穩定運行。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;預設值&lt;/strong&gt;: 預設打開，Memory 是 100MiB, Ephemeral-Storage 是 10% (開源的 K8s), rke2 預設值是 imagefs 和 nodefs = 5%&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;範例&lt;/strong&gt;：&lt;code&gt;memory.available: &amp;quot;500Mi&amp;quot;&lt;/code&gt; 表示當可用記憶體少於 500MiB 時，kubelet 會觸發驅逐機制。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;evictionMinimumReclaim&lt;/code&gt;&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;用途&lt;/strong&gt;：設定在驅逐 Pod 時，kubelet 希望至少回收的資源量。這有助於避免頻繁的驅逐操作，確保每次驅逐能有效釋放足夠的資源。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;範例&lt;/strong&gt;：&lt;code&gt;memory.available: &amp;quot;10Mi&amp;quot;&lt;/code&gt; 表示每次驅逐操作至少要回收 10MiB 的記憶體。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;systemReserved&lt;/code&gt;&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;用途&lt;/strong&gt;：為系統背景程序（如 sshd、networking 等非 Kubernetes 組件）預留資源，確保這些系統服務在資源緊張時仍能正常運行。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;範例&lt;/strong&gt;：&lt;code&gt;memory: &amp;quot;1Gi&amp;quot;&lt;/code&gt; 表示為系統服務預留 1GiB 的記憶體。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;kubeReserved&lt;/code&gt;&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;用途&lt;/strong&gt;：為 Kubernetes 系統的背景程序（如 kubelet、container runtime 時等）預留資源，確保這些組件在資源緊張時的穩定性。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;範例&lt;/strong&gt;：&lt;code&gt;memory: &amp;quot;2Gi&amp;quot;&lt;/code&gt; 表示為 Kubernetes 系統的背景程序預留 2GiB 的記憶體。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;h3&gt;2. Install RKE2 with v1.34.4 version&lt;span class="hx:absolute hx:-mt-20" id="2-install-rke2-with-v1344-version"&gt;&lt;/span&gt;
&lt;a href="#2-install-rke2-with-v1344-version" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;&lt;strong&gt;2-1. 執行以下安裝命令&lt;/strong&gt;&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;sudo INSTALL_RKE2_CHANNEL=v1.34.4&amp;#43;rke2r1 ./install.sh&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;INSTALL_RKE2_CHANNEL&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;指定要下載 RKE2 URL 的 Channel，預設是 &lt;code&gt;latest&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;[INFO] finding release for channel v1.34.4&amp;#43;rke2r1
[INFO] using v1.34.4&amp;#43;rke2r1 as release
[INFO] downloading checksums at https://github.com/rancher/rke2/releases/download/v1.34.4%2Brke2r1/sha256sum-amd64.txt
[INFO] downloading tarball at https://github.com/rancher/rke2/releases/download/v1.34.4%2Brke2r1/rke2.linux-amd64.tar.gz
[INFO] verifying tarball
[INFO] unpacking tarball file to /usr/local&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;3. enable rke2 and setup kubeconfig&lt;span class="hx:absolute hx:-mt-20" id="3-enable-rke2-and-setup-kubeconfig"&gt;&lt;/span&gt;
&lt;a href="#3-enable-rke2-and-setup-kubeconfig" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;&lt;strong&gt;3-1. 將 rke2-server 的服務設為開機自動啟動，並立即啟動服務&lt;/strong&gt;&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;sudo systemctl enable rke2-server --now&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;以上命令執行後的螢幕輸出&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;Created symlink /etc/systemd/system/multi-user.target.wants/rke2-server.service → /etc/systemd/system/rke2-server.service.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;3-2. Setup kubeconfig and crictl&lt;/strong&gt;&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;{
# 1. 建立目錄並設定 Kubeconfig
mkdir -p $HOME/.kube &amp;amp;&amp;amp; \
sudo cp /etc/rancher/rke2/rke2.yaml $HOME/.kube/config &amp;amp;&amp;amp; \
sudo chown $(id -u):$(id -g) $HOME/.kube/config &amp;amp;&amp;amp; \
# 2. 搬移執行檔
sudo cp /var/lib/rancher/rke2/bin/* /usr/local/bin/ &amp;amp;&amp;amp; \
# 3. 寫入 crictl 設定 (使用 printf 保持單行邏輯)
printf &amp;#34;runtime-endpoint: unix:///run/k3s/containerd/containerd.sock\nimage-endpoint: unix:///run/k3s/containerd/containerd.sock\ntimeout: 10\n&amp;#34; | sudo tee /etc/crictl.yaml &amp;gt; /dev/null &amp;amp;&amp;amp; \
# 4. 設定 Bash Alias 與補全
printf &amp;#34;\nsource &amp;lt;(kubectl completion bash)\nalias k=kubectl\ncomplete -o default -F __start_kubectl k\n&amp;#34; &amp;gt;&amp;gt; ~/.bashrc &amp;amp;&amp;amp; \
# 5. 立即生效
source ~/.bashrc
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;4. check pod status&lt;span class="hx:absolute hx:-mt-20" id="4-check-pod-status"&gt;&lt;/span&gt;
&lt;a href="#4-check-pod-status" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-1"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;kubectl get po -A&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system cilium-j7jf2 1/1 Running 0 2m12s
kube-system cilium-operator-6fb6d5b896-jj2nx 1/1 Running 0 2m12s
kube-system etcd-rms-1.kubeantony.com 1/1 Running 0 2m31s
kube-system helm-install-rke2-cilium-qhdsl 0/1 Completed 0 2m24s
kube-system helm-install-rke2-coredns-hwsqp 0/1 Completed 0 2m24s
kube-system helm-install-rke2-ingress-nginx-bxt7n 0/1 Completed 0 2m24s
kube-system helm-install-rke2-metrics-server-qln6s 0/1 Completed 0 2m24s
kube-system helm-install-rke2-runtimeclasses-5kj6v 0/1 Completed 0 2m23s
kube-system helm-install-rke2-snapshot-controller-crd-vsbjv 0/1 Completed 0 2m23s
kube-system helm-install-rke2-snapshot-controller-z9kfv 0/1 Completed 1 2m23s
kube-system kube-apiserver-rms-1.kubeantony.com 1/1 Running 0 2m31s
kube-system kube-controller-manager-rms-1.kubeantony.com 1/1 Running 0 2m31s
kube-system kube-scheduler-rms-1.kubeantony.com 1/1 Running 0 2m31s
kube-system rke2-coredns-rke2-coredns-77f54456d4-kqbtc 1/1 Running 0 2m12s
kube-system rke2-coredns-rke2-coredns-autoscaler-6c58bf4677-wj7gp 1/1 Running 0 2m12s
kube-system rke2-ingress-nginx-controller-bhf7h 1/1 Running 0 62s
kube-system rke2-metrics-server-69f4f95bf7-tb6rc 1/1 Running 0 76s
kube-system rke2-snapshot-controller-bc4c494bf-cqj7t 1/1 Running 0 76s&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;三、Join Additional Server Nodes&lt;span class="hx:absolute hx:-mt-20" id="三join-additional-server-nodes"&gt;&lt;/span&gt;
&lt;a href="#%e4%b8%89join-additional-server-nodes" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;1. Config RKE2 Basic Parameters&lt;span class="hx:absolute hx:-mt-20" id="1-config-rke2-basic-parameters-1"&gt;&lt;/span&gt;
&lt;a href="#1-config-rke2-basic-parameters-1" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;&lt;strong&gt;1-1. 下載 RKE2 的安裝腳本，並賦予執行權限&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;以下命令請在 Additional Server node 上執行&lt;/strong&gt;&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;curl -sfL https://get.rke2.io --output install.sh &amp;amp;&amp;amp; chmod &amp;#43;x install.sh&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;RKE2 提供了一個安裝腳本，在 systemd 的系統上將其作為一個服務來安裝。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;1-2. 編輯 RKE2 Additional Server Node 設定檔&lt;/strong&gt;&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# 定義 K8s 要跑在哪張網卡上(以下指令預設會去找 default gateway 的網卡)
NIC=&amp;#34;$(ip route show default | cut -d&amp;#39; &amp;#39; -f5)&amp;#34;
IP=$(ip -4 -o addr show ${NIC} | awk &amp;#39;{print $4}&amp;#39; | cut -d/ -f1)
# 定義節點名稱
NODE_NAME=&amp;#34;$(hostname -f 2&amp;gt;/dev/null)&amp;#34;
NODE_NAME=&amp;#34;${NODE_NAME:-$(hostname)}&amp;#34;
# 定義第一台 Control-plane node 的 ip
ServerIP=&amp;#34;192.168.11.161&amp;#34;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;sudo mkdir -p /etc/rancher/rke2/ &amp;amp;&amp;amp; \
cat &amp;lt;&amp;lt;EOF | sudo tee /etc/rancher/rke2/config.yaml
write-kubeconfig-mode: &amp;#34;0644&amp;#34;
debug: false
# =============================================
# 每台節點不同的設定
# =============================================
# 本機對外廣播的 IP（其他節點透過此 IP 連線）
advertise-address: &amp;#34;${IP}&amp;#34;
# 本機 IP
node-ip: &amp;#34;${IP}&amp;#34;
# 節點名稱（每台不同）
node-name: &amp;#34;${NODE_NAME}&amp;#34;
# TLS 憑證允許的 SAN（第一台 server 需完整設定）
tls-san:
- &amp;#34;${NODE_NAME}&amp;#34;
- &amp;#34;${IP}&amp;#34;
- &amp;#34;127.0.0.1&amp;#34;
# 第二台以後需加入此行，指向第一台 server（第一台不需要）
server: &amp;#34;https://${ServerIP}:9345&amp;#34;
# =============================================
# 所有 Server Node 必須相同的設定
# =============================================
# 叢集加入金鑰
token: &amp;#34;hehe&amp;#34;
# 各元件時區設定
etcd-extra-env:
- &amp;#34;TZ=Asia/Taipei&amp;#34;
kube-apiserver-extra-env:
- &amp;#34;TZ=Asia/Taipei&amp;#34;
kube-controller-manager-extra-env:
- &amp;#34;TZ=Asia/Taipei&amp;#34;
kube-scheduler-extra-env:
- &amp;#34;TZ=Asia/Taipei&amp;#34;
cloud-controller-manager-extra-env:
- &amp;#34;TZ=Asia/Taipei&amp;#34;
# kubelet 參數
kubelet-arg:
- &amp;#34;container-log-max-files=5&amp;#34; # 最多保留 5 個 log 檔
- &amp;#34;container-log-max-size=10Mi&amp;#34; # 每個 log 檔最大 10Mi
- &amp;#34;config=/etc/kubernetes/kubeletconfig.yml&amp;#34;
- &amp;#34;eviction-hard=memory.available&amp;lt;1000Mi,imagefs.available&amp;lt;5%,nodefs.available&amp;lt;5%&amp;#34; # 資源不足時驅逐 Pod 的閾值
# 停用內建 cloud controller
disable-cloud-controller: true
# 停用 kube-proxy，改由 Cilium 接管
disable-kube-proxy: true
# 停用不需要的內建元件
disable:
- rke2-canal # 停用預設 CNI Canal
- rke2-kube-proxy # 停用內建 kube-proxy
# 使用 Cilium 作為 CNI
cni:
- &amp;#34;cilium&amp;#34;
# 啟用 CIS security profile
#profile: &amp;#34;cis&amp;#34;
# API Server 額外參數
#kube-apiserver-arg:
# - &amp;#34;service-account-extend-token-expiration=false&amp;#34;
EOF&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note: 要指定第一台 RKE2 Server node 的 IP&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;1-3. 編輯 kubelet 設定檔&lt;/strong&gt;&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;sudo mkdir -p /etc/kubernetes &amp;amp;&amp;amp; \
cat &amp;lt;&amp;lt;EOF | sudo tee /etc/kubernetes/kubeletconfig.yml
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
systemReserved:
memory: &amp;#34;1Gi&amp;#34;
kubeReserved:
memory: &amp;#34;2Gi&amp;#34;
EOF&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;2. Install RKE2 with v1.34.4 veersion&lt;span class="hx:absolute hx:-mt-20" id="2-install-rke2-with-v1344-veersion"&gt;&lt;/span&gt;
&lt;a href="#2-install-rke2-with-v1344-veersion" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;&lt;strong&gt;2-1. 執行以下安裝命令&lt;/strong&gt;&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;sudo INSTALL_RKE2_CHANNEL=v1.34.4&amp;#43;rke2r1 ./install.sh&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;INSTALL_RKE2_CHANNEL&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;指定要下載 RKE2 URL 的 Channel，預設是 &lt;code&gt;latest&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;[WARN] /usr/local is read-only or a mount point; installing to /opt/rke2
[INFO] finding release for channel v1.23.9&amp;#43;rke2r1
[INFO] using v1.23.9&amp;#43;rke2r1 as release
[INFO] downloading checksums at https://github.com/rancher/rke2/releases/download/v1.23.9&amp;#43;rke2r1/sha256sum-amd64.txt
[INFO] downloading tarball at https://github.com/rancher/rke2/releases/download/v1.23.9&amp;#43;rke2r1/rke2.linux-amd64.tar.gz
[INFO] verifying tarball
[INFO] unpacking tarball file to /opt/rke2
[INFO] updating tarball contents to reflect install path
[INFO] moving systemd units to /etc/systemd/system
[INFO] install complete; you may want to run: export PATH=$PATH:/opt/rke2/bin&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;3. enable rke2 and setup kubeconfig&lt;span class="hx:absolute hx:-mt-20" id="3-enable-rke2-and-setup-kubeconfig-1"&gt;&lt;/span&gt;
&lt;a href="#3-enable-rke2-and-setup-kubeconfig-1" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;&lt;strong&gt;3-1. 將 rke2-server 的服務設為開機自動啟動，並立即啟動服務&lt;/strong&gt;&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;sudo systemctl enable rke2-server --now&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;以上命令執行後的螢幕輸出&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;Created symlink /etc/systemd/system/multi-user.target.wants/rke2-server.service → /etc/systemd/system/rke2-server.service.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;4. check pod status&lt;span class="hx:absolute hx:-mt-20" id="4-check-pod-status-1"&gt;&lt;/span&gt;
&lt;a href="#4-check-pod-status-1" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-1"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;kubectl get po -A&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system cilium-79sx5 1/1 Running 0 2m35s
kube-system cilium-j7jf2 1/1 Running 0 19m
kube-system cilium-operator-6fb6d5b896-jj2nx 1/1 Running 0 19m
kube-system etcd-rms-1.kubeantony.com 1/1 Running 0 19m
kube-system etcd-rms-2.kubeantony.com 1/1 Running 0 2m35s
kube-system helm-install-rke2-cilium-qhdsl 0/1 Completed 0 19m
kube-system helm-install-rke2-coredns-hwsqp 0/1 Completed 0 19m
kube-system helm-install-rke2-ingress-nginx-bxt7n 0/1 Completed 0 19m
kube-system helm-install-rke2-metrics-server-qln6s 0/1 Completed 0 19m
kube-system helm-install-rke2-runtimeclasses-5kj6v 0/1 Completed 0 19m
kube-system helm-install-rke2-snapshot-controller-crd-vsbjv 0/1 Completed 0 19m
kube-system helm-install-rke2-snapshot-controller-z9kfv 0/1 Completed 1 19m
kube-system kube-apiserver-rms-1.kubeantony.com 1/1 Running 0 19m
kube-system kube-apiserver-rms-2.kubeantony.com 1/1 Running 0 2m35s
kube-system kube-controller-manager-rms-1.kubeantony.com 1/1 Running 0 19m
kube-system kube-controller-manager-rms-2.kubeantony.com 1/1 Running 0 2m34s
kube-system kube-scheduler-rms-1.kubeantony.com 1/1 Running 0 19m
kube-system kube-scheduler-rms-2.kubeantony.com 1/1 Running 0 2m34s
kube-system rke2-coredns-rke2-coredns-77f54456d4-4n5k5 1/1 Running 0 82s
kube-system rke2-coredns-rke2-coredns-77f54456d4-kqbtc 1/1 Running 0 19m
kube-system rke2-coredns-rke2-coredns-autoscaler-6c58bf4677-wj7gp 1/1 Running 0 19m
kube-system rke2-ingress-nginx-controller-bhf7h 1/1 Running 0 18m
kube-system rke2-ingress-nginx-controller-vhmtb 1/1 Running 0 85s
kube-system rke2-metrics-server-69f4f95bf7-tb6rc 1/1 Running 0 18m
kube-system rke2-snapshot-controller-bc4c494bf-cqj7t 1/1 Running 0 18m&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;四、Join Agent Nodes&lt;span class="hx:absolute hx:-mt-20" id="四join-agent-nodes"&gt;&lt;/span&gt;
&lt;a href="#%e5%9b%9bjoin-agent-nodes" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;1. Config RKE2 Basic Parameters&lt;span class="hx:absolute hx:-mt-20" id="1-config-rke2-basic-parameters-2"&gt;&lt;/span&gt;
&lt;a href="#1-config-rke2-basic-parameters-2" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;&lt;strong&gt;1-1. 下載 RKE2 的安裝腳本，並賦予執行權限&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;以下命令請在 agent node 上執行&lt;/strong&gt;&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;~&amp;gt; curl -sfL https://get.rke2.io --output install.sh &amp;amp;&amp;amp; chmod &amp;#43;x install.sh&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;RKE2 提供了一個安裝腳本，在 systemd 的系統上將其作為一個服務來安裝。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;1-2. 編輯 RKE2 Additional Server Node 設定檔&lt;/strong&gt;&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# 定義 K8s 要跑在哪張網卡上
$ NIC=&amp;#39;eth1&amp;#39;
$ IP=$(ip -4 -o addr show ${NIC} | awk &amp;#39;{print $4}&amp;#39; | cut -d/ -f1)
# 定義 API Server 的 IP 位址
$ ServerIP=&amp;#39;192.168.11.35&amp;#39;
# 定義節點名稱
$ NODE_NAME=&amp;#39;w1&amp;#39;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;~&amp;gt; sudo mkdir -p /etc/rancher/rke2/ &amp;amp;&amp;amp; \
cat &amp;lt;&amp;lt;EOF | sudo tee /etc/rancher/rke2/config.yaml
server: https://${ServerIP}:9345
write-kubeconfig-mode: &amp;#34;0644&amp;#34;
debug: False
node-ip: &amp;#34;${IP}&amp;#34;
node-name:
- &amp;#34;${NODE_NAME}&amp;#34;
token: &amp;#34;hehe&amp;#34;
etcd-extra-env: TZ=Asia/Taipei
kube-apiserver-extra-env: TZ=Asia/Taipei
kube-controller-manager-extra-env: TZ=Asia/Taipei
kube-proxy-extra-env: TZ=Asia/Taipei
kube-scheduler-extra-env: TZ=Asia/Taipei
cloud-controller-manager-extra-env: TZ=Asia/Taipei
kubelet-arg:
- container-log-max-files=5
- container-log-max-size=10Mi
- &amp;#34;--config=/etc/kubernetes/kubeletconfig.yml&amp;#34;
- &amp;#34;--eviction-hard=memory.available&amp;lt;1000Mi,imagefs.available&amp;lt;5%,nodefs.available&amp;lt;5%&amp;#34;
#selinux: false
EOF&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note: 要指定第一台 RKE2 Server node 的 IP&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;1-3. 編輯 kubelet 設定檔&lt;/strong&gt;&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;~&amp;gt; sudo mkdir -p /etc/kubernetes &amp;amp;&amp;amp; \
cat &amp;lt;&amp;lt;EOF | sudo tee /etc/kubernetes/kubeletconfig.yml
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
systemReserved:
memory: &amp;#34;1Gi&amp;#34;
kubeReserved:
memory: &amp;#34;2Gi&amp;#34;
EOF&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;2. Install RKE2 with 1.31.2 veersion&lt;span class="hx:absolute hx:-mt-20" id="2-install-rke2-with-1312-veersion"&gt;&lt;/span&gt;
&lt;a href="#2-install-rke2-with-1312-veersion" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;&lt;strong&gt;2-1. 執行以下安裝命令&lt;/strong&gt;&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;~&amp;gt; sudo INSTALL_RKE2_TYPE=&amp;#34;agent&amp;#34; INSTALL_RKE2_CHANNEL=v1.31.2&amp;#43;rke2r1 ./install.sh&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;INSTALL_RKE2_CHANNEL&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;指定要下載 RKE2 URL 的 Channel，預設是 &lt;code&gt;latest&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;[INFO] finding release for channel v1.34.4&amp;#43;rke2r1
[INFO] using v1.34.4&amp;#43;rke2r1 as release
[INFO] downloading checksums at https://github.com/rancher/rke2/releases/download/v1.34.4%2Brke2r1/sha256sum-amd64.txt
[INFO] downloading tarball at https://github.com/rancher/rke2/releases/download/v1.34.4%2Brke2r1/rke2.linux-amd64.tar.gz
[INFO] verifying tarball
[INFO] unpacking tarball file to /usr/local&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;3. enable rke2&lt;span class="hx:absolute hx:-mt-20" id="3-enable-rke2"&gt;&lt;/span&gt;
&lt;a href="#3-enable-rke2" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;&lt;strong&gt;3-1. 將 rke2-agent 的服務設為開機自動啟動，並立即啟動服務&lt;/strong&gt;&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;~&amp;gt; sudo systemctl enable rke2-agent --now&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;以上命令執行後的螢幕輸出&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;Created symlink /etc/systemd/system/multi-user.target.wants/rke2-server.service → /etc/systemd/system/rke2-server.service.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;4. check pod status&lt;span class="hx:absolute hx:-mt-20" id="4-check-pod-status-2"&gt;&lt;/span&gt;
&lt;a href="#4-check-pod-status-2" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;以下命令在第一台 RKE2 Server 執行&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;~&amp;gt; kubectl get nodes,po -A&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;NAME STATUS ROLES AGE VERSION
node/m1 Ready control-plane,etcd,master 4h32m v1.31.1&amp;#43;rke2r1
node/m2 Ready control-plane,etcd,master 18m v1.31.1&amp;#43;rke2r1
node/m3 Ready control-plane,etcd,master 12m v1.31.1&amp;#43;rke2r1
node/w1 Ready &amp;lt;none&amp;gt; 84s v1.31.1&amp;#43;rke2r1
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system pod/cilium-2w97z 1/1 Running 0 84s
kube-system pod/cilium-b744m 1/1 Running 0 12m
kube-system pod/cilium-operator-84b8ff5b6c-stfdw 1/1 Running 4 (162m ago) 4h25m
kube-system pod/cilium-p45b4 1/1 Running 1 (162m ago) 4h
kube-system pod/cilium-qvqps 1/1 Running 0 18m
kube-system pod/etcd-m1 1/1 Running 1 4h32m
kube-system pod/etcd-m2 1/1 Running 0 18m
kube-system pod/etcd-m3 1/1 Running 0 11m
kube-system pod/helm-install-rke2-cilium-z7qsz 0/1 Completed 0 4h25m
kube-system pod/helm-install-rke2-coredns-9cg6t 0/1 Completed 0 4h32m
kube-system pod/helm-install-rke2-ingress-nginx-fscw4 0/1 Completed 0 4h32m
kube-system pod/helm-install-rke2-metrics-server-gw8qc 0/1 Completed 0 4h32m
kube-system pod/helm-install-rke2-multus-j8h9d 0/1 Completed 0 4h32m
kube-system pod/helm-install-rke2-snapshot-controller-crd-h58vl 0/1 Completed 0 4h32m
kube-system pod/helm-install-rke2-snapshot-controller-v6lwh 0/1 Completed 1 4h32m
kube-system pod/helm-install-rke2-snapshot-validation-webhook-gz77q 0/1 Completed 0 4h32m
kube-system pod/kube-apiserver-m1 1/1 Running 2 3h41m
kube-system pod/kube-apiserver-m2 1/1 Running 0 18m
kube-system pod/kube-apiserver-m3 1/1 Running 0 12m
kube-system pod/kube-controller-manager-m1 1/1 Running 10 (162m ago) 4h32m
kube-system pod/kube-controller-manager-m2 1/1 Running 0 18m
kube-system pod/kube-controller-manager-m3 1/1 Running 0 12m
kube-system pod/kube-scheduler-m1 1/1 Running 2 (162m ago) 4h32m
kube-system pod/kube-scheduler-m2 1/1 Running 0 18m
kube-system pod/kube-scheduler-m3 1/1 Running 0 12m
kube-system pod/rke2-coredns-rke2-coredns-79f8cbfcf7-9rh2l 1/1 Running 0 18m
kube-system pod/rke2-coredns-rke2-coredns-79f8cbfcf7-bwvtc 1/1 Running 0 161m
kube-system pod/rke2-coredns-rke2-coredns-autoscaler-7cf7db4bdc-t8ff7 1/1 Running 1 (162m ago) 4h
kube-system pod/rke2-ingress-nginx-controller-4hns2 1/1 Running 0 48s
kube-system pod/rke2-ingress-nginx-controller-7c5bp 1/1 Running 0 11m
kube-system pod/rke2-ingress-nginx-controller-8qrjf 1/1 Running 0 18m
kube-system pod/rke2-ingress-nginx-controller-rwpdf 1/1 Running 1 (162m ago) 3h40m
kube-system pod/rke2-metrics-server-6d887864c-vdkgn 0/1 Completed 0 4h25m
kube-system pod/rke2-metrics-server-6d887864c-vdt5s 1/1 Running 1 (162m ago) 4h
kube-system pod/rke2-multus-6vcp7 1/1 Running 3 (50s ago) 84s
kube-system pod/rke2-multus-bxdkm 1/1 Running 2 (11m ago) 12m
kube-system pod/rke2-multus-hfqc6 1/1 Running 1 (162m ago) 4h
kube-system pod/rke2-multus-t7vln 1/1 Running 2 (18m ago) 18m
kube-system pod/rke2-snapshot-controller-658d97fccc-7gkrv 1/1 Running 7 (162m ago) 4h25m
kube-system pod/rke2-snapshot-validation-webhook-784bcc6c8-xfq68 1/1 Running 1 (162m ago) 4h25m&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h1&gt;Install K3S v1.26.9&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;安裝命令&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ curl -sfL https://get.k3s.io/ | INSTALL_K3S_VERSION=v1.26.9&amp;#43;k3s1 K3S_KUBECONFIG_MODE=&amp;#34;644&amp;#34; sh -&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="2"&gt;
&lt;li&gt;設定 kubeconfig&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ mkdir -p $HOME/.kube &amp;amp;&amp;amp; sudo cp /etc/rancher/k3s/k3s.yaml $HOME/.kube/config &amp;amp;&amp;amp; sudo chown $(id -u):$(id -g) $HOME/.kube/config &amp;amp;&amp;amp; sudo chmod 600 $HOME/.kube/config&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h1&gt;Helm Install Rancher Prime v2.13.2&lt;/h1&gt;&lt;h2&gt;1. Add the Helm Chart Repository&lt;span class="hx:absolute hx:-mt-20" id="1-add-the-helm-chart-repository"&gt;&lt;/span&gt;
&lt;a href="#1-add-the-helm-chart-repository" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;1.1 Install helm3&lt;span class="hx:absolute hx:-mt-20" id="11-install-helm3"&gt;&lt;/span&gt;
&lt;a href="#11-install-helm3" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;在第一台 Master Node 上執行以下命令&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;下載 helm 壓縮檔&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-1"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;wget https://get.helm.sh/helm-v3.8.2-linux-amd64.tar.gz&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;--2022-09-21 09:06:57-- https://get.helm.sh/helm-v3.8.2-linux-amd64.tar.gz
Resolving get.helm.sh (get.helm.sh)... 152.199.39.108, 2606:2800:247:1cb7:261b:1f9c:2074:3c
Connecting to get.helm.sh (get.helm.sh)|152.199.39.108|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 13633605 (13M) [application/x-tar]
Saving to: ‘helm-v3.8.2-linux-amd64.tar.gz’
helm-v3.8.2-linux-amd64.tar.gz 100%[=============================================================&amp;gt;] 13.00M 5.95MB/s in 2.2s
2022-09-21 09:07:00 (5.95 MB/s) - ‘helm-v3.8.2-linux-amd64.tar.gz’ saved [13633605/13633605]&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="2"&gt;
&lt;li&gt;解壓縮 helm 壓縮檔&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-1"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;tar zxvf helm-v3.8.2-linux-amd64.tar.gz&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;linux-amd64/
linux-amd64/helm
linux-amd64/LICENSE
linux-amd64/README.md&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="3"&gt;
&lt;li&gt;將 helm 執行檔拷貝至 PATH 環境變數中的 &lt;code&gt;/usr/local/bin/&lt;/code&gt; 目錄下&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-1"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;sudo cp linux-amd64/helm /usr/local/bin/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="indent-title-1"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;1.2 Add the Helm Chart Repository&lt;span class="hx:absolute hx:-mt-20" id="12-add-the-helm-chart-repository"&gt;&lt;/span&gt;
&lt;a href="#12-add-the-helm-chart-repository" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;Prime: Recommended for production environments&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;helm repo add rancher-prime https://charts.rancher.com/server-charts/prime&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;helm repo add rancher-latest https://releases.rancher.com/server-charts/latest&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;helm repo add rancher-stable https://releases.rancher.com/server-charts/stable&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;2. Create a Namespace for Rancher&lt;span class="hx:absolute hx:-mt-20" id="2-create-a-namespace-for-rancher"&gt;&lt;/span&gt;
&lt;a href="#2-create-a-namespace-for-rancher" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;This should always be &lt;code&gt;cattle-system&lt;/code&gt;&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;kubectl create ns cattle-system&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;3. Choose your SSL Configuration&lt;span class="hx:absolute hx:-mt-20" id="3-choose-your-ssl-configuration"&gt;&lt;/span&gt;
&lt;a href="#3-choose-your-ssl-configuration" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;建立和切換至工作目錄&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;mkdir ssl;cd ssl&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="2"&gt;
&lt;li&gt;下載 產生自簽憑證 腳本，並賦予執行權限&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;wget https://raw.githubusercontent.com/cooloo9871/openssl/master/mk &amp;amp;&amp;amp; \
chmod &amp;#43;x mk&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="3"&gt;
&lt;li&gt;執行腳本產生自簽憑證&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;./mk create rancher.example.com 192.168.11.60&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;第一個參數放 rancher 的 Domain Name
第二個參數放 LB 的 IP (HA Rancher)，或是 rancher 本身的 IP&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;螢幕輸出&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;Generating RSA private key, 4096 bit long modulus (2 primes)
.........................................................................................................................................................................................................................&amp;#43;&amp;#43;&amp;#43;&amp;#43;
....................................................................................................................................................................................................................................................&amp;#43;&amp;#43;&amp;#43;&amp;#43;
e is 65537 (0x010001)
Generating RSA private key, 4096 bit long modulus (2 primes)
..........................................................&amp;#43;&amp;#43;&amp;#43;&amp;#43;
..&amp;#43;&amp;#43;&amp;#43;&amp;#43;
e is 65537 (0x010001)
Signature ok
subject=CN = example
Getting CA Private Key&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;檢查是否符合預期&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;ls -l
total 32
-rw------- 1 rancher users 3326 Feb 13 13:58 ca-key.pem
-rw-r--r-- 1 rancher users 2009 Feb 13 13:58 ca.pem
-rw-r--r-- 1 rancher users 41 Feb 13 13:58 ca.srl
-rw-r--r-- 1 rancher users 1582 Feb 13 13:58 cert.csr
-rw------- 1 rancher users 3243 Feb 13 13:58 cert-key.pem
-rw-r--r-- 1 rancher users 1874 Feb 13 13:58 cert.pem
-rw-r--r-- 1 rancher users 86 Feb 13 13:58 extfile.cnf
-rwxr-xr-x 1 rancher users 1166 Feb 13 13:57 mk&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="4"&gt;
&lt;li&gt;Create the certificate secret resource&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;將伺服器憑證和任何中間證書串聯到一個名為 tls.crt 的檔案中，並在一個名為 tls.key 的檔案中提供相應的證書密鑰。&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;kubectl -n cattle-system create secret tls tls-rancher-ingress \
--cert=cert.pem \
--key=cert-key.pem
kubectl -n cattle-system create secret generic tls-ca --from-file=cacerts.pem=./cert.pem
kubectl -n cattle-system get secret
NAME TYPE DATA AGE
default-token-h9lwm kubernetes.io/service-account-token 3 2m15s
tls-ca Opaque 1 13s
tls-rancher-ingress kubernetes.io/tls 2 52s&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="5"&gt;
&lt;li&gt;把 ca.pem 複製到 rancher 託管的每座 Downstream cluster 中的每台 Node 上&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;之後使用 Rancher 註冊就不需要再勾選 insecure 了&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;scp ca.pem rancher@&amp;lt;client&amp;gt;:~
# ssh 到 client 上
sudo cp ca.pem /etc/pki/trust/anchors/
sudo cp ca.pem /usr/share/pki/trust/anchors/
sudo update-ca-certificates&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;Install from the cert-manager release manifest&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.20.0/cert-manager.yaml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="2"&gt;
&lt;li&gt;Check cert-manager pod status&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;kubectl -n cert-manager get pods&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;NAME READY STATUS RESTARTS AGE
cert-manager-7b8b89f89d-9tsmq 1/1 Running 0 43s
cert-manager-cainjector-7f9fdd5dd5-mqspq 1/1 Running 0 43s
cert-manager-webhook-769f6b94cb-vmwm2 1/1 Running 0 43s&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;h2&gt;4. Install Rancher Prime with Helm and Your Chosen Certificate Option&lt;span class="hx:absolute hx:-mt-20" id="4-install-rancher-prime-with-helm-and-your-chosen-certificate-option"&gt;&lt;/span&gt;
&lt;a href="#4-install-rancher-prime-with-helm-and-your-chosen-certificate-option" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;建立 Rancher Prime 並且使用自簽憑證&lt;span class="hx:absolute hx:-mt-20" id="建立-rancher-prime-並且使用自簽憑證"&gt;&lt;/span&gt;
&lt;a href="#%e5%bb%ba%e7%ab%8b-rancher-prime-%e4%b8%a6%e4%b8%94%e4%bd%bf%e7%94%a8%e8%87%aa%e7%b0%bd%e6%86%91%e8%ad%89" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-1"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;helm install rancher rancher-prime/rancher \
--namespace cattle-system \
--version=2.13.2 \
--set bootstrapPassword=rancheradmin \
--set hostname=rancher.example.com \
--set replicas=3 \
--set ingress.tls.source=secret \
--set privateCA=true
--set global.cattle.psp.enabled=false&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;建立 Rancher Prime 並且使用 Cert-manager 產生憑證&lt;span class="hx:absolute hx:-mt-20" id="建立-rancher-prime-並且使用-cert-manager-產生憑證"&gt;&lt;/span&gt;
&lt;a href="#%e5%bb%ba%e7%ab%8b-rancher-prime-%e4%b8%a6%e4%b8%94%e4%bd%bf%e7%94%a8-cert-manager-%e7%94%a2%e7%94%9f%e6%86%91%e8%ad%89" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-1"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;helm install rancher rancher-prime/rancher \
--namespace cattle-system \
--set hostname=ha-rancher.kubeantony.com \
--set bootstrapPassword=rancheradmin \
--set global.cattle.psp.enabled=false \
--set replicas=3 \
--version 2.13.2&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;5. Verify that the Rancher Server is Successfully Deployed&lt;span class="hx:absolute hx:-mt-20" id="5-verify-that-the-rancher-server-is-successfully-deployed"&gt;&lt;/span&gt;
&lt;a href="#5-verify-that-the-rancher-server-is-successfully-deployed" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="indent-title-1"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;kubectl -n cattle-system get po&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;NAME READY STATUS RESTARTS AGE
helm-operation-cnlsx 0/2 Completed 0 14m
helm-operation-hfpdh 0/2 Completed 0 15m
helm-operation-llz2m 0/2 Completed 0 15m
helm-operation-pcq4s 0/2 Completed 0 16m
helm-operation-tw5hw 0/2 Completed 0 15m
rancher-647cdd469b-7ctmw 1/1 Running 0 20m
rancher-647cdd469b-l5q7w 1/1 Running 1 (17m ago) 20m
rancher-647cdd469b-mb4rc 1/1 Running 1 (17m ago) 20m
rancher-webhook-fb6768c79-fk9jl 1/1 Running 0 15m&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;檢查名稱解析&lt;span class="hx:absolute hx:-mt-20" id="檢查名稱解析"&gt;&lt;/span&gt;
&lt;a href="#%e6%aa%a2%e6%9f%a5%e5%90%8d%e7%a8%b1%e8%a7%a3%e6%9e%90" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-1"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;~&amp;gt; curl -k -H &amp;#34;host: rancher.example.com&amp;#34; https://192.168.11.50/dashboard/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;匯出 cert-manager 簽的憑證&lt;span class="hx:absolute hx:-mt-20" id="匯出-cert-manager-簽的憑證"&gt;&lt;/span&gt;
&lt;a href="#%e5%8c%af%e5%87%ba-cert-manager-%e7%b0%bd%e7%9a%84%e6%86%91%e8%ad%89" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-1"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;~&amp;gt; curl -k -s -fL rancher.example.com/v3/settings/cacerts | jq -r .value&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;將憑證匯入瀏覽器&lt;span class="hx:absolute hx:-mt-20" id="將憑證匯入瀏覽器"&gt;&lt;/span&gt;
&lt;a href="#%e5%b0%87%e6%86%91%e8%ad%89%e5%8c%af%e5%85%a5%e7%80%8f%e8%a6%bd%e5%99%a8" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;在 client 的瀏覽器把 ca.pem import 進去 (此方法為自簽憑證時使用)&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://i.imgur.com/JMoScUp.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;就可以使用 https 登入 rancher&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://i.imgur.com/DYmsfUN.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;Rancher 生成 RKE2 之前的必要設定&lt;span class="hx:absolute hx:-mt-20" id="rancher-生成-rke2-之前的必要設定"&gt;&lt;/span&gt;
&lt;a href="#rancher-%e7%94%9f%e6%88%90-rke2-%e4%b9%8b%e5%89%8d%e7%9a%84%e5%bf%85%e8%a6%81%e8%a8%ad%e5%ae%9a" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;節點必須能夠透過 DNS 解析 Rancher 的 FQDN，不要透過 &lt;code&gt;/etc/hosts&lt;/code&gt; 解析，否則 Rancher 的 Agent ( cattle-cluster-agent ) 會在建立的時候無法存取到 Rancher。&lt;/li&gt;
&lt;li&gt;如果想透過 &lt;code&gt;/etc/hosts&lt;/code&gt; 去解析 Rancher FQDN 對應的 IP Address 的話，請依照以下步驟設定&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-2"&gt;
&lt;ol&gt;
&lt;li&gt;編輯 Patch file Yaml 檔&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ cat &amp;lt;&amp;lt;EOF &amp;gt; patch-file-hostalias.yaml
spec:
template:
spec:
hostAliases:
- ip: &amp;#34;192.168.0.11&amp;#34;
hostnames:
- &amp;#34;antony-rancher.example.com&amp;#34;
EOF&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;hostAliases&lt;/code&gt; 輸入 Rancher 所在的主機 IP Address
&lt;code&gt;hostnames&lt;/code&gt; 輸入 Racher 的 FDQN&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;ol start="2"&gt;
&lt;li&gt;Patch &lt;code&gt;cattle-cluster-agent&lt;/code&gt; 這個 Deployment&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ kubectl -n cattle-system patch deployment cattle-cluster-agent --patch-file patch-file-hostalias.yaml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="3"&gt;
&lt;li&gt;檢視 Pods 運作狀態&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ kubectl -n cattle-system get pods -l app=cattle-cluster-agent&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;NAME READY STATUS RESTARTS AGE
cattle-cluster-agent-6c54877576-hmtgq 1/1 Running 0 22m
cattle-cluster-agent-6c54877576-zt6mb 1/1 Running 0 22m&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;請注意，這個方法永遠不要在 Production 環境使用，只能在測試環境使用，因為如果 DownStream Cluster 有被更新，Patch 的設定有可能會被覆蓋&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;Rancher 生成 RKE2 之後的必要設定&lt;span class="hx:absolute hx:-mt-20" id="rancher-生成-rke2-之後的必要設定"&gt;&lt;/span&gt;
&lt;a href="#rancher-%e7%94%9f%e6%88%90-rke2-%e4%b9%8b%e5%be%8c%e7%9a%84%e5%bf%85%e8%a6%81%e8%a8%ad%e5%ae%9a" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在每一台 Control Plane Node 的設定&lt;/p&gt;
&lt;div class="indent-title-1"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;{
# 1. 建立目錄並設定 Kubeconfig
mkdir -p $HOME/.kube &amp;amp;&amp;amp; \
sudo cp /etc/rancher/rke2/rke2.yaml $HOME/.kube/config &amp;amp;&amp;amp; \
sudo chown $(id -u):$(id -g) $HOME/.kube/config &amp;amp;&amp;amp; \
# 2. 搬移執行檔
sudo cp /var/lib/rancher/rke2/bin/* /usr/local/bin/ &amp;amp;&amp;amp; \
sudo cp /opt/rke2/bin/* /usr/local/bin/ ; \
# 3. 寫入 crictl 設定 (使用 printf 保持單行邏輯)
printf &amp;#34;runtime-endpoint: unix:///run/k3s/containerd/containerd.sock\nimage-endpoint: unix:///run/k3s/containerd/containerd.sock\ntimeout: 10\n&amp;#34; | sudo tee /etc/crictl.yaml &amp;gt; /dev/null &amp;amp;&amp;amp; \
# 4. 設定 Bash Alias 與補全
printf &amp;#34;\nsource &amp;lt;(kubectl completion bash)\nalias k=kubectl\ncomplete -o default -F __start_kubectl k\n&amp;#34; &amp;gt;&amp;gt; ~/.bashrc &amp;amp;&amp;amp; \
# 5. 立即生效
source ~/.bashrc
} &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;在每一台 Worker Node 要做的設定&lt;/p&gt;
&lt;div class="indent-title-1"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;~&amp;gt; sudo cp /opt/rke2/bin/* /usr/local/bin/ &amp;amp;&amp;amp; \
sudo cp /var/lib/rancher/rke2/bin/* /usr/local/bin/
# Setup crictl config
~&amp;gt; cat &amp;lt;&amp;lt;EOF | sudo tee /etc/crictl.yaml
runtime-endpoint: unix:///run/k3s/containerd/containerd.sock
image-endpoint: unix:///run/k3s/containerd/containerd.sock
timeout: 10
EOF&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h1&gt;Helm upgrade Rancher&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;Update your local helm repo cache&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ helm repo update&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="2"&gt;
&lt;li&gt;Export the current values to a file:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ helm get values rancher -n cattle-system -o yaml &amp;gt; values.yaml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="3"&gt;
&lt;li&gt;Helm 查詢 Rancher 的版本，命令如下 :&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ helm -n cattle-system repo ls
- name: rancher-prime
url: https://charts.rancher.com/server-charts/prime
$ helm search repo rancher-prime --versions
NAME CHART VERSION APP VERSION DESCRIPTION
rancher-prime/rancher 2.8.2 v2.8.2 Install Rancher Server to manage Kubernetes clu...
...&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="4"&gt;
&lt;li&gt;Upgrade Rancher Version&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ helm upgrade rancher rancher-&amp;lt;CHART_REPO&amp;gt;/rancher \
--namespace cattle-system \
-f values.yaml \
--version=2.8.2&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h1&gt;RKE2 設定私有 Image Registry&lt;/h1&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;可以透過 Rancher 設定或是手動更改 Containerd 的設定檔，Rancher 做的設定會直接套用到整個叢集的每一台 Node 上，手動設定會需要一台一台 Node 去做設定。&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;Rancher 設定&lt;span class="hx:absolute hx:-mt-20" id="rancher-設定"&gt;&lt;/span&gt;
&lt;a href="#rancher-%e8%a8%ad%e5%ae%9a" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;更改叢集設定檔&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/ByuSVSjET.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;ol start="2"&gt;
&lt;li&gt;輸入 Image Registry 資訊&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/SJd9NBj4a.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Registry Hostname: &lt;code&gt;10.43.0.11:5000&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Mirror Endpoints: &lt;code&gt;http://10.43.0.11:5000&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/SyV-IHjET.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Registry Hostname: &lt;code&gt;10.43.0.11:5000&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;TLS Secret: &lt;code&gt;None&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Authentication: &lt;code&gt;Create a HTTP Basic Auth Secret&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Username: &lt;code&gt;docker&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Password: &lt;code&gt;xxx&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; Skip TLS Verifications&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/S1mhBHsVp.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;ol start="3"&gt;
&lt;li&gt;儲存並套用設定至整個叢集&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/ByHHIBjNa.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;手動設定&lt;span class="hx:absolute hx:-mt-20" id="手動設定"&gt;&lt;/span&gt;
&lt;a href="#%e6%89%8b%e5%8b%95%e8%a8%ad%e5%ae%9a" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;注意資訊 :&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-1"&gt;
&lt;ul&gt;
&lt;li&gt;如果只改一台 Node，那麼就只有該節點能夠到設定的 Image Registry 下載或上傳 Images。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;config.toml.tmpl&lt;/code&gt; 這個檔案如果被刪掉，那麼假設 RKE2 是被 Rancher 管理的，設定的內容，會被 Rancher 同步回來。反之，如果沒被刪掉，那麼在 Rancher 設定的值將永遠無法被套用，直到 &lt;code&gt;config.toml.tmpl&lt;/code&gt; 這個檔案被刪除。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;ol start="2"&gt;
&lt;li&gt;複製一份 Cotainerd 的設定檔&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo cp /var/lib/rancher/rke2/agent/etc/containerd/config.toml /var/lib/rancher/rke2/agent/etc/containerd/config.toml.tmpl&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;重要: 檔名一定要是 &lt;code&gt;config.toml.tmpl&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;ol start="3"&gt;
&lt;li&gt;修改 &lt;code&gt;config.toml.tmpl&lt;/code&gt; 檔案內容&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo nano /var/lib/rancher/rke2/agent/etc/containerd/config.toml.tmpl&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;新增以下內容 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;[plugins.&amp;#34;io.containerd.grpc.v1.cri&amp;#34;.registry.configs.&amp;#34;HARBOR_FQDN&amp;#34;.auth]
username = &amp;#34;xxx&amp;#34;
password = &amp;#34;xxx&amp;#34;
[plugins.&amp;#34;io.containerd.grpc.v1.cri&amp;#34;.registry.configs.&amp;#34;HARBOR_FQDN&amp;#34;.tls]
insecure_skip_verify = true&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;如果 Image Registry 是 HTTP，那麼必須再額外新增以下內容&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;[plugins.&amp;#34;io.containerd.grpc.v1.cri&amp;#34;.registry.mirrors]
[plugins.&amp;#34;io.containerd.grpc.v1.cri&amp;#34;.registry.mirrors.&amp;#34;{FQDN or IP Address}:Port&amp;#34;]
endpoint = [&amp;#34;http://{FQDN or IP Address}:Port&amp;#34;]&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;ol start="4"&gt;
&lt;li&gt;重啟 RKE2 服務&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo systemctl restart rke2-server.service&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;如果是 RKE2 worker 節點要重啟的服務是 &lt;code&gt;rke2-agent.service&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;ol start="5"&gt;
&lt;li&gt;刪除 &lt;code&gt;config.toml.tmpl&lt;/code&gt; 檔案 (不一定要做)&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo rm /var/lib/rancher/rke2/agent/etc/containerd/config.toml.tmpl&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;重要 ! 如果 RKE2 由 Rancher 管理，那麼只要這個檔案存在，在 Rancher 設定的 Image Registry 資訊，都會被這個檔案覆蓋，所以要自行決定是否刪除。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;h1&gt;Enable Rrancher Audit log&lt;/h1&gt;&lt;h2&gt;PreRequest&lt;span class="hx:absolute hx:-mt-20" id="prerequest"&gt;&lt;/span&gt;
&lt;a href="#prerequest" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;Note: Rancher 要可以收到 Audit log ，它所在的 K8S 也要先啟動 Audit log&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;1. RKE2 啟動 Audit log&lt;span class="hx:absolute hx:-mt-20" id="1-rke2-啟動-audit-log"&gt;&lt;/span&gt;
&lt;a href="#1-rke2-%e5%95%9f%e5%8b%95-audit-log" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;Step 1: Update the RKE2 Configuration File&lt;span class="hx:absolute hx:-mt-20" id="step-1-update-the-rke2-configuration-file"&gt;&lt;/span&gt;
&lt;a href="#step-1-update-the-rke2-configuration-file" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-1"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ echo &amp;#34;audit-policy-file: /etc/rancher/rke2/audit-policy.yaml&amp;#34; | sudo tee -a /etc/rancher/rke2/config.yaml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;Step 2: Create an Audit Policy File&lt;span class="hx:absolute hx:-mt-20" id="step-2-create-an-audit-policy-file"&gt;&lt;/span&gt;
&lt;a href="#step-2-create-an-audit-policy-file" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-1"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ cat &amp;lt;&amp;lt;EOF | sudo tee /etc/rancher/rke2/audit-policy.yaml
apiVersion: audit.k8s.io/v1
kind: Policy
metadata:
creationTimestamp: null
rules:
- level: Metadata
EOF&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;Step 3: Restart RKE2 Server&lt;span class="hx:absolute hx:-mt-20" id="step-3-restart-rke2-server"&gt;&lt;/span&gt;
&lt;a href="#step-3-restart-rke2-server" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-1"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo systemctl restart rke2-server&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;Step 4: Monitor Audit Log&lt;span class="hx:absolute hx:-mt-20" id="step-4-monitor-audit-log"&gt;&lt;/span&gt;
&lt;a href="#step-4-monitor-audit-log" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-1"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo tail -f /var/lib/rancher/rke2/server/logs/audit.log&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;2. Enable Rrancher Audit log&lt;span class="hx:absolute hx:-mt-20" id="2-enable-rrancher-audit-log"&gt;&lt;/span&gt;
&lt;a href="#2-enable-rrancher-audit-log" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;Step 1: Export the current values to a file:&lt;span class="hx:absolute hx:-mt-20" id="step-1--export-the-current-values-to-a-file"&gt;&lt;/span&gt;
&lt;a href="#step-1--export-the-current-values-to-a-file" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-1"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ helm get values rancher -n cattle-system -o yaml &amp;gt; values.yaml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;Step 2: 新增 Audit log 設定&lt;span class="hx:absolute hx:-mt-20" id="step-2-新增-audit-log-設定"&gt;&lt;/span&gt;
&lt;a href="#step-2-%e6%96%b0%e5%a2%9e-audit-log-%e8%a8%ad%e5%ae%9a" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-1"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ cat &amp;lt;&amp;lt;EOF | sudo tee -a values.yaml
auditLog:
destination: sidecar
hostPath: /var/log/rancher/audit/
level: 3
maxAge: 3
maxBackup: 1
maxSize: 100
EOF&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;Step 3: 更新 Rancher 啟動 Audit log&lt;span class="hx:absolute hx:-mt-20" id="step-3-更新-rancher-啟動-audit-log"&gt;&lt;/span&gt;
&lt;a href="#step-3-%e6%9b%b4%e6%96%b0-rancher-%e5%95%9f%e5%8b%95-audit-log" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-1"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ helm upgrade rancher rancher-prime/rancher \
--namespace cattle-system \
-f values.yaml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h1&gt;設定 RKE2 Cluster Pod 總量限制&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;點選 &amp;ldquo;Cluster Management&amp;rdquo; -&amp;gt; 在要設定的叢集旁邊點選 &amp;ldquo;Edit Config&amp;rdquo;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/SkaMzWxPp.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;ol start="2"&gt;
&lt;li&gt;在 Cluster Configuration 的左側選單中點選 &amp;ldquo;Advanced&amp;rdquo;，並在 Additional Kubelet Args 區塊下點選 &amp;ldquo;Add Argument&amp;rdquo;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/SJ5LXbePa.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;ol start="3"&gt;
&lt;li&gt;輸入以下設定值，並點選右下角 &amp;ldquo;Save&amp;rdquo; 套用設定&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;max-pods=250&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;max-pods&lt;/code&gt; means Number of Pods that can run on this kubelet.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;從 Rancher 設定的話，會把以上新增的設定套用到 K8S Cluster 的每個節點上。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/HyO67bev6.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;ol start="4"&gt;
&lt;li&gt;回到 &amp;ldquo;Home&amp;rdquo;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/H1U-4ZlwT.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;我的 Cluster 有 3 台 Node，所以 250 x 3 = 750&lt;br&gt;
可以參考我做的測試 &lt;a
href="https://hackmd.io/@QI-AN/What-happens-when-the-number-of-K8S-Pods-exceeds-110"target="_blank" rel="noopener"&gt;測試 K8S Pod 數量超過 110 會發生甚麼事?&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;h1&gt;Trouble shooting&lt;/h1&gt;&lt;h2&gt;在 Join Master Node 的時候，不小心設定到同一個 node name ，然後 etcd 咬住原來 node 的名稱怎麼辦&lt;span class="hx:absolute hx:-mt-20" id="在-join-master-node-的時候不小心設定到同一個-node-name-然後-etcd-咬住原來-node-的名稱怎麼辦"&gt;&lt;/span&gt;
&lt;a href="#%e5%9c%a8-join-master-node-%e7%9a%84%e6%99%82%e5%80%99%e4%b8%8d%e5%b0%8f%e5%bf%83%e8%a8%ad%e5%ae%9a%e5%88%b0%e5%90%8c%e4%b8%80%e5%80%8b-node-name-%e7%84%b6%e5%be%8c-etcd-%e5%92%ac%e4%bd%8f%e5%8e%9f%e4%be%86-node-%e7%9a%84%e5%90%8d%e7%a8%b1%e6%80%8e%e9%ba%bc%e8%be%a6" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;錯誤訊息&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;ETCD join failed: duplicate node name found, please use a unique name for this node&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;解決辦法&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;先進去 etcd 的 pod 中&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;kubectl -n kube-system exec -it etcd-staging-kube-master-1.fqdn.com -- bash&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="2"&gt;
&lt;li&gt;列出 etcd 的成員&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;etcdctl --cert /var/lib/rancher/rke2/server/tls/etcd/server-client.crt --key /var/lib/rancher/rke2/server/tls/etcd/server-client.key --endpoints https://127.0.0.1:2379 --cacert /var/lib/rancher/rke2/server/tls/etcd/server-ca.crt member list&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;121f9e856446fcc4, started, rsm2-f826f76c, https://192.168.11.62:2380, https://192.168.11.62:2379, false
67f4840cc79f9560, started, rsm1-168e267e, https://192.168.11.61:2380, https://192.168.11.61:2379, false
6b20c6a3411cab14, started, rsm3-2126c18e, https://192.168.11.63:2380, https://192.168.11.63:2379, false&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="3"&gt;
&lt;li&gt;刪除重複的 etcd 成員&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;etcdctl --cert /var/lib/rancher/rke2/server/tls/etcd/server-client.crt --key /var/lib/rancher/rke2/server/tls/etcd/server-client.key --endpoints https://127.0.0.1:2379 --cacert /var/lib/rancher/rke2/server/tls/etcd/server-ca.crt member remove 6b20c6a3411cab14&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;Member 6b20c6a3411cab14 removed from cluster 9ea915bf6adaa894&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h1&gt;手動更新 Cert-manager 做給 Rancher 用的憑證&lt;/h1&gt;&lt;p&gt;Rancher 透過 Cert-manager 做出來的憑證，有效期限預設為 90 天，在第 60 天的時候會嘗試自動更換憑證。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;SSH 連線至可以執行 &lt;code&gt;kubectl&lt;/code&gt; 管理 UpStream Cluster ( Rancher 所在的 Kubernetes Cluster ) 的機器&lt;/li&gt;
&lt;li&gt;下載 Cert-manager 管理工具&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ curl -fsSL -o cmctl.tar.gz https://github.com/cert-manager/cert-manager/releases/latest/download/cmctl-linux-amd64.tar.gz &amp;amp;&amp;amp; tar xzf cmctl.tar.gz &amp;amp;&amp;amp; sudo mv cmctl /usr/local/bin&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="3"&gt;
&lt;li&gt;檢查 Rancher 當前使用憑證的有效日期&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ echo | openssl s_client -connect `kubectl -n cattle-system get ing --no-headers -o custom-columns=HOSTS:.spec.rules[*].host`:443 2&amp;gt;/dev/null | openssl x509 -noout -dates&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出如下 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;notBefore=Feb 19 05:31:37 2024 GMT
notAfter=May 19 05:31:37 2024 GMT&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="4"&gt;
&lt;li&gt;手動 Renew Rancher 憑證&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;4.1. 檢查 Rancher 在 Kubernetes 中使用的憑證名稱&lt;/p&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ kubectl -n cattle-system get certificate&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;NAME READY SECRET AGE
tls-rancher-ingress True tls-rancher-ingress 2d21h&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;4.2. 手動 Renew 憑證&lt;/p&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ cmctl -n cattle-system renew tls-rancher-ingress&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;Manually triggered issuance of Certificate cattle-system/tls-rancher-ingress&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;4.3. 檢查建立憑證的 Request 是否發出&lt;/p&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ kubectl -n cattle-system get certificaterequest --sort-by=.metadata.creationTimestamp&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;NAME APPROVED DENIED READY ISSUER REQUESTOR AGE
tls-rancher-ingress-9jb67 True True rancher system:serviceaccount:cert-manager:cert-manager 2d21h
tls-rancher-ingress-m59sk True True rancher system:serviceaccount:cert-manager:cert-manager 3s&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="5"&gt;
&lt;li&gt;確認憑證當前狀態的詳細資訊&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ cmctl -n cattle-system status certificate tls-rancher-ingress&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;Name: tls-rancher-ingress
Namespace: cattle-system
Created at: 2024-02-16T17:08:39&amp;#43;08:00
Conditions:
Ready: True, Reason: Ready, Message: Certificate is up to date and has not expired
DNS Names:
- 172.20.0.37.nip.io
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Requested 13m cert-manager-certificates-request-manager Created new CertificateRequest resource &amp;#34;tls-rancher-ingress-7hdcg&amp;#34;
Normal Requested 6m49s cert-manager-certificates-request-manager Created new CertificateRequest resource &amp;#34;tls-rancher-ingress-8hhjl&amp;#34;
Normal Reused 2m56s (x6 over 156m) cert-manager-certificates-key-manager Reusing private key stored in existing Secret resource &amp;#34;tls-rancher-ingress&amp;#34;
Normal Issuing 2m56s (x6 over 156m) cert-manager-certificates-issuing The certificate has been successfully issued
Normal Requested 2m56s cert-manager-certificates-request-manager Created new CertificateRequest resource &amp;#34;tls-rancher-ingress-m59sk&amp;#34;
Issuer:
Name: rancher
Kind: Issuer
Conditions:
Ready: True, Reason: KeyPairVerified, Message: Signing CA verified
Events: &amp;lt;none&amp;gt;
Secret:
Name: tls-rancher-ingress
Issuer Country:
Issuer Organisation: dynamiclistener-org
Issuer Common Name: dynamiclistener-ca@1708074590
Key Usage: Digital Signature, Key Encipherment
Extended Key Usages:
Public Key Algorithm: RSA
Signature Algorithm: ECDSA-SHA256
Subject Key ID:
Authority Key ID: bc3674dd7762dca834cb5586c463a2c858d11528
Serial Number: c9246b491d331f8d197eed83d4de06d5
Events: &amp;lt;none&amp;gt;
Not Before: 2024-02-19T14:47:46&amp;#43;08:00
Not After: 2024-05-19T14:47:46&amp;#43;08:00
Renewal Time: 2024-04-19T14:47:46&amp;#43;08:00
No CertificateRequest found for this Certificate&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Not Before&lt;/code&gt;，憑證有效期限的開始日期&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Not After&lt;/code&gt;，憑證有效期限的結束日期&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Renewal Time&lt;/code&gt;，cert-manager 將把憑證的 &lt;code&gt;status.RenewalTime&lt;/code&gt; 設定為嘗試更新的時間。&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h1&gt;參考網站&lt;/h1&gt;&lt;ul&gt;
&lt;li&gt;&lt;a
href="https://docs.rke2.io/install/quickstart"target="_blank" rel="noopener"&gt;RKE2 Quick Start - RKE2 Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a
href="https://docs.rke2.io/install/ha"target="_blank" rel="noopener"&gt;RKE2 High Availability - RKE2 Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a
href="https://www.suse.com/suse-rancher/support-matrix/all-supported-versions/rancher-v2-7-6/"target="_blank" rel="noopener"&gt;Rancher Support Matrix - SUSE Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a
href="https://ranchermanager.docs.rancher.com/pages-for-subheaders/install-upgrade-on-a-kubernetes-cluster"target="_blank" rel="noopener"&gt;Install/Upgrade Rancher on a Kubernetes Cluster - Rancher Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a
href="https://docs.rke2.io/install/containerd_registry_configuration"target="_blank" rel="noopener"&gt;Containerd Registry Configuration - RKE2 Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a
href="https://cert-manager.io/docs/reference/cmctl/#renew"target="_blank" rel="noopener"&gt;Renew Certificate - Cert-manager Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a
href="https://cert-manager.io/docs/usage/certificate/#reissuance-triggered-by-expiry-renewal"target="_blank" rel="noopener"&gt;Reissuance triggered by expiry (renewal) - Cert-manager Docs &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Rancher RBAC 實務範例</title><link>https://blog.kubeantony.com/archive/rancher/rancher-rbac-%E5%AF%A6%E5%8B%99%E7%AF%84%E4%BE%8B/</link><pubDate>Mon, 23 Mar 2026 08:55:34 +0800</pubDate><guid>https://blog.kubeantony.com/archive/rancher/rancher-rbac-%E5%AF%A6%E5%8B%99%E7%AF%84%E4%BE%8B/</guid><description>
&lt;p&gt;依據職責與最小權限原則，可將使用者劃分為以下幾個層級&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: center"&gt;層級&lt;/th&gt;
&lt;th&gt;角色&lt;/th&gt;
&lt;th&gt;Rancher 角色&lt;/th&gt;
&lt;th&gt;權限範圍&lt;/th&gt;
&lt;th&gt;核心職責&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;1&lt;/td&gt;
&lt;td&gt;平台管理員&lt;/td&gt;
&lt;td&gt;Global Administrator（內建）&lt;/td&gt;
&lt;td&gt;全域 — 所有叢集、所有資源完整 CRUD&lt;/td&gt;
&lt;td&gt;叢集生命週期管理、全域認證與安全策略 (LDAP/AD/SAML)、使用者帳號與角色分配&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;2&lt;/td&gt;
&lt;td&gt;叢集管理／維運人員&lt;/td&gt;
&lt;td&gt;Cluster Owner（內建）&lt;/td&gt;
&lt;td&gt;特定叢集 — 完整管理權限，不含平台層級操作&lt;/td&gt;
&lt;td&gt;節點健康監控 (cordon/drain)、Namespace 與 Project 規劃、叢集內 RBAC、資源配額調整、ETCD 快照&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;3a&lt;/td&gt;
&lt;td&gt;資安稽核員（長官）&lt;/td&gt;
&lt;td&gt;Read Only Administrator（客製）&lt;/td&gt;
&lt;td&gt;全域 — 所有叢集僅 get/list/watch&lt;/td&gt;
&lt;td&gt;跨叢集合規性稽核，查看所有資源但無法修改或刪除&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;3b&lt;/td&gt;
&lt;td&gt;資安稽核員（一般）&lt;/td&gt;
&lt;td&gt;Cluster Reader（客製）&lt;/td&gt;
&lt;td&gt;特定叢集 — 僅 get/list/watch&lt;/td&gt;
&lt;td&gt;特定叢集合規性稽核，查看該叢集所有資源&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;4&lt;/td&gt;
&lt;td&gt;應用系統／專案管理員&lt;/td&gt;
&lt;td&gt;Project Owner（內建）&lt;/td&gt;
&lt;td&gt;特定 Project — 所屬 Project 內完整 CRUD&lt;/td&gt;
&lt;td&gt;Project 成員管理、Namespace 建立、Workload 部署、ResourceQuota/LimitRange、PVC 管理、監控告警&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;5&lt;/td&gt;
&lt;td&gt;應用程式開發人員&lt;/td&gt;
&lt;td&gt;Project Member / Read Only（內建）&lt;/td&gt;
&lt;td&gt;特定 Namespace — 授權 Namespace 內操作；正式環境通常僅唯讀&lt;/td&gt;
&lt;td&gt;Workload 部署與更新、Service/Ingress 設定、ConfigMap/Secret 使用、日誌查看與 Pod 除錯、HPA 設定&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;1. 平台管理員&lt;span class="hx:absolute hx:-mt-20" id="1-平台管理員"&gt;&lt;/span&gt;
&lt;a href="#1-%e5%b9%b3%e5%8f%b0%e7%ae%a1%e7%90%86%e5%93%a1" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;角色概述&lt;span class="hx:absolute hx:-mt-20" id="角色概述"&gt;&lt;/span&gt;
&lt;a href="#%e8%a7%92%e8%89%b2%e6%a6%82%e8%bf%b0" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;平台管理員負責維護 Rancher 平台本身的運作，擁有最高權限（Global Administrator）。&lt;/p&gt;
&lt;h3&gt;職責範圍&lt;span class="hx:absolute hx:-mt-20" id="職責範圍"&gt;&lt;/span&gt;
&lt;a href="#%e8%81%b7%e8%b2%ac%e7%af%84%e5%9c%8d" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;在 Rancher 中，平台管理員可處理跨叢集、平台層級的事務，包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;叢集生命週期管理 — 建立、匯入、刪除 Rancher 本身及其所管理的所有叢集&lt;/li&gt;
&lt;li&gt;全域認證與安全策略設定 — LDAP、AD、SAML 等&lt;/li&gt;
&lt;li&gt;使用者帳號與角色分配 — 管理平台上所有使用者的權限&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;具體權限 (內建)&lt;span class="hx:absolute hx:-mt-20" id="具體權限-內建"&gt;&lt;/span&gt;
&lt;a href="#%e5%85%b7%e9%ab%94%e6%ac%8a%e9%99%90-%e5%85%a7%e5%bb%ba" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/rJoOP5Lc-l.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;h3&gt;實作範例 : 設定 Windows AD 的 admin 群組為平台管理員&lt;span class="hx:absolute hx:-mt-20" id="實作範例--設定-windows-ad-的-admin-群組為平台管理員"&gt;&lt;/span&gt;
&lt;a href="#%e5%af%a6%e4%bd%9c%e7%af%84%e4%be%8b--%e8%a8%ad%e5%ae%9a-windows-ad-%e7%9a%84-admin-%e7%be%a4%e7%b5%84%e7%82%ba%e5%b9%b3%e5%8f%b0%e7%ae%a1%e7%90%86%e5%93%a1" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;點選左側清單的 &lt;strong&gt;Users &amp;amp; Authentication&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Groups&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Assign Global Roles&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/B1bz9qLqWg.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;選擇群組 -&amp;gt; 僅勾選 &lt;strong&gt;Administrator&lt;/strong&gt;
&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/r135icI5Zx.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;滑鼠滾到頁面最下方，點選 &lt;strong&gt;Save&lt;/strong&gt; 按鈕儲存&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/ByyxnqLqWx.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;2. 叢集管理、維運人員&lt;span class="hx:absolute hx:-mt-20" id="2-叢集管理維運人員"&gt;&lt;/span&gt;
&lt;a href="#2-%e5%8f%a2%e9%9b%86%e7%ae%a1%e7%90%86%e7%b6%ad%e9%81%8b%e4%ba%ba%e5%93%a1" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;角色概述&lt;span class="hx:absolute hx:-mt-20" id="角色概述-1"&gt;&lt;/span&gt;
&lt;a href="#%e8%a7%92%e8%89%b2%e6%a6%82%e8%bf%b0-1" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;負責管理特定 DownStream Kubernetes 叢集狀態的 SRE 或維運工程師，此角色是特定叢集的維運、管理者，但非平台管理者。&lt;/p&gt;
&lt;h3&gt;職責範圍&lt;span class="hx:absolute hx:-mt-20" id="職責範圍-1"&gt;&lt;/span&gt;
&lt;a href="#%e8%81%b7%e8%b2%ac%e7%af%84%e5%9c%8d-1" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Cluster Admin 專注在自己管理的叢集內。日常工作包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;node&lt;/code&gt; 的健康監控與管理（cordon、drain、新增和刪除節點）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;namespace&lt;/code&gt; 與 &lt;code&gt;project&lt;/code&gt; 的規劃&lt;/li&gt;
&lt;li&gt;叢集內的 RBAC 設定（指派 Project owner 等角色）&lt;/li&gt;
&lt;li&gt;硬體資源配額的調整&lt;/li&gt;
&lt;li&gt;Netwrok policy 的管理&lt;/li&gt;
&lt;li&gt;對 ETCD Take Snapshot&lt;/li&gt;
&lt;li&gt;叢集層級的日誌和監控設定&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;具體權限 (內建)&lt;span class="hx:absolute hx:-mt-20" id="具體權限-內建-1"&gt;&lt;/span&gt;
&lt;a href="#%e5%85%b7%e9%ab%94%e6%ac%8a%e9%99%90-%e5%85%a7%e5%bb%ba-1" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/HJkeEjI5bl.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;h3&gt;實作範例 : 設定 Windows AD 的 infra 群組為基礎架構維運人員&lt;span class="hx:absolute hx:-mt-20" id="實作範例--設定-windows-ad-的-infra-群組為基礎架構維運人員"&gt;&lt;/span&gt;
&lt;a href="#%e5%af%a6%e4%bd%9c%e7%af%84%e4%be%8b--%e8%a8%ad%e5%ae%9a-windows-ad-%e7%9a%84-infra-%e7%be%a4%e7%b5%84%e7%82%ba%e5%9f%ba%e7%a4%8e%e6%9e%b6%e6%a7%8b%e7%b6%ad%e9%81%8b%e4%ba%ba%e5%93%a1" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;點選左側選單 &lt;strong&gt;Cluster Management&lt;/strong&gt; -&amp;gt; 找到要管理的 K8s 叢集 -&amp;gt; 點選最右側的&lt;strong&gt;三點選單&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Edit Config&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/BJp2PoL5be.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;選擇 &lt;strong&gt;Member Roles&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Add&lt;/strong&gt; 按鈕
&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/B1EVDjIcZe.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;選擇群組 -&amp;gt; 勾選 &lt;strong&gt;Owner&lt;/strong&gt; 權限 -&amp;gt; &lt;strong&gt;Add&lt;/strong&gt; 按鈕
&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/Syl8uiI9-g.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;點選右下角 &lt;strong&gt;Save&lt;/strong&gt; 按鈕儲存
&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/H1ST_jIcZe.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;在 NeuVector 通常賦予 CI/CD 操作權限，允許在維運過程中觸發掃描或排除誤判，確保服務穩定。&lt;/p&gt;
&lt;h2&gt;3. 資訊安全稽核員&lt;span class="hx:absolute hx:-mt-20" id="3-資訊安全稽核員"&gt;&lt;/span&gt;
&lt;a href="#3-%e8%b3%87%e8%a8%8a%e5%ae%89%e5%85%a8%e7%a8%bd%e6%a0%b8%e5%93%a1" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;角色概述&lt;span class="hx:absolute hx:-mt-20" id="角色概述-2"&gt;&lt;/span&gt;
&lt;a href="#%e8%a7%92%e8%89%b2%e6%a6%82%e8%bf%b0-2" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;資安部門長官或一般人員進行合規性的稽核作業。&lt;/p&gt;
&lt;h3&gt;職責範圍&lt;span class="hx:absolute hx:-mt-20" id="職責範圍-2"&gt;&lt;/span&gt;
&lt;a href="#%e8%81%b7%e8%b2%ac%e7%af%84%e5%9c%8d-2" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;長官可以讀取所有叢集(包含 &lt;code&gt;local&lt;/code&gt; Cluster)的所有資源，但不具備編輯或刪除的其他權限。&lt;/li&gt;
&lt;li&gt;一般人員只能讀取特定叢集的所有資源。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;具體權限 (客製化) - Read Only Administrator&lt;span class="hx:absolute hx:-mt-20" id="具體權限-客製化---read-only-administrator"&gt;&lt;/span&gt;
&lt;a href="#%e5%85%b7%e9%ab%94%e6%ac%8a%e9%99%90-%e5%ae%a2%e8%a3%bd%e5%8c%96---read-only-administrator" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/S1OFKN0cZx.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;h3&gt;具體權限 (客製化) - Cluster Reader&lt;span class="hx:absolute hx:-mt-20" id="具體權限-客製化---cluster-reader"&gt;&lt;/span&gt;
&lt;a href="#%e5%85%b7%e9%ab%94%e6%ac%8a%e9%99%90-%e5%ae%a2%e8%a3%bd%e5%8c%96---cluster-reader" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/rkOIlJd9be.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;建立 Global Read-only Administrator Roletemplate&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;cat &amp;lt;&amp;lt;&amp;#39;EOF&amp;#39; | kubectl apply -f -
apiVersion: management.cattle.io/v3
builtin: false
context: cluster
description: &amp;#39;&amp;#39;
displayName: View Cluster Resources for Readonly Admin
external: false
hidden: true
kind: RoleTemplate
metadata:
name: cluster-readonly-view
rules:
- apiGroups:
- &amp;#39;&amp;#39;
resources:
- secrets
verbs:
- get
- list
- watch
- apiGroups:
- catalog.cattle.io
resources:
- clusterrepos
- apps
verbs:
- get
- list
- watch
- apiGroups:
- management.cattle.io
resourceNames:
- local
resources:
- clusters
verbs:
- get
---
apiVersion: management.cattle.io/v3
builtin: false
displayName: Read Only Administrator
description: &amp;#39;全域唯讀管理員角色，不具備任何建立、修改或刪除操作的權限。&amp;#39;
inheritedClusterRoles:
- projects-view
- nodes-view
- cluster-readonly-view
kind: GlobalRole
metadata:
name: global-read-only
rules:
- apiGroups:
- management.cattle.io
resources:
- projectroletemplatebindings
- clusterroletemplatebindings
verbs:
- get
- list
- watch
- apiGroups:
- management.cattle.io
resources:
- globalroles
- globalrolebindings
verbs:
- get
- list
- watch
- apiGroups:
- project.cattle.io
resources:
- apps
verbs:
- get
- list
- watch
- apiGroups:
- project.cattle.io
resources:
- apprevisions
verbs:
- get
- list
- watch
- apiGroups:
- management.cattle.io
resources:
- nodes
- nodepools
verbs:
- get
- list
- watch
- apiGroups:
- management.cattle.io
resources:
- roletemplates
verbs:
- get
- list
- watch
- apiGroups:
- management.cattle.io
resources:
- clusterevents
verbs:
- get
- list
- watch
- apiGroups:
- management.cattle.io
resources:
- notifiers
verbs:
- get
- list
- watch
- apiGroups:
- management.cattle.io
resources:
- notificationtemplates
verbs:
- get
- list
- watch
- apiGroups:
- management.cattle.io
resources:
- projectalertgroups
- projectalertrules
verbs:
- get
- list
- watch
- apiGroups:
- management.cattle.io
resources:
- projectloggings
verbs:
- get
- list
- watch
- apiGroups:
- management.cattle.io
resources:
- clusteralertgroups
- clusteralertrules
verbs:
- get
- list
- watch
- apiGroups:
- management.cattle.io
resources:
- clustercatalogs
verbs:
- get
- list
- watch
- apiGroups:
- management.cattle.io
resources:
- projectcatalogs
verbs:
- get
- list
- watch
- apiGroups:
- management.cattle.io
resources:
- projectmonitorgraphs
verbs:
- get
- list
- watch
- apiGroups:
- management.cattle.io
resources:
- catalogtemplates
verbs:
- get
- list
- watch
- apiGroups:
- management.cattle.io
resources:
- catalogtemplateversions
verbs:
- get
- list
- watch
- apiGroups:
- management.cattle.io
resources:
- projects
verbs:
- get
- list
- watch
- apiGroups:
- management.cattle.io
resources:
- clusters
verbs:
- get
- list
- watch
- apiGroups:
- management.cattle.io
resources:
- principals
verbs:
- get
- list
- watch
- apiGroups:
- management.cattle.io
resources:
- users
- userattribute
- groups
- groupmembers
verbs:
- get
- list
- watch
- apiGroups:
- management.cattle.io
resources:
- clusterloggings
verbs:
- get
- list
- watch
- apiGroups:
- management.cattle.io
resources:
- clustermonitorgraphs
verbs:
- get
- list
- watch
- apiGroups:
- management.cattle.io
resources:
- preferences
verbs:
- &amp;#39;*&amp;#39;
- apiGroups:
- management.cattle.io
resources:
- settings
verbs:
- get
- list
- watch
- apiGroups:
- management.cattle.io
resources:
- features
verbs:
- get
- list
- watch
- apiGroups:
- management.cattle.io
resources:
- templates
- templateversions
- catalogs
verbs:
- get
- list
- watch
- apiGroups:
- management.cattle.io
resources:
- nodedrivers
verbs:
- get
- list
- watch
- apiGroups:
- management.cattle.io
resources:
- kontainerdrivers
verbs:
- get
- list
- watch
- apiGroups:
- management.cattle.io
resources:
- operatorsettings
verbs:
- get
- list
- watch
- apiGroups:
- management.cattle.io
resources:
- podsecuritypolicytemplates
verbs:
- get
- list
- watch
- apiGroups:
- management.cattle.io
resources:
- nodetemplates
verbs:
- get
- list
- watch
- apiGroups:
- management.cattle.io
resources:
- multiclusterapps
- globaldnses
- globaldnsproviders
- clustertemplaterevisions
- clustertemplates
verbs:
- get
- list
- watch
- apiGroups:
- management.cattle.io
resources:
- rkek8ssystemimages
verbs:
- get
- list
- watch
- apiGroups:
- management.cattle.io
resources:
- rkek8sserviceoptions
verbs:
- get
- list
- watch
- apiGroups:
- management.cattle.io
resources:
- rkeaddons
verbs:
- get
- list
- watch
- apiGroups:
- management.cattle.io
resources:
- cisconfigs
verbs:
- get
- list
- watch
- apiGroups:
- management.cattle.io
resources:
- cisbenchmarkversions
- clusterscans
verbs:
- get
- list
- watch
- apiGroups:
- management.cattle.io
resources:
- etcdbackups
verbs:
- get
- list
- watch
- apiGroups:
- catalog.cattle.io
resources:
- clusterrepos
verbs:
- get
- list
- watch
- apiGroups:
- provisioning.cattle.io
resources:
- clusters
verbs:
- get
- list
- watch
- apiGroups:
- &amp;#39;&amp;#39;
resources:
- nodes
verbs:
- get
- list
- watch
- apiGroups:
- &amp;#39;*&amp;#39;
resources:
- secrets
verbs:
- get
- list
- watch
EOF&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在 &lt;code&gt;local&lt;/code&gt; Cluster 建立 &lt;code&gt;cluster-reader&lt;/code&gt; Roletemplate 執行以下命令&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;cat &amp;lt;&amp;lt;&amp;#39;EOF&amp;#39; | kubectl apply -f -
apiVersion: management.cattle.io/v3
kind: RoleTemplate
metadata:
name: cluster-reader
displayName: Cluster Reader
description: &amp;#34;提供叢集層級的唯讀權限，可查看所有資源但無法修改。&amp;#34;
# context 設定為 cluster 表示此角色應用於集群層級
context: cluster
# builtin 設定為 false 表示這是自定義角色
builtin: false
clusterCreatorDefault: true
rules:
- apiGroups:
- &amp;#39;*&amp;#39;
resources:
- &amp;#39;*&amp;#39;
verbs:
- get
- list
- watch
EOF&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;實作範例 1 : 設定 Windows AD 的特定 User 為 Read Only Administrator&lt;span class="hx:absolute hx:-mt-20" id="實作範例-1--設定-windows-ad-的特定-user-為-read-only-administrator"&gt;&lt;/span&gt;
&lt;a href="#%e5%af%a6%e4%bd%9c%e7%af%84%e4%be%8b-1--%e8%a8%ad%e5%ae%9a-windows-ad-%e7%9a%84%e7%89%b9%e5%ae%9a-user-%e7%82%ba-read-only-administrator" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Users &amp;amp; Authentication&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Users&lt;/strong&gt; -&amp;gt; 選擇使用者 -&amp;gt; &lt;strong&gt;三點選單&lt;/strong&gt; -&amp;gt; Edit Config&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/BJcQyHA9-e.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;找到 &lt;strong&gt;Custom&lt;/strong&gt; 區塊 -&amp;gt; 勾選 &lt;strong&gt;Read Only Administrator&lt;/strong&gt; -&amp;gt; 右下角 &lt;strong&gt;Save&lt;/strong&gt; 按鈕&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/B1bUhrCqWx.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;實作範例 2 : 設定 Windows AD 的特定 User 為 Cluster Reader&lt;span class="hx:absolute hx:-mt-20" id="實作範例-2--設定-windows-ad-的特定-user-為-cluster-reader"&gt;&lt;/span&gt;
&lt;a href="#%e5%af%a6%e4%bd%9c%e7%af%84%e4%be%8b-2--%e8%a8%ad%e5%ae%9a-windows-ad-%e7%9a%84%e7%89%b9%e5%ae%9a-user-%e7%82%ba-cluster-reader" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;左側選單點進要管理的叢集&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Cluster&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Cluster and Project Members&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Add&lt;/strong&gt;
&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/H1neu8Ccbe.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Select Member 選擇特定 User&lt;/strong&gt; -&amp;gt; &lt;strong&gt;選擇 Cluster Reader&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Create&lt;/strong&gt;
&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/r1B1FLRqWg.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;4. 應用系統/專案管理員&lt;span class="hx:absolute hx:-mt-20" id="4-應用系統專案管理員"&gt;&lt;/span&gt;
&lt;a href="#4-%e6%87%89%e7%94%a8%e7%b3%bb%e7%b5%b1%e5%b0%88%e6%a1%88%e7%ae%a1%e7%90%86%e5%93%a1" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;角色概述&lt;span class="hx:absolute hx:-mt-20" id="角色概述-3"&gt;&lt;/span&gt;
&lt;a href="#%e8%a7%92%e8%89%b2%e6%a6%82%e8%bf%b0-3" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;負責管理特定 Downstream Kubernetes 叢集中，特定 Project 底下的所有資源與權限。對應 Rancher 的 Project Owner 角色，通常由各應用系統的 Tech Lead、專案負責人或 AP 維運組長擔任。&lt;/p&gt;
&lt;h3&gt;職責範圍&lt;span class="hx:absolute hx:-mt-20" id="職責範圍-3"&gt;&lt;/span&gt;
&lt;a href="#%e8%81%b7%e8%b2%ac%e7%af%84%e5%9c%8d-3" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;在 Rancher 中，應用系統/專案管理員可在其所屬 Project 範圍內處理以下事務：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Project 成員管理 — 負責新增、移除及調整 Project 內成員的角色與權限，為該 Project 的最高管理者&lt;/li&gt;
&lt;li&gt;Namespace 規劃與建立 — 依據應用模組或環境需求，在 Project 下建立與管理 Namespace&lt;/li&gt;
&lt;li&gt;應用部署與生命週期管理 — 管理 Project 內所有 Workload、Service、Cronjob 等應用資源的部署與更新&lt;/li&gt;
&lt;li&gt;資源配額管控 — 設定 Project 層級與 Namespace 層級的 ResourceQuota / LimitRange，確保資源使用不超出分配額度&lt;/li&gt;
&lt;li&gt;儲存資源管理 — 為應用申請與管理持久化儲存空間(PVC)，並可查看叢集可用的 StorageClass&lt;/li&gt;
&lt;li&gt;監控與告警設定 — 設定 Project 層級的監控規則與告警通知，確保應用異常時能即時回應&lt;/li&gt;
&lt;li&gt;基礎設施資訊查看 — 可查看叢集節點狀態與叢集事件，了解底層運行狀況&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;具體權限 (內建)&lt;span class="hx:absolute hx:-mt-20" id="具體權限-內建-2"&gt;&lt;/span&gt;
&lt;a href="#%e5%85%b7%e9%ab%94%e6%ac%8a%e9%99%90-%e5%85%a7%e5%bb%ba-2" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/HJvQmP0cWg.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;h3&gt;實作範例 : 設定 Windows AD 的特定 User 為 Project Owner&lt;span class="hx:absolute hx:-mt-20" id="實作範例--設定-windows-ad-的特定-user-為-project-owner"&gt;&lt;/span&gt;
&lt;a href="#%e5%af%a6%e4%bd%9c%e7%af%84%e4%be%8b--%e8%a8%ad%e5%ae%9a-windows-ad-%e7%9a%84%e7%89%b9%e5%ae%9a-user-%e7%82%ba-project-owner" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;左側選單選擇目標 K8s 叢集&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Cluster and Project Members&lt;/strong&gt; -&amp;gt;
&lt;strong&gt;Project Membership&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Add&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/rkkmOdC9Wg.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;選擇 &lt;strong&gt;User&lt;/strong&gt; -&amp;gt; 選擇 &lt;strong&gt;Owner&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Create&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/Hyc-tOCq-x.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;5. 應用程式開發人員&lt;span class="hx:absolute hx:-mt-20" id="5-應用程式開發人員"&gt;&lt;/span&gt;
&lt;a href="#5-%e6%87%89%e7%94%a8%e7%a8%8b%e5%bc%8f%e9%96%8b%e7%99%bc%e4%ba%ba%e5%93%a1" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;角色概述&lt;span class="hx:absolute hx:-mt-20" id="角色概述-4"&gt;&lt;/span&gt;
&lt;a href="#%e8%a7%92%e8%89%b2%e6%a6%82%e8%bf%b0-4" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;負責在被授權的 Project 內進行應用程式的部署、除錯與日常維運操作。對應 Rancher 的 Project Member 或 Read-Only 角色，通常由應用開發工程師或 DevOps 工程師擔任。透過 Rancher 的專案 (Project) 機制，限制他們只能在配發的 Namespace 內部署應用程式與查看 Log。他們無法看見亦無法影響其他團隊的資源或底層基礎建設。&lt;/p&gt;
&lt;h3&gt;職責範圍&lt;span class="hx:absolute hx:-mt-20" id="職責範圍-4"&gt;&lt;/span&gt;
&lt;a href="#%e8%81%b7%e8%b2%ac%e7%af%84%e5%9c%8d-4" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;在 Rancher 中，應用程式開發人員可在其所屬 Project 的已授權 Namespace 內執行以下操作：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Workload 部署與管理 — 建立、更新、刪除 Deployment、StatefulSet、Job、CronJob 等Workloads&lt;/li&gt;
&lt;li&gt;服務與路由設定 — 建立及修改 Service、Ingress，設定應用的對內與對外存取路徑&lt;/li&gt;
&lt;li&gt;組態與密鑰使用 — 建立及編輯自身應用所需的 ConfigMap 與 Secret（依權限範圍）&lt;/li&gt;
&lt;li&gt;應用日誌查看 — 透過 Rancher 介面查看 Pod 即時日誌，進行問題排查&lt;/li&gt;
&lt;li&gt;Pod 除錯操作 — 使用 kubectl exec / Rancher Shell 進入 App Container 進行偵錯，查看 Pod 事件與狀態&lt;/li&gt;
&lt;li&gt;彈性伸縮設定 — 設定 HPA (Horizontal Pod Autoscaler)，調整副本數因應流量變化&lt;/li&gt;
&lt;li&gt;CI/CD 管線觸發 — 配合 Pipeline 執行應用的建置與部署流程&lt;/li&gt;
&lt;li&gt;正式環境（Production）唯讀除錯 — 在正式環境中，開發人員通常僅具備唯讀（Read-Only）權限，只能查看日誌與監控儀表板以協助排查線上問題，無權直接修改系統配置或重啟服務。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;具體權限 (內建) - Project Member&lt;span class="hx:absolute hx:-mt-20" id="具體權限-內建---project-member"&gt;&lt;/span&gt;
&lt;a href="#%e5%85%b7%e9%ab%94%e6%ac%8a%e9%99%90-%e5%85%a7%e5%bb%ba---project-member" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/r1a-su0qbg.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;h3&gt;具體權限 (內建) - Project Read only&lt;span class="hx:absolute hx:-mt-20" id="具體權限-內建---project-read-only"&gt;&lt;/span&gt;
&lt;a href="#%e5%85%b7%e9%ab%94%e6%ac%8a%e9%99%90-%e5%85%a7%e5%bb%ba---project-read-only" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/ByaFidCqZg.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;h3&gt;實作範例 : 設定 Windows AD 的特定 User 為 Project Member&lt;span class="hx:absolute hx:-mt-20" id="實作範例--設定-windows-ad-的特定-user-為-project-member"&gt;&lt;/span&gt;
&lt;a href="#%e5%af%a6%e4%bd%9c%e7%af%84%e4%be%8b--%e8%a8%ad%e5%ae%9a-windows-ad-%e7%9a%84%e7%89%b9%e5%ae%9a-user-%e7%82%ba-project-member" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;左側選單選擇目標 K8s 叢集&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Cluster and Project Members&lt;/strong&gt; -&amp;gt;
&lt;strong&gt;Project Membership&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Add&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/rkkmOdC9Wg.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;選擇 &lt;strong&gt;User&lt;/strong&gt; -&amp;gt; 選擇 &lt;strong&gt;Owner&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Create&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/rJaCTO0qbl.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>[Rancher] Downstream cluster 因 cattle-controllers leader lease 過期未釋放而顯示「Waiting for cluster agent to connect」</title><link>https://blog.kubeantony.com/archive/rancher/rancher-downstream-cluster-%E5%9B%A0-cattle-controllers-leader-lease-%E9%81%8E%E6%9C%9F%E6%9C%AA%E9%87%8B%E6%94%BE%E8%80%8C%E9%A1%AF%E7%A4%BAwaiting-for-cluster-agent-to-connect/</link><pubDate>Mon, 23 Mar 2026 03:48:34 +0800</pubDate><guid>https://blog.kubeantony.com/archive/rancher/rancher-downstream-cluster-%E5%9B%A0-cattle-controllers-leader-lease-%E9%81%8E%E6%9C%9F%E6%9C%AA%E9%87%8B%E6%94%BE%E8%80%8C%E9%A1%AF%E7%A4%BAwaiting-for-cluster-agent-to-connect/</guid><description>
&lt;h2&gt;環境&lt;span class="hx:absolute hx:-mt-20" id="環境"&gt;&lt;/span&gt;
&lt;a href="#%e7%92%b0%e5%a2%83" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;SUSE Rancher Manager &lt;code&gt;v2.13.2&lt;/code&gt;（HA 部署，3 個 replicas）&lt;/li&gt;
&lt;li&gt;RKE2 &lt;code&gt;v1.34.4+rke2r1&lt;/code&gt; downstream cluster（3 台 control plane + 3 台 worker 節點）&lt;/li&gt;
&lt;li&gt;SUSE Linux Enterprise Server 15 SP7&lt;/li&gt;
&lt;li&gt;管理叢集與 downstream cluster 皆使用 Kubernetes &lt;code&gt;v1.34.x&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;狀況&lt;span class="hx:absolute hx:-mt-20" id="狀況"&gt;&lt;/span&gt;
&lt;a href="#%e7%8b%80%e6%b3%81" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在 Rancher deployment 更新（例如 &lt;code&gt;rollout restart&lt;/code&gt;、Helm upgrade 或 pod 重新排程）之後，一個或多個 downstream cluster 在 Rancher UI 上進入 &lt;strong&gt;Reconciling&lt;/strong&gt; 或 &lt;strong&gt;Updating&lt;/strong&gt; 狀態。受影響的 machine 顯示以下訊息：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;Waiting for cluster agent to connect&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;叢集本身功能完全正常 — 所有節點為 &lt;code&gt;Ready&lt;/code&gt;，所有 pod 皆在運行，對 downstream cluster 執行 &lt;code&gt;kubectl&lt;/code&gt; 指令也能正常回應。然而 Rancher UI 持續顯示叢集處於已斷線狀態。&lt;/p&gt;
&lt;h3&gt;症狀&lt;span class="hx:absolute hx:-mt-20" id="症狀"&gt;&lt;/span&gt;
&lt;a href="#%e7%97%87%e7%8b%80" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Rancher UI 顯示叢集狀態為 &lt;strong&gt;Updating&lt;/strong&gt;，且一台或多台 machine 處於 &lt;strong&gt;Reconciling&lt;/strong&gt; 狀態，並附帶訊息「Waiting for cluster agent to connect」。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://hackmd.io/_uploads/Hk90PNCqZg.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Downstream cluster 的 &lt;code&gt;cattle-cluster-agent&lt;/code&gt; 日誌顯示已成功建立 WebSocket 連線至 Rancher server：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;Connected to proxy url=&amp;#34;wss://rancher.example.com/v3/connect/register&amp;#34;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;儘管看似已連線，但 Rancher server 的日誌顯示 tunnel 認證失敗：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;Failed to handle tunnel request from remote address 10.42.x.x:xxxxx
(X-Forwarded-For: x.x.x.x): response 401: failed authentication&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;管理叢集的 &lt;code&gt;clusters.management.cattle.io&lt;/code&gt; 物件顯示 &lt;code&gt;Connected: False&lt;/code&gt;：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;type: Connected
status: &amp;#34;False&amp;#34;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Provisioning cluster 的 conditions 顯示：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;type: Updated
status: Unknown
message: &amp;#34;configuring bootstrap node(s) custom-xxxxxxxx: waiting for cluster agent to connect&amp;#34;
type: Ready
status: &amp;#34;False&amp;#34;
message: &amp;#34;Cluster agent is not connected&amp;#34;
reason: Disconnected&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;kube-system&lt;/code&gt; namespace 中的 &lt;code&gt;cattle-controllers&lt;/code&gt; leader lease 指向一個已不存在的 pod：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ kubectl get lease cattle-controllers -n kube-system -o yaml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;spec:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; holderIdentity: rancher-&amp;lt;old-replicaset&amp;gt;-&amp;lt;old-pod&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; leaseDurationSeconds: &lt;span class="m"&gt;162000&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;原因&lt;span class="hx:absolute hx:-mt-20" id="原因"&gt;&lt;/span&gt;
&lt;a href="#%e5%8e%9f%e5%9b%a0" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Rancher 的 management controllers（負責叢集狀態調解、tunnel 認證、agent 部署與 machine 狀態更新）使用 &lt;code&gt;kube-system&lt;/code&gt; namespace 中名為 &lt;code&gt;cattle-controllers&lt;/code&gt; 的 Kubernetes &lt;code&gt;Lease&lt;/code&gt; 物件進行 leader election。只有 leader pod 才會處理叢集管理操作。&lt;/p&gt;
&lt;p&gt;當 Rancher deployment 更新（rolling restart、Helm upgrade 等）時，舊的 pod 會被終止並由新 ReplicaSet 的新 pod 取代。然而，Rancher 將 &lt;code&gt;cattle-controllers&lt;/code&gt; lease 的 &lt;strong&gt;&lt;code&gt;leaseDurationSeconds&lt;/code&gt; 設定為 162,000 秒（45 小時）&lt;/strong&gt;。這是刻意設定的長時間值，目的是避免短暫網路中斷時發生不必要的 leader 切換。&lt;/p&gt;
&lt;p&gt;問題發生的流程如下：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;當前的 leader pod 在 deployment 更新過程中被終止。&lt;/li&gt;
&lt;li&gt;過期的 lease 仍然指向已終止 pod 的身份識別。&lt;/li&gt;
&lt;li&gt;新的 Rancher pod 檢查 lease 後發現 &lt;code&gt;renewTime + leaseDurationSeconds&lt;/code&gt; 尚未到期。&lt;/li&gt;
&lt;li&gt;所有新 pod 等待 lease 自然過期 — 最長需要等待 &lt;strong&gt;45 小時&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;在這段等待期間，&lt;strong&gt;沒有任何 management controller 在運作&lt;/strong&gt;，導致所有 downstream cluster 的管理操作停擺。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;這會引發一連串連鎖故障：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cluster agent 的 tunnel 認證請求無人處理（401 錯誤）。&lt;/li&gt;
&lt;li&gt;Cluster 物件上的 &lt;code&gt;Connected&lt;/code&gt; 狀態永遠不會被更新。&lt;/li&gt;
&lt;li&gt;Machine reconciliation 不會被執行。&lt;/li&gt;
&lt;li&gt;Rancher UI 持續反映過期的「Waiting for cluster agent to connect」狀態。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;解決方案&lt;span class="hx:absolute hx:-mt-20" id="解決方案"&gt;&lt;/span&gt;
&lt;a href="#%e8%a7%a3%e6%b1%ba%e6%96%b9%e6%a1%88" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;立即修復&lt;span class="hx:absolute hx:-mt-20" id="立即修復"&gt;&lt;/span&gt;
&lt;a href="#%e7%ab%8b%e5%8d%b3%e4%bf%ae%e5%be%a9" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;刪除過期的 leader lease，讓當前的 Rancher pod 立即取得 leadership：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl delete lease cattle-controllers -n kube-system&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;在 30 秒內，一個新的 Rancher pod 將取得 lease，management controllers 將恢復正常運作。驗證新的 leader：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get lease cattle-controllers -n kube-system &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -o &lt;span class="nv"&gt;jsonpath&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;{.spec.holderIdentity}&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;確認 holder identity 與當前運行中的 Rancher pod 相符：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get pods -n cattle-system -l &lt;span class="nv"&gt;app&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;rancher -o name&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;在 lease 被取得之後，downstream cluster 的狀態應在 1–3 分鐘內從 &lt;strong&gt;Updating/Reconciling&lt;/strong&gt; 轉為 &lt;strong&gt;Active&lt;/strong&gt;。&lt;/p&gt;
&lt;h3&gt;驗證&lt;span class="hx:absolute hx:-mt-20" id="驗證"&gt;&lt;/span&gt;
&lt;a href="#%e9%a9%97%e8%ad%89" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;確認叢集已恢復連線：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get clusters.management.cattle.io &amp;lt;cluster-id&amp;gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -o &lt;span class="nv"&gt;jsonpath&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;{.status.conditions[?(@.type==&amp;#34;Connected&amp;#34;)]}&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; python3 -m json.tool&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;預期輸出：&lt;code&gt;&amp;quot;status&amp;quot;: &amp;quot;True&amp;quot;&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在 Rancher UI 確認所有 machine 都顯示 &lt;strong&gt;Running&lt;/strong&gt; 狀態。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;驗證對所有節點上的 pod 執行 &lt;code&gt;kubectl logs&lt;/code&gt; 時不再出現 502 錯誤。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;預防措施&lt;span class="hx:absolute hx:-mt-20" id="預防措施"&gt;&lt;/span&gt;
&lt;a href="#%e9%a0%90%e9%98%b2%e6%8e%aa%e6%96%bd" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;為降低未來 Rancher 更新時再次遇到此問題的影響：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;在更新後監控 lease。&lt;/strong&gt; 每次 Rancher deployment 重啟或升級後，驗證 &lt;code&gt;cattle-controllers&lt;/code&gt; lease 是否指向正在運行的 pod：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;LEADER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;kubectl get lease cattle-controllers -n kube-system &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -o &lt;span class="nv"&gt;jsonpath&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;{.spec.holderIdentity}&amp;#39;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get pod -n cattle-system &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$LEADER&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; 2&amp;gt;/dev/null &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;警告：Leader pod &lt;/span&gt;&lt;span class="nv"&gt;$LEADER&lt;/span&gt;&lt;span class="s2"&gt; 不存在 — lease 已過期&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;將 lease 檢查納入升級手冊。&lt;/strong&gt; 在您的標準 Rancher 升級流程中，於 rollout 完成後立即加入 lease 驗證步驟。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;考慮提交 feature request。&lt;/strong&gt; 162,000 秒（45 小時）的 lease 過期時間設定過於保守。較短的過期時間（例如 300–600 秒）可以縮短 failover 視窗，同時仍能提供對短暫網路中斷的韌性。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;診斷步驟摘要&lt;span class="hx:absolute hx:-mt-20" id="診斷步驟摘要"&gt;&lt;/span&gt;
&lt;a href="#%e8%a8%ba%e6%96%b7%e6%ad%a5%e9%a9%9f%e6%91%98%e8%a6%81" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以下指令用於診斷此問題，可在類似的故障排查中重複使用：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;步驟&lt;/th&gt;
&lt;th&gt;指令&lt;/th&gt;
&lt;th&gt;用途&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;code&gt;kubectl get nodes -o wide&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;驗證 downstream cluster 節點健康狀態&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;code&gt;kubectl get pods -n cattle-system -o wide&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;檢查 cluster agent 狀態&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;code&gt;kubectl logs -n cattle-system -l app=rancher | grep &amp;quot;401|tunnel|failed auth&amp;quot;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;在 Rancher server 上尋找 tunnel 認證失敗訊息&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;code&gt;kubectl get clusters.management.cattle.io &amp;lt;id&amp;gt; -o jsonpath='{.status.conditions}'&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;檢查 Connected 狀態&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;&lt;code&gt;kubectl get clusters.provisioning.cattle.io -n fleet-default &amp;lt;n&amp;gt; -o jsonpath='{.status.conditions}'&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;檢查 provisioning conditions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;&lt;code&gt;kubectl get lease cattle-controllers -n kube-system -o yaml&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;識別過期的 leader lease&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;&lt;code&gt;kubectl get pods -n cattle-system -l app=rancher -o name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;比對 lease holder 與運行中的 pod&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;補充資訊&lt;span class="hx:absolute hx:-mt-20" id="補充資訊"&gt;&lt;/span&gt;
&lt;a href="#%e8%a3%9c%e5%85%85%e8%b3%87%e8%a8%8a" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;此問題可能同時影響任意數量的 downstream cluster，因為所有叢集管理操作皆依賴單一的 &lt;code&gt;cattle-controllers&lt;/code&gt; leader。&lt;/li&gt;
&lt;li&gt;此問題不限於 Rancher v2.13.x，任何使用長 &lt;code&gt;leaseDurationSeconds&lt;/code&gt; 設定的 &lt;code&gt;cattle-controllers&lt;/code&gt; lease 版本都可能發生。&lt;/li&gt;
&lt;li&gt;在此期間，downstream cluster 本身保持完全正常運作。僅 Rancher 的 management plane 操作受到影響。&lt;/li&gt;
&lt;li&gt;刪除 lease 是非破壞性操作。新的 leader 將根據系統的當前狀態從頭開始重新調解所有叢集狀態。&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Install ArgoCD on Rancher RKE2</title><link>https://blog.kubeantony.com/archive/rancher/install-argocd-on-rancher-rke2/</link><pubDate>Fri, 20 Mar 2026 07:58:28 +0800</pubDate><guid>https://blog.kubeantony.com/archive/rancher/install-argocd-on-rancher-rke2/</guid><description>
&lt;h2&gt;1. Install ArgoCD&lt;span class="hx:absolute hx:-mt-20" id="1-install-argocd"&gt;&lt;/span&gt;
&lt;a href="#1-install-argocd" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;執行以下命令&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;kubectl create namespace argocd
kubectl apply -n argocd --server-side --force-conflicts -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Wait for all pods to be ready&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;kubectl wait --for=condition=Ready pods --all -n argocd --timeout=300s&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行結果：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;pod/argocd-application-controller-0 condition met
pod/argocd-applicationset-controller-7dc85c9598-m4rrd condition met
pod/argocd-dex-server-7d88b5b798-jq58x condition met
pod/argocd-notifications-controller-5f95df7f8c-x94js condition met
pod/argocd-redis-65b5bbd8cb-jw27t condition met
pod/argocd-repo-server-69fb9fb66f-hgvrg condition met
pod/argocd-server-58dbdffdcd-4qz8l condition met&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;expose ArgoCD with ingress&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;cat &amp;lt;&amp;lt; &amp;#39;EOF&amp;#39; | kubectl apply -f -
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: argocd-server
namespace: argocd
annotations:
nginx.ingress.kubernetes.io/ssl-passthrough: &amp;#34;true&amp;#34;
nginx.ingress.kubernetes.io/backend-protocol: &amp;#34;HTTPS&amp;#34;
spec:
ingressClassName: nginx
rules:
- host: argocd.kubeantony.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: argocd-server
port:
number: 443
EOF&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>Grafana Reporter 部署指南（Harvester / Rancher 環境）</title><link>https://blog.kubeantony.com/archive/rancher/grafana-reporter-%E9%83%A8%E7%BD%B2%E6%8C%87%E5%8D%97harvester-rancher-%E7%92%B0%E5%A2%83/</link><pubDate>Wed, 11 Mar 2026 02:27:26 +0800</pubDate><guid>https://blog.kubeantony.com/archive/rancher/grafana-reporter-%E9%83%A8%E7%BD%B2%E6%8C%87%E5%8D%97harvester-rancher-%E7%92%B0%E5%A2%83/</guid><description>
&lt;h2&gt;概述&lt;span class="hx:absolute hx:-mt-20" id="概述"&gt;&lt;/span&gt;
&lt;a href="#%e6%a6%82%e8%bf%b0" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;本文件說明如何在 Harvester（Rancher 管理）環境中部署 &lt;a
href="https://github.com/IzakMarais/reporter"target="_blank" rel="noopener"&gt;IzakMarais/reporter&lt;/a&gt;，讓 Grafana Dashboard 能一鍵產生 PDF 報表，並透過 Rancher Proxy 對外存取。&lt;/p&gt;
&lt;h3&gt;架構說明&lt;span class="hx:absolute hx:-mt-20" id="架構說明"&gt;&lt;/span&gt;
&lt;a href="#%e6%9e%b6%e6%a7%8b%e8%aa%aa%e6%98%8e" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;瀏覽器
│
▼
Rancher API Proxy（https://hvx.kubeantony.com/api/v1/namespaces/...）
│
├──► grafana-reporter（:8686）──► Grafana（:80）──► Prometheus
│
└──► grafana-image-renderer（:8081）◄── Grafana（render 請求）&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Grafana Reporter&lt;/strong&gt;：接收使用者請求，透過 Grafana API 取得 Dashboard 資料與面板圖片，產生 PDF。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Grafana Image Renderer&lt;/strong&gt;：Grafana 的圖片渲染服務，將面板渲染為 PNG 圖片供 Reporter 使用。&lt;/li&gt;
&lt;li&gt;所有元件都部署在 &lt;code&gt;cattle-monitoring-system&lt;/code&gt; namespace 內，透過 K8s 內部 Service 互連。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;前置確認&lt;span class="hx:absolute hx:-mt-20" id="前置確認"&gt;&lt;/span&gt;
&lt;a href="#%e5%89%8d%e7%bd%ae%e7%a2%ba%e8%aa%8d" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 確認 Grafana Service 名稱&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get svc -n cattle-monitoring-system &lt;span class="p"&gt;|&lt;/span&gt; grep grafana&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;記下 Grafana 的 Service 名稱（通常為 &lt;code&gt;rancher-monitoring-grafana&lt;/code&gt;），後續設定會用到。&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;步驟一：部署 Grafana Reporter&lt;span class="hx:absolute hx:-mt-20" id="步驟一部署-grafana-reporter"&gt;&lt;/span&gt;
&lt;a href="#%e6%ad%a5%e9%a9%9f%e4%b8%80%e9%83%a8%e7%bd%b2-grafana-reporter" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;建立 &lt;code&gt;grafana-reporter.yaml&lt;/code&gt;：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;apps/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Deployment&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;grafana-reporter&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;cattle-monitoring-system&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;replicas&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;selector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;matchLabels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;grafana-reporter&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;labels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;grafana-reporter&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;containers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;grafana-reporter&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;izakmarais/grafana-reporter:latest&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;command&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;/usr/local/bin/grafana-reporter&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;args&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s2"&gt;&amp;#34;-ip&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s2"&gt;&amp;#34;rancher-monitoring-grafana.cattle-monitoring-system.svc:80&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;containerPort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8686&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;grafana-reporter&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;cattle-monitoring-system&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;selector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;grafana-reporter&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;http&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8686&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;targetPort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8686&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;protocol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;TCP&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ClusterIP&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;部署：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl apply -f grafana-reporter.yaml&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;驗證：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 確認 Pod 狀態為 Running&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get pods -n cattle-monitoring-system &lt;span class="p"&gt;|&lt;/span&gt; grep reporter
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 確認 log 顯示正確連線 Grafana&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl logs -n cattle-monitoring-system -l &lt;span class="nv"&gt;app&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;grafana-reporter&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;預期 log 輸出：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;serving at &amp;#39;:8686&amp;#39; and using grafana at &amp;#39;http://rancher-monitoring-grafana.cattle-monitoring-system.svc:80&amp;#39;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h2&gt;步驟二：部署 Grafana Image Renderer&lt;span class="hx:absolute hx:-mt-20" id="步驟二部署-grafana-image-renderer"&gt;&lt;/span&gt;
&lt;a href="#%e6%ad%a5%e9%a9%9f%e4%ba%8c%e9%83%a8%e7%bd%b2-grafana-image-renderer" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Rancher Monitoring Chart 的 &lt;code&gt;imageRenderer.enabled&lt;/code&gt; 有已知 template bug，因此採用&lt;strong&gt;手動獨立部署&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;建立 &lt;code&gt;image-renderer.yaml&lt;/code&gt;：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;apps/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Deployment&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;grafana-image-renderer&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;cattle-monitoring-system&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;replicas&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;selector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;matchLabels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;grafana-image-renderer&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;labels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;grafana-image-renderer&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;containers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;image-renderer&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;grafana/grafana-image-renderer:latest&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;containerPort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8081&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ENABLE_METRICS&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;true&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;grafana-image-renderer&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;cattle-monitoring-system&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;selector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;grafana-image-renderer&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8081&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;targetPort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8081&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ClusterIP&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;部署：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl apply -f image-renderer.yaml&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;驗證：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get pods -n cattle-monitoring-system &lt;span class="p"&gt;|&lt;/span&gt; grep image-renderer&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h2&gt;步驟三：設定 Grafana 連線 Image Renderer&lt;span class="hx:absolute hx:-mt-20" id="步驟三設定-grafana-連線-image-renderer"&gt;&lt;/span&gt;
&lt;a href="#%e6%ad%a5%e9%a9%9f%e4%b8%89%e8%a8%ad%e5%ae%9a-grafana-%e9%80%a3%e7%b7%9a-image-renderer" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;重點：&lt;/strong&gt; 僅設定環境變數不夠，必須修改 &lt;code&gt;grafana.ini&lt;/code&gt; 設定檔，Grafana 才會識別 renderer。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;3-1. 編輯 Grafana ConfigMap&lt;span class="hx:absolute hx:-mt-20" id="3-1-編輯-grafana-configmap"&gt;&lt;/span&gt;
&lt;a href="#3-1-%e7%b7%a8%e8%bc%af-grafana-configmap" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl edit configmap rancher-monitoring-grafana -n cattle-monitoring-system&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;在 &lt;code&gt;grafana.ini&lt;/code&gt; 最末尾加入 &lt;code&gt;[rendering]&lt;/code&gt; 區塊：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ini" data-lang="ini"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;[rendering]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;server_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;http://grafana-image-renderer.cattle-monitoring-system.svc:8081/render
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; callback_url = http://rancher-monitoring-grafana.cattle-monitoring-system.svc:80/&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;完整的 &lt;code&gt;grafana.ini&lt;/code&gt; 範例：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ini" data-lang="ini"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;[analytics]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;check_for_updates&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;true
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; [auth]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; disable_login_form = false
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; [auth.anonymous]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; enabled = true
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; org_role = Viewer
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; [auth.basic]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; enabled = false
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; [dashboards]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; default_home_dashboard_path = /tmp/dashboards/rancher-default-home.json
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; [grafana_net]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; url = https://grafana.net
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; [log]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; mode = console
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; [paths]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; data = /var/lib/grafana/
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; logs = /var/log/grafana
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; plugins = /var/lib/grafana/plugins
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; provisioning = /etc/grafana/provisioning
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; [security]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; allow_embedding = true
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; [server]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; domain = &amp;#39;&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; [users]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; auto_assign_org_role = Viewer
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; [rendering]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; server_url = http://grafana-image-renderer.cattle-monitoring-system.svc:8081/render
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; callback_url = http://rancher-monitoring-grafana.cattle-monitoring-system.svc:80/&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;3-2. 重啟 Grafana&lt;span class="hx:absolute hx:-mt-20" id="3-2-重啟-grafana"&gt;&lt;/span&gt;
&lt;a href="#3-2-%e9%87%8d%e5%95%9f-grafana" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl rollout restart deployment rancher-monitoring-grafana -n cattle-monitoring-system&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;3-3. 驗證 Renderer 連線&lt;span class="hx:absolute hx:-mt-20" id="3-3-驗證-renderer-連線"&gt;&lt;/span&gt;
&lt;a href="#3-3-%e9%a9%97%e8%ad%89-renderer-%e9%80%a3%e7%b7%9a" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 從 Grafana Pod 測試連線 renderer&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl &lt;span class="nb"&gt;exec&lt;/span&gt; -n cattle-monitoring-system &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;$(&lt;/span&gt;kubectl get pods -n cattle-monitoring-system -l app.kubernetes.io/name&lt;span class="o"&gt;=&lt;/span&gt;grafana &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -o &lt;span class="nv"&gt;jsonpath&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;{.items[0].metadata.name}&amp;#39;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -- curl -s http://grafana-image-renderer.cattle-monitoring-system.svc:8081/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;預期回應：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;Grafana Image Renderer (Go)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;也可以在 Grafana UI 中驗證：&lt;strong&gt;Administration → Plugins → 搜尋 &amp;ldquo;Image Renderer&amp;rdquo;&lt;/strong&gt;，應顯示為 remote rendering service。&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;步驟四：測試 Rancher Proxy 存取 Reporter&lt;span class="hx:absolute hx:-mt-20" id="步驟四測試-rancher-proxy-存取-reporter"&gt;&lt;/span&gt;
&lt;a href="#%e6%ad%a5%e9%a9%9f%e5%9b%9b%e6%b8%ac%e8%a9%a6-rancher-proxy-%e5%ad%98%e5%8f%96-reporter" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在瀏覽器中打開以下 URL（將 &lt;code&gt;&amp;lt;DASHBOARD_UID&amp;gt;&lt;/code&gt; 替換為實際的 Dashboard UID）：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;https://hvx.kubeantony.com/api/v1/namespaces/cattle-monitoring-system/services/http:grafana-reporter:8686/proxy/api/v5/report/&amp;lt;DASHBOARD_UID&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;如果能下載 PDF 且包含圖表，代表全部設定正確。&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;步驟五：設定 Grafana Dashboard Link&lt;span class="hx:absolute hx:-mt-20" id="步驟五設定-grafana-dashboard-link"&gt;&lt;/span&gt;
&lt;a href="#%e6%ad%a5%e9%a9%9f%e4%ba%94%e8%a8%ad%e5%ae%9a-grafana-dashboard-link" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;進入目標 Dashboard&lt;/li&gt;
&lt;li&gt;點右上角 &lt;strong&gt;齒輪圖示&lt;/strong&gt;（Dashboard Settings）&lt;/li&gt;
&lt;li&gt;點左側 &lt;strong&gt;Links&lt;/strong&gt; 頁籤&lt;/li&gt;
&lt;li&gt;點 &lt;strong&gt;+ New link&lt;/strong&gt;，填入以下設定：&lt;/li&gt;
&lt;/ol&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;欄位&lt;/th&gt;
&lt;th&gt;值&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Type&lt;/td&gt;
&lt;td&gt;link&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Title&lt;/td&gt;
&lt;td&gt;reports&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;URL&lt;/td&gt;
&lt;td&gt;見下方&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Icon&lt;/td&gt;
&lt;td&gt;doc&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Open in new tab&lt;/td&gt;
&lt;td&gt;✅ 打勾&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;URL 設定：&lt;/strong&gt;&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;https://hvx.kubeantony.com/api/v1/namespaces/cattle-monitoring-system/services/http:grafana-reporter:8686/proxy/api/v5/report/${__dashboard.uid}?from=${__from}&amp;amp;to=${__to}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;如果 Dashboard 有使用變數（如 datasource、instance），可以加上：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;https://hvx.kubeantony.com/api/v1/namespaces/cattle-monitoring-system/services/http:grafana-reporter:8686/proxy/api/v5/report/${__dashboard.uid}?from=${__from}&amp;amp;to=${__to}&amp;amp;var-datasource=${datasource}&amp;amp;var-instance=${instance}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="5"&gt;
&lt;li&gt;點 &lt;strong&gt;Save dashboard&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;設定完成後，Dashboard 右上方會出現 &lt;strong&gt;reports&lt;/strong&gt; 連結，點擊即可在新分頁下載 PDF 報表。&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;疑難排解&lt;span class="hx:absolute hx:-mt-20" id="疑難排解"&gt;&lt;/span&gt;
&lt;a href="#%e7%96%91%e9%9b%a3%e6%8e%92%e8%a7%a3" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;PDF 產生但沒有圖表&lt;span class="hx:absolute hx:-mt-20" id="pdf-產生但沒有圖表"&gt;&lt;/span&gt;
&lt;a href="#pdf-%e7%94%a2%e7%94%9f%e4%bd%86%e6%b2%92%e6%9c%89%e5%9c%96%e8%a1%a8" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 檢查 Grafana log 是否有 renderer 錯誤&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl logs -n cattle-monitoring-system &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;$(&lt;/span&gt;kubectl get pods -n cattle-monitoring-system -l app.kubernetes.io/name&lt;span class="o"&gt;=&lt;/span&gt;grafana &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -o &lt;span class="nv"&gt;jsonpath&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;{.items[0].metadata.name}&amp;#39;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -c grafana --tail&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;50&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; grep rendering&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;如果看到 &lt;code&gt;no image renderer found/installed&lt;/code&gt;，代表 &lt;code&gt;grafana.ini&lt;/code&gt; 的 &lt;code&gt;[rendering]&lt;/code&gt; 設定未生效，請重新確認 ConfigMap 並重啟 Grafana。&lt;/p&gt;
&lt;h3&gt;Reporter 無法連線 Grafana&lt;span class="hx:absolute hx:-mt-20" id="reporter-無法連線-grafana"&gt;&lt;/span&gt;
&lt;a href="#reporter-%e7%84%a1%e6%b3%95%e9%80%a3%e7%b7%9a-grafana" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 確認 Grafana Service 存在且可連線&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl &lt;span class="nb"&gt;exec&lt;/span&gt; -n cattle-monitoring-system &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;$(&lt;/span&gt;kubectl get pods -n cattle-monitoring-system -l &lt;span class="nv"&gt;app&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;grafana-reporter &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -o &lt;span class="nv"&gt;jsonpath&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;{.items[0].metadata.name}&amp;#39;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -- wget -qO- http://rancher-monitoring-grafana.cattle-monitoring-system.svc:80/api/health&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;Rancher Proxy 回傳 404&lt;span class="hx:absolute hx:-mt-20" id="rancher-proxy-回傳-404"&gt;&lt;/span&gt;
&lt;a href="#rancher-proxy-%e5%9b%9e%e5%82%b3-404" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;確認 Service 已正確建立：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get svc -n cattle-monitoring-system grafana-reporter&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Rancher Proxy URL 格式必須完全正確：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;https://&amp;lt;rancher域名&amp;gt;/api/v1/namespaces/&amp;lt;namespace&amp;gt;/services/http:&amp;lt;service名稱&amp;gt;:&amp;lt;port&amp;gt;/proxy/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h2&gt;注意事項&lt;span class="hx:absolute hx:-mt-20" id="注意事項"&gt;&lt;/span&gt;
&lt;a href="#%e6%b3%a8%e6%84%8f%e4%ba%8b%e9%a0%85" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;透過 &lt;code&gt;kubectl edit&lt;/code&gt; 修改的 ConfigMap 和 Deployment，在下次 Rancher Monitoring Helm Chart 升級時&lt;strong&gt;可能被覆蓋&lt;/strong&gt;。升級後需重新確認 &lt;code&gt;[rendering]&lt;/code&gt; 設定是否仍存在。&lt;/li&gt;
&lt;li&gt;Image Renderer 和 Reporter 是獨立部署的，不受 Helm Chart 升級影響。&lt;/li&gt;
&lt;li&gt;如果未來 Rancher 修復了 &lt;code&gt;image-renderer-deployment.yaml&lt;/code&gt; 的 template bug，可以改回透過 Helm values 啟用 &lt;code&gt;grafana.imageRenderer.enabled: true&lt;/code&gt;，屆時可移除手動部署的 image-renderer。&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Install Minio with Rancher Application Collection</title><link>https://blog.kubeantony.com/archive/rancher/install-minio-with-rancher-application-collection/</link><pubDate>Mon, 09 Mar 2026 07:40:36 +0800</pubDate><guid>https://blog.kubeantony.com/archive/rancher/install-minio-with-rancher-application-collection/</guid><description>
&lt;h2&gt;Prepare&lt;span class="hx:absolute hx:-mt-20" id="prepare"&gt;&lt;/span&gt;
&lt;a href="#prepare" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;helm login Rancher Application Collection&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;helm registry login dp.apps.rancher.io \
-u &amp;lt;user&amp;gt; \
-p &amp;lt;password&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;download helm chart&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;helm pull oci://dp.apps.rancher.io/charts/minio --version 5.4.0&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create Namespace&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;kubectl create ns minio&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;建立 Image Pull Secret&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;kubectl -n minio create secret docker-registry application-collection \
--docker-server=dp.apps.rancher.io \
--docker-username=&amp;lt;user&amp;gt; \
--docker-password=&amp;lt;password&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;確認已安裝 Ingress Controller 和 StorageClass (本篇文章用的是 Nginx 和 local-path)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;確認當前 K8s 叢集的 Ingress Controller&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;kubectl get ingressclasses.networking.k8s.io&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行結果：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;NAME CONTROLLER PARAMETERS AGE
nginx k8s.io/ingress-nginx &amp;lt;none&amp;gt; 7d&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;確認當前 K8s 叢集的 StorageClass&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;kubectl get sc local-path&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行結果：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
local-path (default) rancher.io/local-path Delete WaitForFirstConsumer false 6d3h&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;確認已安裝 Cert-manager&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;kubectl -n cert-manager get pods&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行結果：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;NAME READY STATUS RESTARTS AGE
cert-manager-578bff8c75-ms6hw 1/1 Running 0 41m
cert-manager-cainjector-566b8f9766-pxnlb 1/1 Running 0 41m
cert-manager-webhook-c9997c6b5-94fsj 1/1 Running 0 41m&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Deploy&lt;span class="hx:absolute hx:-mt-20" id="deploy"&gt;&lt;/span&gt;
&lt;a href="#deploy" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;解壓縮 minio chart&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;tar -zxvf minio-5.4.0.tgz; cd minio&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;定義 MinIO 自簽憑證的簽發架構&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;mkdir cert-manager/; vim minio-pki-bootstrap.yaml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;檔案內容如下：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: selfsigned-issuer
spec:
selfSigned: {}
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: selfsigned-ca
namespace: minio
spec:
isCA: true
commonName: selfsigned-ca
secretName: root-secret
privateKey:
algorithm: ECDSA
size: 256
issuerRef:
name: selfsigned-issuer
kind: ClusterIssuer
group: cert-manager.io
---
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: ca-issuer
namespace: minio
spec:
ca:
secretName: root-secret&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;檔案包含三個資源：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ClusterIssuer&lt;/code&gt;（自簽發行者）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Certificate&lt;/code&gt;（作為 Root CA 的自簽憑證，使用 ECDSA P-256 演算法，並將私鑰跟憑證都存入 Secret &lt;code&gt;root-secret&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;以及 &lt;code&gt;Issuer&lt;/code&gt;（引用該 Root CA 來簽發後續憑證）&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;將上述資源套用至叢集，Cert-manager 會自動產生 Root CA 憑證與私鑰，並建立可用於 &lt;code&gt;minio&lt;/code&gt; namespace 中後續憑證簽發的 CA Issuer。&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;kubectl apply -f cert-manager/minio-pki-bootstrap.yaml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;撰寫 minio &lt;code&gt;values.yaml&lt;/code&gt;&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;vim custom-values.yaml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;檔案內容如下：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;global:
imagePullSecrets:
- application-collection
mode: standalone
persistence:
size: 5Gi
resources:
requests:
memory: 512Mi
rootPassword: admin123
rootUser: admin
ingress:
enabled: true
ingressClassName: nginx
annotations:
nginx.ingress.kubernetes.io/proxy-body-size: &amp;#34;0&amp;#34;
cert-manager.io/issuer: ca-issuer
path: /
hosts:
- api.minio.kubeantony.com
tls:
- secretName: minio-api-tls
hosts:
- api.minio.kubeantony.com
consoleIngress:
enabled: true
ingressClassName: nginx
annotations:
cert-manager.io/issuer: ca-issuer
path: /
hosts:
- console.minio.kubeantony.com
tls:
- secretName: minio-console-tls
hosts:
- console.minio.kubeantony.com&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;部署 Minio&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;helm -n minio upgrade --install minio . -f custom-values.yaml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行結果：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;Release &amp;#34;minio&amp;#34; has been upgraded. Happy Helming!
NAME: minio
LAST DEPLOYED: Mon Mar 9 14:40:55 2026
NAMESPACE: minio
STATUS: deployed
REVISION: 9
TEST SUITE: None
NOTES:
MinIO can be accessed via port 9000 on the following DNS name from within your cluster:
minio.minio.cluster.local
To access MinIO from localhost, run the below commands:
1. export POD_NAME=$(kubectl get pods --namespace minio -l &amp;#34;release=minio&amp;#34; -o jsonpath=&amp;#34;{.items[0].metadata.name}&amp;#34;)
2. kubectl port-forward $POD_NAME 9000 --namespace minio
Read more about port forwarding here: http://kubernetes.io/docs/user-guide/kubectl/kubectl_port-forward/
You can now access MinIO server on http://localhost:9000. Follow the below steps to connect to MinIO server with mc client:
1. Download the MinIO mc client - https://min.io/docs/minio/linux/reference/minio-mc.html#quickstart
2. export MC_HOST_minio-local=http://$(kubectl get secret --namespace minio minio -o jsonpath=&amp;#34;{.data.rootUser}&amp;#34; | base64 --decode):$(kubectl get secret --namespace minio minio -o jsonpath=&amp;#34;{.data.rootPassword}&amp;#34; | base64 --decode)@localhost:9000
3. mc ls minio-local&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;確認 Minio Pods 有正常運作&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;kubectl -n minio get pods&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行結果：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;NAME READY STATUS RESTARTS AGE
minio-7f67bcc94c-7hcc5 1/1 Running 0 3h58m&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;查看 Ingress&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;kubectl -n minio get ing&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行結果：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;NAME CLASS HOSTS ADDRESS PORTS AGE
minio nginx api.minio.kubeantony.com 192.168.11.154,192.168.11.155,192.168.11.156 80, 443 3h52m
minio-console nginx console.minio.kubeantony.com 192.168.11.154,192.168.11.155,192.168.11.156 80, 443 3h29m&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;打開瀏覽器，連線至 Minio 管理網站&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;https://console.minio.kubeantony.com/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;確認打開瀏覽器的電腦能透過 DNS 解析 Minio FQDN 的 IP&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src="https://hackmd.io/_uploads/SkKuYgnYZl.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>Install Prometheus with Rancher Application Collection</title><link>https://blog.kubeantony.com/archive/rancher/install-prometheus-with-rancher-application-collection/</link><pubDate>Wed, 04 Mar 2026 06:29:22 +0800</pubDate><guid>https://blog.kubeantony.com/archive/rancher/install-prometheus-with-rancher-application-collection/</guid><description>
&lt;h2&gt;Prepare&lt;span class="hx:absolute hx:-mt-20" id="prepare"&gt;&lt;/span&gt;
&lt;a href="#prepare" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;helm login&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;helm registry login dp.apps.rancher.io \
-u tropical_flower_6fT5U@apps.rancher.io \
-p Z2xlbHB3enpmcXdmdnBkbnl0aGZ3Znlia2l2cHRoZ3hlY2VveWptdnBrZXh3Y215eG13Y2xhcGRocGpyemZreg==&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>Harvester 使用 Velero 外部 CSI 儲存備份：如何確保 VM 資料一致性。</title><link>https://blog.kubeantony.com/archive/rancher/harvester-%E4%BD%BF%E7%94%A8-velero-%E5%A4%96%E9%83%A8-csi-%E5%84%B2%E5%AD%98%E5%82%99%E4%BB%BD-%E5%A6%82%E4%BD%95%E7%A2%BA%E4%BF%9D-vm-%E8%B3%87%E6%96%99%E4%B8%80%E8%87%B4%E6%80%A7/</link><pubDate>Sat, 28 Feb 2026 14:17:54 +0800</pubDate><guid>https://blog.kubeantony.com/archive/rancher/harvester-%E4%BD%BF%E7%94%A8-velero-%E5%A4%96%E9%83%A8-csi-%E5%84%B2%E5%AD%98%E5%82%99%E4%BB%BD-%E5%A6%82%E4%BD%95%E7%A2%BA%E4%BF%9D-vm-%E8%B3%87%E6%96%99%E4%B8%80%E8%87%B4%E6%80%A7/</guid><description>
&lt;h2&gt;1. Preface&lt;span class="hx:absolute hx:-mt-20" id="1-preface"&gt;&lt;/span&gt;
&lt;a href="#1-preface" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Harvester 1.5 導入了對使用外部容器儲存介面（CSI）驅動程式來配置虛擬機器根磁碟區（root volumes）與資料磁碟區（data volumes）的支援。&lt;/p&gt;
&lt;p&gt;本文將示範如何使用 Velero 1.17.0 在 Harvester 中執行虛擬機器的備份與還原。文章將透過具體的指令與資源清單（manifests）來完成以下操作：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;備份特 namespace 內的虛擬機器、其 NFS CSI 磁碟區，以及相關的命名空間層級設定檔&lt;/li&gt;
&lt;li&gt;將備份產物匯出至 AWS S3 儲存體（bucket）&lt;/li&gt;
&lt;li&gt;還原至同一個叢集（cluster）上的不同 namespace&lt;/li&gt;
&lt;li&gt;還原至不同的叢集&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Velero 是一款 Kubernetes 原生的備份與還原工具，讓使用者能夠對虛擬機器執行排程與隨選（on-demand）備份，並將資料儲存至外部的物件儲存供應商（例如 S3、Azure Blob 或 GCS），完美契合企業級的備份與災難復原實務標準。&lt;/p&gt;
&lt;h2&gt;2. 安裝與部署 Garage（輕量級 S3 相容的物件儲存系統）&lt;span class="hx:absolute hx:-mt-20" id="2-安裝與部署-garage輕量級-s3-相容的物件儲存系統"&gt;&lt;/span&gt;
&lt;a href="#2-%e5%ae%89%e8%a3%9d%e8%88%87%e9%83%a8%e7%bd%b2-garage%e8%bc%95%e9%87%8f%e7%b4%9a-s3-%e7%9b%b8%e5%ae%b9%e7%9a%84%e7%89%a9%e4%bb%b6%e5%84%b2%e5%ad%98%e7%b3%bb%e7%b5%b1" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;建立永存目錄&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;sudo mkdir -p /garage/{data,meta,config}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;撰寫 &lt;code&gt;garage.toml&lt;/code&gt; 設定檔&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;[s3_api]&lt;/code&gt; 和 &lt;code&gt;[s3_web]&lt;/code&gt; 區塊底下的 &lt;code&gt;root_domain&lt;/code&gt; 的值需要根據環境調整&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;cat &amp;lt;&amp;lt;EOF | sudo tee /garage/config/garage.toml &amp;gt; /dev/null
metadata_dir = &amp;#34;/var/lib/garage/meta&amp;#34;
data_dir = &amp;#34;/var/lib/garage/data&amp;#34;
db_engine = &amp;#34;sqlite&amp;#34;
replication_factor = 1
rpc_bind_addr = &amp;#34;[::]:3901&amp;#34;
rpc_public_addr = &amp;#34;127.0.0.1:3901&amp;#34;
rpc_secret = &amp;#34;ba7861f27fccfe06a99245b49e33113ca846cecdc9956169a47d7eecd74aa7d8&amp;#34;
[s3_api]
s3_region = &amp;#34;garage&amp;#34;
api_bind_addr = &amp;#34;[::]:3900&amp;#34;
root_domain = &amp;#34;api.garage.kubeantony.com&amp;#34;
[s3_web]
bind_addr = &amp;#34;[::]:3902&amp;#34;
root_domain = &amp;#34;web.garage.kubeantony.com&amp;#34;
index = &amp;#34;index.html&amp;#34;
[k2v_api]
api_bind_addr = &amp;#34;[::]:3904&amp;#34;
[admin]
api_bind_addr = &amp;#34;[::]:3903&amp;#34;
admin_token = &amp;#34;KV0EuVoDxze0Ut7tQdkvNiU8TKcD8LejZQglH/JGK00=&amp;#34;
metrics_token = &amp;#34;RQxx1DjKcnhpEVnPmjxWn&amp;#43;CzLY5wNBNT60GMvHQ&amp;#43;LXo=&amp;#34;
EOF&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;透過 Podman 部署 Garage&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;sudo podman run \
-d \
--name garaged \
--network host \
-v /garage/config/garage.toml:/etc/garage.toml \
-v /garage/meta:/var/lib/garage/meta \
-v /garage/data:/var/lib/garage/data \
dxflrs/garage:v2.2.0&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;確認 Garage Container 運作狀態&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;sudo podman ps -a --filter name=garage&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行結果：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
499fff9ed2db docker.io/dxflrs/garage:v2.2.0 /garage server 31 minutes ago Up 31 minutes garaged&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;查詢 Garage 節點狀態&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;sudo podman exec -it garaged /garage status&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行結果：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;2026-02-26T06:41:45.072105Z INFO garage_net::netapp: Connected to 127.0.0.1:3901, negotiating handshake...
2026-02-26T06:41:45.113726Z INFO garage_net::netapp: Connection established to 368849c86cba2382
==== HEALTHY NODES ====
ID Hostname Address Tags Zone Capacity DataAvail Version
368849c86cba2382 garage.kubeantony.com 127.0.0.1:3901 NO ROLE ASSIGNED v2.2.0&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;將指定的 Garage 節點設定至 &lt;code&gt;dc1&lt;/code&gt; 可用區（Zone）和 &lt;code&gt;50GB&lt;/code&gt; 的儲存容量。&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;sudo podman exec -it garaged /garage layout assign -z dc1 -c 50G 368849c86cba2382&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行結果：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;2026-02-26T06:42:30.841741Z INFO garage_net::netapp: Connected to 127.0.0.1:3901, negotiating handshake...
2026-02-26T06:42:30.882712Z INFO garage_net::netapp: Connection established to 368849c86cba2382
Role changes are staged but not yet committed.
Use `garage layout show` to view staged role changes,
and `garage layout apply` to enact staged changes.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;執行結果顯示此變更目前僅處於「暫存 &lt;code&gt;staged&lt;/code&gt;」狀態&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;正式套用先前暫存的叢集配置（版本 1），使節點的角色與容量設定正式生效。&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;sudo podman exec garaged /garage layout apply --version 1&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行結果：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;2026-02-26T06:42:50.085913Z INFO garage_net::netapp: Connected to 127.0.0.1:3901, negotiating handshake...
2026-02-26T06:42:50.126651Z INFO garage_net::netapp: Connection established to 368849c86cba2382
==== COMPUTATION OF A NEW PARTITION ASSIGNATION ====
Partitions are replicated 1 times on at least 1 distinct zones.
Optimal partition size: 195.3 MB
Usable capacity / total cluster capacity: 50.0 GB / 50.0 GB (100.0 %)
Effective capacity (replication factor 1): 50.0 GB
dc1 Tags Partitions Capacity Usable capacity
368849c86cba2382 [] 256 (256 new) 50.0 GB 50.0 GB (100.0%)
TOTAL 256 (256 unique) 50.0 GB 50.0 GB (100.0%)
New cluster layout with updated role assignment has been applied in cluster.
Data will now be moved around between nodes accordingly.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;再次確認 Garage 節點狀態&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;sudo podman exec garaged /garage status&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行結果：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;2026-02-26T07:49:07.462651Z INFO garage_net::netapp: Connected to 127.0.0.1:3901, negotiating handshake...
2026-02-26T07:49:07.503706Z INFO garage_net::netapp: Connection established to 368849c86cba2382
==== HEALTHY NODES ====
ID Hostname Address Tags Zone Capacity DataAvail Version
368849c86cba2382 garage.kubeantony.com 127.0.0.1:3901 [] dc1 50.0 GB 58.5 GB (82.0%) v2.2.0&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;建立 Bucket&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;sudo podman exec garaged /garage bucket create vm-backup&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行結果：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;2026-02-26T07:54:42.568429Z INFO garage_net::netapp: Connected to 127.0.0.1:3901, negotiating handshake...
2026-02-26T07:54:42.609720Z INFO garage_net::netapp: Connection established to 368849c86cba2382
==== BUCKET INFORMATION ====
Bucket: be30df62bea032acdc9ba3b992b32a43794b9f950599870e21ee706340c39c96
Created: 2026-02-26 07:54:42.610 &amp;#43;00:00
Size: 0 B (0 B)
Objects: 0
Website access: false
Global alias: vm-backup
==== KEYS FOR THIS BUCKET ====
Permissions Access key Local aliases&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;建立 API Key&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;sudo podman exec garaged /garage key create vm-backup-access-key&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行結果：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;2026-02-26T07:56:11.307951Z INFO garage_net::netapp: Connected to 127.0.0.1:3901, negotiating handshake...
2026-02-26T07:56:11.348732Z INFO garage_net::netapp: Connection established to 368849c86cba2382
==== ACCESS KEY INFORMATION ====
Key ID: GK6e4243deca7bc09fdffcb405
Key name: vm-backup-access-key
Secret key: 9280dbc88cb656a8589783f0762652fdb93362b2df0c7a47cfa7f2ae9b15899f
Created: 2026-02-26 07:56:11.348 &amp;#43;00:00
Validity: valid
Expiration: never
Can create buckets: false
==== BUCKETS FOR THIS KEY ====
Permissions ID Global aliases Local aliases&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;賦予權限&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;sudo podman exec garaged /garage bucket allow --read --write --owner vm-backup --key vm-backup-access-key&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行結果：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;2026-02-26T07:57:44.077279Z INFO garage_net::netapp: Connected to 127.0.0.1:3901, negotiating handshake...
2026-02-26T07:57:44.118727Z INFO garage_net::netapp: Connection established to 368849c86cba2382
==== BUCKET INFORMATION ====
Bucket: be30df62bea032acdc9ba3b992b32a43794b9f950599870e21ee706340c39c96
Created: 2026-02-26 07:54:42.610 &amp;#43;00:00
Size: 0 B (0 B)
Objects: 0
Website access: false
Global alias: vm-backup
==== KEYS FOR THIS BUCKET ====
Permissions Access key Local aliases
RWO GK6e4243deca7bc09fdffcb405 vm-backup-access-key&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;測試掛載，安裝 s3fs&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;sudo apt-get install s3fs -y&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;設定 s3fs&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;echo &amp;#34;GK6e4243deca7bc09fdffcb405:9280dbc88cb656a8589783f0762652fdb93362b2df0c7a47cfa7f2ae9b15899f&amp;#34; &amp;gt; ${HOME}/.passwd-s3fs
chmod 600 ${HOME}/.passwd-s3fs
sudo sed -i &amp;#39;s/#user_allow_other/user_allow_other/&amp;#39; /etc/fuse.conf&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;建立掛載點&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;sudo mkdir -p /mnt/garage-s3
sudo chown $USER:$USER /mnt/garage-s3&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;將自建 Garage S3 上的 &lt;code&gt;vm-backup&lt;/code&gt; bucket 儲存體掛載至本地 &lt;code&gt;/mnt/garage-s3&lt;/code&gt;&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;s3fs vm-backup /mnt/garage-s3 \
-o passwd_file=${HOME}/.passwd-s3fs \
-o url=http://garage.kubeantony.com:3900 \
-o use_path_request_style \
-o allow_other \
-o umask=000 \
-o endpoint=garage&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;檢視 &lt;code&gt;/mnt/garage-s3&lt;/code&gt; 目錄已掛載到 s3&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;findmnt -t fuse.s3fs&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行結果：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;TARGET SOURCE
FSTYPE OPTIONS
/mnt/garage-s3 s3fs fuse.s3fs rw,nosuid,nodev,relatime,user_id=1000,group_id=1000,allow_other&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;寫入資料&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;echo &amp;#34;test connection&amp;#34; &amp;gt; /mnt/garage-s3/test.txt&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;查詢 &lt;code&gt;vm-backup&lt;/code&gt; Bucket 詳細狀態&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;sudo podman exec garaged /garage bucket info vm-backup&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行結果：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;2026-02-26T08:17:07.919852Z INFO garage_net::netapp: Connected to 127.0.0.1:3901, negotiating handshake...
2026-02-26T08:17:07.960680Z INFO garage_net::netapp: Connection established to 368849c86cba2382
==== BUCKET INFORMATION ====
Bucket: be30df62bea032acdc9ba3b992b32a43794b9f950599870e21ee706340c39c96
Created: 2026-02-26 07:54:42.610 &amp;#43;00:00
Size: 16 B (16 B)
Objects: 1
Website access: false
Global alias: vm-backup
==== KEYS FOR THIS BUCKET ====
Permissions Access key Local aliases
RWO GK6e4243deca7bc09fdffcb405 vm-backup-access-key&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;清除測試資料與取消掛載&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;rm /mnt/garage-s3/test.txt
umount /mnt/garage-s3&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;3. Install and Configure Velero&lt;span class="hx:absolute hx:-mt-20" id="3-install-and-configure-velero"&gt;&lt;/span&gt;
&lt;a href="#3-install-and-configure-velero" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;ssh 連線到 Harvester Control plane 節點執行以下操作&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;安裝 Velero CLI&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# 設定版本
VERSION=v1.17.0
# 使用 curl 下載並重新命名檔案
curl -L https://github.com/vmware-tanzu/velero/releases/download/$VERSION/velero-$VERSION-linux-amd64.tar.gz -o velero.tar.gz
# 解壓縮
tar -xvf velero.tar.gz
# 移動到系統路徑
mv velero-$VERSION-linux-amd64/velero /root/bin/
# 測試
velero version --client-only&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行結果：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;Client:
Version: v1.17.0
Git commit: 3172d9f99c3d501aad9ddfac8176d783f7692dce&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;設置以下 shell 變數&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;BUCKET_NAME=vm-backup
BUCKET_REGION=garage
echo &amp;#34;[default]
aws_access_key_id=GK6e4243deca7bc09fdffcb405
aws_secret_access_key=9280dbc88cb656a8589783f0762652fdb93362b2df0c7a47cfa7f2ae9b15899f&amp;#34; &amp;gt; ${HOME}/.passwd
AWS_CREDENTIALS_FILE=${HOME}/.passwd&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在 Harvester 集群上安裝 Velero&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;velero install \
--provider aws \
--features=EnableCSI \
--plugins &amp;#34;velero/velero-plugin-for-aws:v1.12.0,quay.io/kubevirt/kubevirt-velero-plugin:v0.7.1&amp;#34; \
--bucket &amp;#34;${BUCKET_NAME}&amp;#34; \
--secret-file &amp;#34;${AWS_CREDENTIALS_FILE}&amp;#34; \
--backup-location-config region=&amp;#34;${BUCKET_REGION}&amp;#34; \
--snapshot-location-config region=&amp;#34;${BUCKET_REGION}&amp;#34; \
--use-node-agent&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;在這個設定中，Velero 被設定為：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;跑在 &lt;code&gt;velero&lt;/code&gt; namespace&lt;/li&gt;
&lt;li&gt;啟用 CSI 儲存卷快照 (volume snapshot) API&lt;/li&gt;
&lt;li&gt;啟用內建的節點代理程式 (node agent) 資料移動控制器與 Pod&lt;/li&gt;
&lt;li&gt;使用 &lt;code&gt;velero-plugin-for-aws&lt;/code&gt; 外掛程式來管理與 S3 物件儲存庫的互動&lt;/li&gt;
&lt;li&gt;使用 &lt;code&gt;kubevirt-velero-plugin&lt;/code&gt; 外掛程式來備份與還原 KubeVirt 資源&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;確認 Velero 已安裝並正在運行&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;kubectl -n velero get pods&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行結果：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;NAME READY STATUS RESTARTS AGE
node-agent-49f56 1/1 Running 0 4m30s
node-agent-dhtmj 1/1 Running 0 4m30s
node-agent-n4wh9 1/1 Running 0 4m30s
velero-6c57f94f49-bxcjx 1/1 Running 0 4m30s&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;設定 velero CLI 以輸出 CSI 物件的備份和還原狀態&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;velero client config set features=EnableCSI&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;patch backupstoragelocation&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;kubectl patch backupstoragelocation default -n velero --type merge --patch &amp;#39;{&amp;#34;spec&amp;#34;:{&amp;#34;config&amp;#34;:{&amp;#34;s3Url&amp;#34;:&amp;#34;http://garage.kubeantony.com:3900&amp;#34;,&amp;#34;s3ForcePathStyle&amp;#34;:&amp;#34;true&amp;#34;}}}&amp;#39;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Check Backup-location status&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;velero backup-location get&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行結果:&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;NAME PROVIDER BUCKET/PREFIX PHASE LAST VALIDATED ACCESS MODE DEFAULT
default aws vm-backup Available 2026-02-28 11:56:20 &amp;#43;0000 UTC ReadWrite true&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;4. Deploy the NFS CSI and Example Server&lt;span class="hx:absolute hx:-mt-20" id="4-deploy-the-nfs-csi-and-example-server"&gt;&lt;/span&gt;
&lt;a href="#4-deploy-the-nfs-csi-and-example-server" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;在 Kubernetes 叢集上設置 NFS 伺服器&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;curl -s -O https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/deploy/example/nfs-provisioner/nfs-server.yaml
vim nfs-server.yaml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;檔案內容：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt; volumes:
- name: nfs-vol
hostPath:
path: /root/nfs-data # modify this to specify another path to store nfs share data
type: DirectoryOrCreate&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;部署 NFS 伺服器&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;kubectl apply -f nfs-server.yaml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行結果：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;service/nfs-server created
deployment.apps/nfs-server created&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;檢查 NFS 伺服器是否正常運作&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;kubectl get pods&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行結果：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;NAME READY STATUS RESTARTS AGE
nfs-server-69ff4786bd-4pf6v 1/1 Running 0 3m22s&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;部署 NFS CSI 驅動程式&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;curl -skSL https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/v4.13.1/deploy/install-driver.sh | bash -s v4.13.1 --&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行結果：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;Installing NFS CSI driver, version: v4.13.1 ...
serviceaccount/csi-nfs-controller-sa created
serviceaccount/csi-nfs-node-sa created
clusterrole.rbac.authorization.k8s.io/nfs-external-provisioner-role created
clusterrolebinding.rbac.authorization.k8s.io/nfs-csi-provisioner-binding created
clusterrole.rbac.authorization.k8s.io/nfs-external-resizer-role created
clusterrolebinding.rbac.authorization.k8s.io/nfs-csi-resizer-role created
csidriver.storage.k8s.io/nfs.csi.k8s.io created
deployment.apps/csi-nfs-controller created
daemonset.apps/csi-nfs-node created
NFS CSI driver installed successfully.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;確認 pods 狀態&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;kubectl -n kube-system get pod -o wide -l &amp;#39;app in (csi-nfs-controller, csi-nfs-node)&amp;#39;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行結果：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
csi-nfs-controller-68599bd8b6-v68cr 5/5 Running 0 8m36s 192.168.11.183 hvx-03 &amp;lt;none&amp;gt; &amp;lt;none&amp;gt;
csi-nfs-node-2s57l 3/3 Running 0 8m35s 192.168.11.181 hvx-01 &amp;lt;none&amp;gt; &amp;lt;none&amp;gt;
csi-nfs-node-79zpf 3/3 Running 0 8m35s 192.168.11.182 hvx-02 &amp;lt;none&amp;gt; &amp;lt;none&amp;gt;
csi-nfs-node-smcq8 3/3 Running 0 8m35s 192.168.11.183 hvx-03 &amp;lt;none&amp;gt; &amp;lt;none&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;建立 Client pod 掛載 NFS Volume 檢查 NFS 伺服器是否正常運作&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;kubectl create -f https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/deploy/example/nfs-provisioner/nginx-pod.yaml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;確認 client pod 運作正常&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;kubectl get pod nginx-nfs-example&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行結果：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;NAME READY STATUS RESTARTS AGE
nginx-nfs-example 1/1 Running 0 43m&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;從範例 pod 檢查掛載點&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;kubectl exec nginx-nfs-example -- bash -c &amp;#34;findmnt /var/www -o TARGET,SOURCE,FSTYPE&amp;#34;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行結果：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;TARGET SOURCE FSTYPE
/var/www nfs-server.default.svc.cluster.local:/ nfs4&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;清除 client pod&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;kubectl delete -f https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/deploy/example/nfs-provisioner/nginx-pod.yaml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;撰寫 NFS Storage Class YAML 檔&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;vi nfs-sc.yaml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;檔案內容如下:&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: nfs-csi
provisioner: nfs.csi.k8s.io
parameters:
server: nfs-server.default.svc.cluster.local
share: /
# csi.storage.k8s.io/provisioner-secret is only needed for providing mountOptions in DeleteVolume
# csi.storage.k8s.io/provisioner-secret-name: &amp;#34;mount-options&amp;#34;
# csi.storage.k8s.io/provisioner-secret-namespace: &amp;#34;default&amp;#34;
reclaimPolicy: Delete
volumeBindingMode: Immediate
allowVolumeExpansion: true
mountOptions:
- nfsvers=4.1&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;建立 NFS Storage Class&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;kubectl apply -f nfs-sc.yaml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create source PVC and an example pod to write data&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/deploy/example/pvc-nfs-csi-dynamic.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/deploy/example/nginx-pod-nfs.yaml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Check the Source PVC&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;kubectl exec nginx-nfs -- ls /mnt/nfs&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行結果:&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;outfile&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create a snapshot on source PVC&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/deploy/example/snapshot/snapshotclass-nfs.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/deploy/example/snapshot/snapshot-nfs-dynamic.yaml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Check snapshot Status&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;kubectl describe volumesnapshot test-nfs-snapshot&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行結果:&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;Name: test-nfs-snapshot
Namespace: default
Labels: &amp;lt;none&amp;gt;
Annotations: &amp;lt;none&amp;gt;
API Version: snapshot.storage.k8s.io/v1
Kind: VolumeSnapshot
Metadata:
Creation Timestamp: 2026-02-28T09:37:06Z
Finalizers:
snapshot.storage.kubernetes.io/volumesnapshot-as-source-protection
snapshot.storage.kubernetes.io/volumesnapshot-bound-protection
Generation: 1
Resource Version: 15038120
UID: 59a4ddb9-a123-4dea-b220-e0fcac477f59
Spec:
Source:
Persistent Volume Claim Name: pvc-nfs-dynamic
Volume Snapshot Class Name: csi-nfs-snapclass
Status:
Bound Volume Snapshot Content Name: snapcontent-59a4ddb9-a123-4dea-b220-e0fcac477f59
Creation Time: 2026-02-28T09:37:06Z
Ready To Use: true
Restore Size: 1026
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal CreatingSnapshot 46s snapshot-controller Waiting for a snapshot default/test-nfs-snapshot to be created by the CSI driver.
Normal SnapshotCreated 46s snapshot-controller Snapshot default/test-nfs-snapshot was successfully created by the CSI driver.
Normal SnapshotReady 46s snapshot-controller Snapshot default/test-nfs-snapshot is ready to use.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;In above example, &lt;code&gt;snapcontent-59a4ddb9-a123-4dea-b220-e0fcac477f59&lt;/code&gt; is the snapshot name.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create a new PVC based on snapshot&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/deploy/example/snapshot/pvc-nfs-snapshot-restored.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/deploy/example/snapshot/nginx-pod-restored-snapshot.yaml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Check data&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;kubectl exec nginx-nfs-restored-snapshot -- ls /mnt/nfs&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行結果:&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;outfile&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;清除範例 pod&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;kubectl delete -f https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/deploy/example/nginx-pod-nfs.yaml
kubectl delete -f https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/deploy/example/pvc-nfs-csi-dynamic.yaml
kubectl delete -f https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/deploy/example/snapshot/nginx-pod-restored-snapshot.yaml
kubectl delete -f https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/deploy/example/snapshot/pvc-nfs-snapshot-restored.yaml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;5. Preparing the Virtual Machine and Image&lt;span class="hx:absolute hx:-mt-20" id="5-preparing-the-virtual-machine-and-image"&gt;&lt;/span&gt;
&lt;a href="#5-preparing-the-virtual-machine-and-image" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Create a custom namespace named &lt;code&gt;demo-src&lt;/code&gt;&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;kubectl create ns demo-src&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;上傳 ubuntu images&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;https://cloud-images.ubuntu.com/minimal/releases/noble/release-20260218/ubuntu-24.04-minimal-cloudimg-amd64.img&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;點選左側選單 images -&amp;gt; 在 URL 欄位輸入以上網址&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/r1uSaVlYZg.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;Stoage 選擇 &lt;code&gt;nfs-csi&lt;/code&gt; -&amp;gt; Create
&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/HyBnaEgF-g.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;確認虛擬機映像檔已成功上傳至 Harvester：
&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/HkLjAVxY-x.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;建立 VM&lt;/p&gt;
&lt;p&gt;輸入 VM 名稱: &lt;code&gt;test&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/S17N-SxYbe.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;點選 Volumes -&amp;gt; 選擇剛剛上傳的 Image &lt;code&gt; demo-src/ubuntu-24.04-minimal-cloudimg-amd64.img (nfs-csi / 3.5 Gi)&lt;/code&gt;
&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/SJUmNrlFbl.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;點選 Add Volume -&amp;gt; StorageClass &lt;code&gt;nfs-csi&lt;/code&gt; -&amp;gt; Volume Mode: &lt;code&gt;Filesystem&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/S1hYNSgtbl.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;Cloud Config user-data&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;ssh_pwauth: true
users:
- default
- name: rancher
gecos: rancher
groups: users
lock_passwd: false
sudo: ALL=(ALL) NOPASSWD:ALL
plain_text_passwd: &amp;#39;rancher&amp;#39;
shell: /bin/bash&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;點選 Console -&amp;gt; Open in Serial Console&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/ryB_6Bxtbg.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;add some files to both the root and data volumes.&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;sudo touch /test
sudo mkdir /data
sudo mkfs.ext4 /dev/vdb
echo &amp;#39;/dev/vdb /data ext4 defaults 0 2&amp;#39; | sudo tee -a /etc/fstab
sudo mount -a
echo &amp;#34;haha&amp;#34; | sudo tee /data/test&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;6. 驗證檔案系統凍結相容性&lt;span class="hx:absolute hx:-mt-20" id="6-驗證檔案系統凍結相容性"&gt;&lt;/span&gt;
&lt;a href="#6-%e9%a9%97%e8%ad%89%e6%aa%94%e6%a1%88%e7%b3%bb%e7%b5%b1%e5%87%8d%e7%b5%90%e7%9b%b8%e5%ae%b9%e6%80%a7" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Access the virtual machine&amp;rsquo;s virt-launcher &lt;code&gt;compute&lt;/code&gt; container&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;POD=$(kubectl get pods -n demo-src \
-l vm.kubevirt.io/name=test \
-o jsonpath=&amp;#39;{.items[0].metadata.name}&amp;#39;)
kubectl exec -it $POD -n demo-src -c compute -- bash&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Test filesystem freeze using the virt-freezer application available in the compute container:&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;virt-freezer --freeze --namespace demo-src --name test&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行結果:&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;{&amp;#34;component&amp;#34;:&amp;#34;freezer&amp;#34;,&amp;#34;level&amp;#34;:&amp;#34;info&amp;#34;,&amp;#34;msg&amp;#34;:&amp;#34;Guest agent version is 8.2.2&amp;#34;,&amp;#34;pos&amp;#34;:&amp;#34;virt-freezer.go:114&amp;#34;,&amp;#34;timestamp&amp;#34;:&amp;#34;2026-02-28T14:00:43.873324Z&amp;#34;}
{&amp;#34;component&amp;#34;:&amp;#34;freezer&amp;#34;,&amp;#34;level&amp;#34;:&amp;#34;info&amp;#34;,&amp;#34;msg&amp;#34;:&amp;#34;Operation completed successfully&amp;#34;,&amp;#34;pos&amp;#34;:&amp;#34;virt-freezer.go:152&amp;#34;,&amp;#34;timestamp&amp;#34;:&amp;#34;2026-02-28T14:00:43.940305Z&amp;#34;}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;解凍&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;virt-freezer --unfreeze --namespace demo-src --name test&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行結果:&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;{&amp;#34;component&amp;#34;:&amp;#34;freezer&amp;#34;,&amp;#34;level&amp;#34;:&amp;#34;info&amp;#34;,&amp;#34;msg&amp;#34;:&amp;#34;Guest agent version is 8.2.2&amp;#34;,&amp;#34;pos&amp;#34;:&amp;#34;virt-freezer.go:114&amp;#34;,&amp;#34;timestamp&amp;#34;:&amp;#34;2026-02-28T14:02:06.328210Z&amp;#34;}
{&amp;#34;component&amp;#34;:&amp;#34;freezer&amp;#34;,&amp;#34;level&amp;#34;:&amp;#34;info&amp;#34;,&amp;#34;msg&amp;#34;:&amp;#34;Operation completed successfully&amp;#34;,&amp;#34;pos&amp;#34;:&amp;#34;virt-freezer.go:152&amp;#34;,&amp;#34;timestamp&amp;#34;:&amp;#34;2026-02-28T14:02:06.338162Z&amp;#34;}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;設定在開始建立備份前凍結 VM 檔案系統，備份完成後解凍虛擬機檔案系統&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;kubectl patch virtualmachine test -n demo-src --type merge --patch &amp;#39;{
&amp;#34;spec&amp;#34;: {
&amp;#34;template&amp;#34;: {
&amp;#34;metadata&amp;#34;: {
&amp;#34;annotations&amp;#34;: {
&amp;#34;pre.hook.backup.velero.io/command&amp;#34;: &amp;#34;[\&amp;#34;/usr/bin/virt-freezer\&amp;#34;, \&amp;#34;--freeze\&amp;#34;, \&amp;#34;--namespace\&amp;#34;, \&amp;#34;demo-src\&amp;#34;, \&amp;#34;--name\&amp;#34;, \&amp;#34;ub-test\&amp;#34;]&amp;#34;,
&amp;#34;pre.hook.backup.velero.io/container&amp;#34;: &amp;#34;compute&amp;#34;,
&amp;#34;pre.hook.backup.velero.io/on-error&amp;#34;: &amp;#34;Fail&amp;#34;,
&amp;#34;pre.hook.backup.velero.io/timeout&amp;#34;: &amp;#34;30s&amp;#34;,
&amp;#34;post.hook.backup.velero.io/command&amp;#34;: &amp;#34;[\&amp;#34;/usr/bin/virt-freezer\&amp;#34;, \&amp;#34;--thaw\&amp;#34;, \&amp;#34;--namespace\&amp;#34;, \&amp;#34;demo-src\&amp;#34;, \&amp;#34;--name\&amp;#34;, \&amp;#34;ub-test\&amp;#34;]&amp;#34;,
&amp;#34;post.hook.backup.velero.io/container&amp;#34;: &amp;#34;compute&amp;#34;,
&amp;#34;post.hook.backup.velero.io/on-error&amp;#34;: &amp;#34;Continue&amp;#34;,
&amp;#34;post.hook.backup.velero.io/timeout&amp;#34;: &amp;#34;30s&amp;#34;
}
}
}
}
}&amp;#39;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;到 Harvester UI 將目標 vm 重新開機，套用最新的設定檔&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;7. Backup the Source Namespace&lt;span class="hx:absolute hx:-mt-20" id="7-backup-the-source-namespace"&gt;&lt;/span&gt;
&lt;a href="#7-backup-the-source-namespace" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;使用 velero CLI 利用 Velero 內建的資料移動工具，建立 demo-src 命名空間的備份&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;BACKUP_NAME=backup-demo-src-`date &amp;#34;&amp;#43;%s&amp;#34;`
velero backup create &amp;#34;${BACKUP_NAME}&amp;#34; \
--include-namespaces demo-src \
--snapshot-move-data&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行結果:&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;Backup request &amp;#34;backup-demo-src-1772286287&amp;#34; submitted successfully.
Run `velero backup describe backup-demo-src-1772286287` or `velero backup logs backup-demo-src-1772286287` for more details.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;DataUpload&lt;/code&gt; 的自訂資源提供了備份進度的見解&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;velero backup get &amp;#34;${BACKUP_NAME}&amp;#34;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行結果:&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;NAME STATUS ERRORS WARNINGS CREATED EXPIRES STORAGE LOCATION SELECTOR
backup-demo-src-1772278089 InProgress 0 0 2026-02-28 11:56:33 &amp;#43;0000 UTC 29d default &amp;lt;none&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;hellip;過幾分鐘後&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;NAME STATUS ERRORS WARNINGS CREATED EXPIRES STORAGE LOCATION SELECTOR
backup-demo-src-1772278089 Completed 0 0 2026-02-28 11:56:33 &amp;#43;0000 UTC 29d default &amp;lt;none&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;8. Restore To A Different Namespace&lt;span class="hx:absolute hx:-mt-20" id="8-restore-to-a-different-namespace"&gt;&lt;/span&gt;
&lt;a href="#8-restore-to-a-different-namespace" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Save the following restore modifier to a local file named &lt;code&gt;modifier-data-volumes.yaml&lt;/code&gt;&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;cat &amp;lt;&amp;lt;EOF &amp;gt; modifier-data-volumes.yaml
version: v1
resourceModifierRules:
- conditions:
groupResource: persistentvolumeclaims
matches:
- path: /metadata/annotations/harvesterhci.io~1volumeForVirtualMachine
value: &amp;#34;\&amp;#34;true\&amp;#34;&amp;#34;
patches:
- operation: remove
path: /metadata/annotations/harvesterhci.io~1volumeForVirtualMachine
EOF&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create the restore modifier&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;kubectl -n velero create cm modifier-data-volumes --from-file=modifier-data-volumes.yaml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Assign the backup name to a shell variable&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;velero restore create \
--from-backup &amp;#34;${BACKUP_NAME}&amp;#34; \
--namespace-mappings &amp;#34;demo-src:demo-dst&amp;#34; \
--exclude-resources &amp;#34;virtualmachineimages.harvesterhci.io&amp;#34; \
--resource-modifier-configmap &amp;#34;modifier-data-volumes&amp;#34; \
--labels &amp;#34;velero.kubevirt.io/clear-mac-address=true,velero.kubevirt.io/generate-new-firmware-uuid=true&amp;#34;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行結果:&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;Restore request &amp;#34;backup-demo-src-1772286287-20260228141734&amp;#34; submitted successfully.
Run `velero restore describe backup-demo-src-1772286287-20260228141734` or `velero restore logs backup-demo-src-1772286287-20260228141734` for more details.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;修復期間：
虛擬機的 MAC 位址與韌體 UUID 會被重置，以避免與現有虛擬機發生潛在衝突。
虛擬機映像清單被排除，因為 Velero 會從備份中恢復整個虛擬機狀態。
會呼叫 modifier-data-volumes 的還原修飾符來修改虛擬機器的資料卷的元資料，以避免與 CDI 卷匯入填充器發生衝突。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;當還原操作仍在進行中時，&lt;code&gt;DataDownload&lt;/code&gt; 的自訂資源可用來檢視作業進度：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;RESTORE_NAME=backup-demo-src-1772286287-20260228141734
kubectl -n velero get datadownload -l velero.io/restore-name=&amp;#34;${RESTORE_NAME}&amp;#34;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行結果:&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;NAME STATUS STARTED BYTES DONE TOTAL BYTES STORAGE LOCATION AGE NODE
backup-demo-src-1772286287-20260228135229-9fnqg Completed 59s 3758096384 3758096384 default 75s hvx-02
backup-demo-src-1772286287-20260228135229-fqrhx Completed 72s 192040960 192040960 default 74s hvx-02
backup-demo-src-1772286287-20260228135229-kp2jw Completed 71s 10737418240 10737418240 default 75s hvx-01
backup-demo-src-1772286287-20260228135229-n7bcp Completed 70s 10146021376 10146021376 default 74s hvx-03&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;確認還原成功完成：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;velero restore get&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行結果:&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;NAME BACKUP STATUS STARTED COMPLETED ERRORS WARNINGS CREATED SELECTOR
backup-demo-src-1772286287-20260228135229 backup-demo-src-1772286287 Completed 2026-02-28 13:52:29 &amp;#43;0000 UTC 2026-02-28 13:54:00 &amp;#43;0000 UTC 0 6 2026-02-28 13:52:29 &amp;#43;0000 UTC &amp;lt;none&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;確認虛擬機及其設定是否已恢復到新的 &lt;code&gt;demo-dst&lt;/code&gt; namespace：&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>How to update rke2 to cis profile</title><link>https://blog.kubeantony.com/archive/rancher/how-to-update-rke2-to-cis-profile/</link><pubDate>Tue, 24 Feb 2026 07:18:08 +0800</pubDate><guid>https://blog.kubeantony.com/archive/rancher/how-to-update-rke2-to-cis-profile/</guid><description>
&lt;h2&gt;以下命令要先在 update 之前執行&lt;span class="hx:absolute hx:-mt-20" id="以下命令要先在-update-之前執行"&gt;&lt;/span&gt;
&lt;a href="#%e4%bb%a5%e4%b8%8b%e5%91%bd%e4%bb%a4%e8%a6%81%e5%85%88%e5%9c%a8-update-%e4%b9%8b%e5%89%8d%e5%9f%b7%e8%a1%8c" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Control-plane node 跑&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;sudo cp -vf /usr/local/share/rke2/rke2-cis-sysctl.conf /etc/sysctl.d/60-rke2-cis.conf &amp;amp;&amp;amp; \
sudo systemctl restart systemd-sysctl &amp;amp;&amp;amp; \
sudo useradd -r -c &amp;#34;etcd user&amp;#34; -s /sbin/nologin -M etcd -U; \
sudo reboot&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;如果先更新下去會在 rke2-server 的 service 看到以下錯誤訊息&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;missing required: user: unknown user etcd\nmissing required: group: unknown group etcd\n&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;p&gt;worker node 跑 (如果是透過 Rancher 去更新，以下指令不用做)&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;cp /opt/rke2/share/rke2/rke2-cis-sysctl.conf /etc/sysctl.d/60-rke2-cis.conf &amp;amp;&amp;amp; \
systemctl restart systemd-sysctl
reboot&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;Ref&lt;span class="hx:absolute hx:-mt-20" id="ref"&gt;&lt;/span&gt;
&lt;a href="#ref" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a
href="https://docs.rke2.io/security/hardening_guide/"target="_blank" rel="noopener"&gt;CIS Hardening Guide - RKE2 Docs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Learning and Practicing Harvester</title><link>https://blog.kubeantony.com/archive/rancher/learning-and-practicing-harvester/</link><pubDate>Thu, 15 Jan 2026 08:11:28 +0800</pubDate><guid>https://blog.kubeantony.com/archive/rancher/learning-and-practicing-harvester/</guid><description>
&lt;style&gt;
.indent-title-1{
margin-left: 1em;
}
.indent-title-2{
margin-left: 2em;
}
.indent-title-3{
margin-left: 3em;
}
&lt;/style&gt;
&lt;h2&gt;Preface&lt;span class="hx:absolute hx:-mt-20" id="preface"&gt;&lt;/span&gt;
&lt;a href="#preface" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;本篇文章會主要會介紹以下主題 :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Harvester 的架構&lt;/li&gt;
&lt;li&gt;如何安裝 Harvester，並將額外的節點加入 Harveter Cluster&lt;/li&gt;
&lt;li&gt;將 Harvester 與 Rancher 整合，做出 Nested Kubernetes Clusters 以及 Node Pool&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;可以透過點擊以下目錄，選擇想看的內容，跳轉至特定章節&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;Harvester Architecture&lt;span class="hx:absolute hx:-mt-20" id="harvester-architecture"&gt;&lt;/span&gt;
&lt;a href="#harvester-architecture" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/SySzSf0qT.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;Harvester 架構由以下開源技術組成：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Linux 作業系統 : Elemental for SLE-Micro 5.3 是 Harvester 的核心，它是一個不可變的 Linux 發行版，旨在盡可能消除 Kubernetes 叢集中的作業系統維護工作。&lt;/li&gt;
&lt;li&gt;建構於 Kubernetes(RKE2) 之上 : Kubernetes 已成為所有形式因素中最主要的基礎架構語言，而 Harvester 就是一個在引擎蓋下裝有 Kubernetes 的 HCI 解決方案。&lt;/li&gt;
&lt;li&gt;利用 Kubevirt 進行虛擬化管理 : Kubevirt 在 Kubernetes 的基礎上使用 KVM 提供虛擬化管理。&lt;/li&gt;
&lt;li&gt;利用 Longhorn 進行儲存管理 : Longhorn 提供分散式區塊儲存。&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;h2&gt;Harvester Features&lt;span class="hx:absolute hx:-mt-20" id="harvester-features"&gt;&lt;/span&gt;
&lt;a href="#harvester-features" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;Harvester 是一個 enterprise-ready、易於使用的基礎架構平台，它利用本地直接連接的 Storage，而不是複雜的外部 SAN。 它利用 Kubernetes API 作為跨 Container 和 虛擬機器 workloads 的統一自動化語言。 Harvester 的一些主要功能包括 :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;易於上手 : 由於 Harvester 是以可啟動裝置鏡像的形式提供的，因此您可以使用 ISO 映像直接將其安裝到裸機伺服器上，也可以使用 iPXE 腳本自動安裝。&lt;/li&gt;
&lt;li&gt;虛擬機器生命週期管理 : 輕鬆建立、編輯、複製和刪除虛擬機，包括 SSH 金鑰注入、Cloud Init 以及圖形化界面 (VNC) 和 serial port (22 port) 控制台。&lt;/li&gt;
&lt;li&gt;虛擬機器即時遷移 : 零停機時間將虛擬機器遷移到不同的主機或節點。&lt;/li&gt;
&lt;li&gt;虛擬機器備份、快照和還原 : 從 NFS、S3 伺服器或 NAS 設備備份虛擬機器。 使用備份好的虛擬硬碟檔還原故障的虛擬機，或在不同的叢集上建立新的虛擬機。&lt;/li&gt;
&lt;li&gt;儲存管理 : Harvester 支援分散式區塊的儲存和 tiering (分層)。 Volumes 代表 storage；你可以輕鬆建立、編輯、複製或匯出磁碟區。&lt;/li&gt;
&lt;li&gt;網路管理 : 支援使用虛擬 IP（VIP）和多個網路介面卡（NIC）。 如果虛擬機器需要連接外部網絡，可建立 VLAN 或 untagged (無標記) 網路。&lt;/li&gt;
&lt;li&gt;與 Rancher 整合 : 透過 Rancher 的虛擬化管理頁面直接存取 Rancher 中的 Harvester，並與 Kubernetes 叢集一起管理 VM workloads (虛擬機器工作負載)，實現 Node Pool 的功能。&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;h2&gt;PreRequest&lt;span class="hx:absolute hx:-mt-20" id="prerequest"&gt;&lt;/span&gt;
&lt;a href="#prerequest" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;Hardware and Network Requirements&lt;span class="hx:absolute hx:-mt-20" id="hardware-and-network-requirements"&gt;&lt;/span&gt;
&lt;a href="#hardware-and-network-requirements" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/SkCXYmAqp.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;詳細資訊，請以下參考 Harvester 官網 Docs :
&lt;a
href="https://docs.harvesterhci.io/v1.2/install/requirements/"target="_blank" rel="noopener"&gt;Hardware and Network Requirements&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;h2&gt;Install Single-Node Harvester Clusters with USB&lt;span class="hx:absolute hx:-mt-20" id="install-single-node-harvester-clusters-with-usb"&gt;&lt;/span&gt;
&lt;a href="#install-single-node-harvester-clusters-with-usb" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;1. 下載 ISO 並透過 Rufus 將 USB 做成可開機裝置&lt;span class="hx:absolute hx:-mt-20" id="1-下載-iso-並透過-rufus-將-usb-做成可開機裝置"&gt;&lt;/span&gt;
&lt;a href="#1-%e4%b8%8b%e8%bc%89-iso-%e4%b8%a6%e9%80%8f%e9%81%8e-rufus-%e5%b0%87-usb-%e5%81%9a%e6%88%90%e5%8f%af%e9%96%8b%e6%a9%9f%e8%a3%9d%e7%bd%ae" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;1.1. 下載 ISO&lt;/p&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;可以使用 ISO 鏡像直接將 Harvester 安裝到裸機伺服器上，若要取得 ISO 映像，請從 &lt;a
href="https://github.com/harvester/harvester/releases"target="_blank" rel="noopener"&gt;Harvester releases 頁面&lt;/a&gt;下載 💿 &lt;code&gt;harvester-v1.x.x-amd64.iso&lt;/code&gt;。&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ wget --show-progress https://releases.rancher.com/harvester/v1.2.1/harvester-v1.2.1-amd64.iso&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;--2024-02-16 10:59:20-- https://releases.rancher.com/harvester/v1.2.1/harvester-v1.2.1-amd64.iso
Resolving releases.rancher.com (releases.rancher.com)... 13.35.35.42, 13.35.35.123, 13.35.35.33, ...
Connecting to releases.rancher.com (releases.rancher.com)|13.35.35.42|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 5497749504 (5.1G) [application/octet-stream]
Saving to: ‘harvester-v1.2.1-amd64.iso’
harvester-v1.2.1-amd64.iso 100%[===========================================================&amp;gt;] 5.12G 35.8MB/s in 4m 14s
2024-02-16 11:03:34 (20.6 MB/s) - ‘harvester-v1.2.1-amd64.iso’ saved [5497749504/5497749504]&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;1.2. 開啟 Rufus，將乾淨的 USB 碟插入電腦，Rufus 會自動偵測 USB。 從 &amp;ldquo;裝置 &amp;ldquo;下拉式選單中選擇要使用的 USB 裝置，在 &amp;ldquo;啟動選擇 &amp;ldquo;中選擇 &amp;ldquo;選擇&amp;rdquo;，然後找到要燒錄到 USB 上的 Harvester 安裝 ISO 映像。&lt;/p&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/SJq32Ynsa.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;2. 安裝步驟&lt;span class="hx:absolute hx:-mt-20" id="2-安裝步驟"&gt;&lt;/span&gt;
&lt;a href="#2-%e5%ae%89%e8%a3%9d%e6%ad%a5%e9%a9%9f" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;2.1. 使用 USB 開機，並透過選擇 Harvester Installer 選項啟動伺服器。&lt;/p&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/rJiMSL2iT.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;使用預設選項，直接按 Enter 按鍵。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;2.2. 選擇建立一個新的 Harvester Cluster&lt;/p&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/S17TBIhsa.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;使用預設選項，直接按 Enter 按鍵。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;2.3. 選擇要安裝的 Harvester 系統碟和要儲存虛擬機器資料的資料碟。&lt;/p&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/HyvFI83sT.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;按 Tab 鍵可展開下拉式選單，按 Enter 鍵儲存設定值。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;2.4. 設定主機的 Hostname&lt;/p&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/rkByPU2sT.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;輸入 &lt;code&gt;h1&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;2.5. 設定管理網路&lt;/p&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/BJ9RDLhs6.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;網路卡的部分，按 Tab 展開下拉式選單，按空白鍵選擇網路卡，確定之後按 Enter 鍵
IPv4 Address 欄位，輸入 : &lt;code&gt;172.20.0.34/24&lt;/code&gt;
Gateway 欄位，輸入 : &lt;code&gt;172.20.0.254&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;2.6. 設定 DNS Server&lt;/p&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/SkK3uLnip.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;DNS Server 欄位 : &lt;code&gt;172.20.0.254&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;2.7. 設定 VIP&lt;/p&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/B1im_wnsp.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;按 Tab 展開下拉式選單，按向下方向鍵選擇 &lt;code&gt;Static&lt;/code&gt;，確認後按 Enter 鍵。
VIP 欄位 : &lt;code&gt;172.20.0.36&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;2.8. 設定 Cluster Token&lt;/p&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/ryxCdvno6.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Cluster token 欄位 : &lt;code&gt;lab&lt;/code&gt;
Cluster token 用於將其他節點新增至 Harvester 叢集。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;2.9. 設定使用者密碼&lt;/p&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/SkGStD3ja.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;預設的使用者是 &lt;code&gt;rancher&lt;/code&gt;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;2.10. 設定 NTP Server&lt;/p&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/HJBFYv3jT.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;NTP Server 欄位 : &lt;code&gt;time.google.com&lt;/code&gt;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;2.11. 設定 HTTP Proxy Server ( 此步驟不一定要設定，取決於當下的環境 )&lt;/p&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/HyJ-qDhsT.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;如果不設定就空白，直接按 Enter 鍵。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;2.12. 匯入 SSH Keys ( 此步驟不一定要設定 )&lt;/p&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/rkjwqPnia.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;如果不設定就空白，直接按 Enter 鍵。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;2.13. 設定 Harvester 設定檔自訂主機 ( 此步驟不一定要設定 )&lt;/p&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/BJbMjwhjp.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;如果不設定就空白，直接按 Enter 鍵。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;2.14. 查看並確認安裝選項&lt;/p&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/ryFujwhja.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;確認安裝選項沒問題後，按 Enter 鍵，Harvester 將會安裝到主機上。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;2.15. 安裝完成後，節點將重新啟動，以下是啟動完成畫面&lt;/p&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/B13ey_nip.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;重新啟動後，Harvester 控制台會顯示管理 URL 和狀態。網路介面的預設 URL 是 &lt;code&gt;https://your-virtual-ip&lt;/code&gt;。 可以使用 F12 按鍵從 Harvester 控制台切換到 Shell，然後鍵入 exit 返回 Harvester 控制台。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;2.16. 第一次登入的時候，系統會提示您設定預設管理員使用者的密碼。&lt;/p&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/HJPjyunsa.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;使用者預設是 &lt;code&gt;admin&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;Update Harvester Configuration After Installation&lt;span class="hx:absolute hx:-mt-20" id="update-harvester-configuration-after-installation"&gt;&lt;/span&gt;
&lt;a href="#update-harvester-configuration-after-installation" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;DNS servers&lt;span class="hx:absolute hx:-mt-20" id="dns-servers"&gt;&lt;/span&gt;
&lt;a href="#dns-servers" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;SSH 連線至 Harvester Node&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ ssh rancher@172.20.0.36&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="2"&gt;
&lt;li&gt;備份基本的 cloud-init 檔案 &lt;code&gt;/oem/90_custom.yaml&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo cp /oem/90_custom.yaml /oem/install/90_custom.yaml.$(date --iso-8601=minutes)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="3"&gt;
&lt;li&gt;修改 &lt;code&gt;/oem/90_custom.yaml&lt;/code&gt; 檔案，並且更新以下 Yaml 檔中路徑的值 &lt;code&gt;stages.initramfs[0].commands&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo vim /oem/90_custom.yaml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改範例內容如下 :&lt;/p&gt;
&lt;pre&gt;
name: Harvester Configuration
stages:
initramfs:
- commands:
- modprobe kvm
- modprobe vhost_net
- sed -i 's/^NETCONFIG_DNS_STATIC_SERVERS.*/NETCONFIG_DNS_STATIC_SERVERS="&lt;font color=red&gt;172.20.0.37&lt;/font&gt;"/'
/etc/sysconfig/network/config
&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;將原本的 &lt;code&gt;172.20.0.254&lt;/code&gt; 改成 &lt;code&gt;172.20.0.37&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;ol start="4"&gt;
&lt;li&gt;重新開機&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo reboot&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="5"&gt;
&lt;li&gt;確認 DNS Server 修改正確&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ cat /etc/resolv.conf | grep -v &amp;#39;#&amp;#39;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出如下 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;nameserver 172.20.0.37&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;設定 Storage Class&lt;span class="hx:absolute hx:-mt-20" id="設定-storage-class"&gt;&lt;/span&gt;
&lt;a href="#%e8%a8%ad%e5%ae%9a-storage-class" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;預設的 StorageClass 他的 Replicas 會被設為 3 ，但因為只有單一台 Node，所以要額外新增一個 StorageClass 並將 Replicas 設為 1，否則 VM 會無法建立。&lt;/li&gt;
&lt;li&gt;點選左側選單 Advanced -&amp;gt; Storage Classes -&amp;gt; Create&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/rJRn6Onop.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;ol start="3"&gt;
&lt;li&gt;輸入以下資訊 :&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;ul&gt;
&lt;li&gt;Name: &lt;code&gt;new-sc&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Number of Replicas 設為 &lt;code&gt;1&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;確認資訊輸入正確後，點選 Create&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/rk0qR_nsT.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;ol start="4"&gt;
&lt;li&gt;設成 Default&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/SkYfkKnoT.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;透過 URL 下載 Cloud Images&lt;span class="hx:absolute hx:-mt-20" id="透過-url-下載-cloud-images"&gt;&lt;/span&gt;
&lt;a href="#%e9%80%8f%e9%81%8e-url-%e4%b8%8b%e8%bc%89-cloud-images" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;左側選單選擇 Images -&amp;gt; Create&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/H1Jaud2oT.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;ol start="2"&gt;
&lt;li&gt;透過 URL 下載 OpenSUSE Leap 15.5 的 Cloud Images&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/BkxNtdnop.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;URL 如下 :
&lt;code&gt;https://download.opensuse.org/repositories/Cloud:/Images:/Leap_15.5/images/openSUSE-Leap-15.5.x86_64-NoCloud.qcow2&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;ol start="3"&gt;
&lt;li&gt;確認下載完成&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/SJkPjdhi6.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;新增 Cloud Config Templates&lt;span class="hx:absolute hx:-mt-20" id="新增-cloud-config-templates"&gt;&lt;/span&gt;
&lt;a href="#%e6%96%b0%e5%a2%9e-cloud-config-templates" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;User Data&lt;span class="hx:absolute hx:-mt-20" id="user-data"&gt;&lt;/span&gt;
&lt;a href="#user-data" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;點選左側選單 Cloud Config Templates -&amp;gt; Create&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/S1lWeK2ia.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;ol start="2"&gt;
&lt;li&gt;輸入以下資訊 :&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;ul&gt;
&lt;li&gt;Name: &lt;code&gt;opensuse&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;#cloud-config
package_update: true
packages:
- qemu-guest-agent
write_files:
- path: /etc/sysctl.conf
permissions: 0644
owner: root
content: |
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
runcmd:
- - systemctl
- enable
- &amp;#39;--now&amp;#39;
- qemu-guest-agent.service
- yast dns edit nameserver1=172.20.0.37
- timedatectl set-timezone Asia/Taipei
- systemctl restart network
- sysctl -p
ssh_pwauth: true
ssh_authorized_keys:
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC2Km26Z03nqLOmoHgd4F1MEApHF2Vdib8sk86SwaxVAqaFXliaC/a6VRFBiQRuog8zYsjg51HMzmXc9zPaUMEbJ7mD23AfqOv&amp;#43;DoQc8KjYhr2bWPz33fqYBAz76XpDi6R8g8XEfWekUi&amp;#43;YV28O3QJOfNT6W8PNPfYVCvXmhVe0QIB9w5wyMUvwOdlpBdcCke6w1Wwg0OSBulJBT&amp;#43;p2qJ1HZBiIUsb7KYLyiwPfmiYakFo&amp;#43;L90DfXJhzuFMYUtOa7zw&amp;#43;zjWy9BDTF6xXlHKhvv4yylPsLl5DfA/aSztpzMTMsrXefGJjCcaAQMueikGRORZ7KDb2QJvj0U2iYw/GFivv3cOpgAxRzIo6pDROpfJAc8Xt59gQeDsRzF3JSY6gXJ&amp;#43;/xgEWSIMffKnF3VRk20zb/m&amp;#43;jWuCnKzj9GH9ribAJ5yWSA7zeWexSd0ZACvvb&amp;#43;ydW9RgnlecdUXarohWXbvH2CK3euxCjFVuMsaKqJvF2c2XfiIm8ZtgzF3WpRhbFOc= rancher@rancher
users:
- default
- name: rancher
gecos: rancher
groups: users
lock_passwd: false
sudo: ALL=(ALL) NOPASSWD:ALL
plain_text_passwd: &amp;#39;rancher&amp;#39;
shell: /bin/bash&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;package_update&lt;/code&gt;，會先更新系統的套件&lt;/li&gt;
&lt;li&gt;&lt;code&gt;packages&lt;/code&gt;，代表要安裝的套件&lt;/li&gt;
&lt;li&gt;&lt;code&gt;write_files&lt;/code&gt;，針對特定檔案寫入特定內容，這邊的範例是關 ipv6&lt;/li&gt;
&lt;li&gt;&lt;code&gt;runcmd&lt;/code&gt;，系統開機以後要執行的命令，這邊有設定啟動 qemu-guest-agent 服務，並設為開機自動啟動，還有設定 DNS Server 的位置，還有設定時區，特別設定 DNS Server 的原因是因為要可以跟 Rancher 溝通&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ssh_authorized_keys&lt;/code&gt;，讓跳板機可以免密碼登入使用這個 Cloud init config 做出來的 VM&lt;/li&gt;
&lt;li&gt;&lt;code&gt;users&lt;/code&gt;，新增使用者，並設定使用者的群組、sudo 權限和密碼。&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;確認資訊輸入正確後，點選 Create&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/ByChxtnja.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h3&gt;Network Data&lt;span class="hx:absolute hx:-mt-20" id="network-data"&gt;&lt;/span&gt;
&lt;a href="#network-data" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;h4&gt;Static&lt;span class="hx:absolute hx:-mt-20" id="static"&gt;&lt;/span&gt;
&lt;a href="#static" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;network:
version: 1
config:
- type: physical
name: eth0
subnets:
- type: static
address: 172.20.0.43/24
gateway: 172.20.0.253
- type: nameserver
address:
- 172.20.0.40&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h4&gt;DHCP&lt;span class="hx:absolute hx:-mt-20" id="dhcp"&gt;&lt;/span&gt;
&lt;a href="#dhcp" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;network:
version: 1
config:
- type: physical
name: eth0
subnets:
- type: dhcp&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;建立 VM Network&lt;span class="hx:absolute hx:-mt-20" id="建立-vm-network"&gt;&lt;/span&gt;
&lt;a href="#%e5%bb%ba%e7%ab%8b-vm-network" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;點選左側選單 Networks -&amp;gt; VM Networks -&amp;gt; Create&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/ryzy3Fajp.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;ol start="2"&gt;
&lt;li&gt;編輯以下設定資訊&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-1"&gt;
&lt;ul&gt;
&lt;li&gt;Name: &lt;code&gt;vlan&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Vlan ID: &lt;code&gt;100&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Cluster Netwrok: &lt;code&gt;mgmt&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;確認沒問題後，點選 Create&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/HJzJ6F6o6.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="3"&gt;
&lt;li&gt;確認是否建立成功&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;State 和 Route Connectivity 的狀態都要顯示 Active&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/Hkm2ptTja.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;將其他節點加入 Harvester 叢集&lt;span class="hx:absolute hx:-mt-20" id="將其他節點加入-harvester-叢集"&gt;&lt;/span&gt;
&lt;a href="#%e5%b0%87%e5%85%b6%e4%bb%96%e7%af%80%e9%bb%9e%e5%8a%a0%e5%85%a5-harvester-%e5%8f%a2%e9%9b%86" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;1. 將燒有 Harvester ISO 的 USB 可開機裝置插入伺服器，並使用 USB 開機。&lt;span class="hx:absolute hx:-mt-20" id="1-將燒有-harvester-iso-的-usb-可開機裝置插入伺服器並使用-usb-開機"&gt;&lt;/span&gt;
&lt;a href="#1-%e5%b0%87%e7%87%92%e6%9c%89-harvester-iso-%e7%9a%84-usb-%e5%8f%af%e9%96%8b%e6%a9%9f%e8%a3%9d%e7%bd%ae%e6%8f%92%e5%85%a5%e4%bc%ba%e6%9c%8d%e5%99%a8%e4%b8%a6%e4%bd%bf%e7%94%a8-usb-%e9%96%8b%e6%a9%9f" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;h3&gt;2. 安裝步驟&lt;span class="hx:absolute hx:-mt-20" id="2-安裝步驟-1"&gt;&lt;/span&gt;
&lt;a href="#2-%e5%ae%89%e8%a3%9d%e6%ad%a5%e9%a9%9f-1" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;2.1. 使用 USB 開機，並透過選擇 Harvester Installer 選項啟動伺服器。&lt;/p&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/rJiMSL2iT.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;使用預設選項，直接按 Enter 按鍵。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;2.2. 選擇加入一個已經存在的 Harvester Cluster&lt;/p&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/Sk1v9Khip.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;選擇 &lt;code&gt;Join an existing Harvester cluster&lt;/code&gt; 後，按 Enter 按鍵。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;2.3. 選擇要安裝的 Harvester 系統碟和要儲存虛擬機器資料的資料碟。&lt;/p&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/BJwppt2sT.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;按 Tab 鍵可展開下拉式選單，按 Enter 鍵儲存設定值。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;2.4. 設定主機的 Hostname&lt;/p&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/Hypj6F2jT.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;輸入 &lt;code&gt;h2&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;2.5. 設定網路&lt;/p&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/ByffCY2j6.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;網路卡的部分，按 Tab 展開下拉式選單，按空白鍵選擇網路卡，確定之後按 Enter 鍵
IPv4 Address 欄位，輸入 : &lt;code&gt;172.20.0.35/24&lt;/code&gt;
Gateway 欄位，輸入 : &lt;code&gt;172.20.0.254&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;2.6. 設定 DNS Server&lt;/p&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/SkCXCtnsp.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;DNS Server 欄位 : &lt;code&gt;172.20.0.37&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;2.7. 設定 管理 IP Address&lt;/p&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/SymvRY2op.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Management address 欄位 : &lt;code&gt;172.20.0.36&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;2.8. 設定 Cluster Token&lt;/p&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/ryxCdvno6.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Cluster token 欄位 : &lt;code&gt;lab&lt;/code&gt;
Cluster token 用於將其他節點新增至 Harvester 叢集。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;2.9. 設定使用者密碼&lt;/p&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/SkGStD3ja.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;預設的使用者是 &lt;code&gt;rancher&lt;/code&gt;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;2.10. 設定 NTP Server&lt;/p&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/ryY4ec3ia.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;NTP Server 欄位 : &lt;code&gt;time.google.com&lt;/code&gt;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;2.11. 設定 HTTP Proxy Server ( 此步驟不一定要設定，取決於當下的環境 )&lt;/p&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/HyJ-qDhsT.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;如果不設定就空白，直接按 Enter 鍵。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;2.12. 匯入 SSH Keys ( 此步驟不一定要設定 )&lt;/p&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/rkjwqPnia.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;如果不設定就空白，直接按 Enter 鍵。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;2.13. 設定 Harvester 設定檔自訂主機 ( 此步驟不一定要設定 )&lt;/p&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/BJbMjwhjp.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;如果不設定就空白，直接按 Enter 鍵。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;2.14. 查看並確認安裝選項&lt;/p&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/S1_Ue9ho6.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;確認安裝選項沒問題後，按 Enter 鍵，Harvester 將會安裝到主機上。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;2.15. 安裝完成後，節點將重新啟動，以下是啟動完成畫面&lt;/p&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/HJVvH5nop.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;2.16. 打開 Harvester 網站，檢查 Node 是否變 2 台&lt;/p&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;點選左側選單 Hosts&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/S112rcniT.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;使用者預設是 &lt;code&gt;admin&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;與 Rancher 整合&lt;span class="hx:absolute hx:-mt-20" id="與-rancher-整合"&gt;&lt;/span&gt;
&lt;a href="#%e8%88%87-rancher-%e6%95%b4%e5%90%88" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;PreRequest&lt;span class="hx:absolute hx:-mt-20" id="prerequest-1"&gt;&lt;/span&gt;
&lt;a href="#prerequest-1" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;Harvester v1.2.1 肚子裡面的 Rancher 無法啟動虛擬化管理，所以需額外再安裝並啟動 Rancher Server 2.7.9，或是在 Harvester 啟動 &lt;a
href="https://docs.harvesterhci.io/v1.2/advanced/addons/rancher-vcluster"target="_blank" rel="noopener"&gt;rancher-vcluster&lt;/a&gt; (正在開發的功能)。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Rancher 的安裝請參考我的另一篇筆記 &lt;a
href="https://hackmd.io/@QI-AN/RKE2-Rancher-Prime-Installation"target="_blank" rel="noopener"&gt;RKE2 &amp;amp; Rancher Prime Installation&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;h3&gt;Rancher 啟動 Virtualization management&lt;span class="hx:absolute hx:-mt-20" id="rancher-啟動-virtualization-management"&gt;&lt;/span&gt;
&lt;a href="#rancher-%e5%95%9f%e5%8b%95-virtualization-management" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;打開虛擬化管理介面&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;點選左側選單 Virtualization Management&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/ryT5uc2jT.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;ol start="2"&gt;
&lt;li&gt;Import Harvester Cluster&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;點選 Import Existing&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/Skog953oT.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;ol start="3"&gt;
&lt;li&gt;填入叢集資訊&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;ul&gt;
&lt;li&gt;Cluster Name: &lt;code&gt;harvester&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/S1nw553j6.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;ol start="4"&gt;
&lt;li&gt;填入叢集資訊&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;ul&gt;
&lt;li&gt;Cluster Name: &lt;code&gt;harvester&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/S1nw553j6.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;ol start="5"&gt;
&lt;li&gt;複製讓 Harvester 與 Rancher 註冊的 URL&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/Hkugjc3o6.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;ol start="6"&gt;
&lt;li&gt;回到 Harvester 的網站，與 Rancher 註冊 (1/2)&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;點選左側選單 Settings -&amp;gt; 找到 cluster-registration-url -&amp;gt; 點選 Edit Setting&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/B1j3T9hjT.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;ol start="7"&gt;
&lt;li&gt;回到 Harvester 的網站，與 Rancher 註冊 (2/2)&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;將註冊 URL 貼上 -&amp;gt; 點選 Save&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/SkIOAchj6.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;ol start="8"&gt;
&lt;li&gt;到 Rancher UI 確認&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/SkrS1j2sp.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h3&gt;Creating an K3s Kubernetes Cluster&lt;span class="hx:absolute hx:-mt-20" id="creating-an-k3s-kubernetes-cluster"&gt;&lt;/span&gt;
&lt;a href="#creating-an-k3s-kubernetes-cluster" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;在 Home Page 點選 Create&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/SJc2yi2j6.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;ol start="2"&gt;
&lt;li&gt;Node Driver 選擇 Harvester&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/BJuJgo3op.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;ol start="3"&gt;
&lt;li&gt;建立 Cloud Credential&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;ul&gt;
&lt;li&gt;Credential Name: &lt;code&gt;harvester&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Imported Harvester Cluster 選擇 harvester&lt;/li&gt;
&lt;li&gt;點選 Continue&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/HkRIwo3ip.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;ol start="4"&gt;
&lt;li&gt;編輯 Machine Pools&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-1"&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;VM 必須要能透過 DNS Server 解析 Rancher 的 FQDN，否則 K3S 將無法建立。&lt;/p&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Cluster Name: &lt;code&gt;bobo&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;CPU: &lt;code&gt;4&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Memory: &lt;code&gt;8&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Namespace: &lt;code&gt;default&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;SSH User: &lt;code&gt;Opensuse&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Volumes:
&lt;ul&gt;
&lt;li&gt;Image Volume: &lt;code&gt;openSUSE-Leap-15.5.x86_64-NoCloud.qcow2&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Disk: &lt;code&gt;100&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/BJ5aIFasa.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Networks:
&lt;ul&gt;
&lt;li&gt;Network Name: &lt;code&gt;default/vlan (vlanId=100)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;點選 &lt;code&gt;Show Advanced&lt;/code&gt; 按鈕&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/H1Jzx5TjT.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;User Data:
&lt;ul&gt;
&lt;li&gt;User Data Template: &lt;code&gt;opensuse&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/BJwCJ9Tsp.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="5"&gt;
&lt;li&gt;編輯 Cluster Configuration&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-1"&gt;
&lt;ul&gt;
&lt;li&gt;選擇 Kubernetes 版本 : k3s v1.26.13+k3s2&lt;/li&gt;
&lt;li&gt;點選 Create&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/rJKV-qpjp.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="6"&gt;
&lt;li&gt;檢查 K3S 是否建立成功&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;點選 Provisioning Log&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/S1ARl6pj6.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;要 Troubleshooting 的話，可以 ssh 連線到 VM 中，看以下兩個檔案 :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/var/log/cloud-init.log&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/var/log/cloud-init-output.log&lt;/code&gt;，這檔案裡面紀錄 cloud init 命令執行的結果，包含透過 Rancher 安裝 K3S 的過程都會記在這個檔案中。&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;h3&gt;K3s node Scale up to 2&lt;span class="hx:absolute hx:-mt-20" id="k3s-node-scale-up-to-2"&gt;&lt;/span&gt;
&lt;a href="#k3s-node-scale-up-to-2" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;Scale up node&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;點選 Machine Pools -&amp;gt; +&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/BJdI7ppoa.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;ol start="2"&gt;
&lt;li&gt;檢查是否符合預期&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/ryfIV6Ti6.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h3&gt;K3s node Scale down to 1&lt;span class="hx:absolute hx:-mt-20" id="k3s-node-scale-down-to-1"&gt;&lt;/span&gt;
&lt;a href="#k3s-node-scale-down-to-1" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;Scale down node&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;點選 Machine Pools -&amp;gt; -&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/SyS1BT6sp.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;ol start="2"&gt;
&lt;li&gt;檢查是否符合預期&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/S1gCBapsa.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;Add Additional Disks&lt;span class="hx:absolute hx:-mt-20" id="add-additional-disks"&gt;&lt;/span&gt;
&lt;a href="#add-additional-disks" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;再新增一顆硬碟後，要先 Format 成 ext4 檔案系統，並重啟節點&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;sudo -i
mkfs.ext4 /dev/sdb
sudo reboot&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Go to the &lt;strong&gt;&lt;code&gt;Hosts&lt;/code&gt;&lt;/strong&gt; page.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;On the node you want to modify, click &lt;strong&gt;&lt;code&gt;⋮&lt;/code&gt;&lt;/strong&gt; &amp;gt; &lt;strong&gt;&lt;code&gt;Edit Config&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Select the &lt;strong&gt;&lt;code&gt;Storage&lt;/code&gt;&lt;/strong&gt; tab and click &lt;strong&gt;&lt;code&gt;Add Disk&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/SkXCHb8SZg.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Select an additional raw block device to add as an additional data volume.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The &lt;code&gt;Force Formatted&lt;/code&gt; option is required if the block device has never been force-formatted.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Last, you can click &lt;strong&gt;⋮&lt;/strong&gt; &amp;gt; &lt;strong&gt;Edit Config&lt;/strong&gt; again to check the newly added disk.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Resize Disk (虛擬化環境)&lt;span class="hx:absolute hx:-mt-20" id="resize-disk-虛擬化環境"&gt;&lt;/span&gt;
&lt;a href="#resize-disk-%e8%99%9b%e6%93%ac%e5%8c%96%e7%92%b0%e5%a2%83" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;先在虛擬化那層擴硬碟空間&lt;/li&gt;
&lt;li&gt;SSH 連線進那台 node，並切換成 root 使用者&lt;/li&gt;
&lt;li&gt;Resize Partitaion 大小&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# 確認 /var/lib/harvester/defaultdisk 在哪顆硬碟
$ df -h /var/lib/harvester/defaultdisk
Filesystem Size Used Avail Use% Mounted on
/dev/sda6 330G 30G 283G 10% /var/lib/harvester/defaultdisk
$ fdisk /dev/sda
Command (m for help): p
Disk /dev/sda: 712 GiB, 764504178688 bytes, 1493172224 sectors
Disk model: QEMU HARDDISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: C1C6588D-E0EB-42EB-A68B-3676181AED1E
Device Start End Sectors Size Type
/dev/sda1 2048 4095 2048 1M BIOS boot
/dev/sda2 4096 106495 102400 50M Linux filesystem
/dev/sda3 106496 16883711 16777216 8G Linux filesystem
/dev/sda4 16883712 48340991 31457280 15G Linux filesystem
/dev/sda5 48340992 369205247 320864256 153G Linux filesystem
/dev/sda6 369205248 1073739775 704534528 335.9G Linux filesystem
Command (m for help): d
Partition number (1-6, default 6):
Partition 6 has been deleted.
Command (m for help): n
Partition number (6-128, default 6):
First sector (369205248-1493172190, default 369205248):
Last sector, &amp;#43;/-sectors or &amp;#43;/-size{K,M,G,T,P} (369205248-1493172190, default 1493172190):
Created a new partition 6 of type &amp;#39;Linux filesystem&amp;#39; and of size 535.9 GiB.
Partition #6 contains a ext4 signature.
Do you want to remove the signature? [Y]es/[N]o: N
Command (m for help): p
Disk /dev/sda: 712 GiB, 764504178688 bytes, 1493172224 sectors
Disk model: QEMU HARDDISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: C1C6588D-E0EB-42EB-A68B-3676181AED1E
Device Start End Sectors Size Type
/dev/sda1 2048 4095 2048 1M BIOS boot
/dev/sda2 4096 106495 102400 50M Linux filesystem
/dev/sda3 106496 16883711 16777216 8G Linux filesystem
/dev/sda4 16883712 48340991 31457280 15G Linux filesystem
/dev/sda5 48340992 369205247 320864256 153G Linux filesystem
/dev/sda6 369205248 1493172190 1123966943 535.9G Linux filesystem
Command (m for help): w
The partition table has been altered.
Syncing disks.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="4"&gt;
&lt;li&gt;執行以下命令 Resize Longhorn 的 Filesystem&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ resize2fs -p /dev/sda6
$ df -h /var/lib/harvester/defaultdisk
Filesystem Size Used Avail Use% Mounted on
/dev/sda6 527G 30G 472G 6% /var/lib/harvester/defaultdisk&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="4"&gt;
&lt;li&gt;再進 Longhorn UI 看就會發現空間擴出來了&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Stop VM with cli&lt;span class="hx:absolute hx:-mt-20" id="stop-vm-with-cli"&gt;&lt;/span&gt;
&lt;a href="#stop-vm-with-cli" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# 1. SSH into harvester node
$ ssh rancher@x.x.x.x
# 2. Get VVirtual Machine Instance
$ kubectl get vmi
NAME AGE PHASE IP NODENAME READY
harbor 12m Running hh False
hehe 6m41s Running 10.52.0.180 hh True
k3-pool1-2d0bd15b-4fv96 14h Running 172.20.0.42 hh True
rancher 14h Running 172.20.0.41 hh True
# 3. Stop VM
$ virtctl stop harbor
VM harbor was scheduled to stop&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;參考文章&lt;span class="hx:absolute hx:-mt-20" id="參考文章"&gt;&lt;/span&gt;
&lt;a href="#%e5%8f%83%e8%80%83%e6%96%87%e7%ab%a0" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a
href="https://docs.harvesterhci.io/v1.2/install/requirements"target="_blank" rel="noopener"&gt;Hardware and Network Requirements - Harvester Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a
href="https://docs.harvesterhci.io/v1.2/install/usb-install"target="_blank" rel="noopener"&gt;USB Installation - Harvester Docs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>RKE2 設定 configmap 加密儲存在 etcd</title><link>https://blog.kubeantony.com/archive/rancher/rke2-%E8%A8%AD%E5%AE%9A-configmap-%E5%8A%A0%E5%AF%86%E5%84%B2%E5%AD%98%E5%9C%A8-etcd/</link><pubDate>Tue, 19 Aug 2025 04:00:56 +0800</pubDate><guid>https://blog.kubeantony.com/archive/rancher/rke2-%E8%A8%AD%E5%AE%9A-configmap-%E5%8A%A0%E5%AF%86%E5%84%B2%E5%AD%98%E5%9C%A8-etcd/</guid><description>
&lt;p&gt;RKE2 預設會把 secret 做加密儲存&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;檢視 RKE2 預設的加密設定檔，確認目前 secrets 的加密金鑰。(在 server node 的 OS 執行)&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;sudo cat /var/lib/rancher/rke2/server/cred/encryption-config.json | jq .&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行結果：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;{
&amp;#34;kind&amp;#34;: &amp;#34;EncryptionConfiguration&amp;#34;,
&amp;#34;apiVersion&amp;#34;: &amp;#34;apiserver.config.k8s.io/v1&amp;#34;,
&amp;#34;resources&amp;#34;: [
{
&amp;#34;resources&amp;#34;: [
&amp;#34;secrets&amp;#34;
],
&amp;#34;providers&amp;#34;: [
{
&amp;#34;aescbc&amp;#34;: {
&amp;#34;keys&amp;#34;: [
{
&amp;#34;name&amp;#34;: &amp;#34;aescbckey&amp;#34;,
&amp;#34;secret&amp;#34;: &amp;#34;jJaRyU/gBJNCteq3T1ibCYPgEqMA9GTQHJnqZ9jxmNo=&amp;#34;
}
]
}
},
{
&amp;#34;identity&amp;#34;: {}
}
]
}
]
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;建立一個新的自訂加密設定檔。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;重要：必須沿用舊的 secret 金鑰，並在 resources 區塊中新增 configmaps，表示也要對 ConfigMap 進行加密。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;sudo nano /etc/rancher/rke2/custom-encryption-config.yaml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;檔案內容如下：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;apiVersion: apiserver.config.k8s.io/v1
kind: EncryptionConfiguration
resources:
- resources:
- secrets
- configmaps
providers:
- aescbc:
keys:
- name: aescbckey
secret: &amp;#34;jJaRyU/gBJNCteq3T1ibCYPgEqMA9GTQHJnqZ9jxmNo=&amp;#34;
- identity: {}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;修改 RKE2 的主設定檔，讓 kube-apiserver 啟用我們自訂的加密設定。&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;encryption-provider-config&lt;/code&gt; 指向 Pod 內的設定檔路徑。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;kube-apiserver-extra-mount&lt;/code&gt; 則將主機上的設定檔掛載進 Pod 中。&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;sudo nano /etc/rancher/rke2/config.yaml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;新增的內容如下：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;kube-apiserver-arg:
- encryption-provider-config=/etc/kubernetes/enc/custom-encryption-config.yaml
kube-apiserver-extra-mount:
- /etc/rancher/rke2/:/etc/kubernetes/enc/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;重新啟動 RKE2 伺服器服務以載入新的設定&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;sudo systemctl restart rke2-server --no-block&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;追蹤 RKE2 的啟動日誌，確保服務正常重啟&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;sudo journalctl -u rke2-server.service -f&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;檢查 RKE2 服務的最終狀態，確認已成功運行。&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;sudo systemctl status rke2-server&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;正確執行結果：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;● rke2-server.service - Rancher Kubernetes Engine v2 (server)
Loaded: loaded (/usr/local/lib/systemd/system/rke2-server.service; enabled; preset: disabled)
Active: active (running) since Mon 2025-08-18 16:54:46 CST; 55min ago
...&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;如果是 HA 架構的 RKE2，則依照以上方法，依序將 server node 都做更改&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;直接從 etcd 讀取一個 ConfigMap 的原始資料。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;此時，因為還沒重新寫入，資料內容仍是可讀的明文，表示加密尚未作用於現有物件上。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;kubectl -n kube-system exec -it etcd-${$HOSTNAME} \
-- etcdctl \
--cert /var/lib/rancher/rke2/server/tls/etcd/server-client.crt \
--key /var/lib/rancher/rke2/server/tls/etcd/server-client.key \
--cacert /var/lib/rancher/rke2/server/tls/etcd/server-ca.crt \
--endpoints https://127.0.0.1:2379 \
get /registry/configmaps/kube-system/cluster-dns&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行結果：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;/registry/configmaps/kube-system/cluster-dns
k8s
v1 ConfigMap�
�
cluster-dns␦
kube-system&amp;#34;*$2647dbe1-1096-49ea-b25d-bb337ca550742�����y
rke2-supervisor@rke2-c1Update␦v����FieldsV1:&amp;lt;
:{&amp;#34;f:data&amp;#34;:{&amp;#34;.&amp;#34;:{},&amp;#34;f:clusterDNS&amp;#34;:{},&amp;#34;f:clusterDomain&amp;#34;:{}}}B
clusterDNS
10.43.0.10
cluster.local␦&amp;#34;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;重新寫入所有的 ConfigMap。這個指令會觸發 API Server 使用新的加密設定將資料加密後再存回 etcd。&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;kubectl get configmaps --all-namespaces -o json | kubectl replace -f -&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;再次從 etcd 讀取同一個 ConfigMap。這次，資料內容已變成亂碼，表示它已經成功被加密儲存。&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;kubectl -n kube-system exec -it etcd-${$HOSTNAME} \
-- etcdctl \
--cert /var/lib/rancher/rke2/server/tls/etcd/server-client.crt \
--key /var/lib/rancher/rke2/server/tls/etcd/server-client.key \
--cacert /var/lib/rancher/rke2/server/tls/etcd/server-ca.crt \
--endpoints https://127.0.0.1:2379 \
get /registry/configmaps/kube-system/cluster-dns&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行結果：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;/registry/configmaps/kube-system/cluster-dns
c���V��6ob��E␦���S�T!\��ew�X ����M���
��g����D���1�G@4��`c�F�R���x��qA��
V,eM2��J���A�ǴW��H�;E&amp;lt;�=XwĔ�A�f&amp;gt;$gC��&amp;#43;��\�T_��;@�7޾�c�0���^�:)
r)��.�~�ºJ���edt�Va&amp;lt;��L�2���m�v@��Շbe��j��D���$7␦YM�#zV�
߻ˊב�H�5dp|)��̿�1{�lʚ�dĢ����;4�K��쒷��&amp;#43;E޴��␦vN� ���;��?
�#�k{�O�@G�&amp;#34;�&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>kubectl Install Longhorn on community Kubernetes</title><link>https://blog.kubeantony.com/archive/rancher/kubectl-install-longhorn-on-community-kubernetes/</link><pubDate>Thu, 07 Aug 2025 08:11:14 +0800</pubDate><guid>https://blog.kubeantony.com/archive/rancher/kubectl-install-longhorn-on-community-kubernetes/</guid><description>
&lt;style&gt;
.indent-title-1{
margin-left: 1em;
}
.indent-title-2{
margin-left: 2em;
}
.indent-title-3{
margin-left: 3em;
}
&lt;/style&gt;
&lt;h1&gt;Preface&lt;/h1&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;本篇文章會介紹以下內容&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;如何透過 kubectl 安裝 Longhorn&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;可以透過點擊展開以下目錄，選擇想看的內容，跳轉至特定章節&lt;/p&gt;
&lt;/div&gt;
&lt;h1&gt;Install Longhorn&lt;/h1&gt;&lt;h2&gt;Prerequisites&lt;span class="hx:absolute hx:-mt-20" id="prerequisites"&gt;&lt;/span&gt;
&lt;a href="#prerequisites" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Each node in the Kubernetes cluster where Longhorn is installed must fulfill the following requirements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A container runtime compatible with Kubernetes (Docker v1.13+, containerd v1.3.7+, etc.)&lt;/li&gt;
&lt;li&gt;Kubernetes &amp;gt;= v1.25&lt;/li&gt;
&lt;li&gt;&lt;code&gt;open-iscsi&lt;/code&gt; is installed, and the &lt;code&gt;iscsid&lt;/code&gt; daemon is running on all the nodes. This is necessary, since Longhorn relies on &lt;code&gt;iscsiadm&lt;/code&gt; on the host to provide persistent volumes to Kubernetes. For help installing &lt;code&gt;open-iscsi&lt;/code&gt;, refer to this section.&lt;/li&gt;
&lt;li&gt;RWX support requires that each node has a NFSv4 client installed.
&lt;ul&gt;
&lt;li&gt;For installing a NFSv4 client, refer to this section.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The host filesystem supports the &lt;code&gt;file extents&lt;/code&gt; feature to store the data. Currently we support:
&lt;ul&gt;
&lt;li&gt;ext4&lt;/li&gt;
&lt;li&gt;XFS&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bash&lt;/code&gt;, &lt;code&gt;curl&lt;/code&gt;, &lt;code&gt;findmnt&lt;/code&gt;, &lt;code&gt;grep&lt;/code&gt;, &lt;code&gt;awk&lt;/code&gt;, &lt;code&gt;blkid&lt;/code&gt;, &lt;code&gt;lsblk&lt;/code&gt; must be installed.&lt;/li&gt;
&lt;li&gt;Mount propagation must be enabled.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The Longhorn workloads must be able to run as root in order for Longhorn to be deployed and operated properly.&lt;/p&gt;
&lt;p&gt;This script can be used to check the Longhorn environment for potential issues.&lt;/p&gt;
&lt;h2&gt;環境準備&lt;span class="hx:absolute hx:-mt-20" id="環境準備"&gt;&lt;/span&gt;
&lt;a href="#%e7%92%b0%e5%a2%83%e6%ba%96%e5%82%99" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;在每一台 Node 上，準備以下動作&lt;span class="hx:absolute hx:-mt-20" id="在每一台-node-上準備以下動作"&gt;&lt;/span&gt;
&lt;a href="#%e5%9c%a8%e6%af%8f%e4%b8%80%e5%8f%b0-node-%e4%b8%8a%e6%ba%96%e5%82%99%e4%bb%a5%e4%b8%8b%e5%8b%95%e4%bd%9c" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# 以 Ubuntu Server 24.04.2 LTS 為例
$ sudo tee /etc/modules-load.d/dm-crypt.conf &amp;lt;&amp;lt;EOF
dm-crypt
EOF
$ sudo modprobe dm-crypt
$ lsmod | grep dm_crypt
dm_crypt 65536 0
$ sudo apt-get update; sudo apt-get install -y nfs-common
$ sudo systemctl enable --now iscsid.service&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;檢查環境是否準備完畢&lt;span class="hx:absolute hx:-mt-20" id="檢查環境是否準備完畢"&gt;&lt;/span&gt;
&lt;a href="#%e6%aa%a2%e6%9f%a5%e7%92%b0%e5%a2%83%e6%98%af%e5%90%a6%e6%ba%96%e5%82%99%e5%ae%8c%e7%95%a2" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;在 K8s 管理節點執行&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ curl -sSfL -o longhornctl https://github.com/longhorn/cli/releases/download/v1.9.1/longhornctl-linux-amd64
$ chmod &amp;#43;x longhornctl
$ ./longhornctl --kube-config ~/.kube/config check preflight&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行結果&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;INFO[2025-08-07T16:10:18&amp;#43;08:00] Initializing preflight checker
INFO[2025-08-07T16:10:18&amp;#43;08:00] Cleaning up preflight checker
INFO[2025-08-07T16:10:18&amp;#43;08:00] Running preflight checker
INFO[2025-08-07T16:10:21&amp;#43;08:00] Retrieved preflight checker result:
w1:
info:
- Kube DNS &amp;#34;coredns&amp;#34; is set with 2 replicas and 2 ready replicas
- Service iscsid is running
- NFS4 is supported
- Package nfs-common is installed
- Package open-iscsi is installed
- Package cryptsetup is installed
- Package dmsetup is installed
- Module dm_crypt is loaded
warn:
- multipathd.service is running. Please refer to https://longhorn.io/kb/troubleshooting-volume-with-multipath/ for more information.
w2:
info:
- Kube DNS &amp;#34;coredns&amp;#34; is set with 2 replicas and 2 ready replicas
- Service iscsid is running
- NFS4 is supported
- Package nfs-common is installed
- Package open-iscsi is installed
- Package cryptsetup is installed
- Package dmsetup is installed
- Module dm_crypt is loaded
warn:
- multipathd.service is running. Please refer to https://longhorn.io/kb/troubleshooting-volume-with-multipath/ for more information.
INFO[2025-08-07T16:10:21&amp;#43;08:00] Cleaning up preflight checker
INFO[2025-08-07T16:10:21&amp;#43;08:00] Completed preflight checker&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h1&gt;透過 kubectl 安裝 Longhorn 1.9.1&lt;/h1&gt;&lt;div class="indent-title-1"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;kubectl apply -f https://raw.githubusercontent.com/longhorn/longhorn/v1.9.1/deploy/longhorn.yaml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;檢視 Longhorn Pod 運作狀態&lt;span class="hx:absolute hx:-mt-20" id="檢視-longhorn-pod-運作狀態"&gt;&lt;/span&gt;
&lt;a href="#%e6%aa%a2%e8%a6%96-longhorn-pod-%e9%81%8b%e4%bd%9c%e7%8b%80%e6%85%8b" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="indent-title-1"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;kubectl -n longhorn-system get pods&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;NAME READY STATUS RESTARTS AGE
csi-attacher-6cc66dfc7-5qm6s 1/1 Running 0 18m
csi-attacher-6cc66dfc7-jswj7 1/1 Running 0 18m
csi-attacher-6cc66dfc7-ml5m8 1/1 Running 0 18m
csi-provisioner-bf9f5dcf-5hhmt 1/1 Running 0 18m
csi-provisioner-bf9f5dcf-fckwx 1/1 Running 0 18m
csi-provisioner-bf9f5dcf-qz9nb 1/1 Running 0 18m
csi-resizer-79f94cf664-2jwdg 1/1 Running 0 18m
csi-resizer-79f94cf664-ckbw6 1/1 Running 0 18m
csi-resizer-79f94cf664-gsnbw 1/1 Running 0 18m
csi-snapshotter-55f6bf5866-gsn25 1/1 Running 0 18m
csi-snapshotter-55f6bf5866-h748p 1/1 Running 0 18m
csi-snapshotter-55f6bf5866-zqsj9 1/1 Running 0 18m
engine-image-ei-b4bcf0a5-428mk 1/1 Running 0 18m
engine-image-ei-b4bcf0a5-dzp78 1/1 Running 0 18m
instance-manager-63dc7de3e0e5ce66bd8441f84edf0891 1/1 Running 0 18m
instance-manager-9da309f58eb388df53fad1a2879e385e 1/1 Running 0 18m
longhorn-csi-plugin-bkckd 3/3 Running 0 18m
longhorn-csi-plugin-gt4bh 3/3 Running 0 18m
longhorn-driver-deployer-6d5c74866f-mtjbf 1/1 Running 0 19m
longhorn-manager-cx5qj 2/2 Running 0 19m
longhorn-manager-wt52g 2/2 Running 0 19m
longhorn-ui-6cb46c8ff9-bjklc 1/1 Running 0 19m
longhorn-ui-6cb46c8ff9-pbjvr 1/1 Running 0 19m&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;檢視 Longhorn service&lt;span class="hx:absolute hx:-mt-20" id="檢視-longhorn-service"&gt;&lt;/span&gt;
&lt;a href="#%e6%aa%a2%e8%a6%96-longhorn-service" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="indent-title-1"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;kubectl -n longhorn-system get svc&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
longhorn-admission-webhook ClusterIP 10.96.245.41 &amp;lt;none&amp;gt; 9502/TCP 19m
longhorn-backend ClusterIP 10.96.37.202 &amp;lt;none&amp;gt; 9500/TCP 19m
longhorn-conversion-webhook ClusterIP 10.96.168.121 &amp;lt;none&amp;gt; 9501/TCP 19m
longhorn-frontend ClusterIP 10.96.188.223 &amp;lt;none&amp;gt; 80/TCP 19m
longhorn-recovery-backend ClusterIP 10.96.235.252 &amp;lt;none&amp;gt; 9503/TCP 19m&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;longhorn-frontend&lt;/code&gt; 是 &lt;code&gt;Longhorn-ui-*&lt;/code&gt; Pod 對應的的 Service&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;Enable CSI Snapshot Support&lt;span class="hx:absolute hx:-mt-20" id="enable-csi-snapshot-support"&gt;&lt;/span&gt;
&lt;a href="#enable-csi-snapshot-support" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;安裝 Snapshot CRDs&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# Download the Snapshot CRDs files
curl -L https://api.github.com/repos/kubernetes-csi/external-snapshotter/tarball/v8.3.0 \
| tar xz --strip-components=3 --wildcards &amp;#39;*/client/config/crd/*&amp;#39;
# Create
kubectl create -k crd&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;Longhorn v1.9.1 uses CSI external-snapshotter v8.3.0&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;安裝 Snapshot Controller&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# Download the files
curl -L https://api.github.com/repos/kubernetes-csi/external-snapshotter/tarball/v8.3.0 \
| tar xz --strip-components=3 --wildcards &amp;#39;*/deploy/kubernetes/snapshot-controller/*&amp;#39;
kubectl create -k snapshot-controller/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;Longhorn v1.9.1 uses CSI external-snapshotter v8.3.0&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;新增 Default VolumeSnapshotClass&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;cat &amp;gt; volumeSnapshotClass.yaml &amp;lt;&amp;lt; EOF
kind: VolumeSnapshotClass
apiVersion: snapshot.storage.k8s.io/v1
metadata:
name: longhorn
driver: driver.longhorn.io
deletionPolicy: Delete
EOF
kubectl apply -f volumeSnapshotClass.yaml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Access Longhorn UI&lt;span class="hx:absolute hx:-mt-20" id="access-longhorn-ui"&gt;&lt;/span&gt;
&lt;a href="#access-longhorn-ui" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="indent-title-1"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;http://120.96.143.219:30001&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/HJ6W7fT92.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;參考文章&lt;span class="hx:absolute hx:-mt-20" id="參考文章"&gt;&lt;/span&gt;
&lt;a href="#%e5%8f%83%e8%80%83%e6%96%87%e7%ab%a0" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a
href="https://longhorn.io/docs/1.5.1/deploy/install/#installation-requirements"target="_blank" rel="noopener"&gt;Installation Requirements - Longhorn docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a
href="https://longhorn.io/docs/1.5.1/deploy/install/install-with-kubectl/"target="_blank" rel="noopener"&gt;Install with Kubectl - Longhorn docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a
href="https://github.com/longhorn/longhorn/blob/master/deploy/longhorn-images.txt"target="_blank" rel="noopener"&gt;Deploy longhorn-images.txt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a
href="https://github.com/longhorn/longhorn/blob/master/deploy/longhorn.yaml"target="_blank" rel="noopener"&gt;Deploy longhorn.yaml&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>更換 RKE2 和 K3s 叢集系統憑證的有效期限</title><link>https://blog.kubeantony.com/archive/rancher/%E6%9B%B4%E6%8F%9B-rke2-%E5%92%8C-k3s-%E5%8F%A2%E9%9B%86%E7%B3%BB%E7%B5%B1%E6%86%91%E8%AD%89%E7%9A%84%E6%9C%89%E6%95%88%E6%9C%9F%E9%99%90/</link><pubDate>Tue, 27 May 2025 01:37:50 +0800</pubDate><guid>https://blog.kubeantony.com/archive/rancher/%E6%9B%B4%E6%8F%9B-rke2-%E5%92%8C-k3s-%E5%8F%A2%E9%9B%86%E7%B3%BB%E7%B5%B1%E6%86%91%E8%AD%89%E7%9A%84%E6%9C%89%E6%95%88%E6%9C%9F%E9%99%90/</guid><description>
&lt;h2&gt;RKE2&lt;span class="hx:absolute hx:-mt-20" id="rke2"&gt;&lt;/span&gt;
&lt;a href="#rke2" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;Step1: ssh 連線至 server(Control-plane/etcd) node&lt;span class="hx:absolute hx:-mt-20" id="step1-ssh-連線至-servercontrol-planeetcd-node"&gt;&lt;/span&gt;
&lt;a href="#step1-ssh-%e9%80%a3%e7%b7%9a%e8%87%b3-servercontrol-planeetcd-node" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;ssh &amp;lt;user&amp;gt;@&amp;lt;control-plane node ip&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;並切換成 root 使用者&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;su - root&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;Step2: 停止 rke2-server service&lt;span class="hx:absolute hx:-mt-20" id="step2-停止-rke2-server-service"&gt;&lt;/span&gt;
&lt;a href="#step2-%e5%81%9c%e6%ad%a2-rke2-server-service" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;systemctl stop rke2-server.service&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;Step3: 設定 certificate validity period 的環境變數&lt;span class="hx:absolute hx:-mt-20" id="step3-設定-certificate-validity-period-的環境變數"&gt;&lt;/span&gt;
&lt;a href="#step3-%e8%a8%ad%e5%ae%9a-certificate-validity-period-%e7%9a%84%e7%92%b0%e5%a2%83%e8%ae%8a%e6%95%b8" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;以下變數將設定 RKE2 叢集內部的所有系統核心服務(kube-apiserver, etcd, kube-scheduler, kube-controller-manager, kubelet, kube-proxy&amp;hellip;等) 的憑證有限期限為 10 年&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;cat &amp;lt;&amp;lt; EOF &amp;gt; /etc/default/rke2-server
CATTLE_NEW_SIGNED_CERT_EXPIRATION_DAYS=3650
EOF&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;請注意：上述變數的值必須是字串，表示與到期天數相對應的無符號整數（即 X509 &amp;ldquo;NotAfter&amp;rdquo; 的值）。&lt;/p&gt;
&lt;h3&gt;Step4: 手動更新叢集中的 TLS 憑證&lt;span class="hx:absolute hx:-mt-20" id="step4-手動更新叢集中的-tls-憑證"&gt;&lt;/span&gt;
&lt;a href="#step4-%e6%89%8b%e5%8b%95%e6%9b%b4%e6%96%b0%e5%8f%a2%e9%9b%86%e4%b8%ad%e7%9a%84-tls-%e6%86%91%e8%ad%89" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;rke2 certificate rotate&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The following certificates can be rotated:
&lt;code&gt;admin&lt;/code&gt;, &lt;code&gt;api-server&lt;/code&gt;, &lt;code&gt;controller-manager&lt;/code&gt;, &lt;code&gt;scheduler&lt;/code&gt;, &lt;code&gt;rke2-controller&lt;/code&gt;, &lt;code&gt;rke2-server&lt;/code&gt;, &lt;code&gt;cloud-controller&lt;/code&gt;, &lt;code&gt;etcd&lt;/code&gt;, &lt;code&gt;auth-proxy&lt;/code&gt;, &lt;code&gt;kubelet&lt;/code&gt;, &lt;code&gt;kube-proxy&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Step5: 起動 rke2-server service&lt;span class="hx:absolute hx:-mt-20" id="step5-起動-rke2-server-service"&gt;&lt;/span&gt;
&lt;a href="#step5-%e8%b5%b7%e5%8b%95-rke2-server-service" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;systemctl start rke2-server.service&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;Step6: 檢查 rke2-server 上系統的所有憑證有限期限&lt;span class="hx:absolute hx:-mt-20" id="step6-檢查-rke2-server-上系統的所有憑證有限期限"&gt;&lt;/span&gt;
&lt;a href="#step6-%e6%aa%a2%e6%9f%a5-rke2-server-%e4%b8%8a%e7%b3%bb%e7%b5%b1%e7%9a%84%e6%89%80%e6%9c%89%e6%86%91%e8%ad%89%e6%9c%89%e9%99%90%e6%9c%9f%e9%99%90" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;rke2 certificate check&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行結果 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;INFO[0000] Server detected, checking agent and server certificates
INFO[0000] Checking certificates for etcd
INFO[0000] /var/lib/rancher/rke2/server/tls/etcd/client.crt: certificate CN=etcd-client is ok, expires at 2035-05-24T09:44:16Z
INFO[0000] /var/lib/rancher/rke2/server/tls/etcd/client.crt: certificate CN=etcd-server-ca@1736240037 is ok, expires at 2035-01-05T08:53:57Z
INFO[0000] /var/lib/rancher/rke2/server/tls/etcd/server-client.crt: certificate CN=etcd-server is ok, expires at 2035-05-24T09:44:16Z
INFO[0000] /var/lib/rancher/rke2/server/tls/etcd/server-client.crt: certificate CN=etcd-server-ca@1736240037 is ok, expires at 2035-01-05T08:53:57Z
INFO[0000] /var/lib/rancher/rke2/server/tls/etcd/peer-server-client.crt: certificate CN=etcd-peer is ok, expires at 2035-05-24T09:44:16Z
INFO[0000] /var/lib/rancher/rke2/server/tls/etcd/peer-server-client.crt: certificate CN=etcd-peer-ca@1736240037 is ok, expires at 2035-01-05T08:53:57Z
INFO[0000] Checking certificates for kube-proxy
INFO[0000] /var/lib/rancher/rke2/server/tls/client-kube-proxy.crt: certificate CN=system:kube-proxy is ok, expires at 2035-05-24T09:44:16Z
INFO[0000] /var/lib/rancher/rke2/server/tls/client-kube-proxy.crt: certificate CN=rke2-client-ca@1736240037 is ok, expires at 2035-01-05T08:53:57Z
INFO[0000] /var/lib/rancher/rke2/agent/client-kube-proxy.crt: certificate CN=system:kube-proxy is ok, expires at 2035-05-24T09:44:16Z
INFO[0000] /var/lib/rancher/rke2/agent/client-kube-proxy.crt: certificate CN=rke2-client-ca@1736240037 is ok, expires at 2035-01-05T08:53:57Z
INFO[0000] Checking certificates for kubelet
INFO[0000] /var/lib/rancher/rke2/agent/client-kubelet.crt: certificate CN=system:node:admin-rancher,O=system:nodes is ok, expires at 2035-05-24T09:44:17Z
INFO[0000] /var/lib/rancher/rke2/agent/client-kubelet.crt: certificate CN=rke2-client-ca@1736240037 is ok, expires at 2035-01-05T08:53:57Z
INFO[0000] /var/lib/rancher/rke2/agent/serving-kubelet.crt: certificate CN=admin-rancher is ok, expires at 2035-05-24T09:44:17Z
INFO[0000] /var/lib/rancher/rke2/agent/serving-kubelet.crt: certificate CN=rke2-server-ca@1736240037 is ok, expires at 2035-01-05T08:53:57Z
INFO[0000] Checking certificates for rke2-controller
INFO[0000] /var/lib/rancher/rke2/server/tls/client-rke2-controller.crt: certificate CN=system:rke2-controller is ok, expires at 2035-05-24T09:44:16Z
INFO[0000] /var/lib/rancher/rke2/server/tls/client-rke2-controller.crt: certificate CN=rke2-client-ca@1736240037 is ok, expires at 2035-01-05T08:53:57Z
INFO[0000] /var/lib/rancher/rke2/agent/client-rke2-controller.crt: certificate CN=system:rke2-controller is ok, expires at 2035-05-24T09:44:16Z
INFO[0000] /var/lib/rancher/rke2/agent/client-rke2-controller.crt: certificate CN=rke2-client-ca@1736240037 is ok, expires at 2035-01-05T08:53:57Z
INFO[0000] Checking certificates for api-server
INFO[0000] /var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt: certificate CN=system:apiserver,O=system:masters is ok, expires at 2035-05-24T09:44:16Z
INFO[0000] /var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt: certificate CN=rke2-client-ca@1736240037 is ok, expires at 2035-01-05T08:53:57Z
INFO[0000] /var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt: certificate CN=kube-apiserver is ok, expires at 2035-05-24T09:44:16Z
INFO[0000] /var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt: certificate CN=rke2-server-ca@1736240037 is ok, expires at 2035-01-05T08:53:57Z
INFO[0000] Checking certificates for admin
INFO[0000] /var/lib/rancher/rke2/server/tls/client-admin.crt: certificate CN=system:admin,O=system:masters is ok, expires at 2035-05-24T09:44:16Z
INFO[0000] /var/lib/rancher/rke2/server/tls/client-admin.crt: certificate CN=rke2-client-ca@1736240037 is ok, expires at 2035-01-05T08:53:57Z
INFO[0000] Checking certificates for auth-proxy
INFO[0000] /var/lib/rancher/rke2/server/tls/client-auth-proxy.crt: certificate CN=system:auth-proxy is ok, expires at 2035-05-24T09:44:16Z
INFO[0000] /var/lib/rancher/rke2/server/tls/client-auth-proxy.crt: certificate CN=rke2-request-header-ca@1736240037 is ok, expires at 2035-01-05T08:53:57Z
INFO[0000] Checking certificates for cloud-controller
INFO[0000] /var/lib/rancher/rke2/server/tls/client-rke2-cloud-controller.crt: certificate CN=rke2-cloud-controller-manager is ok, expires at 2035-05-24T09:44:16Z
INFO[0000] /var/lib/rancher/rke2/server/tls/client-rke2-cloud-controller.crt: certificate CN=rke2-client-ca@1736240037 is ok, expires at 2035-01-05T08:53:57Z
INFO[0000] Checking certificates for controller-manager
INFO[0000] /var/lib/rancher/rke2/server/tls/client-controller.crt: certificate CN=system:kube-controller-manager is ok, expires at 2035-05-24T09:44:16Z
INFO[0000] /var/lib/rancher/rke2/server/tls/client-controller.crt: certificate CN=rke2-client-ca@1736240037 is ok, expires at 2035-01-05T08:53:57Z
INFO[0000] Checking certificates for scheduler
INFO[0000] /var/lib/rancher/rke2/server/tls/client-scheduler.crt: certificate CN=system:kube-scheduler is ok, expires at 2035-05-24T09:44:16Z
INFO[0000] /var/lib/rancher/rke2/server/tls/client-scheduler.crt: certificate CN=rke2-client-ca@1736240037 is ok, expires at 2035-01-05T08:53:57Z
INFO[0000] Checking certificates for supervisor
INFO[0000] /var/lib/rancher/rke2/server/tls/client-supervisor.crt: certificate CN=system:rke2-supervisor,O=system:masters is ok, expires at 2035-05-24T09:44:16Z
INFO[0000] /var/lib/rancher/rke2/server/tls/client-supervisor.crt: certificate CN=rke2-client-ca@1736240037 is ok, expires at 2035-01-05T08:53:57Z&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;Step7: 再去下一台 Control-plane/etcd node 執行 Step 1 ~ 5 的操作步驟&lt;span class="hx:absolute hx:-mt-20" id="step7-再去下一台-control-planeetcd-node-執行-step-1--5-的操作步驟"&gt;&lt;/span&gt;
&lt;a href="#step7-%e5%86%8d%e5%8e%bb%e4%b8%8b%e4%b8%80%e5%8f%b0-control-planeetcd-node-%e5%9f%b7%e8%a1%8c-step-1--5-%e7%9a%84%e6%93%8d%e4%bd%9c%e6%ad%a5%e9%a9%9f" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;hr&gt;
&lt;h2&gt;K3s&lt;span class="hx:absolute hx:-mt-20" id="k3s"&gt;&lt;/span&gt;
&lt;a href="#k3s" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;Step1: ssh 連線至 K3s node&lt;span class="hx:absolute hx:-mt-20" id="step1-ssh-連線至-k3s-node"&gt;&lt;/span&gt;
&lt;a href="#step1-ssh-%e9%80%a3%e7%b7%9a%e8%87%b3-k3s-node" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;ssh &amp;lt;user&amp;gt;@&amp;lt;node ip&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;並切換成 root 使用者&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;su - root&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;Step2: 停止 k3s service&lt;span class="hx:absolute hx:-mt-20" id="step2-停止-k3s-service"&gt;&lt;/span&gt;
&lt;a href="#step2-%e5%81%9c%e6%ad%a2-k3s-service" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;systemctl stop k3s.service&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;Step3: 設定 certificate validity period 的環境變數&lt;span class="hx:absolute hx:-mt-20" id="step3-設定-certificate-validity-period-的環境變數-1"&gt;&lt;/span&gt;
&lt;a href="#step3-%e8%a8%ad%e5%ae%9a-certificate-validity-period-%e7%9a%84%e7%92%b0%e5%a2%83%e8%ae%8a%e6%95%b8-1" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;以下變數將設定 K3s 叢集內部的所有系統核心服務(kube-apiserver, etcd, kube-scheduler, kube-controller-manager, kubelet, kube-proxy&amp;hellip;等) 的憑證有限期限為 10 年&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;cat &amp;lt;&amp;lt; EOF &amp;gt; /etc/default/k3s
CATTLE_NEW_SIGNED_CERT_EXPIRATION_DAYS=3650
EOF&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;請注意：上述變數的值必須是字串，表示與到期天數相對應的無符號整數（即 X509 &amp;ldquo;NotAfter&amp;rdquo; 的值）。&lt;/p&gt;
&lt;h3&gt;Step4: 手動更新叢集中的 TLS 憑證&lt;span class="hx:absolute hx:-mt-20" id="step4-手動更新叢集中的-tls-憑證-1"&gt;&lt;/span&gt;
&lt;a href="#step4-%e6%89%8b%e5%8b%95%e6%9b%b4%e6%96%b0%e5%8f%a2%e9%9b%86%e4%b8%ad%e7%9a%84-tls-%e6%86%91%e8%ad%89-1" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;k3s certificate rotate&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The following certificates can be rotated: &lt;code&gt;admin&lt;/code&gt;, &lt;code&gt;api-server&lt;/code&gt;, &lt;code&gt;controller-manager&lt;/code&gt;, &lt;code&gt;scheduler&lt;/code&gt;, &lt;code&gt;k3s-controller&lt;/code&gt;, &lt;code&gt;k3s-server&lt;/code&gt;, &lt;code&gt;cloud-controller&lt;/code&gt;, &lt;code&gt;etcd&lt;/code&gt;, &lt;code&gt;auth-proxy&lt;/code&gt;, &lt;code&gt;kubelet&lt;/code&gt;, &lt;code&gt;kube-proxy&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Step5: 起動 k3s service&lt;span class="hx:absolute hx:-mt-20" id="step5-起動-k3s-service"&gt;&lt;/span&gt;
&lt;a href="#step5-%e8%b5%b7%e5%8b%95-k3s-service" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;systemctl start k3s.service&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;Step6: 檢查 k3s 上系統的所有憑證有限期限&lt;span class="hx:absolute hx:-mt-20" id="step6-檢查-k3s-上系統的所有憑證有限期限"&gt;&lt;/span&gt;
&lt;a href="#step6-%e6%aa%a2%e6%9f%a5-k3s-%e4%b8%8a%e7%b3%bb%e7%b5%b1%e7%9a%84%e6%89%80%e6%9c%89%e6%86%91%e8%ad%89%e6%9c%89%e9%99%90%e6%9c%9f%e9%99%90" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;k3s certificate check&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行結果 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;INFO[0000] Server detected, checking agent and server certificates
INFO[0000] Checking certificates for etcd
INFO[0000] /var/lib/rancher/rke2/server/tls/etcd/client.crt: certificate CN=etcd-client is ok, expires at 2035-05-24T09:44:16Z
INFO[0000] /var/lib/rancher/rke2/server/tls/etcd/client.crt: certificate CN=etcd-server-ca@1736240037 is ok, expires at 2035-01-05T08:53:57Z
INFO[0000] /var/lib/rancher/rke2/server/tls/etcd/server-client.crt: certificate CN=etcd-server is ok, expires at 2035-05-24T09:44:16Z
INFO[0000] /var/lib/rancher/rke2/server/tls/etcd/server-client.crt: certificate CN=etcd-server-ca@1736240037 is ok, expires at 2035-01-05T08:53:57Z
INFO[0000] /var/lib/rancher/rke2/server/tls/etcd/peer-server-client.crt: certificate CN=etcd-peer is ok, expires at 2035-05-24T09:44:16Z
INFO[0000] /var/lib/rancher/rke2/server/tls/etcd/peer-server-client.crt: certificate CN=etcd-peer-ca@1736240037 is ok, expires at 2035-01-05T08:53:57Z
INFO[0000] Checking certificates for kube-proxy
INFO[0000] /var/lib/rancher/rke2/server/tls/client-kube-proxy.crt: certificate CN=system:kube-proxy is ok, expires at 2035-05-24T09:44:16Z
INFO[0000] /var/lib/rancher/rke2/server/tls/client-kube-proxy.crt: certificate CN=rke2-client-ca@1736240037 is ok, expires at 2035-01-05T08:53:57Z
INFO[0000] /var/lib/rancher/rke2/agent/client-kube-proxy.crt: certificate CN=system:kube-proxy is ok, expires at 2035-05-24T09:44:16Z
INFO[0000] /var/lib/rancher/rke2/agent/client-kube-proxy.crt: certificate CN=rke2-client-ca@1736240037 is ok, expires at 2035-01-05T08:53:57Z
INFO[0000] Checking certificates for kubelet
INFO[0000] /var/lib/rancher/rke2/agent/client-kubelet.crt: certificate CN=system:node:admin-rancher,O=system:nodes is ok, expires at 2035-05-24T09:44:17Z
INFO[0000] /var/lib/rancher/rke2/agent/client-kubelet.crt: certificate CN=rke2-client-ca@1736240037 is ok, expires at 2035-01-05T08:53:57Z
INFO[0000] /var/lib/rancher/rke2/agent/serving-kubelet.crt: certificate CN=admin-rancher is ok, expires at 2035-05-24T09:44:17Z
INFO[0000] /var/lib/rancher/rke2/agent/serving-kubelet.crt: certificate CN=rke2-server-ca@1736240037 is ok, expires at 2035-01-05T08:53:57Z
INFO[0000] Checking certificates for rke2-controller
INFO[0000] /var/lib/rancher/rke2/server/tls/client-rke2-controller.crt: certificate CN=system:rke2-controller is ok, expires at 2035-05-24T09:44:16Z
INFO[0000] /var/lib/rancher/rke2/server/tls/client-rke2-controller.crt: certificate CN=rke2-client-ca@1736240037 is ok, expires at 2035-01-05T08:53:57Z
INFO[0000] /var/lib/rancher/rke2/agent/client-rke2-controller.crt: certificate CN=system:rke2-controller is ok, expires at 2035-05-24T09:44:16Z
INFO[0000] /var/lib/rancher/rke2/agent/client-rke2-controller.crt: certificate CN=rke2-client-ca@1736240037 is ok, expires at 2035-01-05T08:53:57Z
INFO[0000] Checking certificates for api-server
INFO[0000] /var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt: certificate CN=system:apiserver,O=system:masters is ok, expires at 2035-05-24T09:44:16Z
INFO[0000] /var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt: certificate CN=rke2-client-ca@1736240037 is ok, expires at 2035-01-05T08:53:57Z
INFO[0000] /var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt: certificate CN=kube-apiserver is ok, expires at 2035-05-24T09:44:16Z
INFO[0000] /var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt: certificate CN=rke2-server-ca@1736240037 is ok, expires at 2035-01-05T08:53:57Z
INFO[0000] Checking certificates for admin
INFO[0000] /var/lib/rancher/rke2/server/tls/client-admin.crt: certificate CN=system:admin,O=system:masters is ok, expires at 2035-05-24T09:44:16Z
INFO[0000] /var/lib/rancher/rke2/server/tls/client-admin.crt: certificate CN=rke2-client-ca@1736240037 is ok, expires at 2035-01-05T08:53:57Z
INFO[0000] Checking certificates for auth-proxy
INFO[0000] /var/lib/rancher/rke2/server/tls/client-auth-proxy.crt: certificate CN=system:auth-proxy is ok, expires at 2035-05-24T09:44:16Z
INFO[0000] /var/lib/rancher/rke2/server/tls/client-auth-proxy.crt: certificate CN=rke2-request-header-ca@1736240037 is ok, expires at 2035-01-05T08:53:57Z
INFO[0000] Checking certificates for cloud-controller
INFO[0000] /var/lib/rancher/rke2/server/tls/client-rke2-cloud-controller.crt: certificate CN=rke2-cloud-controller-manager is ok, expires at 2035-05-24T09:44:16Z
INFO[0000] /var/lib/rancher/rke2/server/tls/client-rke2-cloud-controller.crt: certificate CN=rke2-client-ca@1736240037 is ok, expires at 2035-01-05T08:53:57Z
INFO[0000] Checking certificates for controller-manager
INFO[0000] /var/lib/rancher/rke2/server/tls/client-controller.crt: certificate CN=system:kube-controller-manager is ok, expires at 2035-05-24T09:44:16Z
INFO[0000] /var/lib/rancher/rke2/server/tls/client-controller.crt: certificate CN=rke2-client-ca@1736240037 is ok, expires at 2035-01-05T08:53:57Z
INFO[0000] Checking certificates for scheduler
INFO[0000] /var/lib/rancher/rke2/server/tls/client-scheduler.crt: certificate CN=system:kube-scheduler is ok, expires at 2035-05-24T09:44:16Z
INFO[0000] /var/lib/rancher/rke2/server/tls/client-scheduler.crt: certificate CN=rke2-client-ca@1736240037 is ok, expires at 2035-01-05T08:53:57Z
INFO[0000] Checking certificates for supervisor
INFO[0000] /var/lib/rancher/rke2/server/tls/client-supervisor.crt: certificate CN=system:rke2-supervisor,O=system:masters is ok, expires at 2035-05-24T09:44:16Z
INFO[0000] /var/lib/rancher/rke2/server/tls/client-supervisor.crt: certificate CN=rke2-client-ca@1736240037 is ok, expires at 2035-01-05T08:53:57Z&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;Step7: 再去下一台 node 執行 Step 1 ~ 5 的操作步驟&lt;span class="hx:absolute hx:-mt-20" id="step7-再去下一台-node-執行-step-1--5-的操作步驟"&gt;&lt;/span&gt;
&lt;a href="#step7-%e5%86%8d%e5%8e%bb%e4%b8%8b%e4%b8%80%e5%8f%b0-node-%e5%9f%b7%e8%a1%8c-step-1--5-%e7%9a%84%e6%93%8d%e4%bd%9c%e6%ad%a5%e9%a9%9f" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;</description></item><item><title>Rancher CD with Azure Devops</title><link>https://blog.kubeantony.com/archive/rancher/rancher-cd-with-azure-devops/</link><pubDate>Wed, 23 Apr 2025 02:40:58 +0800</pubDate><guid>https://blog.kubeantony.com/archive/rancher/rancher-cd-with-azure-devops/</guid><description/></item><item><title>How to Pull Images from Google Artifact Registry into RKE2</title><link>https://blog.kubeantony.com/archive/rancher/how-to-pull-images-from-google-artifact-registry-into-rke2/</link><pubDate>Wed, 26 Mar 2025 08:54:12 +0800</pubDate><guid>https://blog.kubeantony.com/archive/rancher/how-to-pull-images-from-google-artifact-registry-into-rke2/</guid><description>
&lt;style&gt;
.indent-title-1{
margin-left: 1em;
}
.indent-title-2{
margin-left: 2em;
}
.indent-title-3{
margin-left: 3em;
}
&lt;/style&gt;
&lt;h2&gt;注意事項&lt;span class="hx:absolute hx:-mt-20" id="注意事項"&gt;&lt;/span&gt;
&lt;a href="#%e6%b3%a8%e6%84%8f%e4%ba%8b%e9%a0%85" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;如果 RKE2 沒有被 Rancher 管理，則叢集中的每台節點都需要做設定，如果有則透過 Rancher 介面設定，否則容易造成設定檔混亂&lt;/p&gt;
&lt;h2&gt;1. 在 Google Cloud Platform 中設定&lt;span class="hx:absolute hx:-mt-20" id="1-在-google-cloud-platform-中設定"&gt;&lt;/span&gt;
&lt;a href="#1-%e5%9c%a8-google-cloud-platform-%e4%b8%ad%e8%a8%ad%e5%ae%9a" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;font color=red&gt;請在 Cloud shell 中執行，因為在 Cloud shell 執行可以少很多 Gcloud 的設定、Gcloud 的安裝、Project 的設定、個人帳號的驗證&lt;/font&gt;&lt;/p&gt;
&lt;div class="indent-title-1"&gt;
&lt;h3&gt;1.1. 創建 Google Service Account&lt;span class="hx:absolute hx:-mt-20" id="11-創建-google-service-account"&gt;&lt;/span&gt;
&lt;a href="#11-%e5%89%b5%e5%bb%ba-google-service-account" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-2"&gt;
&lt;h4&gt;1.1.1. 定義 Google Service Account name&lt;span class="hx:absolute hx:-mt-20" id="111-定義-google-service-account-name"&gt;&lt;/span&gt;
&lt;a href="#111-%e5%ae%9a%e7%be%a9-google-service-account-name" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;SA_NAME=&amp;#39;gsa-demo&amp;#39;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h4&gt;1.1.2. 創建 Google Service Account&lt;span class="hx:absolute hx:-mt-20" id="112-創建-google-service-account"&gt;&lt;/span&gt;
&lt;a href="#112-%e5%89%b5%e5%bb%ba-google-service-account" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;gcloud iam service-accounts create ${SA_NAME}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;1.2. 產生 Google Service Account Key File&lt;span class="hx:absolute hx:-mt-20" id="12-產生-google-service-account-key-file"&gt;&lt;/span&gt;
&lt;a href="#12-%e7%94%a2%e7%94%9f-google-service-account-key-file" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;gcloud iam service-accounts keys create key.json \
--iam-account=${SA_NAME}@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;GOOGLE_CLOUD_PROJECT&lt;/code&gt; 這個變數 Cloud Shell 預設會有&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;2. 在 RKE2 叢集設定 Private Registry&lt;span class="hx:absolute hx:-mt-20" id="2-在-rke2-叢集設定-private-registry"&gt;&lt;/span&gt;
&lt;a href="#2-%e5%9c%a8-rke2-%e5%8f%a2%e9%9b%86%e8%a8%ad%e5%ae%9a-private-registry" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;此範例只適用純手動建立的 RKE2&lt;/p&gt;
&lt;div class="indent-title-1"&gt;
&lt;h3&gt;2.1. 連線至叢集節點&lt;span class="hx:absolute hx:-mt-20" id="21-連線至叢集節點"&gt;&lt;/span&gt;
&lt;a href="#21-%e9%80%a3%e7%b7%9a%e8%87%b3%e5%8f%a2%e9%9b%86%e7%af%80%e9%bb%9e" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;ssh sudo_user@ip&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;2.2. 編輯 Private Registry 設定檔&lt;span class="hx:absolute hx:-mt-20" id="22-編輯-private-registry-設定檔"&gt;&lt;/span&gt;
&lt;a href="#22-%e7%b7%a8%e8%bc%af-private-registry-%e8%a8%ad%e5%ae%9a%e6%aa%94" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-2"&gt;
&lt;h4&gt;2.2.1. 定義變數&lt;span class="hx:absolute hx:-mt-20" id="221-定義變數"&gt;&lt;/span&gt;
&lt;a href="#221-%e5%ae%9a%e7%be%a9%e8%ae%8a%e6%95%b8" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;DOMAIN_NAME=&amp;#39;asia-east1-docker.pkg.dev&amp;#39;
KEY_FILE=$(cat /PATH/TO/key.json | base64 -w 0)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h4&gt;2.2.2. 產生 Private Registry 設定檔&lt;span class="hx:absolute hx:-mt-20" id="222-產生-private-registry-設定檔"&gt;&lt;/span&gt;
&lt;a href="#222-%e7%94%a2%e7%94%9f-private-registry-%e8%a8%ad%e5%ae%9a%e6%aa%94" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;cat &amp;lt;&amp;lt;EOF | sudo tee /etc/rancher/rke2/registries.yaml
mirrors:
&amp;#34;${DOMAIN_NAME}&amp;#34;:
endpoint:
- &amp;#34;https://${DOMAIN_NAME}&amp;#34;
configs:
&amp;#34;${DOMAIN_NAME}&amp;#34;:
auth:
username: _json_key_base64
password: &amp;#39;${KEY_FILE}&amp;#39;
EOF&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;2.3. 驅逐節點的 Pod&lt;span class="hx:absolute hx:-mt-20" id="23-驅逐節點的-pod"&gt;&lt;/span&gt;
&lt;a href="#23-%e9%a9%85%e9%80%90%e7%af%80%e9%bb%9e%e7%9a%84-pod" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;font color=red&gt;請在 RKE2 管理主機依序執行以下命令&lt;/font&gt;&lt;/p&gt;
&lt;h4&gt;2.3.1. 定義節點名稱&lt;span class="hx:absolute hx:-mt-20" id="231-定義節點名稱"&gt;&lt;/span&gt;
&lt;a href="#231-%e5%ae%9a%e7%be%a9%e7%af%80%e9%bb%9e%e5%90%8d%e7%a8%b1" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;NODE=&amp;#39;m1&amp;#39;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h4&gt;2.3.2. 設定節點不能被指派 Pod&lt;span class="hx:absolute hx:-mt-20" id="232-設定節點不能被指派-pod"&gt;&lt;/span&gt;
&lt;a href="#232-%e8%a8%ad%e5%ae%9a%e7%af%80%e9%bb%9e%e4%b8%8d%e8%83%bd%e8%a2%ab%e6%8c%87%e6%b4%be-pod" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;kubectl cordon $NODE&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h4&gt;2.3.2. 驅逐節點上的 Pod&lt;span class="hx:absolute hx:-mt-20" id="232-驅逐節點上的-pod"&gt;&lt;/span&gt;
&lt;a href="#232-%e9%a9%85%e9%80%90%e7%af%80%e9%bb%9e%e4%b8%8a%e7%9a%84-pod" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;kubectl drain $NODE --ignore-daemonsets --delete-emptydir-data&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;2.4. 重啟 RKE2 服務&lt;span class="hx:absolute hx:-mt-20" id="24-重啟-rke2-服務"&gt;&lt;/span&gt;
&lt;a href="#24-%e9%87%8d%e5%95%9f-rke2-%e6%9c%8d%e5%8b%99" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;font color=red&gt;請回到設定的節點執行以下命令&lt;/font&gt;&lt;/p&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;如果是 Control-plane/Server node 則執行以下命令&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;sudo systemctl restart rke2-server&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;如果是 Worker/Agent node 則執行以下命令&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;sudo systemctl restart rke2-agent&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;2.5. 將節點恢復為可指派 Pod&lt;span class="hx:absolute hx:-mt-20" id="25-將節點恢復為可指派-pod"&gt;&lt;/span&gt;
&lt;a href="#25-%e5%b0%87%e7%af%80%e9%bb%9e%e6%81%a2%e5%be%a9%e7%82%ba%e5%8f%af%e6%8c%87%e6%b4%be-pod" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;font color=red&gt;請在 RKE2 管理主機依序執行以下命令&lt;/font&gt;&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;kubectl uncordon $NODE&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;2.6. 重複以上 2.1. ~ 2.5. 的步驟，直到叢集中的每台節點都設定完畢&lt;span class="hx:absolute hx:-mt-20" id="26-重複以上-21--25-的步驟直到叢集中的每台節點都設定完畢"&gt;&lt;/span&gt;
&lt;a href="#26-%e9%87%8d%e8%a4%87%e4%bb%a5%e4%b8%8a-21--25-%e7%9a%84%e6%ad%a5%e9%a9%9f%e7%9b%b4%e5%88%b0%e5%8f%a2%e9%9b%86%e4%b8%ad%e7%9a%84%e6%af%8f%e5%8f%b0%e7%af%80%e9%bb%9e%e9%83%bd%e8%a8%ad%e5%ae%9a%e5%ae%8c%e7%95%a2" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;3. 參考文章&lt;span class="hx:absolute hx:-mt-20" id="3-參考文章"&gt;&lt;/span&gt;
&lt;a href="#3-%e5%8f%83%e8%80%83%e6%96%87%e7%ab%a0" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a
href="https://github.com/rancher/rke2/discussions/6096#discussioncomment-11767013"target="_blank" rel="noopener"&gt;[DOC] - Missing documentation on how to external repo via registries.yaml&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Rancher API Create K3s Cluster</title><link>https://blog.kubeantony.com/archive/rancher/rancher-api-create-k3s-cluster/</link><pubDate>Thu, 09 Jan 2025 14:47:36 +0800</pubDate><guid>https://blog.kubeantony.com/archive/rancher/rancher-api-create-k3s-cluster/</guid><description>
&lt;style&gt;
.indent-title-1{
margin-left: 1em;
}
.indent-title-2{
margin-left: 2em;
}
.indent-title-3{
margin-left: 3em;
}
&lt;/style&gt;
&lt;h2&gt;1. 先決要求&lt;span class="hx:absolute hx:-mt-20" id="1-先決要求"&gt;&lt;/span&gt;
&lt;a href="#1-%e5%85%88%e6%b1%ba%e8%a6%81%e6%b1%82" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;已完成安裝 Rancher v2.10.1&lt;/li&gt;
&lt;li&gt;一台剛安裝好 Linux 作業系統的電腦&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bash&lt;/code&gt;、&lt;code&gt;curl&lt;/code&gt;、&lt;code&gt;jq&lt;/code&gt; 和 &lt;code&gt;yq&lt;/code&gt; 命令須先完成安裝&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;2. 開始實作&lt;span class="hx:absolute hx:-mt-20" id="2-開始實作"&gt;&lt;/span&gt;
&lt;a href="#2-%e9%96%8b%e5%a7%8b%e5%af%a6%e4%bd%9c" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;在 Rancher UI 建立 token&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;將 &lt;code&gt;ACCESS_KEY&lt;/code&gt;、&lt;code&gt;SECRET_KEY&lt;/code&gt; 和 &lt;code&gt;Rancher_URL&lt;/code&gt; 設為變數&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;export CATTLE_ACCESS_KEY=&amp;#39;token-vr4rr&amp;#39;
export CATTLE_SECRET_KEY=&amp;#39;4sqjmbxx47k2pd286gkrvd27wmfpvs599htqnxhqnpv5kqwb74r49f&amp;#39;
export Rancher_URL=&amp;#39;antony-rancher.example.com&amp;#39;
export Cluster_Name=&amp;#39;test&amp;#39;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="3"&gt;
&lt;li&gt;撰寫 K3s 叢集設定檔&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;cat &amp;lt;&amp;lt; EOF &amp;gt; ${HOME}/k3s.yaml&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;provisioning.cattle.io/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Cluster&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;${Cluster_Name}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;fleet-default&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;kubernetesVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1.31.3+k3s1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rkeConfig&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;machineGlobalConfig&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cluster-cidr&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;172.99.0.0&lt;/span&gt;&lt;span class="l"&gt;/16&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cluster-dns&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;172.100.10.10&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;disable&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;servicelb&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;traefik&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;kube-apiserver-arg&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s1"&gt;&amp;#39;--default-not-ready-toleration-seconds=5&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s1"&gt;&amp;#39;--default-unreachable-toleration-seconds=5&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;kube-controller-manager-arg&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s1"&gt;&amp;#39;--node-monitor-grace-period=20s&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;service-cidr&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;172.100.0.0&lt;/span&gt;&lt;span class="l"&gt;/16&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;tls-san&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="m"&gt;127.0.0.1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="m"&gt;192.168.11.150&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="m"&gt;192.168.11.21&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;disable-network-policy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;secrets-encryption&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;machineSelectorConfig&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;config&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;kubelet-arg&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;container-log-max-files=5&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;container-log-max-size=10Mi&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;selinux&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;__clone&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="l"&gt;EOF&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="4"&gt;
&lt;li&gt;使用 yq 工具將 k3s 叢集設定檔轉換成 json 格式&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;yq eval -o=json ${HOME}/k3s.yaml &amp;gt; ${HOME}/k3s.json&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="5"&gt;
&lt;li&gt;呼叫 Rancher 建立 K3s&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;curl -k -u &amp;#34;${CATTLE_ACCESS_KEY}:${CATTLE_SECRET_KEY}&amp;#34; \
-X POST \
-H &amp;#39;Accept: application/json&amp;#39; \
-H &amp;#39;Content-Type: application/json&amp;#39; \
-d @${HOME}/k3s.json \
https://${Rancher_URL}/v1/provisioning.cattle.io.clusters&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="6"&gt;
&lt;li&gt;將新建立 K3s 叢集的 &lt;code&gt;clusterid&lt;/code&gt; 設為變數&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;export ClusterID=$(curl -s -k -u &amp;#34;${CATTLE_ACCESS_KEY}:${CATTLE_SECRET_KEY}&amp;#34; \
-H &amp;#39;Accept: application/json&amp;#39; \
https://${Rancher_URL}/v3/clusters | \
jq -r &amp;#34;.data[] | select(.name == \&amp;#34;${Cluster_Name}\&amp;#34;) | .id&amp;#34;)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="7"&gt;
&lt;li&gt;獲取同時具有 etcd、controlplane 和 worker Role 的註冊指令&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;CODE=$(curl -s -k -u &amp;#34;${CATTLE_ACCESS_KEY}:${CATTLE_SECRET_KEY}&amp;#34; \
https://${Rancher_URL}/v3/clusters/${ClusterID}/clusterregistrationtokens | \
jq -r .data[].insecureNodeCommand)
echo &amp;#34;$CODE --etcd --controlplane --worker&amp;#34;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行結果應與以下類似 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;curl --insecure -fL https://antony-rancher.example.com/system-agent-install.sh | sudo sh -s - --server https://antony-rancher.example.com --label &amp;#39;cattle.io/os=linux&amp;#39; --token mckc626z5tsvzs8z2rv7lkk8hpctl4z6rw5hfb66qb4cc8h24fsr6f --ca-checksum de987cd6d56600459cbbb895564eaf04687d2dedeeab39cf7c83ef761dc93332 --etcd --controlplane --worker&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>Introduction to Harvester</title><link>https://blog.kubeantony.com/archive/rancher/introduction-to-harvester/</link><pubDate>Wed, 11 Dec 2024 07:41:54 +0800</pubDate><guid>https://blog.kubeantony.com/archive/rancher/introduction-to-harvester/</guid><description>
&lt;p&gt;&lt;strong&gt;混合與超融合基礎架構概念&lt;/strong&gt;&lt;br&gt;
讓我們先從現代計算的基本範疇開始討論。計算主要由三個核心範疇組成：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;計算&lt;/strong&gt;：執行實際的處理流程，是完成工作的地方。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;儲存&lt;/strong&gt;：用於儲存資料，這些資料可以稍後被取回進行處理。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;網路&lt;/strong&gt;：用於機器之間的溝通與交流。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;這些是計算的核心或基本範疇。讓我們回顧一下這些範疇隨著時間的演進，以及在計算、儲存和網路實施上的變化。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://hackmd.io/_uploads/HJmdz9ENyx.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;h3&gt;傳統架構的回顧&lt;span class="hx:absolute hx:-mt-20" id="傳統架構的回顧"&gt;&lt;/span&gt;
&lt;a href="#%e5%82%b3%e7%b5%b1%e6%9e%b6%e6%a7%8b%e7%9a%84%e5%9b%9e%e9%a1%a7" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;傳統架構中，伺服器運行應用程式並內建直接連接的儲存空間，這些伺服器透過網路互相連接。這種架構簡單且可行，但在儲存方面存在一些缺陷。例如，當應用程式需要存取另一伺服器上的資料時，效率會受到限制。這促使了將儲存空間從伺服器中分離，轉移到網路上的需求，例如使用專用檔案伺服器（如 NFS、SMB 或 NAS、SAN 系統）來提升儲存效率和冗餘性。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://hackmd.io/_uploads/BkVb2qENJl.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;h3&gt;虛擬化的出現&lt;span class="hx:absolute hx:-mt-20" id="虛擬化的出現"&gt;&lt;/span&gt;
&lt;a href="#%e8%99%9b%e6%93%ac%e5%8c%96%e7%9a%84%e5%87%ba%e7%8f%be" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;隨著計算的進一步發展，我們需要更有效地利用伺服器的處理能力。虛擬化技術應運而生，將工作負載與底層硬體分離。一個伺服器現在可以運行多個虛擬機器（VMs），這提高了伺服器資源的利用率。同時，這也帶來了網路和儲存層的複雜性，特別是在大型資料中心中。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://hackmd.io/_uploads/HJpU354Eyx.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;h3&gt;超融合架構的解決方案&lt;span class="hx:absolute hx:-mt-20" id="超融合架構的解決方案"&gt;&lt;/span&gt;
&lt;a href="#%e8%b6%85%e8%9e%8d%e5%90%88%e6%9e%b6%e6%a7%8b%e7%9a%84%e8%a7%a3%e6%b1%ba%e6%96%b9%e6%a1%88" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;超融合架構將事情簡化。它將虛擬化技術和軟體定義的存儲與網路整合到單一標準化單元，包含計算、儲存和網路。這些單元可以根據需求進行擴展，無需購買專門的硬體。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://hackmd.io/_uploads/HkAOn54Nke.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;為何選擇超融合架構？&lt;span class="hx:absolute hx:-mt-20" id="為何選擇超融合架構"&gt;&lt;/span&gt;
&lt;a href="#%e7%82%ba%e4%bd%95%e9%81%b8%e6%93%87%e8%b6%85%e8%9e%8d%e5%90%88%e6%9e%b6%e6%a7%8b" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;h4&gt;1. 簡化設計&lt;span class="hx:absolute hx:-mt-20" id="1-簡化設計"&gt;&lt;/span&gt;
&lt;a href="#1-%e7%b0%a1%e5%8c%96%e8%a8%ad%e8%a8%88" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;單一供應商提供整合的計算單元，減少整合成本和兼容性問題。&lt;/li&gt;
&lt;li&gt;所有單元標準化，降低對專業技能的依賴。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;2. 彈性擴展&lt;span class="hx:absolute hx:-mt-20" id="2-彈性擴展"&gt;&lt;/span&gt;
&lt;a href="#2-%e5%bd%88%e6%80%a7%e6%93%b4%e5%b1%95" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;只需新增標準化單元即可擴展計算、儲存和網路能力。&lt;/li&gt;
&lt;li&gt;可以從小規模開始，隨需求逐步擴展。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;3. 資料保護&lt;span class="hx:absolute hx:-mt-20" id="3-資料保護"&gt;&lt;/span&gt;
&lt;a href="#3-%e8%b3%87%e6%96%99%e4%bf%9d%e8%ad%b7" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;節點內建儲存冗餘，資料可自動複製，提升容錯能力。&lt;/li&gt;
&lt;li&gt;支援快照、複製和備份功能，可快速恢復資料。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;超融合架構的這些特性使得系統更簡單、更靈活且更具韌性，是現代企業的理想選擇。&lt;/p&gt;
&lt;hr&gt;
&lt;h1&gt;Networking in Harvester&lt;/h1&gt;&lt;h2&gt;Harvester 網路設定&lt;span class="hx:absolute hx:-mt-20" id="harvester-網路設定"&gt;&lt;/span&gt;
&lt;a href="#harvester-%e7%b6%b2%e8%b7%af%e8%a8%ad%e5%ae%9a" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在這部分的學習目標中，您將學會以下內容：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;描述 Harvester 的網路概念&lt;/li&gt;
&lt;li&gt;建立、修改和刪除叢集網路與網路設定&lt;/li&gt;
&lt;li&gt;建立、修改和刪除虛擬機（VM）網路&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;為達成這些學習目標，主要涵蓋的主題包括：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Harvester 叢集網路概述&lt;/strong&gt;&lt;br&gt;
我們將討論這些基本概念，以及 Harvester 如何運用這些概念來配置叢集中的網路。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;叢集網路定義、網路配置與虛擬機網路&lt;/strong&gt;&lt;br&gt;
我們會深入探討這些元素如何相互關聯，以及如何配置它們，使其能夠被有效利用。&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h3&gt;Harvester 叢集中的網路概述&lt;span class="hx:absolute hx:-mt-20" id="harvester-叢集中的網路概述"&gt;&lt;/span&gt;
&lt;a href="#harvester-%e5%8f%a2%e9%9b%86%e4%b8%ad%e7%9a%84%e7%b6%b2%e8%b7%af%e6%a6%82%e8%bf%b0" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;在這裡，我們需要首先討論一些 Harvester 用於實現叢集內部網路的概念。&lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;1. Cluster Network (叢集網路)&lt;/strong&gt;&lt;span class="hx:absolute hx:-mt-20" id="1-cluster-network-叢集網路"&gt;&lt;/span&gt;
&lt;a href="#1-cluster-network-%e5%8f%a2%e9%9b%86%e7%b6%b2%e8%b7%af" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;叢集網路是一條流量隔離的數據轉發通道，可以將其視為一個網路或一條管道，用於 Harvester 叢集和數據中心中傳輸實際的網路流量。這些管道實際承載著網路流量，這就是所謂的叢集網路。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://hackmd.io/_uploads/rJBICNB4Jx.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;我們將 Harvester 中一條流量隔離的轉發路徑上的設備、鏈路和配置的總和抽象為一個叢集網路。&lt;/p&gt;
&lt;p&gt;在上述情況下，會有兩個叢集網路，分別對應於兩條流量隔離的轉發路徑。&lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;2. Network Config (網路配置)&lt;/strong&gt;&lt;span class="hx:absolute hx:-mt-20" id="2-network-config-網路配置"&gt;&lt;/span&gt;
&lt;a href="#2-network-config-%e7%b6%b2%e8%b7%af%e9%85%8d%e7%bd%ae" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;網路配置定義了叢集節點如何連接到叢集網路。例如，指定用於連接這些網路管道的網路介面，以及在多個網路介面需要連接到同一條管道時應使用的綁定類型。簡言之，網路配置決定了叢集節點如何連接到實際的叢集網路。&lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;3. VM Network (虛擬機網路)&lt;/strong&gt;&lt;span class="hx:absolute hx:-mt-20" id="3-vm-network-虛擬機網路"&gt;&lt;/span&gt;
&lt;a href="#3-vm-network-%e8%99%9b%e6%93%ac%e6%a9%9f%e7%b6%b2%e8%b7%af" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;虛擬機網路是供虛擬機連接和通信使用的網路，這些網路與叢集網路相關聯。&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;概念圖解&lt;span class="hx:absolute hx:-mt-20" id="概念圖解"&gt;&lt;/span&gt;
&lt;a href="#%e6%a6%82%e5%bf%b5%e5%9c%96%e8%a7%a3" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;以下是一個完整的 Harvester 叢集圖例，包括多個節點、網路、虛擬網路和虛擬機。我們將前述概念應用到此圖中以更直觀地理解。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://hackmd.io/_uploads/SJ2Z34HEke.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;叢集網路&lt;/strong&gt;：&lt;br&gt;
叢集網路是承載網路流量的管道。舉例來說，上方的網路交換機與管理網路相關，下方的交換機與叢集節點相連。這些管道可以是實體的（例如交換機）或虛擬的（例如 VLAN）。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;網路配置&lt;/strong&gt;：&lt;br&gt;
網路配置顯示了各節點如何連接到叢集網路。不同節點可能有不同的網路介面名稱和連接方式，因此需要在 Kubernetes 的編排層定義這些連接。如果所有節點的配置相同，可以共用一個網路配置；否則需要為每個節點定義單獨的網路配置。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;虛擬機網路&lt;/strong&gt;：&lt;br&gt;
虛擬機網路允許虛擬機彼此通信，或與外部世界通信。這些網路通常是 VLAN，但也可以是未標記的網路（untagged network）。虛擬機網路的流量會通過叢集網路傳輸，而不是通過網路配置。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h3&gt;管理網路&lt;span class="hx:absolute hx:-mt-20" id="管理網路"&gt;&lt;/span&gt;
&lt;a href="#%e7%ae%a1%e7%90%86%e7%b6%b2%e8%b7%af" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;管理網路是叢集部署時由 Canal CNI 自動創建的，用於叢集節點之間的通信及管理操作。理論上，虛擬機也可以通過 Kubernetes 服務對象連接到管理網路，但實務上不常見。更好的做法是使用虛擬機網路來進行通信。&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;VLAN 主幹網路&lt;span class="hx:absolute hx:-mt-20" id="vlan-主幹網路"&gt;&lt;/span&gt;
&lt;a href="#vlan-%e4%b8%bb%e5%b9%b9%e7%b6%b2%e8%b7%af" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;VLAN 主幹網路是一種專用於虛擬機流量的叢集網路。節點與交換機的連接埠設置為主幹埠，允許多個 VLAN 流量通過而不過濾。這樣，虛擬機網路流量可以高效且隔離地傳輸。&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;虛擬機網路細節&lt;span class="hx:absolute hx:-mt-20" id="虛擬機網路細節"&gt;&lt;/span&gt;
&lt;a href="#%e8%99%9b%e6%93%ac%e6%a9%9f%e7%b6%b2%e8%b7%af%e7%b4%b0%e7%af%80" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;虛擬機網路是虛擬機之間以及與外部通信的主要方式，通常以 VLAN 實現。若環境有限，也可以與管理網路共用，但最佳實踐是將虛擬機流量隔離到專用的叢集網路中。&lt;/p&gt;</description></item><item><title>Longhorn Installation Requirements</title><link>https://blog.kubeantony.com/archive/rancher/longhorn-installation-requirements/</link><pubDate>Mon, 14 Oct 2024 09:54:38 +0800</pubDate><guid>https://blog.kubeantony.com/archive/rancher/longhorn-installation-requirements/</guid><description>
&lt;h2&gt;Minimum Recommended Hardware&lt;span class="hx:absolute hx:-mt-20" id="minimum-recommended-hardware"&gt;&lt;/span&gt;
&lt;a href="#minimum-recommended-hardware" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;3 nodes&lt;/li&gt;
&lt;li&gt;4 vCPUs per node&lt;/li&gt;
&lt;li&gt;4 GiB per node&lt;/li&gt;
&lt;li&gt;SSD/NVMe or similar performance block device on the node for storage (recommended)&lt;/li&gt;
&lt;li&gt;HDD/Spinning Disk or similar performance block device on the node for storage (verified)&lt;/li&gt;
&lt;li&gt;500/250 max IOPS per volume (1 MiB I/O)&lt;/li&gt;
&lt;li&gt;500/250 max throughput per volume (MiB/s)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;SL Micro 6.0&lt;span class="hx:absolute hx:-mt-20" id="sl-micro-60"&gt;&lt;/span&gt;
&lt;a href="#sl-micro-60" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# open-iscsi is installed, and the iscsid daemon is running on all the nodes.
$ rpm -qa | grep -E &amp;#34;open-iscsi|nfs-client&amp;#34;
open-iscsi-2.1.9-3.7.x86_64
nfs-client-2.6.3-36.15.x86_64
$ sudo systemctl enable --now iscsid
$ sudo systemctl is-active iscsid
# the following pkg must be installed
$ sudo bash -c &amp;#34;for i in bash curl findmnt grep awk blkid lsblk; do command -v \${i}; done | wc -l&amp;#34;
7
# Check NFSv4.1 or NFSv4.2 support is enabled in kernel
$ cat /boot/config-`uname -r`| grep -E &amp;#34;CONFIG_NFS_V4_1|CONFIG_NFS_V4_2&amp;#34;
CONFIG_NFS_V4_1=y
CONFIG_NFS_V4_2=y
CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN=&amp;#34;kernel.org&amp;#34;
# CONFIG_NFS_V4_1_MIGRATION is not set
# CONFIG_NFS_V4_2_READ_PLUS is not set
CONFIG_NFS_V4_2_SSC_HELPER=y
$ cat &amp;lt;&amp;lt;EOF | sudo tee -a /etc/modules-load.d/v2_data_engine_modules.conf
vfio_pci
uio_pci_generic
nvme-tcp
EOF
$ sudo reboot
$ sudo lsmod | grep -Ei &amp;#34;vfio_pci|uio_pci_generic|nvme_tcp&amp;#34;
nvme_tcp 61440 0
nvme_keyring 16384 1 nvme_tcp
nvme_fabrics 45056 1 nvme_tcp
nvme_core 233472 2 nvme_tcp,nvme_fabrics
uio_pci_generic 12288 0
vfio_pci 16384 0
vfio_pci_core 86016 1 vfio_pci
vfio 61440 3 vfio_pci_core,vfio_iommu_type1,vfio_pci
irqbypass 12288 2 vfio_pci_core,kvm
uio 32768 2 cnic,uio_pci_generic
$ sudo pvcreate pvcreate /dev/sdb
$ sudo vgcreate longhorn-vg /dev/sdb
$ sudo lvcreate -l 100%FREE -n longhorn-data longhorn-vg
$ sudo lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
longhorn-data longhorn-vg -wi-a----- 32.00g
$ sudo mkdir -p /var/lib/longhorn
$ sudo mkfs.xfs /dev/longhorn-vg/longhorn-data
$ sudo vi /etc/fstab
/dev/longhorn-vg/longhorn-data /var/lib/longhorn xfs defaults 0 0
$ sudo mount -a&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>設定 Harvester VM 使用獨立的 Bond 網卡</title><link>https://blog.kubeantony.com/archive/rancher/%E8%A8%AD%E5%AE%9A-harvester-vm-%E4%BD%BF%E7%94%A8%E7%8D%A8%E7%AB%8B%E7%9A%84-bond-%E7%B6%B2%E5%8D%A1/</link><pubDate>Wed, 28 Aug 2024 14:34:44 +0800</pubDate><guid>https://blog.kubeantony.com/archive/rancher/%E8%A8%AD%E5%AE%9A-harvester-vm-%E4%BD%BF%E7%94%A8%E7%8D%A8%E7%AB%8B%E7%9A%84-bond-%E7%B6%B2%E5%8D%A1/</guid><description>
&lt;h2&gt;1. 新增 Cluster Network 並設定 Bond mode&lt;span class="hx:absolute hx:-mt-20" id="1-新增-cluster-network-並設定-bond-mode"&gt;&lt;/span&gt;
&lt;a href="#1-%e6%96%b0%e5%a2%9e-cluster-network-%e4%b8%a6%e8%a8%ad%e5%ae%9a-bond-mode" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;當前每台 node 額外多出來的網路卡資訊&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# node 1
$ ip a s
...
4: ens35: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:23:59:d5 brd ff:ff:ff:ff:ff:ff
altname enp2s3
5: ens36: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:23:59:df brd ff:ff:ff:ff:ff:ff
altname enp2s4
...
# node 2
$ ip a s
...
4: ens34: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:ac:a8:58 brd ff:ff:ff:ff:ff:ff
altname enp2s2
5: ens35: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:ac:a8:62 brd ff:ff:ff:ff:ff:ff
altname enp2s3
...
# node 3
$ ip a s
4: ens35: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:f4:48:52 brd ff:ff:ff:ff:ff:ff
altname enp2s3
5: ens36: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:f4:48:5c brd ff:ff:ff:ff:ff:ff
altname enp2s4
...&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="2"&gt;
&lt;li&gt;建立 &lt;code&gt;Cluster Network&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;左側選單 &lt;code&gt;Networks&lt;/code&gt; -&amp;gt; &lt;code&gt;Cluster Network&lt;/code&gt; -&amp;gt; 點選 &lt;code&gt;Create Cluster Network&lt;/code&gt; 按鈕&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/ryCDsuhsA.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;取名: &lt;code&gt;vm&lt;/code&gt; 然後點右下角 &lt;code&gt;Create&lt;/code&gt; 按鈕&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/r1y4YFniC.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;點 &lt;code&gt;Create Network Config&lt;/code&gt; 按鈕&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/Skvrhu3sC.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;勾選 &lt;code&gt;Select specific node&lt;/code&gt;
&lt;code&gt;Node Name&lt;/code&gt;: 點選展開下拉式選單，選擇要設定的主機名稱&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/H1x5AdnoR.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;點選單 &lt;code&gt;Uplink&lt;/code&gt;
&lt;code&gt;NICs&lt;/code&gt; 選擇主機上多的兩張網卡 &lt;code&gt;ens35&lt;/code&gt; 和 &lt;code&gt;ens36&lt;/code&gt;
&lt;code&gt;Bond Options Mode&lt;/code&gt; 選擇 &lt;code&gt;balance-alb&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/SkG4ytnsR.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;再點 &lt;code&gt;Create Network Config&lt;/code&gt; 按鈕，依照剛剛的步驟將其他節點的網卡都加入到這 Cluster Network，最後就會看到下圖&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/SJG_Yt2sR.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;要確認每個 &lt;code&gt;Config Network&lt;/code&gt; 狀態都是 &lt;code&gt;Active&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;2. 永久設定 brige 裝置一個 IP 位置 (可選)&lt;span class="hx:absolute hx:-mt-20" id="2-永久設定-brige-裝置一個-ip-位置-可選"&gt;&lt;/span&gt;
&lt;a href="#2-%e6%b0%b8%e4%b9%85%e8%a8%ad%e5%ae%9a-brige-%e8%a3%9d%e7%bd%ae%e4%b8%80%e5%80%8b-ip-%e4%bd%8d%e7%bd%ae-%e5%8f%af%e9%81%b8" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;讓 Harvester node 能夠連接使用這個 Network 的 VM，如果不做此步驟則 VM 建出來會無法從 Harvester node 連接，但還是能夠從同網段的機器連到 VM。&lt;/p&gt;
&lt;h3&gt;2.1. 檢查當前網卡的設定&lt;span class="hx:absolute hx:-mt-20" id="21-檢查當前網卡的設定"&gt;&lt;/span&gt;
&lt;a href="#21-%e6%aa%a2%e6%9f%a5%e7%95%b6%e5%89%8d%e7%b6%b2%e5%8d%a1%e7%9a%84%e8%a8%ad%e5%ae%9a" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ ip a s
4: ens35: &amp;lt;BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP&amp;gt; mtu 1500 qdisc pfifo_fast master vm-bo state UP group default qlen 1000
link/ether 00:0c:29:23:59:d5 brd ff:ff:ff:ff:ff:ff
altname enp2s3
5: ens36: &amp;lt;BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP&amp;gt; mtu 1500 qdisc pfifo_fast master vm-bo state UP group default qlen 1000
link/ether 00:0c:29:23:59:df brd ff:ff:ff:ff:ff:ff
altname enp2s4
...
65: vm-bo: &amp;lt;BROADCAST,MULTICAST,MASTER,UP,LOWER_UP&amp;gt; mtu 1500 qdisc noqueue master vm-br state UP group default qlen 1000
link/ether 00:0c:29:23:59:d5 brd ff:ff:ff:ff:ff:ff
66: vm-br: &amp;lt;BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP&amp;gt; mtu 1500 qdisc noqueue state UNKNOWN group default
link/ether 1e:df:20:6d:88:47 brd ff:ff:ff:ff:ff:ff&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;發現多了 &lt;code&gt;vm-bo&lt;/code&gt; 這張網卡和 &lt;code&gt;vm-br&lt;/code&gt; 這個 bridge 裝置
但是 &lt;code&gt;vm-br&lt;/code&gt; 橋接裝置沒有自己的 IP&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;2.2. 備份 Harvester Configuration 檔案 &lt;code&gt;/oem/90_custom.yaml&lt;/code&gt;&lt;span class="hx:absolute hx:-mt-20" id="22-備份-harvester-configuration-檔案-oem90_customyaml"&gt;&lt;/span&gt;
&lt;a href="#22-%e5%82%99%e4%bb%bd-harvester-configuration-%e6%aa%94%e6%a1%88-oem90_customyaml" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo cp /oem/90_custom.yaml /oem/install/90_custom.yaml.$(date --iso-8601=minutes)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;2.3. 修改 &lt;code&gt;/oem/90_custom.yaml&lt;/code&gt; 檔案，並且更新以下 Yaml 檔中路徑的值 &lt;code&gt;stages.initramfs[0].files&lt;/code&gt;&lt;span class="hx:absolute hx:-mt-20" id="23-修改-oem90_customyaml-檔案並且更新以下-yaml-檔中路徑的值-stagesinitramfs0files"&gt;&lt;/span&gt;
&lt;a href="#23-%e4%bf%ae%e6%94%b9-oem90_customyaml-%e6%aa%94%e6%a1%88%e4%b8%a6%e4%b8%94%e6%9b%b4%e6%96%b0%e4%bb%a5%e4%b8%8b-yaml-%e6%aa%94%e4%b8%ad%e8%b7%af%e5%be%91%e7%9a%84%e5%80%bc-stagesinitramfs0files" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ vi /oem/90_custom.yaml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;內容如下&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;name: Harvester Configuration
stages:
initramfs:
- commands:
...
files:
# add the following context
- path: /etc/wicked/scripts/setup_vm_bond.sh
permissions: 493
owner: 0
group: 0
content: |
#!/bin/sh
ACTION=$1
INTERFACE=$2
case $ACTION in
post-up)
# inherit MAC address
ip link set dev vm-br address $(ip -json link show dev $INTERFACE | jq -j &amp;#39;.[0][&amp;#34;address&amp;#34;]&amp;#39;)
# accept all vlan, PVID=1 by default
bridge vlan add vid 2-4094 dev $INTERFACE
;;
esac
encoding: &amp;#34;&amp;#34;
ownerstring: &amp;#34;&amp;#34;
- path: /etc/sysconfig/network/ifcfg-vm-bo
permissions: 384
owner: 0
group: 0
content: |&amp;#43;
STARTMODE=&amp;#39;onboot&amp;#39;
BONDING_MASTER=&amp;#39;yes&amp;#39;
BOOTPROTO=&amp;#39;none&amp;#39;
POST_UP_SCRIPT=&amp;#34;wicked:setup_vm_bond.sh&amp;#34;
BONDING_SLAVE_0=&amp;#39;ens35&amp;#39;
BONDING_SLAVE_1=&amp;#39;ens36&amp;#39;
BONDING_MODULE_OPTS=&amp;#39;miimon=100 mode=balance-alb &amp;#39;
DHCLIENT_SET_DEFAULT_ROUTE=&amp;#39;no&amp;#39;
encoding: &amp;#34;&amp;#34;
- path: /etc/sysconfig/network/ifcfg-ens35
permissions: 384
owner: 0
group: 0
content: |
STARTMODE=&amp;#39;hotplug&amp;#39;
BOOTPROTO=&amp;#39;none&amp;#39;
encoding: &amp;#34;&amp;#34;
ownerstring: &amp;#34;&amp;#34;
- path: /etc/sysconfig/network/ifcfg-ens36
permissions: 384
owner: 0
group: 0
content: |
STARTMODE=&amp;#39;hotplug&amp;#39;
BOOTPROTO=&amp;#39;none&amp;#39;
encoding: &amp;#34;&amp;#34;
ownerstring: &amp;#34;&amp;#34;
- path: /etc/wicked/scripts/setup_vm_bridge.sh
permissions: 493
owner: 0
group: 0
content: |
#!/bin/sh
ACTION=$1
INTERFACE=$2
case $ACTION in
pre-up)
# enable vlan-aware
ip link set $INTERFACE type bridge vlan_filtering 1
;;
post-up)
# accept all vlan, PVID=1 by default
bridge vlan add vid 2-4094 dev $INTERFACE self
bridge vlan add vid 2-4094 dev vm-bo
;;
esac
encoding: &amp;#34;&amp;#34;
ownerstring: &amp;#34;&amp;#34;
- path: /etc/sysconfig/network/ifcfg-vm-br
permissions: 384
owner: 0
group: 0
content: |&amp;#43;
STARTMODE=&amp;#39;onboot&amp;#39;
BOOTPROTO=&amp;#39;static&amp;#39;
BRIDGE=&amp;#39;yes&amp;#39;
BRIDGE_STP=&amp;#39;off&amp;#39;
BRIDGE_FORWARDDELAY=&amp;#39;0&amp;#39;
BRIDGE_PORTS=&amp;#39;vm-bo&amp;#39;
PRE_UP_SCRIPT=&amp;#34;wicked:setup_vm_bridge.sh&amp;#34;
POST_UP_SCRIPT=&amp;#34;wicked:setup_vm_bridge.sh&amp;#34;
IPADDR=192.168.81.21
NETMASK=255.255.255.0
DHCLIENT_SET_DEFAULT_ROUTE=&amp;#39;yes&amp;#39;
encoding: &amp;#34;&amp;#34;
ownerstring: &amp;#34;&amp;#34;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;/etc/wicked/scripts/setup_vm_bond.sh&lt;/code&gt; 修改內容如下 :
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ip link set dev &amp;lt;你的 bridge 名稱&amp;gt; address&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;bridge 的名稱會是 &lt;code&gt;&amp;lt;cluster network name&amp;gt;-br&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;譬如: 我的 &lt;code&gt;cluster network&lt;/code&gt; 取名為 &lt;code&gt;vm&lt;/code&gt;，那麼名稱就是 &lt;code&gt;vm-br&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;此檔名可自訂義&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/etc/sysconfig/network/ifcfg-vm-bo&lt;/code&gt; 修改內容如下 :
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;POST_UP_SCRIPT=&amp;quot;wicked:setup_vm_bond.sh&amp;quot;&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;格式 : &lt;code&gt;wicked:&amp;lt;第一個 script 的名稱&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;BONDING_SLAVE_0='ens35'&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;格式 : &lt;code&gt;ONDING_SLAVE_0='第一張網卡名稱'&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;BONDING_SLAVE_1='ens36'&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;格式 : &lt;code&gt;ONDING_SLAVE_1='第二張網卡名稱'&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;BONDING_MODULE_OPTS='miimon=100 mode=balance-alb '&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;格式 : &lt;code&gt;BONDING_MODULE_OPTS='miimon=&amp;lt;在 UI 上建立的值&amp;gt; node=&amp;lt;在 UI 上選的 Bond mode&amp;gt;'&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/etc/sysconfig/network/ifcfg-ens35&lt;/code&gt; 修改內容如下 :
&lt;ul&gt;
&lt;li&gt;檔名須為: &lt;code&gt;ifcfg-&amp;lt;網卡名稱&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/etc/sysconfig/network/ifcfg-ens36&lt;/code&gt; 修改內容如下 :
&lt;ul&gt;
&lt;li&gt;檔名須為: &lt;code&gt;ifcfg-&amp;lt;網卡名稱&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/etc/wicked/scripts/setup_vm_bridge.sh&lt;/code&gt; 修改內容如下 :
&lt;ul&gt;
&lt;li&gt;檔名可自訂義&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/etc/sysconfig/network/ifcfg-vm-br&lt;/code&gt; 修改內容如下 :
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;BRIDGE_PORTS='vm-bo'&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;格式: &lt;code&gt;BRIDGE_PORTS='bridge 名稱'&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PRE_UP_SCRIPT=&amp;quot;wicked:setup_vm_bridge.sh&amp;quot;&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;格式: &lt;code&gt;PRE_UP_SCRIPT=&amp;quot;上一個 Script 檔案的名稱&amp;quot;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;POST_UP_SCRIPT=&amp;quot;wicked:setup_vm_bridge.sh&amp;quot;&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;格式: &lt;code&gt;POST_UP_SCRIPT=&amp;quot;上一個 Script 檔案的名稱&amp;quot;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;IPADDR=192.168.81.21&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;改成符合這張網卡的 IP Address&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;NETMASK=255.255.255.0&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;改成符合這張網卡的子網路遮罩&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;2.4. 重開機&lt;span class="hx:absolute hx:-mt-20" id="24-重開機"&gt;&lt;/span&gt;
&lt;a href="#24-%e9%87%8d%e9%96%8b%e6%a9%9f" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo init 6&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;如果這台 node 上有正在跑的 VM 要先關機。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;2.5. 確認成功幫 Bridge 設靜態 IP&lt;span class="hx:absolute hx:-mt-20" id="25-確認成功幫-bridge-設靜態-ip"&gt;&lt;/span&gt;
&lt;a href="#25-%e7%a2%ba%e8%aa%8d%e6%88%90%e5%8a%9f%e5%b9%ab-bridge-%e8%a8%ad%e9%9d%9c%e6%85%8b-ip" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ ip a s
...
4: ens35: &amp;lt;BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP&amp;gt; mtu 1500 qdisc pfifo_fast master vm-bo state UP group default qlen 1000
link/ether 00:0c:29:f4:48:52 brd ff:ff:ff:ff:ff:ff
altname enp2s3
5: ens36: &amp;lt;BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP&amp;gt; mtu 1500 qdisc pfifo_fast master vm-bo state UP group default qlen 1000
link/ether 00:0c:29:f4:48:5c brd ff:ff:ff:ff:ff:ff
altname enp2s4
6: vm-br: &amp;lt;BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP&amp;gt; mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 00:0c:29:f4:48:52 brd ff:ff:ff:ff:ff:ff
inet 192.168.81.23/24 brd 192.168.81.255 scope global vm-br
valid_lft forever preferred_lft forever
7: vm-bo: &amp;lt;BROADCAST,MULTICAST,MASTER,UP,LOWER_UP&amp;gt; mtu 1500 qdisc noqueue master vm-br state UP group default qlen 1000
link/ether 00:0c:29:f4:48:52 brd ff:ff:ff:ff:ff:ff&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;2.6. 重複以上 2.1. ~ 2.5. 的步驟依序做完每一台有在 &lt;code&gt;Cluster Netwrok&lt;/code&gt; 底下的節點&lt;span class="hx:absolute hx:-mt-20" id="26-重複以上-21--25-的步驟依序做完每一台有在-cluster-netwrok-底下的節點"&gt;&lt;/span&gt;
&lt;a href="#26-%e9%87%8d%e8%a4%87%e4%bb%a5%e4%b8%8a-21--25-%e7%9a%84%e6%ad%a5%e9%a9%9f%e4%be%9d%e5%ba%8f%e5%81%9a%e5%ae%8c%e6%af%8f%e4%b8%80%e5%8f%b0%e6%9c%89%e5%9c%a8-cluster-netwrok-%e5%ba%95%e4%b8%8b%e7%9a%84%e7%af%80%e9%bb%9e" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;這樣設定完 Harvester node 就能夠連到 VM&lt;/p&gt;
&lt;h2&gt;3. 建立 VM Network&lt;span class="hx:absolute hx:-mt-20" id="3-建立-vm-network"&gt;&lt;/span&gt;
&lt;a href="#3-%e5%bb%ba%e7%ab%8b-vm-network" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;點選左側選單 Networks -&amp;gt; VM Networks -&amp;gt; Create&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/Syki2Fhi0.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Name&lt;/strong&gt;: &lt;code&gt;vm&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Type&lt;/strong&gt;: &lt;code&gt;UntaggedNetwrok&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cluster Network&lt;/strong&gt;: &lt;code&gt;vm&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/rk0l3YhiA.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;建立成功，之前 VM 在建立的時候就能有自己獨立的網卡辣~&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/BJVP2YnsC.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;</description></item><item><title>Install High-Availability Rancher and Setting up an NGINX Load Balancer</title><link>https://blog.kubeantony.com/archive/rancher/install-high-availability-rancher-and-setting-up-an-nginx-load-balancer/</link><pubDate>Tue, 13 Aug 2024 05:41:28 +0800</pubDate><guid>https://blog.kubeantony.com/archive/rancher/install-high-availability-rancher-and-setting-up-an-nginx-load-balancer/</guid><description>
&lt;h2&gt;環境介紹&lt;span class="hx:absolute hx:-mt-20" id="環境介紹"&gt;&lt;/span&gt;
&lt;a href="#%e7%92%b0%e5%a2%83%e4%bb%8b%e7%b4%b9" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;三台 node 都會跑 K3S + Rancher&lt;/li&gt;
&lt;li&gt;一台 node 當 Load Balancer&lt;/li&gt;
&lt;li&gt;OS 都是 SLES 15 SP5&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Architecture&lt;span class="hx:absolute hx:-mt-20" id="architecture"&gt;&lt;/span&gt;
&lt;a href="#architecture" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/BJnqZfUb0.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;DNS for Rancher should resolve to a layer 4 load balancer&lt;/li&gt;
&lt;li&gt;The Load Balancer should forward port TCP/80 and TCP/443 to all 3 nodes in the Kubernetes cluster.&lt;/li&gt;
&lt;li&gt;The Ingress controller will redirect HTTP to HTTPS and terminate SSL/TLS on port TCP/443.&lt;/li&gt;
&lt;li&gt;The Ingress controller will forward traffic to port TCP/80 on the pod in the Rancher deployment.&lt;/li&gt;
&lt;li&gt;Kubernetes Rancher install with layer 4 load balancer, depicting SSL termination at ingress controllers&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;1. 安裝 HA K3S v1.28.8&lt;span class="hx:absolute hx:-mt-20" id="1-安裝-ha-k3s-v1288"&gt;&lt;/span&gt;
&lt;a href="#1-%e5%ae%89%e8%a3%9d-ha-k3s-v1288" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# 1. SSH 連線到 r1
$ ssh rancher@192.168.11.25
# 2. 安裝 k3s
$ curl -sfL https://get.k3s.io | \
INSTALL_K3S_VERSION=v1.28.8&amp;#43;k3s1 \
K3S_KUBECONFIG_MODE=&amp;#34;644&amp;#34; \
K3S_TOKEN=SECRET sh -s - server \
--cluster-init
# 3. SSH 連線到 r2
$ ssh rancher@192.168.11.26
# 4. 安裝 k3s
$ curl -sfL https://get.k3s.io | \
INSTALL_K3S_VERSION=v1.28.8&amp;#43;k3s1 \
K3S_KUBECONFIG_MODE=&amp;#34;644&amp;#34; \
K3S_TOKEN=SECRET sh -s - server \
--server https://192.168.11.25:6443
# 5. SSH 連線到 r3
$ ssh rancher@192.168.11.27
# 6. 安裝 k3s
$ curl -sfL https://get.k3s.io | \
INSTALL_K3S_VERSION=v1.28.8&amp;#43;k3s1 \
K3S_KUBECONFIG_MODE=&amp;#34;644&amp;#34; \
K3S_TOKEN=SECRET sh -s - server \
--server https://192.168.11.25:6443
# 7. SSH 連線到 r1
$ ssh rancher@192.168.11.25
# 8. Check node Ready
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
r1 Ready control-plane,etcd,master 32m v1.28.8&amp;#43;k3s1
r2 Ready control-plane,etcd,master 22m v1.28.8&amp;#43;k3s1
r3 Ready control-plane,etcd,master 20m v1.28.8&amp;#43;k3s1
# 9. etcd 健康檢查
## 先安裝 etcdctl
$ curl -s https://raw.githubusercontent.com/braveantony/bash-script/main/install-etcdcheck.sh | sudo bash
...
etcd Version: 3.4.13
Git SHA: ae9734ed2
Go Version: go1.12.17
Go OS/Arch: linux/amd64
etcdctl version: 3.4.13
API version: 3.4
## 用 root 執行以下命令
$ ETCDCTL_ENDPOINTS=&amp;#39;https://127.0.0.1:2379&amp;#39; \
ETCDCTL_CACERT=&amp;#39;/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt&amp;#39; \
ETCDCTL_CERT=&amp;#39;/var/lib/rancher/k3s/server/tls/etcd/server-client.crt&amp;#39; \
ETCDCTL_KEY=&amp;#39;/var/lib/rancher/k3s/server/tls/etcd/server-client.key&amp;#39; \
ETCDCTL_API=3 etcdctl endpoint health --cluster --write-out=table
&amp;#43;----------------------------&amp;#43;--------&amp;#43;-------------&amp;#43;-------&amp;#43;
| ENDPOINT | HEALTH | TOOK | ERROR |
&amp;#43;----------------------------&amp;#43;--------&amp;#43;-------------&amp;#43;-------&amp;#43;
| https://192.168.11.27:2379 | true | 9.981773ms | |
| https://192.168.11.26:2379 | true | 10.882845ms | |
| https://192.168.11.25:2379 | true | 11.50637ms | |
&amp;#43;----------------------------&amp;#43;--------&amp;#43;-------------&amp;#43;-------&amp;#43;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;2. Install Rancher HA v2.8.3&lt;span class="hx:absolute hx:-mt-20" id="2-install-rancher-ha-v283"&gt;&lt;/span&gt;
&lt;a href="#2-install-rancher-ha-v283" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# 1. 安裝 Helm
$ curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
# Setup kubeconfig
$ sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config &amp;amp;&amp;amp; \
sudo chmod 600 ~/.kube/config &amp;amp;&amp;amp; \
sudo chown $(id -u):$(id -g) ~/.kube/config
# 2. Add the Helm Chart Repository
$ helm repo add rancher-prime https://charts.rancher.com/server-charts/prime
# 3. Create a Namespace for Rancher
$ kubectl create ns cattle-system
# 4. 使用 cert-manager 產生憑證
# 4.1. Add the Jetstack Helm repository
$ helm repo add jetstack https://charts.jetstack.io
# 4.2. Update your local Helm chart repository cache
$ helm repo update
# 4.3. Install the cert-manager Helm chart
$ helm install cert-manager jetstack/cert-manager \
--namespace cert-manager \
--create-namespace \
--set installCRDs=true \
--set prometheus.enabled=false \
--set webhook.timeoutSeconds=4 \
--version v1.14.4
# 4.4. Check cert-manager pod status
$ kubectl get pods -n cert-manager
NAME READY STATUS RESTARTS AGE
cert-manager-798bf649c9-4fsgg 1/1 Running 0 18m
cert-manager-cainjector-c7d4dbdd9-nzwqn 1/1 Running 0 18m
cert-manager-webhook-847d7676c9-7wvvz 1/1 Running 0 18m
# 5. Check DNS a record
## 要設為 Load Balancer 的 IP
$ dig @192.168.11.85 rancher.antony520.com &amp;#43;short
192.168.11.28
# 6. Install Rancher Prime with Helm
$ helm install rancher rancher-prime/rancher \
--namespace cattle-system \
--set hostname=rancher.antony520.com \
--set bootstrapPassword=rancheradmin \
--set global.cattle.psp.enabled=false \
--set replicas=3 \
--version 2.8.3
# 7. Verify that the Rancher Server is Successfully Deployed
$ kubectl -n cattle-system get pods
NAME READY STATUS RESTARTS AGE
rancher-648d4fbc6c-7rpwx 1/1 Running 0 4m1s
rancher-648d4fbc6c-bqznk 1/1 Running 1 (44s ago) 4m1s
rancher-648d4fbc6c-nvchh 1/1 Running 1 (44s ago) 4m1s
# 8. check web
$ curl -k -H &amp;#34;host: rancher.antony520.com&amp;#34; https://192.168.11.25/dashboard/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;3. Setting up an NGINX Load Balancer&lt;span class="hx:absolute hx:-mt-20" id="3-setting-up-an-nginx-load-balancer"&gt;&lt;/span&gt;
&lt;a href="#3-setting-up-an-nginx-load-balancer" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;Step 1: Create NGINX Configuration&lt;span class="hx:absolute hx:-mt-20" id="step-1-create-nginx-configuration"&gt;&lt;/span&gt;
&lt;a href="#step-1-create-nginx-configuration" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# 1. SSH 連線到 lb 那台 node
$ ssh rancher@192.168.11.28
# 2. Example NGINX config
$ cat &amp;lt;&amp;lt;EOF | sudo tee /etc/nginx/nginx.conf
worker_processes 4;
worker_rlimit_nofile 40000;
events {
worker_connections 8192;
}
stream {
log_format proxy &amp;#39;\$remote_addr [\$time_local] &amp;#39;
&amp;#39;\$protocol \$status \$bytes_sent \$bytes_received &amp;#39;
&amp;#39;\$session_time &amp;#34;\$upstream_addr&amp;#34;&amp;#39;;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log proxy;
upstream rancher_servers_http {
least_conn;
server 192.168.11.25:80 max_fails=3 fail_timeout=5s;
server 192.168.11.26:80 max_fails=3 fail_timeout=5s;
server 192.168.11.27:80 max_fails=3 fail_timeout=5s;
}
server {
listen 80;
proxy_pass rancher_servers_http;
}
upstream rancher_servers_https {
least_conn;
server 192.168.11.25:443 max_fails=5 fail_timeout=8s;
server 192.168.11.26:443 max_fails=5 fail_timeout=8s;
server 192.168.11.27:443 max_fails=5 fail_timeout=8s;
}
server {
listen 443;
proxy_pass rancher_servers_https;
}
}
EOF&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;Step 2: Run NGINX as Podman Pod&lt;span class="hx:absolute hx:-mt-20" id="step-2-run-nginx-as-podman-pod"&gt;&lt;/span&gt;
&lt;a href="#step-2-run-nginx-as-podman-pod" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# 1. 寫 yaml 檔
$ cat &amp;lt;&amp;lt;EOF &amp;gt; nginx-lb.yaml
apiVersion: v1
kind: Pod
metadata:
labels:
app: nginx-lb
name: nginx-lb
spec:
containers:
- args:
- nginx
- -g
- daemon off;
image: docker.io/library/nginx:stable
name: nginx-lb
ports:
- containerPort: 80
hostPort: 80
- containerPort: 443
hostPort: 443
volumeMounts:
- mountPath: /etc/nginx/nginx.conf
name: etc-nginx-nginx.conf-host-0
- mountPath: /var/log/nginx
name: var-log-nginx-host-1
volumes:
- hostPath:
path: /etc/nginx/nginx.conf
type: File
name: etc-nginx-nginx.conf-host-0
- hostPath:
path: /var/log/nginx
type: Directory
name: var-log-nginx-host-1
EOF
# 2. Run Pod
$ sudo podman kube play nginx.yaml
# 3. Check Pod Status
$ sudo podman ps -a --pod
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES POD ID PODNAME
d974299ac86d localhost/podman-pause:4.4.4-1680004800 14 seconds ago Up 9 seconds 0.0.0.0:80-&amp;gt;80/tcp, 0.0.0.0:443-&amp;gt;443/tcp af284bde454b-infra af284bde454b nginx-lb
9437a4d9d554 docker.io/library/nginx:stable nginx -g daemon o... 9 seconds ago Up 9 seconds 0.0.0.0:80-&amp;gt;80/tcp, 0.0.0.0:443-&amp;gt;443/tcp nginx-lb-nginx-lb af284bde454b nginx-lb
# 4. Access nginx lb on other node
$ curl -k https://rancher.antony520.com/
# 5. Check access log
$ sudo cat /var/log/nginx/access.log
192.168.11.85 [24/Apr/2024:09:42:16 &amp;#43;0000] TCP 200 10052 0.027 &amp;#34;192.168.11.26:443&amp;#34;
# 6. Start on Boot
$ cd ~/nginx/
$ sudo podman generate systemd --name nginx-lb --files
$ sudo cp container-nginx-lb-nginx-lb.service pod-nginx-lb.service /usr/lib/systemd/system/
$ sudo systemctl daemon-reload
$ sudo systemctl enable --now container-nginx-lb-nginx-lb.service pod-nginx-lb.service&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;參考文件&lt;span class="hx:absolute hx:-mt-20" id="參考文件"&gt;&lt;/span&gt;
&lt;a href="#%e5%8f%83%e8%80%83%e6%96%87%e4%bb%b6" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a
href="https://ranchermanager.docs.rancher.com/how-to-guides/new-user-guides/infrastructure-setup/nginx-load-balancer"target="_blank" rel="noopener"&gt;Setting up an NGINX Load Balancer - Rancher Docs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Full Offline Installation - Harbor, RKE2, Rancher</title><link>https://blog.kubeantony.com/archive/rancher/full-offline-installation-harbor-rke2-rancher/</link><pubDate>Mon, 29 Jul 2024 08:18:12 +0800</pubDate><guid>https://blog.kubeantony.com/archive/rancher/full-offline-installation-harbor-rke2-rancher/</guid><description>
&lt;style&gt;
.indent-title-1{
margin-left: 1em;
}
.indent-title-2{
margin-left: 2em;
}
&lt;/style&gt;
&lt;h2&gt;Preface&lt;span class="hx:absolute hx:-mt-20" id="preface"&gt;&lt;/span&gt;
&lt;a href="#preface" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;本篇文章主要介紹如何在離線模式下，安裝 Harbor v2.7.0, RKE2 v1.25.9, Rancher Prime v2.7.3 和 Neuvector 5.1.3，主要分為兩大部分&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;準備離線安裝所需之檔案&lt;/li&gt;
&lt;li&gt;開始離線安裝&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;可以透過點擊展開以下目錄，選擇想看的內容，跳轉至特定章節&lt;/p&gt;
&lt;/div&gt;
&lt;h1&gt;準備離線安裝&lt;/h1&gt;&lt;h2&gt;Requirements for Docker, Hardware, and Networking&lt;span class="hx:absolute hx:-mt-20" id="requirements-for-docker-hardware-and-networking"&gt;&lt;/span&gt;
&lt;a href="#requirements-for-docker-hardware-and-networking" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;一台機器，最低規格: 4 CORE, 8G RAM, 250G Disk (建議 300G 以上)&lt;/li&gt;
&lt;li&gt;Disk 檔案系統為 Btrfs，需啟動 LVM，將 &lt;code&gt;/&lt;/code&gt; 目錄的可用空間設為 270G ，&lt;code&gt;/home&lt;/code&gt; 目錄 30G&lt;/li&gt;
&lt;li&gt;須能上網&lt;/li&gt;
&lt;li&gt;檢查 Docker 儲存 Image 的目錄應為 &lt;code&gt;/var/lib/docker&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo docker info -f &amp;#39;{{ .DockerRootDir}}&amp;#39;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;檢查目錄的儲存容量&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;邏輯層&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ lsblk -o NAME,SIZE,MOUNTPOINTS&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;實體層&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ df -hT&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;檢查 Docker 儲存 Image 的目錄目前已使用多大的儲存空間&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo du -sh `sudo docker info -f &amp;#39;{{ .DockerRootDir}}&amp;#39;`&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;Prepare&lt;span class="hx:absolute hx:-mt-20" id="prepare"&gt;&lt;/span&gt;
&lt;a href="#prepare" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;Create Working Directory&lt;span class="hx:absolute hx:-mt-20" id="create-working-directory"&gt;&lt;/span&gt;
&lt;a href="#create-working-directory" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-1"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ mkdir -p work/{harbor,rke2,rancher,minio,compressed_files}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;準備 Harbor v2.7.0 全離線安裝包&lt;span class="hx:absolute hx:-mt-20" id="準備-harbor-v270-全離線安裝包"&gt;&lt;/span&gt;
&lt;a href="#%e6%ba%96%e5%82%99-harbor-v270-%e5%85%a8%e9%9b%a2%e7%b7%9a%e5%ae%89%e8%a3%9d%e5%8c%85" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;切換工作目錄&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ cd ~/work/harbor&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="2"&gt;
&lt;li&gt;下載 Harbor 壓縮檔，版本 v2.7.0&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ wget https://github.com/goharbor/harbor/releases/download/v2.7.0/harbor-offline-installer-v2.7.0.tgz&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="3"&gt;
&lt;li&gt;下載 Docker Compose 套件，版本 1.18&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo wget https://github.com/docker/compose/releases/download/1.18.0/docker-compose-Linux-x86_64&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="4"&gt;
&lt;li&gt;將以上離線安裝 Harbor 所需之套件壓縮成一個檔案&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ cd ..; tar -czf compressed_files/harbor-offline.tar.gz harbor/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="5"&gt;
&lt;li&gt;檢查是否符合預期&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ ls -lh compressed_files/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;total 762M
-rw-r--r-- 1 762M harbor-offline.tar.gz&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;解壓縮命令 : &lt;code&gt;tar -xzf compressed_files/harbor-offline.tar.gz&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;h3&gt;準備 RKE2 v1.25.9 全離線安裝包&lt;span class="hx:absolute hx:-mt-20" id="準備-rke2-v1259-全離線安裝包"&gt;&lt;/span&gt;
&lt;a href="#%e6%ba%96%e5%82%99-rke2-v1259-%e5%85%a8%e9%9b%a2%e7%b7%9a%e5%ae%89%e8%a3%9d%e5%8c%85" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;切換工作目錄，並切換為 root 使用者&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ cd ~/work/rke2 &amp;amp;&amp;amp; sudo su&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="2"&gt;
&lt;li&gt;下載離線安裝 RKE2 所需 Image 之壓縮檔&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ curl -# -OL https://github.com/rancher/rke2/releases/download/v1.25.9%2Brke2r1/rke2-images.linux-amd64.tar.zst
$ curl -# -OL https://github.com/rancher/rke2/releases/download/v1.25.9%2Brke2r1/rke2.linux-amd64.tar.gz
$ curl -# -OL https://github.com/rancher/rke2/releases/download/v1.25.9%2Brke2r1/sha256sum-amd64.txt&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="3"&gt;
&lt;li&gt;下載官網提供的離線安裝 RKE2 所需之安裝腳本，並賦予它執行權限&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ curl -sfL https://get.rke2.io --output install.sh &amp;amp;&amp;amp; chmod &amp;#43;x install.sh&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="4"&gt;
&lt;li&gt;檢查當前目錄下的檔案&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ ls -lh&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;total 939M
-rwxr-xr-x 1 root root 22K May 23 13:48 install.sh
-rw-r--r-- 1 root root 915M May 23 13:46 rke2-images.linux-amd64.tar.zst
-rw-r--r-- 1 root root 25M May 23 13:47 rke2.linux-amd64.tar.gz
-rw-r--r-- 1 root root 3.6K May 23 13:47 sha256sum-amd64.txt&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="5"&gt;
&lt;li&gt;將以上離線安裝 RKE2 所需之檔案，壓縮成一個檔案&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ cd ..; tar -czf compressed_files/rke2-offline.tar.gz rke2/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="6"&gt;
&lt;li&gt;檢查是否符合預期&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ ls -lh compressed_files/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;total 1.7G
-rw-r--r-- 1 762M harbor-offline.tar.gz
-rw-r--r-- 1 937M rke2-offline.tar.gz&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;解壓縮命令 : &lt;code&gt;tar -xzf compressed_files/rke2-offline.tar.gz&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;ol start="7"&gt;
&lt;li&gt;離開 root 使用者&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ exit&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;準備 Rancher Prime v2.7.3 全離線安裝包&lt;span class="hx:absolute hx:-mt-20" id="準備-rancher-prime-v273-全離線安裝包"&gt;&lt;/span&gt;
&lt;a href="#%e6%ba%96%e5%82%99-rancher-prime-v273-%e5%85%a8%e9%9b%a2%e7%b7%9a%e5%ae%89%e8%a3%9d%e5%8c%85" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ cd ~/work/rancher
# 安裝 helm
$ wget https://get.helm.sh/helm-v3.8.2-linux-amd64.tar.gz
$ tar zxvf helm-v3.8.2-linux-amd64.tar.gz
$ sudo cp linux-amd64/helm /usr/local/bin/
$ helm repo add rancher-prime https://charts.rancher.com/server-charts/prime
$ helm repo update
$ helm fetch rancher-prime/rancher --version=v2.7.3
$ wget https://github.com/rancher/rancher/releases/download/v2.7.3/rancher-images.txt
$ wget https://github.com/rancher/rancher/releases/download/v2.7.3/rancher-load-images.sh
$ wget https://github.com/rancher/rancher/releases/download/v2.7.3/rancher-save-images.sh&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;準備 cert-manager 環境&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ wget https://github.com/cert-manager/cert-manager/releases/download/v1.11.0/cert-manager.crds.yaml
$ helm repo add jetstack https://charts.jetstack.io
$ helm repo update
$ helm fetch jetstack/cert-manager --version v1.11.0
$ sudo docker pull quay.io/jetstack/cert-manager-controller:v1.11.0
$ sudo docker pull quay.io/jetstack/cert-manager-webhook:v1.11.0
$ sudo docker pull quay.io/jetstack/cert-manager-cainjector:v1.11.0
$ sudo docker pull quay.io/jetstack/cert-manager-ctl:v1.11.0
# 之後要再改 tag push 到 harbor
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx stable 7067317e3807 10 days ago 142MB
quay.io/jetstack/cert-manager-controller v1.7.1 db7725ef729d 12 months ago 65.9MB
quay.io/jetstack/cert-manager-webhook v1.7.1 36736adc2f4b 12 months ago 52.5MB
quay.io/jetstack/cert-manager-cainjector v1.7.1 623ec0d31539 12 months ago 44.5MB
quay.io/jetstack/cert-manager-ctl v1.7.1 4e60e4ce697f 12 months ago 57.2MB
$ sudo docker tag quay.io/jetstack/cert-manager-controller:v1.7.1 harbor.example.com/rancher/cert-manager-controller:v1.7.1
$ sudo docker tag quay.io/jetstack/cert-manager-webhook:v1.7.1 harbor.example.com/rancher/cert-manager-webhook:v1.7.1
$ sudo docker tag quay.io/jetstack/cert-manager-cainjector:v1.7.1 harbor.example.com/rancher/cert-manager-cainjector:v1.7.1
$ sudo docker tag quay.io/jetstack/cert-manager-ctl:v1.7.1 harbor.example.com/rancher/cert-manager-ctl:v1.7.1&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;下載 neuvector image&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo docker pull neuvector/controller:5.1.3
$ sudo docker pull neuvector/manager:5.1.3
$ sudo docker pull neuvector/enforcer:5.1.3
$ sudo docker pull neuvector/scanner:latest
$ sudo docker pull neuvector/updater:latest
$ sudo docker tag neuvector/scanner harbor.example.com/rancher/neuvector/scanner
$ sudo docker tag neuvector/updater harbor.example.com/rancher/neuvector/updater
$ sudo docker tag neuvector/manager:5.1.1 harbor.example.com/rancher/neuvector/manager:5.1.1
$ sudo docker tag neuvector/enforcer:5.1.1 harbor.example.com/rancher/neuvector/enforcer:5.1.1
$ sudo docker tag neuvector/controller:5.1.1 harbor.example.com/rancher/neuvector/controller:5.1.1&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;下載所有 rancher 會用到的 image&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ chmod &amp;#43;x rancher-save-images.sh
$ chmod &amp;#43;x rancher-load-images.sh
$ ll
total 13432
-rw-r--r-- 1 rancher users 66038 Feb 20 10:20 cert-manager-v1.7.1.tgz
-rw-r--r-- 1 rancher users 13633605 Apr 14 2022 helm-v3.8.2-linux-amd64.tar.gz
-rw-r--r-- 1 rancher users 13996 Feb 20 10:10 rancher-2.7.1.tgz
-rw-r--r-- 1 rancher users 19406 Jan 25 06:21 rancher-images.txt
-rwxr-xr-x 1 rancher users 4115 Jan 25 06:22 rancher-load-images.sh
-rwxr-xr-x 1 rancher users 1757 Jan 25 06:21 rancher-save-images.sh
drwxr-xr-x 2 rancher rancher 50 Apr 14 2022 linux-amd64
-rw-r--r-- 1 rancher rancher 358698 Feb 4 2022 cert-manager.crds.yaml
# 預計下載會等兩個小時
# registry.rancher.com rancher-prime 來源
$ sudo ./rancher-save-images.sh --image-list ./rancher-images.txt --images rancher-images.tar.gz --source-registry registry.rancher.com | tee result.log&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;壓縮全離線安裝 rancher 會需要的所有檔案&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ tar -czvf rancher-offline.tar.gz cert-manager.crds.yaml image/rancher-image.tar.gz helm-v3.8.2-linux-amd64.tar.gz rancher-2.7.3.tgz cert-manager-v1.11.0.tgz rancher-images.txt rancher-load-images.sh push.sh&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h4&gt;程式自動化&lt;span class="hx:absolute hx:-mt-20" id="程式自動化"&gt;&lt;/span&gt;
&lt;a href="#%e7%a8%8b%e5%bc%8f%e8%87%aa%e5%8b%95%e5%8c%96" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;#!/bin/bash
[ -f detail-result.txt ] &amp;amp;&amp;amp; cat /dev/null &amp;gt; detail-result.txt
[ -f result.txt ] &amp;amp;&amp;amp; cat /dev/null &amp;gt; result.txt
exec {BASH_XTRACEFD}&amp;gt;&amp;gt;detail-result.txt
set -x
## load Image
### var
all_image_txt=$(cat rancher-images.txt cert-manager-images.txt neuvector-images.txt)
while read line
do
if sudo docker images &amp;#34;${line}&amp;#34; | grep -q &amp;#34;${line%:*}&amp;#34;; then
if ! sudo docker rmi &amp;#34;${line}&amp;#34; &amp;amp;&amp;gt; /dev/null; then
echo rmi &amp;#34;${line}&amp;#34; Error &amp;amp;&amp;amp; exit 1
fi
fi
done &amp;lt;&amp;lt;&amp;lt; $(cat rancher-images.txt | sed &amp;#39;s|registry.rancher.com/||g&amp;#39;)
while read image
do
if ! sudo docker pull &amp;#34;$image&amp;#34; 1&amp;gt; /dev/null 2&amp;gt; ./result.txt; then
echo pull &amp;#34;$image&amp;#34; Error &amp;amp;&amp;amp; exit 1
fi
done &amp;lt;&amp;lt;&amp;lt; $(cat rancher-images.txt cert-manager-images.txt neuvector-images.txt)
## Save Image
### var
all_image=$(cat rancher-images.txt cert-manager-images.txt | tr &amp;#39;\n&amp;#39; &amp;#39; &amp;#39;)
neuvector_image=$(cat neuvector-images.txt | sed &amp;#39;s|docker.io/||g&amp;#39; | tr &amp;#39;\n&amp;#39; &amp;#39; &amp;#39;)
for n in $all_image $neuvector_image
do
if ! sudo docker images &amp;#34;$n&amp;#34; | grep -q &amp;#34;${n%:*}&amp;#34;; then
echo &amp;#34;$n&amp;#34; pull Error &amp;gt;&amp;gt; pull_error.txt
if ! sudo docker pull &amp;#34;$n&amp;#34; 1&amp;gt; /dev/null 2&amp;gt; still_pull_error.txt; then
echo &amp;#34;$n&amp;#34; pull Error twice &amp;gt;&amp;gt; pull_error.txt &amp;amp;&amp;amp; exit 1
fi
fi
done
sudo docker save $all_image | gzip --stdout &amp;gt; rancher-cert_manager-image.tar.gz
[ &amp;#34;$?&amp;#34; != &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;save rancher image error&amp;#34; &amp;amp;&amp;amp; exit 1
## 壓成一個壓縮檔
tar -czf ../compressed_files/rancher-offline.tar.gz rancher-cert_manager-image.tar.gz rancher-2.7.3.tgz cert-manager-v1.11.0.tgz helm-v3.8.2-linux-amd64.tar.gz cert-manager.crds.yaml
sudo docker save $neuvector_image | gzip --stdout &amp;gt; ../compressed_files/neuvector-image.tar.gz
[ &amp;#34;$?&amp;#34; != &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;save neuvector image error&amp;#34; &amp;amp;&amp;amp; exit 1
tar -czf ../compressed_files/full-offline.tar.gz ../compressed_files/harbor-offline.tar.gz ../compressed_files/neuvector-image.tar.gz ../compressed_files/rancher-offline.tar.gz ../compressed_files/rke2-offline.tar.gz
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; split -b 7G ../compressed_files/full-offline.tar.gz ../compressed_files/full-offline.tar.gz.part&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;br&gt;
&lt;h3&gt;minio&lt;span class="hx:absolute hx:-mt-20" id="minio"&gt;&lt;/span&gt;
&lt;a href="#minio" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ cd ~/work/minio
# 準備 docker-compose
$ sudo wget https://github.com/docker/compose/releases/download/1.18.0/docker-compose-Linux-x86_64&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;準備 image&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo docker pull minio/minio
$ sudo docker tag minio/minio harbor.example.com/library/minio
$ sudo docker push harbor.example.com/library/minio&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h1&gt;開始離線安裝&lt;/h1&gt;&lt;h2&gt;建置系統環境確認&lt;span class="hx:absolute hx:-mt-20" id="建置系統環境確認"&gt;&lt;/span&gt;
&lt;a href="#%e5%bb%ba%e7%bd%ae%e7%b3%bb%e7%b5%b1%e7%92%b0%e5%a2%83%e7%a2%ba%e8%aa%8d" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Private Registry: 4 CORE, 6G RAM, 300G Disk&lt;/li&gt;
&lt;li&gt;Rancher Manager: 4 CORE, 8G RAM, 100G Disk&lt;/li&gt;
&lt;li&gt;Kubernetes Master: 4 CORE, 8G RAM, 100G Disk&lt;/li&gt;
&lt;li&gt;Worker(*3): 4 CORE, 8G RAM, 100G Disk&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;安裝前準備&lt;span class="hx:absolute hx:-mt-20" id="安裝前準備"&gt;&lt;/span&gt;
&lt;a href="#%e5%ae%89%e8%a3%9d%e5%89%8d%e6%ba%96%e5%82%99" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol start="0"&gt;
&lt;li&gt;確認 根目錄 可用空間&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ df -hT /&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出:&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/system-root btrfs 200G 28G 173G 14% /&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;將全離線安裝包上傳至機器&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ scp -r split/ &amp;lt;遠端機器&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;檢查 &lt;code&gt;split/&lt;/code&gt; 目錄下之全離線安裝包檔案&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;ls -lh split/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;total 27G
-rw-r--r-- 1 root root 7.0G Jun 6 21:51 full_offline.tar.gz.aa
-rw-r--r-- 1 root root 7.0G Jun 6 21:51 full_offline.tar.gz.ab
-rw-r--r-- 1 root root 7.0G Jun 6 21:52 full_offline.tar.gz.ac
-rw-r--r-- 1 root root 5.9G Jun 6 21:53 full_offline.tar.gz.ad&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="2"&gt;
&lt;li&gt;建立並切換工作目錄&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ mkdir -p compressed_files &amp;amp;&amp;amp; cd compressed_files/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="3"&gt;
&lt;li&gt;解壓縮全離線安裝包 (耗時約 3 分鐘)&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ cat ../split/full_offline.tar.gz.a* | tar -zxvf -&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;須注意全離線安裝包的路徑&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;螢幕輸出:&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;harbor-offline.tar.gz
rancher-offline.tar.gz
rke2-offline.tar.gz&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;檢視檔案&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;ls -lh&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;total 27G
-rw-r--r-- 1 1003 users 762M May 23 14:33 harbor-offline.tar.gz
-rw-r--r-- 1 1003 users 26G May 26 10:34 rancher-offline.tar.gz
-rw-r--r-- 1 root root 937M May 23 15:10 rke2-offline.tar.gz&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="4"&gt;
&lt;li&gt;將 harbor、rancher、rke2 全離線安裝包傳送至對應之機器&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ scp harbor-offline.tar.gz &amp;lt;harbor 的機器&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ scp rke2-offline.tar.gz &amp;lt;rancher 的機器&amp;gt;
$ scp rancher-offline.tar.gz &amp;lt;rancher 的機器&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ scp rke2-offline.tar.gz &amp;lt;rke2 的機器&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;安裝 harbor v2.7.0&lt;span class="hx:absolute hx:-mt-20" id="安裝-harbor-v270"&gt;&lt;/span&gt;
&lt;a href="#%e5%ae%89%e8%a3%9d-harbor-v270" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;連線至 harbor 機器，並確認目錄可用空間&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-1"&gt;
&lt;ul&gt;
&lt;li&gt;根目錄可用空間至少須要 200 G 以上&lt;/li&gt;
&lt;li&gt;使用者家目錄至少須要 50 G 以上&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;檢查命令&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;df -hT / /home&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/system-root btrfs 200G 28G 173G 14% /
/dev/mapper/system-home xfs 50G 84M 50G 1% /home &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="2"&gt;
&lt;li&gt;Enable Repositories&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo zypper mr -e 1 2 3 4&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="3"&gt;
&lt;li&gt;安裝 docker&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo zypper in -y docker &amp;amp;&amp;amp; sudo systemctl enable --now docker&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;系統需要有 &amp;ldquo;Containers-Module&amp;rdquo; Repository&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;ol start="4"&gt;
&lt;li&gt;安裝 DNS Server&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo zypper in -y -t pattern dhcp_dns_server &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="5"&gt;
&lt;li&gt;將 harbor 和 Rancher 的 Domain Name 到 DNS Server 註冊成 A Record&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo yast2 dns-server&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="6"&gt;
&lt;li&gt;檢查 Harbor 和 Rancher 的名稱解析&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ host rancher.example.com &amp;amp;&amp;amp; host harbor.example.com&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;rancher.example.com has address 192.168.61.62
harbor.example.com has address 192.168.61.61&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="7"&gt;
&lt;li&gt;解壓縮 harbor 全離線安裝包 (耗時約 4 秒鐘)，並切換至 &lt;code&gt;harbor/&lt;/code&gt; 目錄&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ tar -zxvf harbor-offline-v2.11.0.tar.gz &amp;amp;&amp;amp; cd harbor/v2.11.0/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出:&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;harbor/
harbor/harbor-offline-installer-v2.11.0.tgz
harbor/docker-compose-Linux-x86_64&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="8"&gt;
&lt;li&gt;將 docker-compose 移至 /usr/bin 目錄下，並賦予 755 之權限&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo mv docker-compose-linux-x86_64 /usr/bin/docker-compose &amp;amp;&amp;amp; sudo chmod 755 /usr/bin/docker-compose&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="9"&gt;
&lt;li&gt;解壓縮 harbor-offline-installer，並切換至工作目錄&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ tar -xvf harbor-offline-installer-v2.11.0.tgz; cd harbor/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="10"&gt;
&lt;li&gt;複製 harbor.yml&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ cp harbor.yml.tmpl harbor.yml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="11"&gt;
&lt;li&gt;建立自簽憑證工作目錄&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ mkdir ssl;cd ssl&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ cat mk
#!/bin/bash
domain=$2
ip=$3
help()
{
cat &amp;lt;&amp;lt;EOF
Usage: mk [OPTIONS]
Available options:
create create [domain] [IP]
delete delete cert
test test
EOF
exit
}
ssl()
{
openssl genrsa -aes256 -passout pass:password -out ca-key.pem 4096
openssl req -new -x509 -sha256 -days 365 -subj &amp;#34;/C=TW/ST=Taipei/L=Taipei/O=test/OU=lab/CN=example&amp;#34; -passin pass:password -key ca-key.pem -out ca.pem
openssl genrsa -out cert-key.pem 4096
openssl req -new -sha256 -subj &amp;#34;/CN=example&amp;#34; -key cert-key.pem -out cert.csr
echo -e &amp;#34;subjectAltName=DNS:${domain},IP:${ip}\nextendedKeyUsage = serverAuth&amp;#34; &amp;gt; extfile.cnf
openssl x509 -req -sha256 -days 365 -passin pass:password -in cert.csr -CA ca.pem -CAkey ca-key.pem -out cert.pem -extfile extfile.cnf -CAcreateserial
}
de()
{
rm ca-key.pem ca.pem ca.srl cert.csr cert-key.pem cert.pem extfile.cnf &amp;amp;&amp;gt;/dev/null
if [ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ];then
echo &amp;#34;delete all cert ok!&amp;#34;
else
echo &amp;#34;delete cert fail,please check!&amp;#34;
fi
}
ts()
{
openssl verify -CAfile ca.pem -verbose cert.pem
}
case $1 in
create)
if [ &amp;#34;$#&amp;#34; == &amp;#34;3&amp;#34; ];then
ssl
else
help
fi
;;
delete)
de
;;
test)
ts
;;
*)
help
;;
esac&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;ol start="12"&gt;
&lt;li&gt;透過自動化程式建立自簽憑證&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ ./mk create harbor.example.com 192.168.11.90&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;$1&lt;/code&gt;，放 Domain Name
&lt;code&gt;$2&lt;/code&gt;，Harbor 機器之 IP 位址&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;Generating RSA private key, 4096 bit long modulus (2 primes)
..&amp;#43;&amp;#43;&amp;#43;&amp;#43;
............................&amp;#43;&amp;#43;&amp;#43;&amp;#43;
e is 65537 (0x010001)
Generating RSA private key, 4096 bit long modulus (2 primes)
................................................................................................................................&amp;#43;&amp;#43;&amp;#43;&amp;#43;
.............................&amp;#43;&amp;#43;&amp;#43;&amp;#43;
e is 65537 (0x010001)
Signature ok
subject=CN = example
Getting CA Private Key&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="13"&gt;
&lt;li&gt;檢視自動化程式建立自簽憑證產生之檔案&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ ls -l&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;total 32
-rw------- 1 rancher users 3326 Jun 6 00:45 ca-key.pem
-rw-r--r-- 1 rancher users 2009 Jun 6 00:45 ca.pem
-rw-r--r-- 1 rancher users 41 Jun 6 00:45 ca.srl
-rw------- 1 rancher users 3243 Jun 6 00:45 cert-key.pem
-rw-r--r-- 1 rancher users 1582 Jun 6 00:45 cert.csr
-rw-r--r-- 1 rancher users 1874 Jun 6 00:45 cert.pem
-rw-r--r-- 1 rancher users 85 Jun 6 00:45 extfile.cnf
-rwxr-xr-x 1 rancher users 1175 Jun 6 00:44 mk&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="14"&gt;
&lt;li&gt;切換回上一層目錄，並編輯 harbor.yml&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ cd .. &amp;amp;&amp;amp; vim harbor.yml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;針對以下 3 個內容進行設定&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;hostname&lt;/code&gt;，填寫 harbor 的 Domain Name&lt;/li&gt;
&lt;li&gt;&lt;code&gt;certificate&lt;/code&gt;，設定 &lt;code&gt;cert.pem&lt;/code&gt; 的絕對路徑&lt;/li&gt;
&lt;li&gt;&lt;code&gt;private_key&lt;/code&gt;，設定 &lt;code&gt;cert-key.pem&lt;/code&gt; 的絕對路徑&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;檔案內容 :&lt;/p&gt;
&lt;pre&gt;
# Configuration file of Harbor
# The IP address or hostname to access admin UI and registry service.
# DO NOT use localhost or 127.0.0.1, because Harbor needs to be accessed by external clients.
&lt;font color=red&gt;hostname: harbor.example.com&lt;/font&gt;
# http related config
http:
# port for http, default is 80. If https enabled, this port will redirect to https port
port: 80
# https related config
https:
# https port for harbor, default is 443
port: 443
# The path of cert and key files for nginx
&lt;font color=red&gt;certificate: /home/rancher/harbor/cert.pem&lt;/font&gt;
&lt;font color=red&gt;private_key: /home/rancher/harbor/cert-key.pem&lt;/font&gt;
......以下內容省略
&lt;/pre&gt;
&lt;/div&gt;
&lt;ol start="15"&gt;
&lt;li&gt;讓 Docker 信任 自簽憑證&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo mkdir /etc/docker/certs.d
$ sudo cp ssl/ca.pem /etc/docker/certs.d/
$ sudo systemctl restart docker&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="16"&gt;
&lt;li&gt;讓 OS 信任憑證&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo cp ssl/ca.pem /usr/share/pki/trust/anchors/
$ sudo cp ssl/ca.pem /etc/pki/trust/anchors/
$ sudo update-ca-certificates --fresh&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="17"&gt;
&lt;li&gt;啟動 harbor&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo ./install.sh --with-trivy&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="18"&gt;
&lt;li&gt;檢查 harbor 服務是否正常啟動&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo docker-compose ps&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt; Name Command State Ports
------------------------------------------------------------------------------------------------------------------------
harbor-core /harbor/entrypoint.sh Up
harbor-db /docker-entrypoint.sh 13 Up
harbor-jobservice /harbor/entrypoint.sh Up
harbor-log /bin/sh -c /usr/local/bin/ ... Up 127.0.0.1:1514-&amp;gt;10514/tcp
harbor-portal nginx -g daemon off; Up
nginx nginx -g daemon off; Up 0.0.0.0:80-&amp;gt;8080/tcp,:::80-&amp;gt;8080/tcp,
0.0.0.0:443-&amp;gt;8443/tcp,:::443-&amp;gt;8443/tcp
redis redis-server /etc/redis.conf Up
registry /home/harbor/entrypoint.sh Up
registryctl /home/harbor/start.sh Up
trivy-adapter /home/scanner/entrypoint.sh Up&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="19"&gt;
&lt;li&gt;透過 curl 檢查，可否 Access harbor 的 Web UI&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ curl -k -H &amp;#34;host: 192.168.61.61&amp;#34; &amp;#34;https://harbor.example.com/dashboard/&amp;#34;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;meta charset=&amp;#34;utf-8&amp;#34;/&amp;gt;
&amp;lt;title&amp;gt;Harbor&amp;lt;/title&amp;gt;
&amp;lt;base href=&amp;#34;/&amp;#34;/&amp;gt;
&amp;lt;meta name=&amp;#34;viewport&amp;#34; content=&amp;#34;width=device-width, initial-scale=1&amp;#34;/&amp;gt;
&amp;lt;link rel=&amp;#34;icon&amp;#34; type=&amp;#34;image/x-icon&amp;#34; href=&amp;#34;favicon.ico?v=2&amp;#34;/&amp;gt;
&amp;lt;link rel=&amp;#34;stylesheet&amp;#34; href=&amp;#34;styles.778b44f8c96802aa.css&amp;#34;&amp;gt;&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;harbor-app&amp;gt;
&amp;lt;div class=&amp;#34;spinner spinner-lg app-loading app-loading-fixed&amp;#34;&amp;gt;
Loading...
&amp;lt;/div&amp;gt;
&amp;lt;/harbor-app&amp;gt;
&amp;lt;script src=&amp;#34;runtime.5bc96e435ac00039.js&amp;#34; type=&amp;#34;module&amp;#34;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;script src=&amp;#34;polyfills.d52770ae19691b1f.js&amp;#34; type=&amp;#34;module&amp;#34;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;script src=&amp;#34;scripts.fc6b7827d4dcd875.js&amp;#34; defer&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;script src=&amp;#34;main.a842fe34c6928c35.js&amp;#34; type=&amp;#34;module&amp;#34;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="19"&gt;
&lt;li&gt;在 Firefox 瀏覽器匯入憑證 (&lt;code&gt;ca.pem&lt;/code&gt;)&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;步驟 : 設定 -&amp;gt; 隱私與安全性 -&amp;gt; 檢視憑證 -&amp;gt; 匯入&lt;/p&gt;
&lt;p&gt;&lt;img src="https://i.imgur.com/JMoScUp.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;ol start="20"&gt;
&lt;li&gt;在瀏覽器上登入 harbor&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-1"&gt;
&lt;ul&gt;
&lt;li&gt;帳號: admin&lt;/li&gt;
&lt;li&gt;密碼: Harbor12345&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;ol start="21"&gt;
&lt;li&gt;建立一個 rancher 的 project 點選公開&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://i.imgur.com/nfHacpH.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;ol start="22"&gt;
&lt;li&gt;透過 docker 登入 harbor&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo docker login harbor.example.com&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;Authenticating with existing credentials...
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="23"&gt;
&lt;li&gt;設定 Harbor 在機器開機時自動啟動&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ cat &amp;lt;&amp;lt;EOF | sudo tee /usr/lib/systemd/system/harbor.service
[Unit]
Description=Harbor start at boot
After=docker.service systemd-networkd.service systemd-resolved.service
Requires=docker.service
[Service]
Type=simple
Restart=on-failure
RestartSec=5
ExecStart=/usr/bin/docker-compose -f /home/rancher/harbor/v2.11.0/harbor/docker-compose.yml up
ExecStop=/usr/bin/docker-compose -f /home/rancher/harbor/v2.11.0/harbor/docker-compose.yml down
[Install]
WantedBy=multi-user.target
EOF&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo systemctl enable harbor --now &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;在 harbor 主機 準備 離線安裝 rke2,rancher,neuvector 所需之 image&lt;span class="hx:absolute hx:-mt-20" id="在-harbor-主機-準備-離線安裝-rke2rancherneuvector-所需之-image"&gt;&lt;/span&gt;
&lt;a href="#%e5%9c%a8-harbor-%e4%b8%bb%e6%a9%9f-%e6%ba%96%e5%82%99-%e9%9b%a2%e7%b7%9a%e5%ae%89%e8%a3%9d-rke2rancherneuvector-%e6%89%80%e9%9c%80%e4%b9%8b-image" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;建立並切換至 &lt;code&gt;rancher&lt;/code&gt; 目錄&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ mkdir rancher; cd rancher&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="2"&gt;
&lt;li&gt;將 &lt;code&gt;rancher-offline.tar.gz&lt;/code&gt; 解壓縮 (耗時約 3 分鐘)&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ tar -xzvf ../rancher-offline.tar.gz&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;cert-manager.crds.yaml
image/rancher-image.tar.gz
helm-v3.8.2-linux-amd64.tar.gz
rancher-2.7.3.tgz
cert-manager-v1.11.0.tgz
rancher-images.txt
rancher-load-images.sh
push.sh&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="3"&gt;
&lt;li&gt;檢查當前目錄之檔案是否符合預期&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ ls -lh&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;total 14M
-rw-r--r-- 1 1003 users 65K May 23 16:48 cert-manager-v1.11.0.tgz
-rw-r--r-- 1 1003 users 380K Jan 11 22:56 cert-manager.crds.yaml
-rw-r--r-- 1 1003 users 14M Apr 14 2022 helm-v3.8.2-linux-amd64.tar.gz
drwxr-xr-x 1 root root 40 Jun 7 00:30 image
-rwxr-xr-x 1 1003 users 1.4K May 26 09:55 push.sh
-rw-r--r-- 1 1003 users 14K May 22 10:22 rancher-2.7.3.tgz
-rw-r--r-- 1 1003 users 33K May 25 09:46 rancher-images.txt
-rw-r--r-- 1 1003 users 4.1K Apr 24 23:55 rancher-load-images.sh&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="4"&gt;
&lt;li&gt;編輯 &lt;code&gt;push.sh&lt;/code&gt; 程式，&lt;font size=5 color=red&gt;&lt;strong&gt;須修改程式內 image 壓縮檔的目錄&lt;/strong&gt;&lt;/font&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ vi push.sh&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;將第 10 行的 &lt;code&gt;compressed_files/&lt;/code&gt; 刪除&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# Load image
sudo docker load --input compressed_files/image/rancher-image.tar.gz&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;改成&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# Load image
sudo docker load --input image/rancher-image.tar.gz&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="5"&gt;
&lt;li&gt;執行自動將 離線安裝 rke2、rancher 和 neuvector 的 image PUSH 到 自建 Harbor (耗時約 2 小時左右)&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ ./push.sh&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;#!/bin/bash
# output log
exec {BASH_XTRACEFD}&amp;gt;&amp;gt;detail.log
# Debug mode
set -x
# Load image
sudo docker load --input image/rancher-image.tar.gz | tee load-image.std.log 2&amp;gt; load-image.str.log
[ &amp;#34;$?&amp;#34; != &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo load image fail &amp;amp;&amp;amp; exit 1
# var
rancher_image=$(sudo docker images --format &amp;#34;{{.Repository}}:{{.Tag}}&amp;#34; | grep &amp;#39;^registry.rancher.com&amp;#39;)
n_image=$(sudo docker images --format &amp;#34;{{.Repository}}:{{.Tag}}&amp;#34; | grep &amp;#34;^neuvector&amp;#34;)
cert_image=$(sudo docker images --format &amp;#34;{{.Repository}}:{{.Tag}}&amp;#34; | grep &amp;#34;^quay.io&amp;#34;)
registry_name=&amp;#39;harbor.example.com&amp;#39;
for n in $cert_image
do
x=$(echo ${n/quay.io/${registry_name}})
sudo docker tag &amp;#34;$n&amp;#34; &amp;#34;${x/jetstack/rancher}&amp;#34;
[ &amp;#34;$?&amp;#34; != &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;$n&amp;#34; tag fail &amp;gt;&amp;gt; tag.log &amp;amp;&amp;amp; exit 1
sudo docker push &amp;#34;${x/jetstack/rancher}&amp;#34;
[ &amp;#34;$?&amp;#34; != &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;${x/jetstack/rancher}&amp;#34; push fail &amp;gt;&amp;gt; push.log &amp;amp;&amp;amp; exit 1
done
for e in $n_image
do
a=$(echo ${registry_name}/rancher/&amp;#34;$e&amp;#34;)
sudo docker tag &amp;#34;$e&amp;#34; &amp;#34;$a&amp;#34;
[ &amp;#34;$?&amp;#34; != &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;$e&amp;#34; tag fail &amp;gt;&amp;gt; tag.log &amp;amp;&amp;amp; exit 1
sudo docker push &amp;#34;$a&amp;#34;
[ &amp;#34;$?&amp;#34; != &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;$a&amp;#34; push fail &amp;gt;&amp;gt; push.log &amp;amp;&amp;amp; exit 1
done
for r in $rancher_image
do
sudo docker tag $r ${r/registry.rancher.com/${registry_name}}
[ &amp;#34;$?&amp;#34; != &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;$r&amp;#34; tag fail &amp;gt;&amp;gt; tag.log &amp;amp;&amp;amp; exit 1
sudo docker push &amp;#34;${r/registry.rancher.com/${registry_name}}&amp;#34;
[ &amp;#34;$?&amp;#34; != &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;${r/registry.rancher.com/${registry_name}}&amp;#34; push fail &amp;gt;&amp;gt; push.log &amp;amp;&amp;amp; exit 1
done&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;ol start="6"&gt;
&lt;li&gt;到 harbor 網站檢查 image 的數量應該要有 200 張&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/BkRYZYhU3.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;安裝 Upstream Cluster - RKE2 v1.25.9&lt;span class="hx:absolute hx:-mt-20" id="安裝-upstream-cluster---rke2-v1259"&gt;&lt;/span&gt;
&lt;a href="#%e5%ae%89%e8%a3%9d-upstream-cluster---rke2-v1259" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;連線至 Rancher 主機&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;檢查 Harbor 和 Rancher 的名稱解析&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ host rancher.example.com &amp;amp;&amp;amp; host harbor.example.com&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;rancher.example.com has address 192.168.61.62
harbor.example.com has address 192.168.61.61&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="3"&gt;
&lt;li&gt;解壓縮 &lt;code&gt;rke2-airgap-v1.28.10.tar.gz&lt;/code&gt;，並切換至 &lt;code&gt;rke2&lt;/code&gt; 目錄&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ tar -zxvf rke2-airgap-v1.28.10.tar.gz &amp;amp;&amp;amp; cd rke2/v1.28.10&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="4"&gt;
&lt;li&gt;檢視目錄結構&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ ls -lh&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;total 939M
-rwxr-xr-x 1 rancher users 22K May 23 13:48 install.sh
-rw-r--r-- 1 rancher users 915M May 23 13:46 rke2-images.linux-amd64.tar.zst
-rw-r--r-- 1 rancher users 25M May 23 13:47 rke2.linux-amd64.tar.gz
-rw-r--r-- 1 rancher users 3.6K May 23 13:47 sha256sum-amd64.txt&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="5"&gt;
&lt;li&gt;將 RKE2 全離線安裝包的物件，搬移至 &lt;code&gt;/root/rke2-artifacts/&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo mkdir /root/rke2-artifacts &amp;amp;&amp;amp; sudo mv * /root/rke2-artifacts/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="6"&gt;
&lt;li&gt;切換為 root 使用者，並將工作目錄切換至 &lt;code&gt;/root/rke2-artifacts/&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo su - root
# cd /root/rke2-artifacts/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="7"&gt;
&lt;li&gt;檢視目錄結構&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# ls -lh&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;total 939M
-rwxr-xr-x 1 rancher users 22K May 23 13:48 install.sh
-rw-r--r-- 1 rancher users 915M May 23 13:46 rke2-images.linux-amd64.tar.zst
-rw-r--r-- 1 rancher users 25M May 23 13:47 rke2.linux-amd64.tar.gz
-rw-r--r-- 1 rancher users 3.6K May 23 13:47 sha256sum-amd64.txt&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="8"&gt;
&lt;li&gt;執行 RKE2 安裝腳本&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# INSTALL_RKE2_ARTIFACT_PATH=/root/rke2-artifacts sh install.sh&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;[WARN] /usr/local is read-only or a mount point; installing to /opt/rke2
[INFO] staging local checksums from /root/rke2-artifacts/sha256sum-amd64.txt
[INFO] staging zst airgap image tarball from /root/rke2-artifacts/rke2-images.linux-amd64.tar.zst
[INFO] staging tarball from /root/rke2-artifacts/rke2.linux-amd64.tar.gz
[INFO] verifying airgap tarball
grep: /tmp/rke2-install.VlfWezVfj7/rke2-images.checksums: No such file or directory
[INFO] installing airgap tarball to /var/lib/rancher/rke2/agent/images
[INFO] verifying tarball
[INFO] unpacking tarball file to /opt/rke2
[INFO] updating tarball contents to reflect install path
[INFO] moving systemd units to /etc/systemd/system
[INFO] install complete; you may want to run: export PATH=$PATH:/opt/rke2/bin
r1:~/rke2-artifacts # export PATH=$PATH:/opt/rke2/bin&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="9"&gt;
&lt;li&gt;設定 RKE2 Node 之基本組態檔&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# mkdir -p /etc/rancher/rke2/
# vim /etc/rancher/rke2/config.yaml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;檔案內容 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;node-name:
- &amp;#34;rms-1&amp;#34;
token: my-shared-secret&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="10"&gt;
&lt;li&gt;設定 RKE2 的 Registry 設定檔&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-1"&gt;
&lt;ul&gt;
&lt;li&gt;在 Upstream Cluster 中，每一台 Node 都要設定&lt;/li&gt;
&lt;li&gt;並且每一台 Node 都要可以解析的到 Harbor 的 Domain Name&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-1"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ vim /etc/rancher/rke2/registries.yaml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;檔案內容 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;mirrors:
docker.io:
endpoint:
- &amp;#34;https://harbor.example.com&amp;#34;
configs:
&amp;#34;harbor.example.com&amp;#34;:
auth:
username: admin
password: Harbor12345
tls:
insecure_skip_verify: true&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="11"&gt;
&lt;li&gt;啟用 RKE2 服務&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# systemctl enable --now rke2-server&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;Created symlink /etc/systemd/system/multi-user.target.wants/rke2-server.service → /etc/systemd/system/rke2-server.service.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;退出 root 使用者&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# exit&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="12"&gt;
&lt;li&gt;設定 &lt;code&gt;kubeconfig&lt;/code&gt; 和 &lt;code&gt;kubectl&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ cd ~ &amp;amp;&amp;amp; mkdir ~/.kube &amp;amp;&amp;amp; \
sudo cp /etc/rancher/rke2/rke2.yaml .kube/config &amp;amp;&amp;amp; \
sudo chown rancher .kube/config &amp;amp;&amp;amp; \
sudo cp /var/lib/rancher/rke2/bin/kubectl /usr/local/bin/ &amp;amp;&amp;amp; \
sudo cp /opt/rke2/bin/* /usr/local/bin/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="13"&gt;
&lt;li&gt;檢視 node 狀態&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ kubectl get nodes&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;NAME STATUS ROLES AGE VERSION
rms-1 Ready control-plane,etcd,master 27m v1.25.9&amp;#43;rke2r1&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="14"&gt;
&lt;li&gt;如果要 Join 多台 Server Nodes ，重複以上流程即可 (不是 HA 架構，請跳過本步驟)&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;strong&gt;Note: 在建立其他台 Server Nodes 時，RKE2 基本組態設定檔必須指定第一台 RKE2 Server node 的 IP&lt;/strong&gt;&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ vim /etc/rancher/rke2/config.yaml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;檔案內容 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;server: https://192.168.80.12:9345
node-name:
- &amp;#34;rms-2&amp;#34;
token: my-shared-secret&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="15"&gt;
&lt;li&gt;Run 一個 Nginx 的 Pod ，測試可否拉的到 Harbor 上的 Image&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ kubectl run myweb --image=rancher/library-nginx:1.19.2-alpine&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;pod/myweb created&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;檢查 STATUS 是否為 &lt;code&gt;Running&lt;/code&gt;&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ kubectl get pod&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;NAME READY STATUS RESTARTS AGE
pod/web 1/1 Running 0 4s&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;安裝 Rancher Prime v2.7.3&lt;span class="hx:absolute hx:-mt-20" id="安裝-rancher-prime-v273"&gt;&lt;/span&gt;
&lt;a href="#%e5%ae%89%e8%a3%9d-rancher-prime-v273" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;連線至 Rancher 所在之主機&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;檢查 Harbor 和 Rancher 的名稱解析&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ host rancher.example.com &amp;amp;&amp;amp; host harbor.example.com&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;rancher.example.com has address 192.168.61.62
harbor.example.com has address 192.168.61.61&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="3"&gt;
&lt;li&gt;解壓縮 Rancher 離線安裝包 &lt;code&gt;rancher-offline.tar.gz&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ tar -zxvf rancher-airgap-config-v2.8.5.tar.gz&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;rancher/v2.8.5/
rancher/v2.8.5/rancher-2.8.5.tgz
rancher/v2.8.5/cert-manager-v1.15.1.tgz
rancher/v2.8.5/cert-manager.yaml
rancher/v2.8.5/cmctl
rancher/v2.8.5/helm-v3.15.1-linux-amd64.tar.gz
rancher/v2.8.5/rancher-images.txt
rancher/v2.8.5/rancher-load-images.sh
rancher/v2.8.5/rancher-save-images.sh
rancher/v2.8.5/push.sh&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="4"&gt;
&lt;li&gt;清除多餘檔案&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ rm -r image/ push.sh rancher-images.txt rancher-load-images.sh&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="5"&gt;
&lt;li&gt;檢視當前目錄的內容&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ ls -lh&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;total 14M
-rw-r--r-- 1 rancher users 380K Jan 11 22:56 cert-manager.crds.yaml
-rw-r--r-- 1 rancher users 65K May 23 16:48 cert-manager-v1.11.0.tgz
-rw-r--r-- 1 rancher users 14M Apr 14 2022 helm-v3.14.2-linux-amd64.tar.gz
-rw-r--r-- 1 rancher users 14K May 22 10:22 rancher-2.7.3.tgz&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="6"&gt;
&lt;li&gt;安裝 Helm v3.8.2&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ tar zxvf helm-v3.15.1-linux-amd64.tar.gz&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;linux-amd64/
linux-amd64/helm
linux-amd64/LICENSE
linux-amd64/README.md&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="7"&gt;
&lt;li&gt;將 helm 執行檔複製到 &lt;code&gt;/usr/local/bin/&lt;/code&gt; 目錄下&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo cp linux-amd64/helm /usr/local/bin/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="8"&gt;
&lt;li&gt;檢視 Helm 版本 應為 &lt;code&gt;v3.8.2&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ helm version&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;version.BuildInfo{Version:&amp;#34;v3.8.2&amp;#34;, GitCommit:&amp;#34;6e3701edea09e5d55a8ca2aae03a68917630e91b&amp;#34;, GitTreeState:&amp;#34;clean&amp;#34;, GoVersion:&amp;#34;go1.17.5&amp;#34;}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="9"&gt;
&lt;li&gt;透過 Helm Chart 產生 cert-manager 在 Kubernetes 中所需之資源清單的範本&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;sed &amp;#34;s|quay.io/jetstack|harbor.example.com/rancher|g&amp;#34; cert-manager.yaml | kubectl apply -f -&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ helm template cert-manager ./cert-manager-v1.14.0.tgz --output-dir . \
--namespace cert-manager \
--set image.repository=rancher/cert-manager-controller \
--set webhook.image.repository=rancher/cert-manager-webhook \
--set cainjector.image.repository=rancher/cert-manager-cainjector \
--set startupapicheck.image.repository=rancher/cert-manager-ctl&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;wrote ./cert-manager/templates/cainjector-serviceaccount.yaml
wrote ./cert-manager/templates/serviceaccount.yaml
wrote ./cert-manager/templates/webhook-serviceaccount.yaml
wrote ./cert-manager/templates/webhook-config.yaml
wrote ./cert-manager/templates/cainjector-rbac.yaml
wrote ./cert-manager/templates/rbac.yaml
wrote ./cert-manager/templates/rbac.yaml
wrote ./cert-manager/templates/rbac.yaml
wrote ./cert-manager/templates/rbac.yaml
wrote ./cert-manager/templates/rbac.yaml
wrote ./cert-manager/templates/rbac.yaml
wrote ./cert-manager/templates/rbac.yaml
wrote ./cert-manager/templates/rbac.yaml
wrote ./cert-manager/templates/rbac.yaml
wrote ./cert-manager/templates/rbac.yaml
wrote ./cert-manager/templates/webhook-rbac.yaml
wrote ./cert-manager/templates/cainjector-rbac.yaml
wrote ./cert-manager/templates/rbac.yaml
wrote ./cert-manager/templates/rbac.yaml
wrote ./cert-manager/templates/rbac.yaml
wrote ./cert-manager/templates/rbac.yaml
wrote ./cert-manager/templates/rbac.yaml
wrote ./cert-manager/templates/rbac.yaml
wrote ./cert-manager/templates/rbac.yaml
wrote ./cert-manager/templates/rbac.yaml
wrote ./cert-manager/templates/webhook-rbac.yaml
wrote ./cert-manager/templates/cainjector-rbac.yaml
wrote ./cert-manager/templates/rbac.yaml
wrote ./cert-manager/templates/webhook-rbac.yaml
wrote ./cert-manager/templates/cainjector-rbac.yaml
wrote ./cert-manager/templates/rbac.yaml
wrote ./cert-manager/templates/webhook-rbac.yaml
wrote ./cert-manager/templates/service.yaml
wrote ./cert-manager/templates/webhook-service.yaml
wrote ./cert-manager/templates/cainjector-deployment.yaml
wrote ./cert-manager/templates/deployment.yaml
wrote ./cert-manager/templates/webhook-deployment.yaml
wrote ./cert-manager/templates/webhook-mutating-webhook.yaml
wrote ./cert-manager/templates/webhook-validating-webhook.yaml
wrote ./cert-manager/templates/startupapicheck-serviceaccount.yaml
wrote ./cert-manager/templates/startupapicheck-rbac.yaml
wrote ./cert-manager/templates/startupapicheck-rbac.yaml
wrote ./cert-manager/templates/startupapicheck-job.yaml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="10"&gt;
&lt;li&gt;在 K8S 中，建立 cert-manager Namespace&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ kubectl create ns cert-manager&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;namespace/cert-manager created&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="11"&gt;
&lt;li&gt;建立 cert-manager CRDs 資源&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ kubectl create -f cert-manager-crd.yaml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;customresourcedefinition.apiextensions.k8s.io/clusterissuers.cert-manager.io created
customresourcedefinition.apiextensions.k8s.io/challenges.acme.cert-manager.io created
customresourcedefinition.apiextensions.k8s.io/certificaterequests.cert-manager.io created
customresourcedefinition.apiextensions.k8s.io/issuers.cert-manager.io created
customresourcedefinition.apiextensions.k8s.io/certificates.cert-manager.io created
customresourcedefinition.apiextensions.k8s.io/orders.acme.cert-manager.io created&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="12"&gt;
&lt;li&gt;建立 cert-manager&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ kubectl apply -R -f cert-manager/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;deployment.apps/cert-manager-cainjector created
clusterrole.rbac.authorization.k8s.io/cert-manager-cainjector created
clusterrolebinding.rbac.authorization.k8s.io/cert-manager-cainjector created
role.rbac.authorization.k8s.io/cert-manager-cainjector:leaderelection created
rolebinding.rbac.authorization.k8s.io/cert-manager-cainjector:leaderelection created
serviceaccount/cert-manager-cainjector created
deployment.apps/cert-manager created
clusterrole.rbac.authorization.k8s.io/cert-manager-controller-issuers created
clusterrole.rbac.authorization.k8s.io/cert-manager-controller-clusterissuers created
clusterrole.rbac.authorization.k8s.io/cert-manager-controller-certificates created
clusterrole.rbac.authorization.k8s.io/cert-manager-controller-orders created
clusterrole.rbac.authorization.k8s.io/cert-manager-controller-challenges created
clusterrole.rbac.authorization.k8s.io/cert-manager-controller-ingress-shim created
clusterrole.rbac.authorization.k8s.io/cert-manager-view created
clusterrole.rbac.authorization.k8s.io/cert-manager-edit created
clusterrole.rbac.authorization.k8s.io/cert-manager-controller-approve:cert-manager-io created
clusterrole.rbac.authorization.k8s.io/cert-manager-controller-certificatesigningrequests created
clusterrolebinding.rbac.authorization.k8s.io/cert-manager-controller-issuers created
clusterrolebinding.rbac.authorization.k8s.io/cert-manager-controller-clusterissuers created
clusterrolebinding.rbac.authorization.k8s.io/cert-manager-controller-certificates created
clusterrolebinding.rbac.authorization.k8s.io/cert-manager-controller-orders created
clusterrolebinding.rbac.authorization.k8s.io/cert-manager-controller-challenges created
clusterrolebinding.rbac.authorization.k8s.io/cert-manager-controller-ingress-shim created
clusterrolebinding.rbac.authorization.k8s.io/cert-manager-controller-approve:cert-manager-io created
clusterrolebinding.rbac.authorization.k8s.io/cert-manager-controller-certificatesigningrequests created
role.rbac.authorization.k8s.io/cert-manager:leaderelection created
rolebinding.rbac.authorization.k8s.io/cert-manager:leaderelection created
service/cert-manager created
serviceaccount/cert-manager created
job.batch/cert-manager-startupapicheck created
role.rbac.authorization.k8s.io/cert-manager-startupapicheck:create-cert created
rolebinding.rbac.authorization.k8s.io/cert-manager-startupapicheck:create-cert created
serviceaccount/cert-manager-startupapicheck created
configmap/cert-manager-webhook created
deployment.apps/cert-manager-webhook created
mutatingwebhookconfiguration.admissionregistration.k8s.io/cert-manager-webhook created
clusterrole.rbac.authorization.k8s.io/cert-manager-webhook:subjectaccessreviews created
clusterrolebinding.rbac.authorization.k8s.io/cert-manager-webhook:subjectaccessreviews created
role.rbac.authorization.k8s.io/cert-manager-webhook:dynamic-serving created
rolebinding.rbac.authorization.k8s.io/cert-manager-webhook:dynamic-serving created
service/cert-manager-webhook created
serviceaccount/cert-manager-webhook created
validatingwebhookconfiguration.admissionregistration.k8s.io/cert-manager-webhook created&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="13"&gt;
&lt;li&gt;檢查 cert-manager 運行狀態&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ kubectl -n cert-manager get pod&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;NAME READY STATUS RESTARTS AGE
cert-manager-5ff9b8f69d-v5xqc 1/1 Running 0 16s
cert-manager-cainjector-785c5c866d-pnlwq 1/1 Running 0 16s
cert-manager-startupapicheck-dtjtr 0/1 Completed 0 6s
cert-manager-webhook-696d5db768-dklqd 1/1 Running 0 16s&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="14"&gt;
&lt;li&gt;透過 Helm Chart 產生 Rancher 在 Kubernetes 中所需之資源清單的範本&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ helm template --validate rancher ./rancher-2.8.5.tgz --output-dir . --no-hooks --namespace cattle-system \
--set hostname=rancher.example.com \
--set certmanager.version=1.15.1 \
--set rancherImage=rancher/rancher \
--set systemDefaultRegistry=harbor.example.com \
--set useBundledSystemChart=true \
--set global.cattle.psp.enabled=false \
--set replicas=3&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;wrote ./rancher/templates/serviceAccount.yaml
wrote ./rancher/templates/configMap.yaml
wrote ./rancher/templates/clusterRoleBinding.yaml
wrote ./rancher/templates/service.yaml
wrote ./rancher/templates/deployment.yaml
wrote ./rancher/templates/ingress.yaml
wrote ./rancher/templates/validate-psp-install.yaml
wrote ./rancher/templates/issuer-rancher.yaml
wrote ./rancher/templates/priorityClass.yaml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="15"&gt;
&lt;li&gt;在 K8S 中，建立 cattle-system Namespace&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ kubectl create namespace cattle-system&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;namespace/cattle-system created&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="16"&gt;
&lt;li&gt;建立 Rancher Prime v2.7.3&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ kubectl -n cattle-system apply -R -f rancher/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;clusterrolebinding.rbac.authorization.k8s.io/rancher created
configmap/rancher-config created
deployment.apps/rancher created
ingress.networking.k8s.io/rancher created
issuer.cert-manager.io/rancher created
priorityclass.scheduling.k8s.io/rancher-critical created
service/rancher created
serviceaccount/rancher created&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="17"&gt;
&lt;li&gt;檢查 Rancher 的 Deployment, Replicaset, Pod 和 service 運行狀態，是否都正常&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ watch -n 0.1 kubectl get all -n cattle-system -o wide&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/helm-operation-6rf56 0/2 Completed 0 10m 10.42.0.26 rms-1 &amp;lt;none&amp;gt; &amp;lt;none&amp;gt;
pod/helm-operation-m5hc9 0/2 Completed 0 10m 10.42.0.30 rms-1 &amp;lt;none&amp;gt; &amp;lt;none&amp;gt;
pod/helm-operation-qhr26 0/2 Completed 0 8m27s 10.42.0.36 rms-1 &amp;lt;none&amp;gt; &amp;lt;none&amp;gt;
pod/helm-operation-wtk87 0/2 Completed 0 10m 10.42.0.29 rms-1 &amp;lt;none&amp;gt; &amp;lt;none&amp;gt;
pod/rancher-79db978b9f-wl4lj 1/1 Running 0 11m 10.42.0.25 rms-1 &amp;lt;none&amp;gt; &amp;lt;none&amp;gt;
pod/rancher-webhook-6bc5b49767-56fkq 1/1 Running 0 10m 10.42.0.31 rms-1 &amp;lt;none&amp;gt; &amp;lt;none&amp;gt;
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
service/rancher ClusterIP 10.43.228.176 &amp;lt;none&amp;gt; 80/TCP,443/TCP 11m app=rancher
service/rancher-webhook ClusterIP 10.43.132.35 &amp;lt;none&amp;gt; 443/TCP 10m app=rancher-webhook
service/webhook-service ClusterIP 10.43.194.112 &amp;lt;none&amp;gt; 443/TCP 10m app=rancher-webhook
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES
SELECTOR
deployment.apps/rancher 1/1 1 1 11m rancher rancher/rancher:v2.7.3 app=rancher
deployment.apps/rancher-webhook 1/1 1 1 10m rancher-webhook harbor.example.com/rancher/rancher-webhook:v0.3.3 app=rancher-webhook
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES
SELECTOR
replicaset.apps/rancher-79db978b9f 1 1 1 11m rancher rancher/rancher:v2.7.3 app=rancher,pod-template-hash=79db978b9f
replicaset.apps/rancher-webhook-6bc5b49767 1 1 1 10m rancher-webhook harbor.example.com/rancher/rancher-webhook:v0.3.3 app=rancher-webhook,pod-template-hash=6bc5b49767 &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="18"&gt;
&lt;li&gt;透過 curl 檢查，可否 Access Rancher 的 Web UI&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ curl -k -H &amp;#34;host: rancher.example.com&amp;#34; https://192.168.61.61/dashboard/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;meta charset=&amp;#34;utf-8&amp;#34;/&amp;gt;
&amp;lt;title&amp;gt;Harbor&amp;lt;/title&amp;gt;
&amp;lt;base href=&amp;#34;/&amp;#34;/&amp;gt;
&amp;lt;meta name=&amp;#34;viewport&amp;#34; content=&amp;#34;width=device-width, initial-scale=1&amp;#34;/&amp;gt;
&amp;lt;link rel=&amp;#34;icon&amp;#34; type=&amp;#34;image/x-icon&amp;#34; href=&amp;#34;favicon.ico?v=2&amp;#34;/&amp;gt;
&amp;lt;link rel=&amp;#34;stylesheet&amp;#34; href=&amp;#34;styles.778b44f8c96802aa.css&amp;#34;&amp;gt;&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;harbor-app&amp;gt;
&amp;lt;div class=&amp;#34;spinner spinner-lg app-loading app-loading-fixed&amp;#34;&amp;gt;
Loading...
&amp;lt;/div&amp;gt;
&amp;lt;/harbor-app&amp;gt;
&amp;lt;script src=&amp;#34;runtime.5bc96e435ac00039.js&amp;#34; type=&amp;#34;module&amp;#34;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;script src=&amp;#34;polyfills.d52770ae19691b1f.js&amp;#34; type=&amp;#34;module&amp;#34;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;script src=&amp;#34;scripts.fc6b7827d4dcd875.js&amp;#34; defer&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;script src=&amp;#34;main.a842fe34c6928c35.js&amp;#34; type=&amp;#34;module&amp;#34;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;/### 安裝 minio&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;已把 minio 的 image push 到 harbor&lt;/li&gt;
&lt;li&gt;安裝 docker &amp;amp; docker-compse&lt;/li&gt;
&lt;li&gt;安裝好 minio 後，須把 cacerts.pem 會到火狐瀏覽器&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;domain=$2
ip=$3
help()
{
cat &amp;lt;&amp;lt;EOF
Usage: mk [OPTIONS]
Available options:
create create [domain] [IP]
delete delete cert
test test
EOF
exit
}
ssl()
{
openssl genrsa -aes256 -passout pass:password -out ca.key 4096
openssl req -new -x509 -sha256 -days 365 -subj &amp;#34;/C=TW/ST=Taipei/L=Taipei/O=test/OU=lab/CN=example&amp;#34; -passin pass:password -key ca.key -out cacerts.pem
openssl genrsa -out private.key 4096
openssl req -new -sha256 -subj &amp;#34;/CN=example&amp;#34; -key private.key -out cert.csr
echo -e &amp;#34;subjectAltName=DNS:${domain},IP:${ip}\nextendedKeyUsage = serverAuth&amp;#34; &amp;gt; extfile.cnf
openssl x509 -req -sha256 -days 365 -passin pass:password -in cert.csr -CA cacerts.pem -CAkey ca.key -out public.crt -extfile extfile.cnf -CAcreateserial
}
de()
{
rm ca.key cacerts.pem ca.srl cert.csr private.key public.crt extfile.cnf &amp;amp;&amp;gt;/dev/null
if [ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ];then
echo &amp;#34;delete all cert ok!&amp;#34;
else
echo &amp;#34;delete cert fail,please check!&amp;#34;
fi
}
ts()
{
openssl verify -CAfile cacerts.pem -verbose public.crt
}
case $1 in
create)
if [ &amp;#34;$#&amp;#34; == &amp;#34;3&amp;#34; ];then
ssl
else
help
fi
;;
delete)
de
;;
test)
ts
;;
*)
help
;;
esac&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo zypper in docker
$ sudo systemctl enable docker.service
$ sudo systemctl start docker.service
$ mkdir -p minio/{data,certs/CAs,ssl}
$ cd minio
$ ll
total 8284
drwxr-xr-x 2 rancher users 6 Mar 3 16:32 certs
drwxr-xr-x 2 rancher users 6 Mar 3 16:32 data
-rw-r--r-- 1 rancher users 8479184 Mar 3 16:31 docker-compose-Linux-x86_64
drwxr-xr-x 2 rancher users 6 Mar 3 16:32 ssl
$ sudo mv docker-compose-Linux-x86_64 /usr/bin/docker-compose
$ sudo chmod 755 /usr/bin/docker-compose
$ cd ~/minio/ssl
$ vim mk
$ chmod &amp;#43;x mk
$ ./mk create minio2.example.com 192.168.11.127
$ ./mk test
$ cp private.key public.crt ~/minio/certs
$ cp cacerts.pem ~/minio/certs/CAs/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# 把 harbor 簽好的 ca.pem scp 過來
# ssh 進入到 client 並且複製到 OS
$ sudo cp ca.pem /usr/share/pki/trust/anchors/
$ sudo cp ca.pem /etc/pki/trust/anchors/
$ sudo update-ca-certificates --fresh
# 把憑證塞入 docker 就可以使用 ca login
$ sudo mkdir /etc/docker/certs.d
$ sudo cp ca.pem /etc/docker/certs.d/
$ sudo systemctl restart docker
# 測試是否可以 login harbor
$ sudo docker login harbor.example.com
Username: admin
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# image 的來源要從 harbor 上的位置去做更改
$ vim docker-compose.yml
version: &amp;#39;3&amp;#39;
services:
minio:
image: harbor.example.com/library/minio
hostname: minio2.example.com
ports:
- 9000:9000
- 9001:9001
environment:
MINIO_ACCESS_KEY: admin
MINIO_SECRET_KEY: admin123
volumes:
- /home/rancher/minio/data:/data
- /home/rancher/minio/config:/root/.minio/
- /home/rancher/minio/certs:/root/.minio/certs
command: server --console-address &amp;#39;:9001&amp;#39; /data
privileged: true
restart: always
$ sudo docker-compose up -d
$ sudo docker-compose ps
Name Command State Ports
-------------------------------------------------------------------------------------------------------------------------------------------
minio_minio_1 /usr/bin/docker-entrypoint ... Up 0.0.0.0:9000-&amp;gt;9000/tcp,:::9000-&amp;gt;9000/tcp, 0.0.0.0:9001-&amp;gt;9001/tcp,:::9001-&amp;gt;9001/tcp&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;登入 minio 帳號:admin 密碼admin123&lt;/li&gt;
&lt;li&gt;minio 建立 bucket
&lt;img src="https://i.imgur.com/Z8LwQuq.png" alt="" loading="lazy" /&gt;&lt;/li&gt;
&lt;li&gt;設為公開
&lt;img src="https://i.imgur.com/bV7dQ2V.png" alt="" loading="lazy" /&gt;&lt;/li&gt;
&lt;li&gt;建立目錄區，建好後要先塞一個檔案給他，不然目錄會不見
&lt;img src="https://i.imgur.com/Egt1diu.png" alt="" loading="lazy" /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;安裝 Downstream cluster&lt;span class="hx:absolute hx:-mt-20" id="安裝-downstream-cluster"&gt;&lt;/span&gt;
&lt;a href="#%e5%ae%89%e8%a3%9d-downstream-cluster" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;設定 Registry Endpoint&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/Sk7uGaCU3.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;ol start="2"&gt;
&lt;li&gt;建好 Downstream cluster 後需要手動把 &lt;code&gt;rke2&lt;/code&gt; command 丟到 &lt;code&gt;/usr/local/bin/&lt;/code&gt; 這個目錄，不然在 snapshot 時會有問題&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo cp /opt/rke2/bin/* /usr/local/bin/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;安裝 Neuvector&lt;span class="hx:absolute hx:-mt-20" id="安裝-neuvector"&gt;&lt;/span&gt;
&lt;a href="#%e5%ae%89%e8%a3%9d-neuvector" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;開啟瀏覽器，進到 Rancher Web UI&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;選擇 Downstream Cluster &amp;ndash;&amp;gt; 點選 &amp;ldquo;Cluster Tools&amp;rdquo; &amp;ndash;&amp;gt; 點擊 &amp;ldquo;Install&amp;rdquo;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/rJG5UpCLh.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;ol start="3"&gt;
&lt;li&gt;選擇 &amp;ldquo;Customize Helm options brfore install&amp;rdquo;，並確認 Container Registry 位址&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/HJT1PTC82.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;ol start="4"&gt;
&lt;li&gt;設定 Neuvector 的 Container Images&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;rancher/neuvector/controller
5.1.3
rancher/neuvector/manager
5.1.3
rancher/neuvector/enforcer
5.1.3
rancher/neuvector/scanner
latest
rancher/neuvector/updater
latest&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/S1-RwpA8h.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;ol start="5"&gt;
&lt;li&gt;設定 Container Runtime 為 &amp;ldquo;k3s Containerd Runtime&amp;rdquo;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;至 Dostream Cluster 機器執行以下命令，檢查 &lt;code&gt;containerd.sock&lt;/code&gt; 的路徑是否正確&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo ls -l /run/k3s/containerd/containerd.sock&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/ByUe_pCL2.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;ol start="6"&gt;
&lt;li&gt;
&lt;p&gt;&amp;ldquo;Next&amp;rdquo; &amp;ndash;&amp;gt; &amp;ldquo;Install&amp;rdquo;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;安裝好後，點擊左側選單 &amp;ldquo;Neuvector&amp;rdquo; &amp;ndash;&amp;gt; &amp;ldquo;Neuvector&amp;rdquo;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/SJ7ftTCL3.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;ol start="8"&gt;
&lt;li&gt;Neuvector 畫面&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/ByokKp0Lh.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h6&gt;tags: &lt;code&gt;work&lt;/code&gt;&lt;span class="hx:absolute hx:-mt-20" id="tags-work"&gt;&lt;/span&gt;
&lt;a href="#tags-work" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h6&gt;</description></item><item><title>Enable Rancher vcluster on Airgap Harvester</title><link>https://blog.kubeantony.com/archive/rancher/enable-rancher-vcluster-on-airgap-harvester/</link><pubDate>Fri, 05 Jul 2024 14:10:08 +0800</pubDate><guid>https://blog.kubeantony.com/archive/rancher/enable-rancher-vcluster-on-airgap-harvester/</guid><description>
&lt;h2&gt;1. Prepare Container Images and Helm Charts&lt;span class="hx:absolute hx:-mt-20" id="1-prepare-container-images-and-helm-charts"&gt;&lt;/span&gt;
&lt;a href="#1-prepare-container-images-and-helm-charts" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# 在可上網的機器進行環境準備
# 1. 建立工作目錄
$ mkdir -p ~/rancher_vcluster/charts &amp;amp;&amp;amp; \
cd ~/rancher_vcluster
# 2. 安裝 Helm
$ curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
# 3. 準備 Vcluster 的 Helm Charts
$ helm repo add rancher-vcluster https://charts.loft.sh
$ helm fetch rancher-vcluster/vcluster --version 0.19.0
# 4. 準備 Cert-manager 的 Helm Charts
$ helm repo add jetstack https://charts.jetstack.io
$ helm fetch jetstack/cert-manager --version v1.5.1
# 5. 準備 Rancher 的 Helm Charts
$ helm repo add rancher https://releases.rancher.com/server-charts/stable/
$ helm fetch rancher/rancher --version v2.8.2
$ mv vcluster-0.19.0.tgz rancher-2.8.2.tgz cert-manager-v1.5.1.tgz ~/rancher_vcluster/charts
# 6. 撰寫 Container Images 清單
$ echo &amp;#39;docker.io/coredns/coredns:1.10.1
ghcr.io/loft-sh/vcluster:0.19.0
quay.io/jetstack/cert-manager-cainjector:v1.5.1
quay.io/jetstack/cert-manager-controller:v1.5.1
quay.io/jetstack/cert-manager-webhook:v1.5.1
quay.io/jetstack/cert-manager-ctl:v1.5.1
docker.io/rancher/fleet:v0.9.0
docker.io/rancher/gitjob:v0.1.96
docker.io/rancher/k3s:v1.27.10-k3s2
docker.io/rancher/klipper-helm:v0.8.2-build20230815
docker.io/rancher/mirrored-cluster-api-controller:v1.4.4
docker.io/rancher/rancher-webhook:v0.4.2
docker.io/rancher/rancher:v2.8.2
docker.io/rancher/rancher-agent:v2.8.2
docker.io/rancher/shell:v0.1.22
docker.io/chartmuseum/chartmuseum:latest&amp;#39; &amp;gt; images-list.txt
## 7. 安裝 Podman
$ sudo zypper -n in podman
# 8. Pull Container images
$ for i in $(cat images-list.txt); do sudo podman pull $i; done
# 9. 將所有 Container images 存成 Tar 檔
$ sudo podman save -m $(cat images-list.txt | tr -s &amp;#34;\n&amp;#34; &amp;#34; &amp;#34;) &amp;gt; rancher-vcluster_v2.8.2.tar
# 10. 檢視當前目錄結構
$ tree --du -h .
.
├── [186K] charts
│ ├── [153K] cert-manager-v1.5.1.tgz
│ ├── [ 15K] rancher-2.8.2.tgz
│ └── [ 18K] vcluster-0.19.0.tgz
├── [ 601] images-list.txt
└── [4.7G] rancher-vcluster_v2.8.2.tar
4.7G used in 1 directory, 5 files
# 11. 壓成一包壓縮檔
$ cd; tar -czvf rancher-vcluster-airgap.tar.gz ~/rancher_vcluster/
$ ls -lh ~/rancher-vcluster-airgap.tar.gz
-rw-r--r-- 1 rancher users 2.0G Jul 5 20:18 rancher-vcluster-airgap.tar.gz&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;2. Installing rancher-vcluster&lt;span class="hx:absolute hx:-mt-20" id="2-installing-rancher-vcluster"&gt;&lt;/span&gt;
&lt;a href="#2-installing-rancher-vcluster" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# 1. 切換成 root
$ sudo su - root
# 2. 解壓縮 rancher-vcluster-airgap.tar.gz
$ tar -zxvf /PATH/TO/rancher-vcluster-airgap.tar.gz &amp;amp;&amp;amp; \
cd rancher_vcluster/
# 3. 匯入 Container images (每一台 Harvester Node 都要 Import)
$ ctr -n k8s.io images import rancher-vcluster_v2.8.2.tar
# 4. 為建立 chartmuseum Container 建立永存目錄
$ mkdir -m 755 -p /opt/charts &amp;amp;&amp;amp; \
cd /opt/charts
# 5. 將各 charts 放入
$ cp /root/rancher_vcluster/charts/* /opt/charts/
# 6. 修改權限讓其他人可讀取
$ chmod 644 /opt/charts/*
# 7. 建立並啟動 chartmuseum
$ nerdctl -n k8s.io run -d --name chartmuseum -p 8080:8080 \
-e STORAGE=local \
-e STORAGE_LOCAL_ROOTDIR=/charts \
-v /opt/charts:/charts \
chartmuseum/chartmuseum:latest
# 8. 檢查 chartmuseum 狀態
$ nerdctl -n k8s.io ps -a --filter name=chartmuseum
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
efee2f9023dd docker.io/chartmuseum/chartmuseum:latest &amp;#34;/chartmuseum&amp;#34; 20 seconds ago Up 0.0.0.0:8080-&amp;gt;8080/tcp chartmuseum
# 9. TEST
$ curl localhost:8080/api/charts | jq
{
&amp;#34;cert-manager&amp;#34;: [
{
&amp;#34;name&amp;#34;: &amp;#34;cert-manager&amp;#34;,
&amp;#34;home&amp;#34;: &amp;#34;https://github.com/jetstack/cert-manager&amp;#34;,
&amp;#34;sources&amp;#34;: [
&amp;#34;https://github.com/jetstack/cert-manager&amp;#34;
],
&amp;#34;version&amp;#34;: &amp;#34;v1.5.1&amp;#34;,
&amp;#34;description&amp;#34;: &amp;#34;A Helm chart for cert-manager&amp;#34;,
&amp;#34;keywords&amp;#34;: [
&amp;#34;cert-manager&amp;#34;,
&amp;#34;kube-lego&amp;#34;,
&amp;#34;letsencrypt&amp;#34;,
&amp;#34;tls&amp;#34;
],
&amp;#34;maintainers&amp;#34;: [
{
&amp;#34;name&amp;#34;: &amp;#34;cert-manager-maintainers&amp;#34;,
&amp;#34;email&amp;#34;: &amp;#34;cert-manager-maintainers@googlegroups.com&amp;#34;
}
],
&amp;#34;icon&amp;#34;: &amp;#34;https://raw.githubusercontent.com/jetstack/cert-manager/master/logo/logo.png&amp;#34;,
&amp;#34;apiVersion&amp;#34;: &amp;#34;v1&amp;#34;,
&amp;#34;appVersion&amp;#34;: &amp;#34;v1.5.1&amp;#34;,
&amp;#34;annotations&amp;#34;: {
&amp;#34;artifacthub.io/prerelease&amp;#34;: &amp;#34;false&amp;#34;
},
&amp;#34;urls&amp;#34;: [
&amp;#34;charts/cert-manager-v1.5.1.tgz&amp;#34;
],
&amp;#34;created&amp;#34;: &amp;#34;2024-07-05T10:50:03.202872073Z&amp;#34;,
&amp;#34;digest&amp;#34;: &amp;#34;b152ccd3cf5bf03b602624110a661b62b188ab3cfee82fdaf269eb4a04770e1a&amp;#34;
}
],
&amp;#34;rancher&amp;#34;: [
{
&amp;#34;name&amp;#34;: &amp;#34;rancher&amp;#34;,
&amp;#34;home&amp;#34;: &amp;#34;https://rancher.com&amp;#34;,
&amp;#34;sources&amp;#34;: [
&amp;#34;https://github.com/rancher/rancher&amp;#34;,
&amp;#34;https://github.com/rancher/server-chart&amp;#34;
],
&amp;#34;version&amp;#34;: &amp;#34;2.8.2&amp;#34;,
&amp;#34;description&amp;#34;: &amp;#34;Install Rancher Server to manage Kubernetes clusters across providers.&amp;#34;,
&amp;#34;keywords&amp;#34;: [
&amp;#34;rancher&amp;#34;
],
&amp;#34;maintainers&amp;#34;: [
{
&amp;#34;name&amp;#34;: &amp;#34;Rancher Labs&amp;#34;,
&amp;#34;email&amp;#34;: &amp;#34;charts@rancher.com&amp;#34;
}
],
&amp;#34;icon&amp;#34;: &amp;#34;https://github.com/rancher/ui/blob/master/public/assets/images/logos/welcome-cow.svg&amp;#34;,
&amp;#34;apiVersion&amp;#34;: &amp;#34;v2&amp;#34;,
&amp;#34;appVersion&amp;#34;: &amp;#34;v2.8.2&amp;#34;,
&amp;#34;kubeVersion&amp;#34;: &amp;#34;&amp;lt; 1.28.0-0&amp;#34;,
&amp;#34;urls&amp;#34;: [
&amp;#34;charts/rancher-2.8.2.tgz&amp;#34;
],
&amp;#34;created&amp;#34;: &amp;#34;2024-07-05T10:50:03.202872073Z&amp;#34;,
&amp;#34;digest&amp;#34;: &amp;#34;8c9da08c0e38c5e89dc3ae64296c2fdca0045cc6e4bc44919e196d8cfe748f45&amp;#34;
}
],
&amp;#34;vcluster&amp;#34;: [
{
&amp;#34;name&amp;#34;: &amp;#34;vcluster&amp;#34;,
&amp;#34;home&amp;#34;: &amp;#34;https://vcluster.com&amp;#34;,
&amp;#34;sources&amp;#34;: [
&amp;#34;https://github.com/loft-sh/vcluster&amp;#34;
],
&amp;#34;version&amp;#34;: &amp;#34;0.19.0&amp;#34;,
&amp;#34;description&amp;#34;: &amp;#34;vcluster - Virtual Kubernetes Clusters&amp;#34;,
&amp;#34;keywords&amp;#34;: [
&amp;#34;developer&amp;#34;,
&amp;#34;development&amp;#34;,
&amp;#34;sharing&amp;#34;,
&amp;#34;share&amp;#34;,
&amp;#34;multi-tenancy&amp;#34;,
&amp;#34;tenancy&amp;#34;,
&amp;#34;cluster&amp;#34;,
&amp;#34;space&amp;#34;,
&amp;#34;namespace&amp;#34;,
&amp;#34;vcluster&amp;#34;,
&amp;#34;vclusters&amp;#34;
],
&amp;#34;maintainers&amp;#34;: [
{
&amp;#34;name&amp;#34;: &amp;#34;Loft Labs, Inc.&amp;#34;,
&amp;#34;email&amp;#34;: &amp;#34;info@loft.sh&amp;#34;,
&amp;#34;url&amp;#34;: &amp;#34;https://twitter.com/loft_sh&amp;#34;
}
],
&amp;#34;icon&amp;#34;: &amp;#34;https://static.loft.sh/branding/logos/vcluster/vertical/vcluster_vertical.svg&amp;#34;,
&amp;#34;apiVersion&amp;#34;: &amp;#34;v2&amp;#34;,
&amp;#34;appVersion&amp;#34;: &amp;#34;0.19.0&amp;#34;,
&amp;#34;type&amp;#34;: &amp;#34;application&amp;#34;,
&amp;#34;urls&amp;#34;: [
&amp;#34;charts/vcluster-0.19.0.tgz&amp;#34;
],
&amp;#34;created&amp;#34;: &amp;#34;2024-07-05T09:53:38.89886262Z&amp;#34;,
&amp;#34;digest&amp;#34;: &amp;#34;37b1b43bbac942dd303cea991dcb6e992338329aef62df0a9cf4dbec870bee57&amp;#34;
}
]
}
# 10. 編輯 rancher-vcluster 設定檔
$ echo &amp;#39;apiVersion: v1
kind: Namespace
metadata:
name: rancher-vcluster
---
apiVersion: harvesterhci.io/v1beta1
kind: Addon
metadata:
name: rancher-vcluster
namespace: rancher-vcluster
labels:
addon.harvesterhci.io/experimental: &amp;#34;true&amp;#34;
spec:
enabled: false
repo: https://charts.loft.sh
version: &amp;#34;v0.19.0&amp;#34;
chart: vcluster
valuesContent: |-
hostname: &amp;#34;&amp;#34;
rancherVersion: &amp;#34;v2.8.2&amp;#34;
bootstrapPassword: &amp;#34;&amp;#34;
vcluster:
image: rancher/k3s:v1.27.10-k3s2
sync:
ingresses:
enabled: &amp;#34;true&amp;#34;
init:
manifestsTemplate: |-
apiVersion: v1
kind: Namespace
metadata:
name: cattle-system
---
apiVersion: v1
kind: Namespace
metadata:
name: cert-manager
labels:
certmanager.k8s.io/disable-validation: &amp;#34;true&amp;#34;
---
apiVersion: helm.cattle.io/v1
kind: HelmChart
metadata:
name: cert-manager
namespace: kube-system
spec:
targetNamespace: cert-manager
repo: https://charts.jetstack.io
chart: cert-manager
version: v1.5.1
helmVersion: v3
set:
installCRDs: &amp;#34;true&amp;#34;
---
apiVersion: helm.cattle.io/v1
kind: HelmChart
metadata:
name: rancher
namespace: kube-system
spec:
targetNamespace: cattle-system
repo: https://releases.rancher.com/server-charts/stable/
chart: rancher
version: {{ .Values.rancherVersion }}
set:
ingress.tls.source: rancher
hostname: {{ .Values.hostname }}
replicas: 1
global.cattle.psp.enabled: &amp;#34;false&amp;#34;
bootstrapPassword: {{ .Values.bootstrapPassword | quote }}
helmVersion: v3&amp;#39; &amp;gt; rancher-vcluster.yaml
# 11. Installing rancher-vcluster
$ kubectl apply -f rancher-vcluster.yaml
namespace/rancher-vcluster created
addon.harvesterhci.io/rancher-vcluster created&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;3. Configuring rancher-vcluster&lt;span class="hx:absolute hx:-mt-20" id="3-configuring-rancher-vcluster"&gt;&lt;/span&gt;
&lt;a href="#3-configuring-rancher-vcluster" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;點選 &lt;code&gt;Advanced&lt;/code&gt; -&amp;gt; &lt;code&gt;Addons&lt;/code&gt; -&amp;gt; &lt;code&gt;⋮&lt;/code&gt; &amp;gt; &lt;code&gt;Enable&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/HJfDJmrP0.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;點選 &lt;code&gt;Enableled&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Hostname&lt;/code&gt; 欄位, 輸入指向 Harvester VIP 的有效 DNS record 。這一點至關重要，因為 vcluster 入口會同步到 parent Harvester 叢集。有效的 hostname 用於過濾 vcluster workload 的入口流量。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Bootstrap Password&lt;/code&gt; 欄位, 為 vcluster 上部署的新 Rancher 輸入密碼。&lt;/li&gt;
&lt;li&gt;點選右下角 Save 按鈕儲存。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/HJ7IWmrv0.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;進到 Harvester 內建 Racnher UI，點選 &lt;code&gt;Workloads&lt;/code&gt; -&amp;gt; &lt;code&gt;Pods&lt;/code&gt; -&amp;gt; &lt;code&gt;rancher-vcluster&lt;/code&gt; namepsace ，一開始一定會看到 Job Failed&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在 Rancher UI 上 clone &lt;code&gt;helm-install-rancher-vcluster-xx&lt;/code&gt; 這個 pod
將 helm Container 的 Environment Variables 區塊底下的 &lt;code&gt;REPO&lt;/code&gt; Variable Name 的 Value 改成 &lt;code&gt;http://&amp;lt;啟動 chartmuseum Container 的 Host 主機的 IP Address&amp;gt;:8080&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;然後安裝 Cert-manager 和 Rancher 的 Jobs 也會 Failed&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;clone &lt;code&gt;helm-install-cert-manager-xxx-x-kube-system-x-ranc-xxx&lt;/code&gt; 這個 pod
將 helm Container 的 Environment Variables 區塊底下的 &lt;code&gt;REPO&lt;/code&gt; Variable Name 的 Value 改成 &lt;code&gt;http://&amp;lt;啟動 chartmuseum Container 的 Host 主機的 IP Address&amp;gt;:8080&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;clone &lt;code&gt;helm-install-rancher-xxx-x-kube-system-x-rancher-vcluster&lt;/code&gt; 這個 pod
將 helm Container 的 Environment Variables 區塊底下的 &lt;code&gt;REPO&lt;/code&gt; Variable Name 的 Value 改成 &lt;code&gt;http://&amp;lt;啟動 chartmuseum Container 的 Host 主機的 IP Address&amp;gt;:8080&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;確認 &lt;code&gt;rancher-vcluster&lt;/code&gt; Namespace 中 Cert-manger 和 Rancher 所有的 Pods 都 Running，原來的 Job 還是 Failed 可以不理他。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/B1hdFwBDR.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;再產生 Rancher-vcluster 的 KubeConfig，並移除其實已經成功的 Job&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ kubectl -n rancher-vcluster exec rancher-vcluster-0 -- cat /root/.kube/config &amp;gt; vcluster-kubeconfig
$ kubectl --kubeconfig=vcluster-kubeconfig get nodes
NAME STATUS ROLES AGE VERSION
hvx02 Ready &amp;lt;none&amp;gt; 74m v1.27.10&amp;#43;k3s2
$ kubectl --kubeconfig=vcluster-kubeconfig -n kube-system delete job helm-install-rancher helm-install-cert-manager&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;4. 將 Harvester 加入 Rancher&lt;span class="hx:absolute hx:-mt-20" id="4-將-harvester-加入-rancher"&gt;&lt;/span&gt;
&lt;a href="#4-%e5%b0%87-harvester-%e5%8a%a0%e5%85%a5-rancher" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;連線至 Rancher Web Console&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/r1mVcwHw0.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;其實該 Job 已成功&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;登入 Rancher 後，點選 Virtualization Management -&amp;gt; Import Exsting&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/HJgacvrP0.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;Cluster Name: 輸入 &lt;code&gt;hvx&lt;/code&gt; ，按 Create&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/BJLWiDrv0.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;之後會發現沒有註冊的訊息跳出來&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/HyTAswBDR.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;手動將網址最後的 &lt;code&gt;#events&lt;/code&gt; 改成 &lt;code&gt;#registration&lt;/code&gt;&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;https://rancher.xxx.nip.io/dashboard/c/_/harvesterManager/harvesterhci.io.management.cluster/fleet-default/hvx#registration&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;然後按 Ctrl + Shift + R 清掉 Cache 並重新整理，就會看到註冊訊息&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/BkA_nDrvC.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;這時候就可以複製 註冊 URL 貼到 Harvester 中&lt;/p&gt;
&lt;p&gt;連線到 Harvester Web Console -&amp;gt; 左側選單 &lt;code&gt;Advanced&lt;/code&gt; -&amp;gt; &lt;code&gt;Settings&lt;/code&gt; -&amp;gt; &lt;code&gt;⋮&lt;/code&gt; &amp;gt; &lt;code&gt;Edit Setting&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/r19MpPrvC.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;在 Value 欄位貼上 &amp;ldquo;註冊 URL&amp;rdquo;，然後按右下角 Save 按鈕&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/Bk4cavHD0.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;等一陣子後 Harvester Cluster 就 Active 囉~&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/BkRW0DHDR.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;</description></item><item><title>Deploy Ollama &amp; Open WebUI on RKE2 with Rancher</title><link>https://blog.kubeantony.com/archive/rancher/deploy-ollama-open-webui-on-rke2-with-rancher/</link><pubDate>Fri, 05 Jul 2024 02:46:22 +0800</pubDate><guid>https://blog.kubeantony.com/archive/rancher/deploy-ollama-open-webui-on-rke2-with-rancher/</guid><description>
&lt;h2&gt;PreRequest&lt;span class="hx:absolute hx:-mt-20" id="prerequest"&gt;&lt;/span&gt;
&lt;a href="#prerequest" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h4&gt;Rancher&lt;span class="hx:absolute hx:-mt-20" id="rancher"&gt;&lt;/span&gt;
&lt;a href="#rancher" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;CPU: 4C&lt;/li&gt;
&lt;li&gt;MEM: 16G&lt;/li&gt;
&lt;li&gt;Disk: 70 G SSD nvme&lt;/li&gt;
&lt;li&gt;OS: SLES 15 SP6&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;RKE2&lt;span class="hx:absolute hx:-mt-20" id="rke2"&gt;&lt;/span&gt;
&lt;a href="#rke2" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;CPU: 4C&lt;/li&gt;
&lt;li&gt;MEM: 16G&lt;/li&gt;
&lt;li&gt;Disk: 70 G SSD nvme&lt;/li&gt;
&lt;li&gt;GPU: NVIDIA GeForce RTX 4060 Ti&lt;/li&gt;
&lt;li&gt;OS: SLES 15 SP6&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Software&lt;span class="hx:absolute hx:-mt-20" id="software"&gt;&lt;/span&gt;
&lt;a href="#software" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; 已安裝 Rancher&lt;/li&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; 已透過 Rancher 生成 RKE2&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;1. Install Nvidia Container Runtime on RKE2&lt;span class="hx:absolute hx:-mt-20" id="1-install-nvidia-container-runtime-on-rke2"&gt;&lt;/span&gt;
&lt;a href="#1-install-nvidia-container-runtime-on-rke2" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;#1. SSH RKE2 node
$ ssh &amp;lt;user&amp;gt;@&amp;lt;RKE2 node ip&amp;gt;
#2. 安裝 gcc 與 kernel-devel
$ sudo zypper mr -ea &amp;amp;&amp;amp; \
sudo zypper -n in gcc kernel-devel nvidia-container-toolkit
#3. 安裝 nvidia driver
$ v=&amp;#34;555.58.02&amp;#34; &amp;amp;&amp;amp; \
curl -L -O https://us.download.nvidia.com/XFree86/Linux-x86_64/&amp;#34;$v&amp;#34;/NVIDIA-Linux-x86_64-&amp;#34;$v&amp;#34;.run &amp;amp;&amp;amp; \
sudo sh NVIDIA-Linux-x86_64-&amp;#34;$v&amp;#34;.run
# 4. 重啟主機
$ sudo reboot&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# 5. test
$ nvidia-smi
Wed Jul 3 09:20:46 2024
&amp;#43;-----------------------------------------------------------------------------------------&amp;#43;
| NVIDIA-SMI 555.58.02 Driver Version: 555.58.02 CUDA Version: 12.5 |
|-----------------------------------------&amp;#43;------------------------&amp;#43;----------------------&amp;#43;
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================&amp;#43;========================&amp;#43;======================|
| 0 NVIDIA GeForce RTX 4060 Ti Off | 00000000:00:10.0 Off | N/A |
| 0% 47C P8 15W / 165W | 4MiB / 16380MiB | 0% Default |
| | | N/A |
&amp;#43;-----------------------------------------&amp;#43;------------------------&amp;#43;----------------------&amp;#43;
&amp;#43;-----------------------------------------------------------------------------------------&amp;#43;
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| No running processes found |
&amp;#43;-----------------------------------------------------------------------------------------&amp;#43;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# 6. Update RKE2 Containerd Configuration
## 6.1. Check
$ ls -l /usr/bin/nvidia-container-runtime
-rwxr-xr-x 1 root root 4319136 Oct 20 2022 /usr/bin/nvidia-container-runtime
## 6.2. Backup
$ sudo cp /var/lib/rancher/rke2/agent/etc/containerd/config.toml .
## 6.3. Update
$ sudo cp /var/lib/rancher/rke2/agent/etc/containerd/config.toml /var/lib/rancher/rke2/agent/etc/containerd/config.toml.tmpl
$ sudo nano -Yone /var/lib/rancher/rke2/agent/etc/containerd/config.toml.tmpl
## 將以下內容加到檔案的最後面
[plugins.&amp;#34;io.containerd.grpc.v1.cri&amp;#34;.containerd.runtimes.&amp;#34;nvidia&amp;#34;]
runtime_type = &amp;#34;io.containerd.runc.v2&amp;#34;
[plugins.&amp;#34;io.containerd.grpc.v1.cri&amp;#34;.containerd.runtimes.&amp;#34;nvidia&amp;#34;.options]
BinaryName = &amp;#34;/usr/bin/nvidia-container-runtime&amp;#34;
## 6.4. 重啟主機
$ sudo reboot&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;2. Install gpu-operator on Rancher&lt;span class="hx:absolute hx:-mt-20" id="2-install-gpu-operator-on-rancher"&gt;&lt;/span&gt;
&lt;a href="#2-install-gpu-operator-on-rancher" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;2.1. Add Nvidia Helm Repository&lt;span class="hx:absolute hx:-mt-20" id="21-add-nvidia-helm-repository"&gt;&lt;/span&gt;
&lt;a href="#21-add-nvidia-helm-repository" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;點選 Cluster -&amp;gt; Apps -&amp;gt; Repositories -&amp;gt; Create&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;name: nvidia
Index URL: https://helm.ngc.nvidia.com/nvidia&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/HkuKoQzDR.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/r1CMh7MvC.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;添加完後，檢查狀態是 Active&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/SJrU37MPA.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;h3&gt;2.2. 開始安裝 gpu-operator&lt;span class="hx:absolute hx:-mt-20" id="22-開始安裝-gpu-operator"&gt;&lt;/span&gt;
&lt;a href="#22-%e9%96%8b%e5%a7%8b%e5%ae%89%e8%a3%9d-gpu-operator" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Apps -&amp;gt; Charts -&amp;gt; 搜尋 &lt;code&gt;gpu-operator&lt;/code&gt; -&amp;gt; 點選 &lt;code&gt;gpu-operator&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/rJt16XzvA.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;點選右上角 Install 按鈕&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/SJY9aQfvR.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;Namespace: Create a new namespace -&amp;gt; 輸入 &lt;code&gt;nvidia&lt;/code&gt;
Name: 輸入 &lt;code&gt;nvidia&lt;/code&gt;
勾選 Customize Helm options before install
Next&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/r1EwAmMwA.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;修改 Containerd 資訊&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;toolkit:
enabled: true
env:
- name: CONTAINERD_CONFIG
value: /var/lib/rancher/rke2/agent/etc/containerd/config.toml
- name: CONTAINERD_SOCKET
value: /run/k3s/containerd/containerd.sock&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/HyNwyVMwA.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;點選右下角 &lt;code&gt;Install&lt;/code&gt; 按鈕安裝&lt;/p&gt;
&lt;p&gt;檢查所有的 Pod 狀態都是 Running&lt;/p&gt;
&lt;p&gt;Workloads -&amp;gt; Pods -&amp;gt; nvidia namespace&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/SJ5VlNfPA.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;h3&gt;2.3. Test GPU Pods&lt;span class="hx:absolute hx:-mt-20" id="23-test-gpu-pods"&gt;&lt;/span&gt;
&lt;a href="#23-test-gpu-pods" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# 1. sample1
$ cat &amp;lt;&amp;lt; EOF | kubectl create -f -
apiVersion: v1
kind: Pod
metadata:
name: cuda-vectoradd
spec:
restartPolicy: OnFailure
runtimeClassName: nvidia
containers:
- name: cuda-vectoradd
image: &amp;#34;nvidia/samples:vectoradd-cuda11.2.1&amp;#34;
resources:
limits:
nvidia.com/gpu: 1
EOF
# 2. 測試成功 log 資訊
$ kubectl logs cuda-vectoradd
[Vector addition of 50000 elements]
Copy input data from the host memory to the CUDA device
CUDA kernel launch with 196 blocks of 256 threads
Copy output data from the CUDA device to the host memory
Test PASSED
Done
# 3. Delete Sample1 pod
$ kubectl delete pod cuda-vectoradd
# 4. sample2
$ cat &amp;lt;&amp;lt; EOF | kubectl create -f -
apiVersion: v1
kind: Pod
metadata:
name: nbody-gpu-benchmark
namespace: default
spec:
restartPolicy: OnFailure
runtimeClassName: nvidia
containers:
- name: cuda-container
image: nvcr.io/nvidia/k8s/cuda-sample:nbody
args: [&amp;#34;nbody&amp;#34;, &amp;#34;-gpu&amp;#34;, &amp;#34;-benchmark&amp;#34;]
resources:
limits:
nvidia.com/gpu: 1
env:
- name: NVIDIA_VISIBLE_DEVICES
value: all
- name: NVIDIA_DRIVER_CAPABILITIES
value: all
EOF
# 5. 測試成功 log 資訊
$ kubectl logs nbody-gpu-benchmark
Run &amp;#34;nbody -benchmark [-numbodies=&amp;lt;numBodies&amp;gt;]&amp;#34; to measure performance.
-fullscreen (run n-body simulation in fullscreen mode)
-fp64 (use double precision floating point values for simulation)
-hostmem (stores simulation data in host memory)
-benchmark (run benchmark to measure performance)
-numbodies=&amp;lt;N&amp;gt; (number of bodies (&amp;gt;= 1) to run in simulation)
-device=&amp;lt;d&amp;gt; (where d=0,1,2.... for the CUDA device to use)
-numdevices=&amp;lt;i&amp;gt; (where i=(number of CUDA devices &amp;gt; 0) to use for simulation)
-compare (compares simulation results running once on the default GPU and once on the CPU)
-cpu (run n-body simulation on the CPU)
-tipsy=&amp;lt;file.bin&amp;gt; (load a tipsy model file for simulation)
NOTE: The CUDA Samples are not meant for performance measurements. Results may vary when GPU Boost is enabled.
&amp;gt; Windowed mode
&amp;gt; Simulation data stored in video memory
&amp;gt; Single precision floating point simulation
&amp;gt; 1 Devices used for simulation
MapSMtoCores for SM 8.9 is undefined. Default to use 128 Cores/SM
MapSMtoArchName for SM 8.9 is undefined. Default to use Ampere
GPU Device 0: &amp;#34;Ampere&amp;#34; with compute capability 8.9
&amp;gt; Compute 8.9 CUDA device: [NVIDIA GeForce RTX 4060 Ti]
34816 bodies, total time for 10 iterations: 19.339 ms
= 626.784 billion interactions per second
= 12535.677 single-precision GFLOP/s at 20 flops per interaction
# 6. Delete Sample2 pod
$ kubectl delete pod nbody-gpu-benchmark&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;3. Install Ollama &amp;amp; Open WebUI with Helm&lt;span class="hx:absolute hx:-mt-20" id="3-install-ollama--open-webui-with-helm"&gt;&lt;/span&gt;
&lt;a href="#3-install-ollama--open-webui-with-helm" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;3.1. Add Nvidia Helm Repository&lt;span class="hx:absolute hx:-mt-20" id="31-add-nvidia-helm-repository"&gt;&lt;/span&gt;
&lt;a href="#31-add-nvidia-helm-repository" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;點選 Cluster -&amp;gt; Apps -&amp;gt; Repositories -&amp;gt; Create&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/Sk0QvCNDA.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;name: openwebui
Index URL: https://helm.openwebui.com/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/rkgPD04DA.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;h3&gt;3.2. 開始安裝 Ollama &amp;amp; Open WebUI&lt;span class="hx:absolute hx:-mt-20" id="32-開始安裝-ollama--open-webui"&gt;&lt;/span&gt;
&lt;a href="#32-%e9%96%8b%e5%a7%8b%e5%ae%89%e8%a3%9d-ollama--open-webui" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Apps -&amp;gt; Charts -&amp;gt; 搜尋 &lt;code&gt;open-webui&lt;/code&gt; -&amp;gt; 點選 &lt;code&gt;open-webui&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/BJxYrREvA.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;點選右上角 &lt;code&gt;Install&lt;/code&gt; 按鈕&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/B1J6SRVvA.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;Namespace: Create a new namespace -&amp;gt; 輸入 &lt;code&gt;ollama&lt;/code&gt;
Name: 輸入 &lt;code&gt;ollama&lt;/code&gt;
勾選 Customize Helm options before install
Next&lt;/p&gt;
&lt;p&gt;編輯 &lt;code&gt;values.yaml&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;啟用 ingress&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;ingress:
annotations: {}
class: nginx
enabled: true
existingSecret: &amp;#39;&amp;#39;
host: ollama.example.com
tls: false&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/SJ8ouCVwR.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;新增 ollama module 使用 &lt;code&gt;llama3&lt;/code&gt;、啟用 PV 和 Container Runtime 使用 nvidia&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;ollama:
enabled: true
fullnameOverride: open-webui-ollama
ollama:
gpu:
enabled: true
number: 1
type: nvidia
models:
- llama3
persistentVolume:
enabled: true
runtimeClassName: nvidia&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/rym0_04w0.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;調整 &lt;code&gt;openaiBaseApiUrl&lt;/code&gt;&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;openaiBaseApiUrl: open-webui-ollama.ollama.svc.cluster.local&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;調整永存目錄區，使用 Local Path Provisioner&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;安裝指令 : &lt;code&gt;kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/v0.0.28/deploy/local-path-storage.yaml&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;persistence:
accessModes:
- ReadWriteOnce
annotations: {}
enabled: true
existingClaim: &amp;#39;&amp;#39;
selector: {}
size: 2Gi
storageClass: local-path&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/BJuctAVwR.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;調整好後，按右下角 Next 按鈕，然後點 &lt;code&gt;Install&lt;/code&gt; 安裝&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/HyCycAEDR.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;檢查 Pod 狀態皆為 Running&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/BJYH9R4vR.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;修改 Web-UI 不要做身分驗證&lt;/p&gt;
&lt;p&gt;Workloads -&amp;gt; StatefulSets -&amp;gt; ollama namespace -&amp;gt; Edit Config&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/HJpZpREv0.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;點選 Add Variable&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;Variable Name: WEBUI_AUTH
Value: False&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;輸入完畢後點擊 Save 按鈕存檔&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/B1Rr60NwC.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;設定 DNS 新增 A record&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ kubectl -n ollama get ing
NAME CLASS HOSTS ADDRESS PORTS AGE
open-webui nginx ollama.example.com 172.20.0.52 80 2d17h&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;將 Ingress 的 &lt;code&gt;HOSTS&lt;/code&gt; 的 FQDN 和 &lt;code&gt;ADDRESS&lt;/code&gt; 的 IP 加進 DNS A record，或是在有瀏覽器的主機中的 &lt;code&gt;/etc/hosts&lt;/code&gt; 新增名稱解析&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;windows 10/11 的 hosts 檔案在 &lt;code&gt;C:\Windows\System32\drivers\etc\hosts&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;點選 Service Discovery -&amp;gt; Ingresses -&amp;gt; 按網址&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/BJRwCCNvR.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;就會成功進到 OpenWebUI&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/SJXuC04vR.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;</description></item><item><title>Harvester air-gapped upgrade</title><link>https://blog.kubeantony.com/archive/rancher/harvester-air-gapped-upgrade/</link><pubDate>Fri, 14 Jun 2024 02:09:42 +0800</pubDate><guid>https://blog.kubeantony.com/archive/rancher/harvester-air-gapped-upgrade/</guid><description>
&lt;h2&gt;1. 升級前備份、準備和應注意事項&lt;span class="hx:absolute hx:-mt-20" id="1-升級前備份準備和應注意事項"&gt;&lt;/span&gt;
&lt;a href="#1-%e5%8d%87%e7%b4%9a%e5%89%8d%e5%82%99%e4%bb%bd%e6%ba%96%e5%82%99%e5%92%8c%e6%87%89%e6%b3%a8%e6%84%8f%e4%ba%8b%e9%a0%85" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;1.1. Check Upgrade support matrix&lt;span class="hx:absolute hx:-mt-20" id="11-check-upgrade-support-matrix"&gt;&lt;/span&gt;
&lt;a href="#11-check-upgrade-support-matrix" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Upgrade From Version&lt;/th&gt;
&lt;th&gt;Supported New Version(s)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;v1.2.1&lt;/td&gt;
&lt;td&gt;v1.2.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;v1.1.2/v1.2.0&lt;/td&gt;
&lt;td&gt;v1.2.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;v1.1.1/v1.1.2&lt;/td&gt;
&lt;td&gt;v1.1.3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;v1.1.0/v1.1.1&lt;/td&gt;
&lt;td&gt;v1.1.2&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;1.2. 備份重要的 VM&lt;span class="hx:absolute hx:-mt-20" id="12-備份重要的-vm"&gt;&lt;/span&gt;
&lt;a href="#12-%e5%82%99%e4%bb%bd%e9%87%8d%e8%a6%81%e7%9a%84-vm" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;h3&gt;1.3. 升級注意事項&lt;span class="hx:absolute hx:-mt-20" id="13-升級注意事項"&gt;&lt;/span&gt;
&lt;a href="#13-%e5%8d%87%e7%b4%9a%e6%b3%a8%e6%84%8f%e4%ba%8b%e9%a0%85" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;升級過程中請勿對 Cluster 進行操作。例如，建立新虛擬機器、上傳新 Container Images 等。&lt;/li&gt;
&lt;li&gt;確保叢集中的每個 Node 至少有 30 GiB 的可用系統分區空間。如果 Cluster 中任何 node 的可用系統分區空間小於 30 GiB，升級將被拒絕。
&lt;ul&gt;
&lt;li&gt;在叢集中每一台 node 執行 &lt;code&gt;df -h /usr/local/&lt;/code&gt; 檢查&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;確保所有節點的時間同步。
&lt;ul&gt;
&lt;li&gt;在叢集中每一台 node 執行 &lt;code&gt;sudo timedatectl status&lt;/code&gt; 檢查&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;1.4. 準備 air-gapped 升級&lt;span class="hx:absolute hx:-mt-20" id="14-準備-air-gapped-升級"&gt;&lt;/span&gt;
&lt;a href="#14-%e6%ba%96%e5%82%99-air-gapped-%e5%8d%87%e7%b4%9a" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;到以下網址下載新版本的 Harvester ISO 檔案&lt;/li&gt;
&lt;li&gt;根據以下步驟建立 Http Server 並把 Harvester ISO 檔案放到網站中&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# 以下操作步驟為從 v1.2.1 升級至 v1.2.2
## 2.1. SSH 連線至任意 Harvester node
$ ssh rancher@&amp;lt;Harvester node&amp;gt;
#@ 2.2. 建立與啟動 Web Server
$ docker run -d -p 8080:80 --name nginx-web rancher/mirrored-library-nginx:1.21.1-alpine
## 2.3. 檢查 Web Server 的運作狀態
$ docker ps -a --filter name=&amp;#34;nginx-web&amp;#34;
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9282651624a9 docker.io/rancher/mirrored-library-nginx:1.21.1-alpine &amp;#34;/docker-entrypoint.…&amp;#34; 3 seconds ago Up 0.0.0.0:8080-&amp;gt;80/tcp nginx-web
## 2.4. 將 Harvester ISO 檔案放到 Web Server 中
$ docker cp /home/rancher/harvester-v1.2.2-amd64.iso nginx-web:/usr/share/nginx/html/
## 2.5. 更改 Harvester ISO 檔案的權限為 644
$ docker exec nginx-web chmod 644 /usr/share/nginx/html/harvester-v1.2.2-amd64.iso
## 2.6. 檢查是否符合預期
$ docker exec nginx-web ls -l /usr/share/nginx/html/harvester-v1.2.2-amd64.iso
## 2.7. 撰寫升級版本的檔案
### 注意! 要修改 isoURL 的位置
$ cat &amp;lt;&amp;lt;EOF &amp;gt; hvx_v1.2.2.yaml
apiVersion: harvesterhci.io/v1beta1
kind: Version
metadata:
name: v1.2.2
namespace: harvester-system
spec:
isoChecksum: &amp;#39;e069d456517006690d3f4046d88c09e5440dc70be348ca2c42490d86e69ca413c0ad2a28c246b0a2fe445e91e5b36a9598ba9d5efb568cea9e91cec540f8a7a4&amp;#39;
isoURL: http://192.168.61.12:8080/harvester-v1.2.2-amd64.iso
releaseDate: &amp;#39;20240516&amp;#39;
EOF
## 2.8. 建立新版本
$ kubectl create -f hvx_v1.2.2.yaml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# 要從 v1.2.2 升級至 v1.3.0 再執行以下操作
$ docker rm -f nginx-web
$ docker run -d -p 8080:80 --name nginx-web rancher/mirrored-library-nginx:1.24.0-alpine
$ docker cp /home/rancher/harvester-v1.3.0-amd64.iso nginx-web:/usr/share/nginx/html/
$ docker exec nginx-web chmod 644 /usr/share/nginx/html/harvester-v1.3.0-amd64.iso
$ docker exec nginx-web ls -l /usr/share/nginx/html/harvester-v1.3.0-amd64.iso
$ cat &amp;lt;&amp;lt;EOF &amp;gt; hvx_v1.3.0.yaml
apiVersion: harvesterhci.io/v1beta1
kind: Version
metadata:
name: v1.3.0
namespace: harvester-system
spec:
isoChecksum: &amp;#39;045e3ec2394ac621c72487db8d6f3328228a32bee4ac1ce43b740fafcc8194039e7213f8905020b52f31373d99057c483863e72cca55f8607029bf9cf1362a55&amp;#39;
isoURL: http://192.168.61.12:8080/harvester-v1.3.0-amd64.iso
releaseDate: &amp;#39;20240516&amp;#39;
EOF
$ kubectl create -f hvx_v1.3.0.yaml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;2. 開始升級&lt;span class="hx:absolute hx:-mt-20" id="2-開始升級"&gt;&lt;/span&gt;
&lt;a href="#2-%e9%96%8b%e5%a7%8b%e5%8d%87%e7%b4%9a" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;連線至 Harvester GUI 並點擊儀表板頁面上的 &lt;strong&gt;Upgrade&lt;/strong&gt; 按鈕。&lt;/li&gt;
&lt;li&gt;選擇版本開始升級&lt;/li&gt;
&lt;li&gt;點擊頁面頂部的綠色圓圈即可顯示升級進度。&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>Rancher TroubleShooting</title><link>https://blog.kubeantony.com/archive/rancher/rancher-troubleshooting/</link><pubDate>Thu, 06 Jun 2024 06:18:30 +0800</pubDate><guid>https://blog.kubeantony.com/archive/rancher/rancher-troubleshooting/</guid><description>
&lt;h2&gt;問題 1: 無法刪除 DownStream Cluster&lt;span class="hx:absolute hx:-mt-20" id="問題-1-無法刪除-downstream-cluster"&gt;&lt;/span&gt;
&lt;a href="#%e5%95%8f%e9%a1%8c-1-%e7%84%a1%e6%b3%95%e5%88%aa%e9%99%a4-downstream-cluster" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;問題描述&lt;span class="hx:absolute hx:-mt-20" id="問題描述"&gt;&lt;/span&gt;
&lt;a href="#%e5%95%8f%e9%a1%8c%e6%8f%8f%e8%bf%b0" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;在 Rancher 中無法刪除由 Harvester node provider 帶起來的 K3s 下游叢集，並顯示正在等待刪除節點。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/B1mCSraER.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;h3&gt;解決辦法&lt;span class="hx:absolute hx:-mt-20" id="解決辦法"&gt;&lt;/span&gt;
&lt;a href="#%e8%a7%a3%e6%b1%ba%e8%be%a6%e6%b3%95" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# 1. find the cluster you want to delete
$ kubectl get clusters.management.cattle.io
NAME AGE
c-m-bzrsxlnb 62d
c-m-fb4btkbk 42d
local 62d
# 2. 宣告要刪除的 cluster 變數
$ export CLUSTERID=&amp;#34;c-m-bzrsxlnb&amp;#34;
# 3. 將 finalizers 改成空值
$ kubectl patch clusters.management.cattle.io $CLUSTERID -p &amp;#39;{&amp;#34;metadata&amp;#34;:{&amp;#34;finalizers&amp;#34;:[]}}&amp;#39; --type=merge
cluster.management.cattle.io/c-m-bzrsxlnb patched
# 4. 刪除 Cluster
$ kubectl delete clusters.management.cattle.io $CLUSTERID
$ kubectl get clusters.management.cattle.io
NAME AGE
c-m-fb4btkbk 42d
local 62d
$ export CLUSTERID=c-m-fb4btkbk
$ kubectl patch clusters.management.cattle.io $CLUSTERID -p &amp;#39;{&amp;#34;metadata&amp;#34;:{&amp;#34;finalizers&amp;#34;:[]}}&amp;#39; --type=merge
cluster.management.cattle.io/c-m-fb4btkbk patched
$ kubectl delete clusters.management.cattle.io $CLUSTERID
Error from server (NotFound): clusters.management.cattle.io &amp;#34;c-m-fb4btkbk&amp;#34; not found
$ kubectl get clusters.management.cattle.io
NAME AGE
local 62d
$ kubectl -n cattle-system get pods
NAME READY STATUS RESTARTS AGE
rancher-7b4bdf6789-49sj4 1/1 Running 0 95m
rancher-webhook-644bcb4d99-mgfx9 1/1 Running 17 (107m ago) 62d
$ kubectl -n cattle-system get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
rancher 1/1 1 1 62d
rancher-webhook 1/1 1 1 62d
$ kubectl -n cattle-system rollout restart rancher
$ kubectl -n cattle-system get pods
NAME READY STATUS RESTARTS AGE
rancher-7fbffb59cc-nn2bf 1/1 Running 0 80s
rancher-webhook-644bcb4d99-mgfx9 1/1 Running 17 (116m ago) 62d&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;正常情況下應該到這裡就會在看到叢集會在 Web UI 裡面被移除了
&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/Bkh-LrTEC.png" alt="image" loading="lazy" /&gt;
但是做到這邊發現叢集並未被移除&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;Clean the orphaned cluster objects from the deleted cluster namespaces.&lt;span class="hx:absolute hx:-mt-20" id="clean-the-orphaned-cluster-objects-from-the-deleted-cluster-namespaces"&gt;&lt;/span&gt;
&lt;a href="#clean-the-orphaned-cluster-objects-from-the-deleted-cluster-namespaces" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# 先找到孤兒叢集的 Namespace
$ kubectl get ns -A |grep &amp;#34;c-&amp;#34;
c-m-bzrsxlnb Active 62d
c-m-fb4btkbk Active 42d
# 列出該 Namespace 所有的物件
$ kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get --show-kind --ignore-not-found -n c-m-fb4btkbk
NAME DATA AGE
configmap/kube-root-ca.crt 1 62d
configmap/provisioning-log 0 62d
NAME SECRETS AGE
serviceaccount/default 0 62d
NAME AGE
clusterregistrationtoken.management.cattle.io/default-token 62d
clusterregistrationtoken.management.cattle.io/system 62d
NAME AGE
clusterroletemplatebinding.management.cattle.io/c-m-bzrsxlnb-fleet-default-owner 62d
clusterroletemplatebinding.management.cattle.io/creator-cluster-owner 62d
clusterroletemplatebinding.management.cattle.io/u-hmec2q3jq3-admin 62d
NAME AGE
node.management.cattle.io/machine-2nttf 62d
NAME AGE
project.management.cattle.io/p-47xvp 62d
project.management.cattle.io/p-fhxkw 62d
NAME ROLE AGE
rolebinding.rbac.authorization.k8s.io/c-m-bzrsxlnb-fleet-default-owner-cluster-owner Role/cluster-owner 62d
rolebinding.rbac.authorization.k8s.io/creator-cluster-owner-cluster-owner Role/cluster-owner 62d
rolebinding.rbac.authorization.k8s.io/p-47xvp-creator-project-owner-project-owner Role/project-owner 62d
rolebinding.rbac.authorization.k8s.io/p-fhxkw-creator-project-owner-project-owner Role/project-owner 62d
rolebinding.rbac.authorization.k8s.io/rb-j23o5h2gdc Role/p-fhxkw-projectowner 62d
rolebinding.rbac.authorization.k8s.io/rb-nftlrlswfm Role/p-47xvp-projectowner 62d
rolebinding.rbac.authorization.k8s.io/u-hmec2q3jq3-admin-cluster-owner Role/cluster-owner 62d
NAME CREATED AT
role.rbac.authorization.k8s.io/cluster-owner 2024-04-03T03:50:44Z
role.rbac.authorization.k8s.io/p-47xvp-projectowner 2024-04-03T03:50:44Z
role.rbac.authorization.k8s.io/p-fhxkw-projectowner 2024-04-03T03:50:44Z
role.rbac.authorization.k8s.io/project-owner 2024-04-03T03:50:44Z
# 刪除在 Namespace 中的所有物件
$ kubectl -n c-m-fb4btkbk delete &amp;#34;$(kubectl api-resources --namespaced=true --verbs=delete -o name | tr &amp;#34;\n&amp;#34; &amp;#34;,&amp;#34; | sed -e &amp;#39;s/,$//&amp;#39;)&amp;#34; --all
configmap &amp;#34;kube-root-ca.crt&amp;#34; deleted
configmap &amp;#34;provisioning-log&amp;#34; deleted
serviceaccount &amp;#34;default&amp;#34; deleted
clusterregistrationtoken.management.cattle.io &amp;#34;default-token&amp;#34; deleted
clusterregistrationtoken.management.cattle.io &amp;#34;system&amp;#34; deleted
clusterroletemplatebinding.management.cattle.io &amp;#34;c-m-fb4btkbk-fleet-default-owner&amp;#34; deleted
clusterroletemplatebinding.management.cattle.io &amp;#34;creator-cluster-owner&amp;#34; deleted
node.management.cattle.io &amp;#34;machine-hj69z&amp;#34; deleted
project.management.cattle.io &amp;#34;p-lqsv2&amp;#34; deleted
rolebinding.rbac.authorization.k8s.io &amp;#34;p-42nc9-creator-project-owner-project-owner&amp;#34; deleted
rolebinding.rbac.authorization.k8s.io &amp;#34;p-lqsv2-creator-project-owner-project-owner&amp;#34; deleted
rolebinding.rbac.authorization.k8s.io &amp;#34;rb-utcrchdkew&amp;#34; deleted
rolebinding.rbac.authorization.k8s.io &amp;#34;rb-wxcfmlrysb&amp;#34; deleted
role.rbac.authorization.k8s.io &amp;#34;cluster-owner&amp;#34; deleted
role.rbac.authorization.k8s.io &amp;#34;p-42nc9-projectowner&amp;#34; deleted
role.rbac.authorization.k8s.io &amp;#34;project-owner&amp;#34; deleted
Error from server (BadRequest): admission webhook &amp;#34;rancher.cattle.io.projects.management.cattle.io&amp;#34; denied the request: System Project cannot be deleted
# 再次列出該 Namespace 所有的物件
$ kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get --show-kind --ignore-not-found -n c-m-fb4btkbk
NAME DATA AGE
configmap/kube-root-ca.crt 1 16s
NAME SECRETS AGE
serviceaccount/default 0 16s
NAME AGE
project.management.cattle.io/p-42nc9 42d
# 刪除 namespace (刪不掉就按 Ctrl&amp;#43;C 終止)
$ kubectl delete ns c-m-fb4btkbk
namespace &amp;#34;c-m-fb4btkbk&amp;#34; deleted
# 修改 namespace finalizers 為空值
$ kubectl get namespace &amp;#34;c-m-fb4btkbk&amp;#34; -o json \
&amp;gt; | tr -d &amp;#34;\n&amp;#34; | sed &amp;#34;s/\&amp;#34;finalizers\&amp;#34;: \[[^]]\&amp;#43;\]/\&amp;#34;finalizers\&amp;#34;: []/&amp;#34; \
&amp;gt; | kubectl replace --raw /api/v1/namespaces/c-m-fb4btkbk/finalize -f -
...以上省略
{&amp;#34;type&amp;#34;:&amp;#34;NamespaceFinalizersRemaining&amp;#34;,&amp;#34;status&amp;#34;:&amp;#34;False&amp;#34;,&amp;#34;lastTransitionTime&amp;#34;:&amp;#34;2024-06-04T10:32:48Z&amp;#34;,&amp;#34;reason&amp;#34;:&amp;#34;ContentHasNoFinalizers&amp;#34;,&amp;#34;message&amp;#34;:&amp;#34;All content-preserving finalizers finished&amp;#34;}]}}
$ kubectl get ns -A |grep &amp;#34;c-&amp;#34;
$ kubectl -n cattle-system rollout restart deploy rancher
deployment.apps/rancher restarted
$ kubectl -n cattle-system get pods -w
NAME READY STATUS RESTARTS AGE
rancher-7fbffb59cc-nn2bf 1/1 Running 0 33m
rancher-8b84f58fb-mw87h 0/1 Running 0 10s
rancher-webhook-644bcb4d99-mgfx9 1/1 Running 17 (148m ago) 62d
rancher-8b84f58fb-mw87h 1/1 Running 0 31s
rancher-7fbffb59cc-nn2bf 1/1 Terminating 0 33m
rancher-7fbffb59cc-nn2bf 1/1 Terminating 0 33m
rancher-7fbffb59cc-nn2bf 0/1 Terminating 0 33m
rancher-7fbffb59cc-nn2bf 0/1 Terminating 0 33m
rancher-7fbffb59cc-nn2bf 0/1 Terminating 0 33m
rancher-7fbffb59cc-nn2bf 0/1 Terminating 0 33m
$ kubectl -n cattle-system get pods
NAME READY STATUS RESTARTS AGE
rancher-8b84f58fb-mw87h 1/1 Running 0 86s
rancher-webhook-644bcb4d99-mgfx9 1/1 Running 17 (149m ago) 62d&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;最後要在 UI 上把 machine 和 Cluster 的 finalizers 也改為空值，就能完全移除 Cluster 囉~&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>全離線安裝 Harbor 、K3S 和 Rancher</title><link>https://blog.kubeantony.com/archive/rancher/%E5%85%A8%E9%9B%A2%E7%B7%9A%E5%AE%89%E8%A3%9D-harbor-k3s-%E5%92%8C-rancher/</link><pubDate>Tue, 04 Jun 2024 07:19:24 +0800</pubDate><guid>https://blog.kubeantony.com/archive/rancher/%E5%85%A8%E9%9B%A2%E7%B7%9A%E5%AE%89%E8%A3%9D-harbor-k3s-%E5%92%8C-rancher/</guid><description>
&lt;style&gt;
.indent-title-1{
margin-left: 1em;
}
.indent-title-2{
margin-left: 2em;
}
.indent-title-3{
margin-left: 3em;
}
&lt;/style&gt;
&lt;h2&gt;Preface&lt;span class="hx:absolute hx:-mt-20" id="preface"&gt;&lt;/span&gt;
&lt;a href="#preface" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;本篇文章會在全離線的環境下建置 Harbor、K3S、RKE2 和 Rancher&lt;/p&gt;
&lt;p&gt;可以透過點擊以下目錄，選擇想看的內容，跳轉至特定章節&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;1. 環境架構介紹&lt;span class="hx:absolute hx:-mt-20" id="1-環境架構介紹"&gt;&lt;/span&gt;
&lt;a href="#1-%e7%92%b0%e5%a2%83%e6%9e%b6%e6%a7%8b%e4%bb%8b%e7%b4%b9" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;七台 VM
&lt;ul&gt;
&lt;li&gt;一台 VM 須能上網，下載離線安裝 Harbor、K3S、RKE2 和 Rancher 所需的套件
&lt;ul&gt;
&lt;li&gt;此 VM 硬體規格:
&lt;ul&gt;
&lt;li&gt;CPU: 2 Core&lt;/li&gt;
&lt;li&gt;Mem: 4 GB&lt;/li&gt;
&lt;li&gt;Disk 需要 300 GB&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;一台 VM 安裝 Harbor + DNS Server&lt;/li&gt;
&lt;li&gt;三台 VM 安裝 K3S + Rancher (HA)&lt;/li&gt;
&lt;li&gt;一台 VM 安裝 Nginx Load Balancer&lt;/li&gt;
&lt;li&gt;一台 VM 安裝 DownStream Cluster RKE2 (Role: AllInOne)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;軟體版本
&lt;ul&gt;
&lt;li&gt;Harbor: &lt;code&gt;v2.10.2&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;K3S: &lt;code&gt;v1.28.10+k3s1&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;RKE2: &lt;code&gt;v1.28.10+rke2r1&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Rancher Prime: &lt;code&gt;v2.8.4&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;作業系統
&lt;ul&gt;
&lt;li&gt;SUSE Linux Enterprise Server 15 SP5&lt;/li&gt;
&lt;li&gt;ISO: &lt;code&gt;SLE-15-SP5-Full-x86_64-GM-Media1.iso&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;2. Rancher Support Matrix&lt;span class="hx:absolute hx:-mt-20" id="2-rancher-support-matrix"&gt;&lt;/span&gt;
&lt;a href="#2-rancher-support-matrix" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;2.1. 可以安裝 Rancher Manager 的 K8s 平台&lt;span class="hx:absolute hx:-mt-20" id="21-可以安裝-rancher-manager-的-k8s-平台"&gt;&lt;/span&gt;
&lt;a href="#21-%e5%8f%af%e4%bb%a5%e5%ae%89%e8%a3%9d-rancher-manager-%e7%9a%84-k8s-%e5%b9%b3%e5%8f%b0" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-1"&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Distro&lt;/th&gt;
&lt;th&gt;Lowest Certified Version&lt;/th&gt;
&lt;th&gt;Highest Certified Version&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;RKE2&lt;/td&gt;
&lt;td&gt;v1.25&lt;/td&gt;
&lt;td&gt;v1.28&lt;/td&gt;
&lt;td&gt;See RKE2 Support Matrix for specific system requirements&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RKE1&lt;/td&gt;
&lt;td&gt;v1.25&lt;/td&gt;
&lt;td&gt;v1.28&lt;/td&gt;
&lt;td&gt;See RKE1 Support Matrix for specific system requirements&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K3s&lt;/td&gt;
&lt;td&gt;v1.25&lt;/td&gt;
&lt;td&gt;v1.28&lt;/td&gt;
&lt;td&gt;See k3s Support Matrix for specific system requirements&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AKS&lt;/td&gt;
&lt;td&gt;v1.25&lt;/td&gt;
&lt;td&gt;v1.28&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;EKS&lt;/td&gt;
&lt;td&gt;v1.25&lt;/td&gt;
&lt;td&gt;v1.28&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GKE&lt;/td&gt;
&lt;td&gt;v1.25&lt;/td&gt;
&lt;td&gt;v1.28&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;h3&gt;2.2. 有支援的 Downstream Cluster&lt;span class="hx:absolute hx:-mt-20" id="22-有支援的-downstream-cluster"&gt;&lt;/span&gt;
&lt;a href="#22-%e6%9c%89%e6%94%af%e6%8f%b4%e7%9a%84-downstream-cluster" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;h4&gt;2.2.1. RKE2&lt;span class="hx:absolute hx:-mt-20" id="221-rke2"&gt;&lt;/span&gt;
&lt;a href="#221-rke2" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;div class="indent-title-1"&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;RKE2 Version&lt;/th&gt;
&lt;th&gt;Rancher Provisioned&lt;/th&gt;
&lt;th&gt;Rancher Imported&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1.28&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1.27&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1.26&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1.25&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;h4&gt;2.2.2. K3S&lt;span class="hx:absolute hx:-mt-20" id="222-k3s"&gt;&lt;/span&gt;
&lt;a href="#222-k3s" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;div class="indent-title-1"&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;K3s Version&lt;/th&gt;
&lt;th&gt;Rancher Provisioned&lt;/th&gt;
&lt;th&gt;Rancher Imported&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1.28&lt;/td&gt;
&lt;td&gt;Yes (x86 Only)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1.27&lt;/td&gt;
&lt;td&gt;Yes (x86 Only)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1.26&lt;/td&gt;
&lt;td&gt;Yes (x86 Only)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1.25&lt;/td&gt;
&lt;td&gt;Yes (x86 Only)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;更詳細的相關支援資訊請參考以下連結 :
&lt;a
href="https://www.suse.com/suse-rancher/support-matrix/all-supported-versions/rancher-v2-8-4/"target="_blank" rel="noopener"&gt;Rancher Manager v2.8.4 Support Matrix - SUSE Docs&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Harbor 安裝先決條件&lt;span class="hx:absolute hx:-mt-20" id="harbor-安裝先決條件"&gt;&lt;/span&gt;
&lt;a href="#harbor-%e5%ae%89%e8%a3%9d%e5%85%88%e6%b1%ba%e6%a2%9d%e4%bb%b6" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;Hardware&lt;span class="hx:absolute hx:-mt-20" id="hardware"&gt;&lt;/span&gt;
&lt;a href="#hardware" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Resource&lt;/th&gt;
&lt;th&gt;Minimum&lt;/th&gt;
&lt;th&gt;Recommended&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CPU&lt;/td&gt;
&lt;td&gt;2 cores&lt;/td&gt;
&lt;td&gt;4 cores&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Memory&lt;/td&gt;
&lt;td&gt;4 GB&lt;/td&gt;
&lt;td&gt;8 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Disk&lt;/td&gt;
&lt;td&gt;300 GB&lt;/td&gt;
&lt;td&gt;300+ GB&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;OS&lt;span class="hx:absolute hx:-mt-20" id="os"&gt;&lt;/span&gt;
&lt;a href="#os" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Recommand: SUSE Linux Enterprise Server 15 SP5&lt;/li&gt;
&lt;li&gt;Recommand ISO: &lt;code&gt;SLE-15-SP5-Full-x86_64-GM-Media1.iso&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Software&lt;span class="hx:absolute hx:-mt-20" id="software"&gt;&lt;/span&gt;
&lt;a href="#software" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Docker Engine Version: &lt;code&gt;20.10.10-ce+ or higher&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Docker Compose Version: &lt;code&gt;v1.18.0+&lt;/code&gt; or &lt;code&gt;docker compose v2 (docker-compose-plugin)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;OpenSSL Version: &lt;code&gt;Latest&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;K3S + Rancher 安裝先決條件&lt;span class="hx:absolute hx:-mt-20" id="k3s--rancher-安裝先決條件"&gt;&lt;/span&gt;
&lt;a href="#k3s--rancher-%e5%ae%89%e8%a3%9d%e5%85%88%e6%b1%ba%e6%a2%9d%e4%bb%b6" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;Hardware&lt;span class="hx:absolute hx:-mt-20" id="hardware-1"&gt;&lt;/span&gt;
&lt;a href="#hardware-1" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;CPU: &lt;code&gt;4&lt;/code&gt; Core&lt;/li&gt;
&lt;li&gt;Mem: &lt;code&gt;16&lt;/code&gt; GB&lt;/li&gt;
&lt;li&gt;Disk: &lt;code&gt;100&lt;/code&gt; GB (recommend SSD)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;OS&lt;span class="hx:absolute hx:-mt-20" id="os-1"&gt;&lt;/span&gt;
&lt;a href="#os-1" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Recommand: SUSE Linux Enterprise Server 15 SP5&lt;/li&gt;
&lt;li&gt;Recommand ISO: &lt;code&gt;SLE-15-SP5-Full-x86_64-GM-Media1.iso&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;3. 準備全離線環境的各個安裝包&lt;span class="hx:absolute hx:-mt-20" id="3-準備全離線環境的各個安裝包"&gt;&lt;/span&gt;
&lt;a href="#3-%e6%ba%96%e5%82%99%e5%85%a8%e9%9b%a2%e7%b7%9a%e7%92%b0%e5%a2%83%e7%9a%84%e5%90%84%e5%80%8b%e5%ae%89%e8%a3%9d%e5%8c%85" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;3.1. 環境確認&lt;span class="hx:absolute hx:-mt-20" id="31--環境確認"&gt;&lt;/span&gt;
&lt;a href="#31--%e7%92%b0%e5%a2%83%e7%a2%ba%e8%aa%8d" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;3.1.1. 安裝 &lt;code&gt;docker 20.10.23-ce&lt;/code&gt;&lt;/p&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo zypper mr -ea &amp;amp;&amp;amp; \
sudo zypper in -y docker &amp;amp;&amp;amp; \
sudo systemctl enable --now docker&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;docker&lt;/code&gt; 命令放在 &lt;code&gt;Containers-Module_15.5-0&lt;/code&gt; Repository&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;p&gt;3.1.2. 檢查 Docker 儲存 Image 的目錄應為 &lt;code&gt;/var/lib/docker&lt;/code&gt;&lt;/p&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo docker info -f &amp;#39;{{ .DockerRootDir}}&amp;#39;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;3.1.3. 硬碟空間規劃&lt;/p&gt;
&lt;div class="indent-title-1"&gt;
&lt;ol&gt;
&lt;li&gt;Docker 儲存 Container images 的空間 (&lt;code&gt;/var/lib/docker&lt;/code&gt;) 至少要有 300 GB 的空間&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/home&lt;/code&gt; 目錄區，用來儲存全離線安裝所需之軟體套件、Container images 壓縮檔 和一些設定檔。&lt;/li&gt;
&lt;li&gt;在虛擬化那層新增 1 顆 125 GB 的硬碟和 1 顆 300 GB 的硬碟&lt;/li&gt;
&lt;li&gt;設定 LVM&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# 1. 檢視硬碟
$ lsblk /dev/{sdb,sdc}
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sdb 8:16 0 300G 0 disk
sdc 8:32 0 125G 0 disk
# 2. /dev/sdb 切 partition
$ sudo fdisk /dev/sdb
...
Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p):
Using default response p.
Partition number (1-4, default 1): 1
First sector (2048-629145599, default 2048):
Last sector, &amp;#43;/-sectors or &amp;#43;/-size{K,M,G,T,P} (2048-629145599, default 629145599):
Created a new partition 1 of type &amp;#39;Linux&amp;#39; and of size 300 GiB.
Command (m for help): t
Selected partition 1
Hex code or alias (type L to list all): 8e
Changed type of partition &amp;#39;Linux&amp;#39; to &amp;#39;Linux LVM&amp;#39;.
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
# 3. /dev/sdc 切 partition
$ sudo fdisk /dev/sdc
...
Command (m for help): p
Disk /dev/sdc: 125 GiB, 134217728000 bytes, 262144000 sectors
Disk model: QEMU HARDDISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x8d8da0bd
Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p):
Using default response p.
Partition number (1-4, default 1):
First sector (2048-262143999, default 2048):
Last sector, &amp;#43;/-sectors or &amp;#43;/-size{K,M,G,T,P} (2048-262143999, default 262143999):
Created a new partition 1 of type &amp;#39;Linux&amp;#39; and of size 125 GiB.
Command (m for help): t
Selected partition 1
Hex code or alias (type L to list all): 8e
Changed type of partition &amp;#39;Linux&amp;#39; to &amp;#39;Linux LVM&amp;#39;.
Command (m for help): p
Disk /dev/sdc: 125 GiB, 134217728000 bytes, 262144000 sectors
Disk model: QEMU HARDDISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x8d8da0bd
Device Boot Start End Sectors Size Id Type
/dev/sdc1 2048 262143999 262141952 125G 8e Linux LVM
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
# 4. 建立 PV
$ sudo pvcreate /dev/{sdb1,sdc1}
Physical volume &amp;#34;/dev/sdb1&amp;#34; successfully created.
Physical volume &amp;#34;/dev/sdc1&amp;#34; successfully created.
# 5. 建立 VG
$ sudo vgcreate Container_images /dev/sdb1
Volume group &amp;#34;Container_images&amp;#34; successfully created
$ sudo vgextend system /dev/sdc1
Volume group &amp;#34;system&amp;#34; successfully extended
# 6. 建立 LV
$ sudo sudo lvcreate -l &amp;#43;100%FREE -n Container_images_lv Container_images
Logical volume &amp;#34;Container_images_lv&amp;#34; created.
$ sudo lvresize -l &amp;#43;100%FREE /dev/system/home
# 7. 確認 LV 建立成功
$ sudo lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
Container_images_lv Container_images -wi-a----- 300.00g
home system -wi-a----- 150.00g
root system -wi-ao---- 74.99g
# 8. 掛載 /var/lib/docker 目錄區
$ su&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;3.1.3. 檢查 Docker 儲存 Image 的目錄可用空間是否有 300 GB&lt;/p&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ df -hT `sudo docker info -f &amp;#39;{{ .DockerRootDir}}&amp;#39;`&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/system-root btrfs 300G 2.8G 296G 1% /var&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;3.1.4. 檢查 Docker 儲存 Image 的目錄目前已使用多大的儲存空間&lt;/p&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo du -sh `sudo docker info -f &amp;#39;{{ .DockerRootDir}}&amp;#39;`&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;156K /var/lib/docker&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;3.1.5. 確認 &lt;code&gt;/home&lt;/code&gt; 目錄區可用空間有 150G&lt;/p&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ df -hT /home&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;二、 建立工作目錄&lt;span class="hx:absolute hx:-mt-20" id="二-建立工作目錄"&gt;&lt;/span&gt;
&lt;a href="#%e4%ba%8c-%e5%bb%ba%e7%ab%8b%e5%b7%a5%e4%bd%9c%e7%9b%ae%e9%8c%84" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-1"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ mkdir -p work/{harbor,k3s,rancher,compressed_files}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;三、 準備 Harbor v2.10.0 全離線安裝包&lt;span class="hx:absolute hx:-mt-20" id="三-準備-harbor-v2100-全離線安裝包"&gt;&lt;/span&gt;
&lt;a href="#%e4%b8%89-%e6%ba%96%e5%82%99-harbor-v2100-%e5%85%a8%e9%9b%a2%e7%b7%9a%e5%ae%89%e8%a3%9d%e5%8c%85" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;切換工作目錄&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ cd ~/work/harbor&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="2"&gt;
&lt;li&gt;下載 Harbor 壓縮檔，版本 v2.10.0&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ wget https://github.com/goharbor/harbor/releases/download/v2.10.0/harbor-offline-installer-v2.10.0.tgz&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="3"&gt;
&lt;li&gt;下載 Docker Compose 套件，版本 v2.23.3&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ wget https://github.com/docker/compose/releases/download/v2.23.3/docker-compose-linux-x86_64&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="4"&gt;
&lt;li&gt;將以上離線安裝 Harbor 所需之套件壓縮成一個檔案&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ cd ..; tar -czf compressed_files/harbor-offline.tar.gz harbor/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="5"&gt;
&lt;li&gt;檢查是否符合預期&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ ls -lh compressed_files/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;total 629M
-rw-r--r-- 1 rancher users 629M Jan 8 14:52 harbor-offline.tar.gz&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;解壓縮命令 : &lt;code&gt;tar -xzf compressed_files/harbor-offline.tar.gz&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;h3&gt;四、 準備 K3S v1.26.12 全離線安裝包&lt;span class="hx:absolute hx:-mt-20" id="四-準備-k3s-v12612-全離線安裝包"&gt;&lt;/span&gt;
&lt;a href="#%e5%9b%9b-%e6%ba%96%e5%82%99-k3s-v12612-%e5%85%a8%e9%9b%a2%e7%b7%9a%e5%ae%89%e8%a3%9d%e5%8c%85" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;切換工作目錄，並切換為 root 使用者&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ cd ~/work/k3s&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="2"&gt;
&lt;li&gt;下載離線安裝 K3S 所需 Image 之壓縮檔及 K3S 二進位檔&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ curl -# -OL https://github.com/k3s-io/k3s/releases/download/v1.26.12%2Bk3s1/k3s-airgap-images-amd64.tar
$ curl -# -OL https://github.com/k3s-io/k3s/releases/download/v1.26.12%2Bk3s1/k3s&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="3"&gt;
&lt;li&gt;下載官網提供的離線安裝 K3S 所需之安裝腳本，並賦予它執行權限&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ curl -sfL https://get.k3s.io/ --output install.sh &amp;amp;&amp;amp; chmod &amp;#43;x install.sh&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="4"&gt;
&lt;li&gt;檢查當前目錄下的檔案&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ ls -lh&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;total 621M
-rwxr-xr-x 1 rancher users 33K Jan 8 15:10 install.sh
-rw-r--r-- 1 rancher users 57M Jan 8 15:07 k3s
-rw-r--r-- 1 rancher users 564M Jan 8 15:07 k3s-airgap-images-amd64.tar&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="5"&gt;
&lt;li&gt;將以上離線安裝 RKE2 所需之檔案，壓縮成一個檔案&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ cd ..; tar -czf compressed_files/k3s-offline.tar.gz k3s/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="6"&gt;
&lt;li&gt;檢查是否符合預期&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ ls -lh compressed_files/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;-rw-r--r-- 1 762M harbor-offline.tar.gz
-rw-r--r-- 1 241M k3s-offline.tar.gz&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;五、 準備 Rancher Prime v2.7.9 全離線安裝包&lt;span class="hx:absolute hx:-mt-20" id="五-準備-rancher-prime-v279-全離線安裝包"&gt;&lt;/span&gt;
&lt;a href="#%e4%ba%94-%e6%ba%96%e5%82%99-rancher-prime-v279-%e5%85%a8%e9%9b%a2%e7%b7%9a%e5%ae%89%e8%a3%9d%e5%8c%85" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;切換工作目錄&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ cd ~/work/rancher&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="2"&gt;
&lt;li&gt;安裝 &lt;code&gt;helm&lt;/code&gt;，版本 &lt;code&gt;v3.13.1&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ curl -s https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;Downloading https://get.helm.sh/helm-v3.13.1-linux-amd64.tar.gz
Verifying checksum... Done.
Preparing to install helm into /usr/local/bin
helm installed into /usr/local/bin/helm&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="3"&gt;
&lt;li&gt;新增 Rancher Prime 的 Helm Chart Repository&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ helm repo add rancher-prime https://charts.rancher.com/server-charts/prime&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;&amp;#34;rancher-prime&amp;#34; has been added to your repositories&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="4"&gt;
&lt;li&gt;刷新 Rancher Helm Chart Repository&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ helm repo update&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the &amp;#34;rancher-prime&amp;#34; chart repository
Update Complete. ⎈Happy Helming!⎈&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="5"&gt;
&lt;li&gt;下載 Rancher chart v2.7.9&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ helm fetch rancher-prime/rancher --version=v2.7.9&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;這會拉下 chart 並將其作為 &lt;code&gt;.tgz&lt;/code&gt; 檔案保存在當前目錄中。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;ol start="6"&gt;
&lt;li&gt;新增和刷新 cert-manager repo&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ helm repo add jetstack https://charts.jetstack.io &amp;amp;&amp;amp; \
helm repo update&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;&amp;#34;jetstack&amp;#34; has been added to your repositories
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the &amp;#34;rancher-prime&amp;#34; chart repository
...Successfully got an update from the &amp;#34;jetstack&amp;#34; chart repository
Update Complete. ⎈Happy Helming!⎈&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="7"&gt;
&lt;li&gt;下載 cert-manager chart v1.11.0&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ helm fetch jetstack/cert-manager --version v1.11.0&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;這會拉下 chart 並將其作為 &lt;code&gt;.tgz&lt;/code&gt; 檔案保存在當前目錄中。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;ol start="8"&gt;
&lt;li&gt;下載 cert-manager 要求的 CRD&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ curl -L -o cert-manager-crd.yaml https://github.com/cert-manager/cert-manager/releases/download/v1.11.0/cert-manager.crds.yaml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="9"&gt;
&lt;li&gt;下載 cert-manager 的 Container Image&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo docker pull quay.io/jetstack/cert-manager-controller:v1.11.0
$ sudo docker pull quay.io/jetstack/cert-manager-webhook:v1.11.0
$ sudo docker pull quay.io/jetstack/cert-manager-cainjector:v1.11.0
$ sudo docker pull quay.io/jetstack/cert-manager-ctl:v1.11.0&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="10"&gt;
&lt;li&gt;修改 cert-manager 的所有 Container Images Tag&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ Registry_Name=&amp;#34;harbor.example.com&amp;#34; &amp;amp;&amp;amp; version=&amp;#34;v1.11.0&amp;#34;
$ sudo docker tag quay.io/jetstack/cert-manager-controller:&amp;#34;$version&amp;#34; &amp;#34;$Registry_Name&amp;#34;/rancher/cert-manager-controller:&amp;#34;$version&amp;#34;
$ sudo docker tag quay.io/jetstack/cert-manager-webhook:&amp;#34;$version&amp;#34; &amp;#34;$Registry_Name&amp;#34;/rancher/cert-manager-webhook:&amp;#34;$version&amp;#34;
$ sudo docker tag quay.io/jetstack/cert-manager-cainjector:&amp;#34;$version&amp;#34; &amp;#34;$Registry_Name&amp;#34;/rancher/cert-manager-cainjector:&amp;#34;$version&amp;#34;
$ sudo docker tag quay.io/jetstack/cert-manager-ctl:&amp;#34;$version&amp;#34; &amp;#34;$Registry_Name&amp;#34;/rancher/cert-manager-ctl:&amp;#34;$version&amp;#34;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="11"&gt;
&lt;li&gt;將 cert-manager 的所有 Container Images 打包成 &lt;code&gt;.tar.gz&lt;/code&gt; 壓縮檔&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo docker save &amp;#34;$Registry_Name&amp;#34;/rancher/cert-manager-controller:&amp;#34;$version&amp;#34; \
&amp;#34;$Registry_Name&amp;#34;/rancher/cert-manager-webhook:&amp;#34;$version&amp;#34; \
&amp;#34;$Registry_Name&amp;#34;/rancher/cert-manager-cainjector:&amp;#34;$version&amp;#34; \
&amp;#34;$Registry_Name&amp;#34;/rancher/cert-manager-ctl:&amp;#34;$version&amp;#34; | gzip --stdout &amp;gt; ~/work/rancher/cert-manager-image_v1.11.0.tar.gz&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="12"&gt;
&lt;li&gt;下載 Rancher Images List 文字檔及蒐集 Image 所需的 Shell Script&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ wget https://github.com/rancher/rancher/releases/download/v2.8.2/rancher-images.txt
$ wget https://github.com/rancher/rancher/releases/download/v2.8.2/rancher-load-images.sh
$ wget https://github.com/rancher/rancher/releases/download/v2.8.2/rancher-save-images.sh&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;rancher-images.txt&lt;/code&gt;，此檔案包含安裝 Rancher、provision clusters 和 user Rancher tools 所需的 Images 清單。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rancher-save-images.sh&lt;/code&gt;，這個 Shell Script 從 Docker Hub 下載 &lt;code&gt;rancher-images.txt&lt;/code&gt; 中的所有 Images，並將所有 Images 儲存為 &lt;code&gt;rancher-images.tar.gz&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rancher-load-images.sh&lt;/code&gt;，這個 Shell Script 從 &lt;code&gt;rancher-images.tar.gz&lt;/code&gt; 檔案載入 Images，並將其推送到私有的 Image Registry。&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;ol start="13"&gt;
&lt;li&gt;對 Image List 進行排序和唯一化，以消除來源之間的任何重疊：&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sort -u rancher-images.txt -o rancher-images.txt&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="14"&gt;
&lt;li&gt;賦予 &lt;code&gt;rancher-save-images.sh&lt;/code&gt; 可以執行的權限:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ chmod &amp;#43;x rancher-save-images.sh&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="15"&gt;
&lt;li&gt;使用 &lt;code&gt;rancher-images.txt&lt;/code&gt; Image 清單執行 &lt;code&gt;rancher-save-images.sh&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo bash -x rancher-save-images.sh \
--image-list ./rancher-images.txt \
--source-registry &amp;#34;registry.rancher.com&amp;#34; \
--images ~/work/rancher/rancher-images.tar.gz \
&amp;amp;&amp;gt;&amp;gt; /tmp/rancher-save-images.log &amp;amp;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;結果： Docker 開始下載 Images，請耐心等待。 這個過程需要幾分鐘到幾小時。完成後，會在 &lt;code&gt;~/work/rancher/&lt;/code&gt; 目錄將輸出一個名為 &lt;code&gt;rancher-images.tar.gz&lt;/code&gt; 的壓縮包，檢查輸出是否在目錄中。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;ol start="16"&gt;
&lt;li&gt;下載 Helm 壓縮檔&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ wget https://get.helm.sh/helm-v3.13.1-linux-amd64.tar.gz -O ~/work/rancher/helm-v3.13.1-linux-amd64.tar.gz&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="17"&gt;
&lt;li&gt;檢查當前所有準備好的檔案&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ ls -lh ~/work/rancher&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;total 41G
-rw-r--r-- 1 rancher users 380K Jan 8 15:43 cert-manager-crd.yaml
-rw-r--r-- 1 rancher users 56M Jan 8 16:55 cert-manager-image_v1.11.0.tar.gz
-rw-r--r-- 1 rancher users 65K Jan 8 16:31 cert-manager-v1.11.0.tgz
-rw-r--r-- 1 rancher users 16M Oct 12 22:01 helm-v3.13.1-linux-amd64.tar.gz
-rw-r--r-- 1 rancher users 15K Jan 8 15:25 rancher-2.7.9.tgz
-rw-r--r-- 1 root root 41G Jan 9 18:50 rancher-images.tar.gz
-rw-r--r-- 1 rancher users 32K Jan 8 16:55 rancher-images.txt
-rw-r--r-- 1 rancher users 4.1K Oct 27 05:39 rancher-load-images.sh
-rwxr-xr-x 1 rancher users 1.8K Oct 27 05:39 rancher-save-images.sh&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="18"&gt;
&lt;li&gt;壓縮全離線安裝 Rancher 會需要的所有檔案&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ cd ..; tar -czvf compressed_files/rancher-offline.tar.gz rancher/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="19"&gt;
&lt;li&gt;將本次全離線需要的壓縮檔全部壓成同一個壓縮檔&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ tar -czvf full-offline.tar.gz compressed_files/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;壓縮好的檔案大小 &lt;code&gt;41&lt;/code&gt; GB (&lt;code&gt;full-offline.tar.gz&lt;/code&gt;)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;ol start="20"&gt;
&lt;li&gt;將壓縮檔傳送至 Harbor 和 Rancher 主機&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ scp full-offline.tar.gz &amp;lt;harbor 的機器&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="21"&gt;
&lt;li&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;開始離線安裝&lt;span class="hx:absolute hx:-mt-20" id="開始離線安裝"&gt;&lt;/span&gt;
&lt;a href="#%e9%96%8b%e5%a7%8b%e9%9b%a2%e7%b7%9a%e5%ae%89%e8%a3%9d" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;</description></item><item><title>準備 Rancher Airgap 程式</title><link>https://blog.kubeantony.com/archive/rancher/%E6%BA%96%E5%82%99-rancher-airgap-%E7%A8%8B%E5%BC%8F/</link><pubDate>Fri, 29 Mar 2024 05:49:34 +0800</pubDate><guid>https://blog.kubeantony.com/archive/rancher/%E6%BA%96%E5%82%99-rancher-airgap-%E7%A8%8B%E5%BC%8F/</guid><description>
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;setup_env() {
# check internet connection
if ! nc -vz google.com 443 &amp;amp;&amp;gt; /dev/null; then
echo &amp;#34;internet connection is offline&amp;#34; &amp;amp;&amp;amp; exit 1
fi
# check Command is installed
for command in wget curl docker
do
if ! which $command &amp;amp;&amp;gt; /dev/null; then
echo &amp;#34;${Command} command not found!&amp;#34; &amp;amp;&amp;amp; exit 1
fi
done
# make sure the version of the Rancher is defined
if [[ -z &amp;#34;${Rancher_Version}&amp;#34; ]]; then
Rancher_Version=&amp;#34;v2.8.2&amp;#34;
fi
# make sure the version of the Helm is defined
if [[ -z &amp;#34;${Helm_Version}&amp;#34; ]]; then
Helm_Version=&amp;#34;v3.14.2&amp;#34;
fi
# make sure the version of the Cert-Manager is defined
if [[ -z &amp;#34;${Cert_Manager_Version}&amp;#34; ]]; then
Cert_Manager_Version=&amp;#34;v1.11.0&amp;#34;
fi
# make sure the name of the Private Images Registry is defined
if [[ -z &amp;#34;${Private_Registry_Name}&amp;#34; ]]; then
Private_Registry_Name=&amp;#34;harbor.example.com&amp;#34;
fi
}
prepare_rancher() {
setup_env
# 切換工作目錄
cd ~/work/rancher/&amp;#34;${Rancher_Version}&amp;#34;
# 安裝 helm
curl -s https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
[[ &amp;#34;$?&amp;#34; != &amp;#34;0&amp;#34; ]] &amp;amp;&amp;amp; echo &amp;#34;Install helm failed&amp;#34; &amp;amp;&amp;amp; exit 1
# 新增並刷新 Rancher Prime 的 Helm Chart Repository
helm repo add rancher-prime https://charts.rancher.com/server-charts/prime &amp;amp;&amp;amp; \
helm repo update
[[ &amp;#34;$?&amp;#34; != &amp;#34;0&amp;#34; ]] &amp;amp;&amp;amp; echo &amp;#34;helm repo add or update rancher-prime failed&amp;#34; &amp;amp;&amp;amp; exit 1
# 下載 Rancher chart
helm fetch rancher-prime/rancher --version=&amp;#34;${Rancher_Version}&amp;#34;
[[ &amp;#34;$?&amp;#34; != &amp;#34;0&amp;#34; ]] &amp;amp;&amp;amp; echo &amp;#34;helm fetch rancher failed&amp;#34; &amp;amp;&amp;amp; exit 1
# 新增和刷新 cert-manager repo
helm repo add jetstack https://charts.jetstack.io &amp;amp;&amp;amp; \
helm repo update
[[ &amp;#34;$?&amp;#34; != &amp;#34;0&amp;#34; ]] &amp;amp;&amp;amp; echo &amp;#34;helm repo add or update cert-manager failed&amp;#34; &amp;amp;&amp;amp; exit 1
# 下載 cert-manager chart
helm fetch jetstack/cert-manager --version &amp;#34;${Cert_Manager_Version}&amp;#34;
[[ &amp;#34;$?&amp;#34; != &amp;#34;0&amp;#34; ]] &amp;amp;&amp;amp; echo &amp;#34;helm fetch Cert_Manager failed&amp;#34; &amp;amp;&amp;amp; exit 1
# 下載 cert-manager 要求的 CRD
curl -L -o cert-manager-crd.yaml https://github.com/cert-manager/cert-manager/releases/download/&amp;#34;${Cert_Manager_Version}&amp;#34;/cert-manager.crds.yaml
[[ &amp;#34;$?&amp;#34; != &amp;#34;0&amp;#34; ]] &amp;amp;&amp;amp; echo &amp;#34;Download Cert_Manager CRD failed&amp;#34; &amp;amp;&amp;amp; exit 1
# 處理 cert-manager 的 Container Images
for i in $(helm template cert-manager-*.tgz | awk &amp;#39;$1 ~ /image:/ {print $2}&amp;#39; | sed -e &amp;#39;s/\&amp;#34;//g&amp;#39;)
do
# 下載 cert-manager 的 Container Images
sudo docker pull &amp;#34;$i&amp;#34;
[[ &amp;#34;$?&amp;#34; != &amp;#34;0&amp;#34; ]] &amp;amp;&amp;amp; echo &amp;#34;Pull quay.io/jetstack/$i Container images failed&amp;#34; &amp;amp;&amp;amp; exit 1
# 修改 cert-manager 的所有 Container Images Tag
sudo docker tag &amp;#34;${i}&amp;#34; &amp;#34;${Private_Registry_Name}&amp;#34;/rancher/&amp;#34;${i##*/}&amp;#34;
[[ &amp;#34;$?&amp;#34; != &amp;#34;0&amp;#34; ]] &amp;amp;&amp;amp; echo &amp;#34;tag ${Private_Registry_Name}/rancher/${i##*/} Container images failed&amp;#34; &amp;amp;&amp;amp; exit 1
done
# 將 cert-manager 的所有 Container Images 打包成 .tar.gz 壓縮檔
sudo docker save $(helm template cert-manager-*.tgz | awk &amp;#39;$1 ~ /image:/ {print $2}&amp;#39; | sed -e &amp;#39;s/\&amp;#34;//g&amp;#39; | sed &amp;#34;s|quay.io/jetstack|${Private_Registry_Name}/rancher|g&amp;#34;) | gzip --stdout &amp;gt; cert-manager-image-&amp;#34;${Cert_Manager_Version}&amp;#34;.tar.gz
[[ &amp;#34;$?&amp;#34; != &amp;#34;0&amp;#34; ]] &amp;amp;&amp;amp; echo &amp;#34;Docker save Cert-manager ${Cert_Manager_Version} images failed&amp;#34; &amp;amp;&amp;amp; exit 1
# 下載 Helm 壓縮檔
wget -q https://get.helm.sh/helm-&amp;#34;${Helm_Version}&amp;#34;-linux-amd64.tar.gz -O helm-&amp;#34;${Helm_Version}&amp;#34;-linux-amd64.tar.gz
[[ &amp;#34;$?&amp;#34; != &amp;#34;0&amp;#34; ]] &amp;amp;&amp;amp; echo &amp;#34;Download helm ${Helm_Version} failed&amp;#34;
# 下載 Rancher Images List 文字檔及蒐集 Image 所需的 Shell Script
for x in rancher-images.txt rancher-load-images.sh rancher-save-images.sh
do
wget -q https://github.com/rancher/rancher/releases/download/&amp;#34;${Rancher_Version}&amp;#34;/&amp;#34;${x}&amp;#34;
[[ &amp;#34;$?&amp;#34; != &amp;#34;0&amp;#34; ]] &amp;amp;&amp;amp; echo &amp;#34;Download ${x} failed&amp;#34; &amp;amp;&amp;amp; exit 1
done
# 對 Image List 進行排序和唯一化，以消除來源之間的任何重疊
sort -u rancher-images.txt -o rancher-images.txt
[[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ]] &amp;amp;&amp;amp; echo &amp;#34;Start pulling and saving rancher ${Rancher_Version} images in the background...&amp;#34;
# 下載離線安裝 Rancher 所需的所有 Container Images 並打包成 rancher-images.tar.gz
while read image
do
if ! sudo docker pull registry.rancher.com/&amp;#34;${image}&amp;#34; ; then
echo pull &amp;#34;$image&amp;#34; failed &amp;amp;&amp;amp; exit 1
fi
done &amp;lt;&amp;lt;&amp;lt; $(cat rancher-images.txt)
rancher_all_image=$(cat rancher-images.txt | sed &amp;#39;s|^|registry.rancher.com/|&amp;#39; | tr &amp;#39;\n&amp;#39; &amp;#39; &amp;#39;)
for n in $rancher_all_image
do
if ! sudo docker images &amp;#34;$n&amp;#34; | grep -q &amp;#34;${n%:*}&amp;#34;; then
if ! sudo docker pull registry.rancher.com/&amp;#34;$n&amp;#34; ; then
echo pull &amp;#34;$n&amp;#34; failed twice &amp;amp;&amp;amp; exit 1
fi
else
sudo docker tag &amp;#34;${n}&amp;#34; &amp;#34;${Private_Registry_Name}&amp;#34;/rancher/&amp;#34;${n##*/}&amp;#34;
[[ &amp;#34;$?&amp;#34; != &amp;#34;0&amp;#34; ]] &amp;amp;&amp;amp; echo &amp;#34;tag ${Private_Registry_Name}/rancher/${n##*/} Container images failed&amp;#34; &amp;amp;&amp;amp; exit 1
fi
done
rename_rancher_all_image=$(cat rancher-images.txt | sed &amp;#34;s|^|${Private_Registry_Name}/|&amp;#34; | tr &amp;#39;\n&amp;#39; &amp;#39; &amp;#39;)
sudo docker save $rename_rancher_all_image | gzip --stdout &amp;gt; rancher-&amp;#34;${Rancher_Version}&amp;#34;-image.tar.gz
[[ (( $(stat -c%s rancher-&amp;#34;${Rancher_Version}&amp;#34;-image.tar.gz) -lt 50000000 )) ]] &amp;amp;&amp;amp; echo &amp;#34;Docker Save rancher ${Rancher_Version} images failed&amp;#34; &amp;amp;&amp;amp; exit 1
cd ../..; tar -czf compressed_files/rancher-airgap-&amp;#34;${Rancher_Version}&amp;#34;.tar.gz rancher/&amp;#34;${Rancher_Version}&amp;#34;
if [[ &amp;#34;$?&amp;#34; != &amp;#34;0&amp;#34; ]]; then
echo &amp;#34;Preparing Rancher &amp;#34;${Rancher_Version}&amp;#34; Air Gap installer failed&amp;#34; &amp;amp;&amp;amp; exit 1
else
echo &amp;#34;Prepare Rancher &amp;#34;${Rancher_Version}&amp;#34; OK.&amp;#34;
fi
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;完整程式 : &lt;a
href="https://github.com/braveantony/Prepare-AirGap-Installer/tree/main"target="_blank" rel="noopener"&gt;https://github.com/braveantony/Prepare-AirGap-Installer/tree/main&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>Rancher Monitoring</title><link>https://blog.kubeantony.com/archive/rancher/rancher-monitoring/</link><pubDate>Thu, 21 Mar 2024 09:32:24 +0800</pubDate><guid>https://blog.kubeantony.com/archive/rancher/rancher-monitoring/</guid><description>
&lt;h2&gt;Preface&lt;span class="hx:absolute hx:-mt-20" id="preface"&gt;&lt;/span&gt;
&lt;a href="#preface" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;本篇文章會稍微介紹 Prometheus 和 Alertmanager 在做哪些事情，並實作如何在 Rancher 上將 Kubernetes 的告警發送到指定 E-mail Address。&lt;/p&gt;
&lt;h2&gt;ALERTING OVERVIEW&lt;span class="hx:absolute hx:-mt-20" id="alerting-overview"&gt;&lt;/span&gt;
&lt;a href="#alerting-overview" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Prometheus 的警報分為兩個部分。Prometheus Server 中的警報規則會向 Alertmanager 發送警報。 然後 Alertmanager 管理這些警報，包括靜音 ( silencing )、抑制 ( inhibition )、聚合 ( aggregation ) 以及透過電子郵件、值班通知系統 ( on-call notification systems ) 和聊天平台等方式發送通知。&lt;/p&gt;
&lt;p&gt;設定警報和通知的主要步驟是&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;設定 Prometheus 與 Alertmanager 連接&lt;/li&gt;
&lt;li&gt;在 Prometheus 中建立警報規則 (Rancher 預設有很多警報規則)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;ALERTMANAGER&lt;span class="hx:absolute hx:-mt-20" id="alertmanager"&gt;&lt;/span&gt;
&lt;a href="#alertmanager" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Alertmanager 可處理 Prometheus Server 等用戶端應用程式所傳送的警報。它負責對警報進行重複 ( deduplicating )、分組 ( grouping )，並將其路由到正確的接收器整合（如電子郵件、PagerDuty 或 OpsGenie）。 它還負責管理警報的靜音和抑制。&lt;/p&gt;
&lt;p&gt;以下介紹 Alertmanager 實作的核心概念 :&lt;/p&gt;
&lt;h3&gt;Grouping&lt;span class="hx:absolute hx:-mt-20" id="grouping"&gt;&lt;/span&gt;
&lt;a href="#grouping" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;分組 ( Grouping ) 將性質相似的警報歸類到一個通知中。當許多系統同時發生故障，數百個警報可能同時響起時，這在較大的故障期間尤其有用。&lt;/p&gt;
&lt;p&gt;例如： 當網路分割區發生時，叢集正在執行數十或數百個服務執行個體。一半的服務無法再存取資料庫。Prometheus 中的警報規則被設定為在每個服務無法與資料庫通訊時為其發送警報。結果，數百個警報被發送到 Alertmanager。&lt;/p&gt;
&lt;p&gt;作為用戶，我們只希望取得一個頁面，同時也能看到受影響的服務。 因此，可以對 Alertmanager 進行設定，按群集和警報名稱對警報進行分組，這樣就能發送一個簡潔的通知。&lt;/p&gt;
&lt;p&gt;警報分組、分組通知的時間以及這些通知的接收者都是透過設定檔中的路由樹 ( routing tree ) 來設定的。&lt;/p&gt;
&lt;h3&gt;Inhibition&lt;span class="hx:absolute hx:-mt-20" id="inhibition"&gt;&lt;/span&gt;
&lt;a href="#inhibition" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;抑制 ( Inhibition ) 的概念是，如果某些其他警報已經觸發，則抑制某些警報的通知。&lt;/p&gt;
&lt;p&gt;例如： 一個警報正在發出，通知整個叢集無法存取。可以對 Alertmanager 進行設定，使其在該特定警報觸發時靜音處理與該群集相關的所有其他警報。這樣就可以防止數百或數千個與實際問題無關的警報觸發通知。&lt;/p&gt;
&lt;p&gt;抑制功能可透過 Alertmanager 的設定檔進行設定。&lt;/p&gt;
&lt;h3&gt;Silences&lt;span class="hx:absolute hx:-mt-20" id="silences"&gt;&lt;/span&gt;
&lt;a href="#silences" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;靜音是將警報靜音一段時間的直接方法。 靜音是根據匹配器 ( matchers ) 設定的，就像路由樹一樣。會檢查傳入的警報是否與活動靜默的所有等價或正規表示式匹配器相符。如果匹配，則不會為該警報發送通知。&lt;/p&gt;
&lt;p&gt;靜默在 Alertmanager 的 Web 介面中進行設定。&lt;/p&gt;
&lt;h3&gt;Client behavior&lt;span class="hx:absolute hx:-mt-20" id="client-behavior"&gt;&lt;/span&gt;
&lt;a href="#client-behavior" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Alertmanager 對其客戶端的行為有特殊要求。這些要求只適用於不使用 Prometheus 發送警報的高階用例。&lt;/p&gt;
&lt;h3&gt;High Availability&lt;span class="hx:absolute hx:-mt-20" id="high-availability"&gt;&lt;/span&gt;
&lt;a href="#high-availability" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Alertmanager 支援為高可用性建立叢集的設定。 可以使用 &lt;code&gt;--cluster-*&lt;/code&gt; 標記進行設定。&lt;/p&gt;
&lt;p&gt;重要的是，不要在 Prometheus 及其 Alertmanager 之間進行負載平衡，而是將 Prometheus 指向所有 Alertmanager 的清單。&lt;/p&gt;
&lt;h2&gt;實作&lt;span class="hx:absolute hx:-mt-20" id="實作"&gt;&lt;/span&gt;
&lt;a href="#%e5%af%a6%e4%bd%9c" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;Prerequest&lt;span class="hx:absolute hx:-mt-20" id="prerequest"&gt;&lt;/span&gt;
&lt;a href="#prerequest" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;SMTP OS: SUSE Linux Enterprise Server 15 SP 5&lt;/li&gt;
&lt;li&gt;Rancher: v2.8.2&lt;/li&gt;
&lt;li&gt;DownStream Cluster: RKE2 v1.27.11&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;0. 自簽 SMTP Server 需要用的憑證&lt;span class="hx:absolute hx:-mt-20" id="0-自簽-smtp-server-需要用的憑證"&gt;&lt;/span&gt;
&lt;a href="#0-%e8%87%aa%e7%b0%bd-smtp-server-%e9%9c%80%e8%a6%81%e7%94%a8%e7%9a%84%e6%86%91%e8%ad%89" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# Generate a Certificate Authority Certificate
## Generate a CA certificate private key.
$ openssl genrsa -out ca.key 4096
## Generate the CA certificate.
$ openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj &amp;#34;/C=TW/ST=Taiwan/L=Taipei/O=example/OU=lab/CN=smtp.example.com&amp;#34; \
-key ca.key \
-out ca.crt
# Generate a Server Certificate
## Generate a private key.
$ openssl genrsa -out server.key 4096
## Generate a certificate signing request (CSR).
$ openssl req -sha512 -new \
-subj &amp;#34;/C=TW/ST=Taiwan/L=Taipei/O=example/OU=lab/CN=smtp.example.com&amp;#34; \
-key server.key \
-out server.csr
## Generate an x509 v3 extension file.
$ cat &amp;gt; v3.ext &amp;lt;&amp;lt;-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1=smtp.example.com
DNS.2=example.com
DNS.3=smtp
EOF
## Use the v3.ext file to generate a certificate for your Harbor host.
$ openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in server.csr \
-out server.crt&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;1. 安裝 SMTP Server 並且啟動 TLS&lt;span class="hx:absolute hx:-mt-20" id="1-安裝-smtp-server-並且啟動-tls"&gt;&lt;/span&gt;
&lt;a href="#1-%e5%ae%89%e8%a3%9d-smtp-server-%e4%b8%a6%e4%b8%94%e5%95%9f%e5%8b%95-tls" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# Install Postfix.
$ sudo zypper -n install postfix
# rename to disable
$ sudo mv /etc/sysconfig/postfix /etc/sysconfig/postfix.org
$ sudo nano -l /etc/postfix/main.cf
# line 114: uncomment and specify domain name
mydomain = lab.com
# line 130: uncomment
myorigin = $mydomain
# line 294: uncomment and specify local network
mynetworks = 192.168.11.0/24
# line 451: uncomment to move Maildir
home_mailbox = Maildir/
# line 714: change
inet_interfaces = all
# line 719: add
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
# line 720: specify hostname
myhostname = lab.com
# line 735
# limit a message size if need (example below means 10M limit)
message_size_limit = 10485760
# line 747: change
smtpd_recipient_restrictions = permit_mynetworks, permit_auth_destination, permit_sasl_authenticated, reject
# Configure SSL/TLS to encrypt connections
# line 782: change
smtpd_use_tls = yes
# line 788: specify certificates
smtpd_tls_cert_file = /home/rancher/smtp/server.crt
smtpd_tls_key_file = /home/rancher/smtp/server.key
# line 793: add
smtp_tls_mandatory_protocols = !SSLv2, !SSLv3
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_scache
## enable port 587 (submission) in postfix
$ sudo nano /etc/postfix/master.cf
### line: 24 取消註解
submission inet n - n - - smtpd
# line 25,26,28: uncomment
submission inet n - n - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
# line 43-45: uncomment
submissions inet n - n - - smtpd
-o syslog_name=postfix/submissions
-o smtpd_tls_wrappermode=yes
# line 64: uncomment
tlsmgr unix - - n 1000? 1 tlsmgr&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;啟動 SMTP Service 並設為開機自動啟動&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo systemctl enable --now postfix&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;2. 測試 SMTP Server&lt;span class="hx:absolute hx:-mt-20" id="2-測試-smtp-server"&gt;&lt;/span&gt;
&lt;a href="#2-%e6%b8%ac%e8%a9%a6-smtp-server" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# 本地測試寄信
$ echo &amp;#34;Test Postfix Gmail https://example.com&amp;#34; | mail -s &amp;#34;Postfix Gmail&amp;#34; &amp;#34;&amp;lt;your email address&amp;gt;&amp;#34;
# 在別台機器寄信
$ echo &amp;#34;Test Postfix Gmail 2&amp;#34; | mail -S smtp=192.168.11.85 -s &amp;#34;Postfix Gmail&amp;#34; &amp;#34;andy.wu@suse.com&amp;#34;
# 測試 TLS
$ openssl s_client -starttls smtp -connect smtp.example.com:587&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;3. 測試告警發信&lt;span class="hx:absolute hx:-mt-20" id="3-測試告警發信"&gt;&lt;/span&gt;
&lt;a href="#3-%e6%b8%ac%e8%a9%a6%e5%91%8a%e8%ad%a6%e7%99%bc%e4%bf%a1" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;h4&gt;3.1. 建立 SMTP 的 TLS Secret&lt;span class="hx:absolute hx:-mt-20" id="31-建立-smtp-的-tls-secret"&gt;&lt;/span&gt;
&lt;a href="#31-%e5%bb%ba%e7%ab%8b-smtp-%e7%9a%84-tls-secret" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ kubectl create ns cattle-monitoring-system
$ kubectl -n cattle-monitoring-system create secret generic smtp-tls-secret \
--from-file=tls.crt=/home/rancher/smtp/server.crt \
--from-file=tls.key=/home/rancher/smtp/server.key \
--from-file=ca.crt=/home/rancher/smtp/ca.crt&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;需準備 CA 憑證、還有 SMTP Server 的憑證和私鑰&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;3.2. 建立 Rancher Monitoring&lt;span class="hx:absolute hx:-mt-20" id="32-建立-rancher-monitoring"&gt;&lt;/span&gt;
&lt;a href="#32-%e5%bb%ba%e7%ab%8b-rancher-monitoring" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;點選 Cluster Tools -&amp;gt; 找到 Monitoring 點選 Install
&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/rkmcpDF06.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;勾選 Customize Helm options brfore install -&amp;gt; Next
&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/ryioRDY0a.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;展開 Additional Secrets 選單，選擇 smtp-tls-secret
&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/SkZZ7dYCp.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install
&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/SJzSQ_KR6.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;安裝成功畫面
&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/SkPYEdKCa.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;3.2. 設定 Alert-manager 告警對象為 E-mail&lt;span class="hx:absolute hx:-mt-20" id="32-設定-alert-manager-告警對象為-e-mail"&gt;&lt;/span&gt;
&lt;a href="#32-%e8%a8%ad%e5%ae%9a-alert-manager-%e5%91%8a%e8%ad%a6%e5%b0%8d%e8%b1%a1%e7%82%ba-e-mail" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;點選左側選單 Storage -&amp;gt; Secrets -&amp;gt; 選擇 &amp;ldquo;cattle-monitoring-system&amp;rdquo; Namespace -&amp;gt; 找到 &lt;code&gt;alertmanager-rancher-monitoring-alertmanager&lt;/code&gt; 這個 Secret -&amp;gt; 點選 Edit Config
&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/SyOqHdKCp.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;複製並修改以下 alertmanager.yaml 的內容，並再刪除所有原始的值後，貼到對應的 Value 欄位中&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;global:
resolve_timeout: 5m
route:
group_by: [Alertname]
# Send all notifications to me.
receiver: Mail Alert
group_wait: 30s
group_interval: 5m
repeat_interval: 12h
routes:
- match:
alertname: DemoAlertName
receiver: &amp;#39;Mail Alert&amp;#39;
receivers:
- name: Mail Alert
email_configs:
- to: &amp;lt;你的 E-mail Address&amp;gt;
from: rancher@lab.com
smarthost: smtp.example.com:587 # Your smtp server address
tls_config:
ca_file: /etc/alertmanager/secrets/smtp-tls-secret/ca.crt
cert_file: /etc/alertmanager/secrets/smtp-tls-secret/tls.crt
key_file: /etc/alertmanager/secrets/smtp-tls-secret/tls.key
headers:
From: rancher@lab.com
Subject: &amp;#39;Demo ALERT&amp;#39;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/By_IPdYR6.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;ol start="3"&gt;
&lt;li&gt;
&lt;p&gt;確認設定檔是否修改成功，點選 Monitoring -&amp;gt; Alert Manager
&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/SkcJuutR6.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;點選 Status
&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/HJwwuOKRT.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;檢視 Config 內容
&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/r1widuYRa.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;打開信箱，看 Alert
&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/HkedkYdFR6.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;如果沒有 Alert 的話，可以透過 curl api 發送一個測試的 Alert&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ curl -H &amp;#39;Content-Type: application/json&amp;#39; -d &amp;#39;[{&amp;#34;labels&amp;#34;:{&amp;#34;alertname&amp;#34;:&amp;#34;myalert&amp;#34;}}]&amp;#39; http://10.43.130.225:9093/api/v1/alerts&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;code&gt;10.43.130.225&lt;/code&gt; 為 Alertmanager Service 的 IP，執行以下命令可以找到
&lt;code&gt;$ kubectl -n cattle-monitoring-system get svc -l app=rancher-monitoring-alertmanager&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>Install Longhorn on Talos Kubernetes</title><link>https://blog.kubeantony.com/archive/rancher/install-longhorn-on-talos-kubernetes/</link><pubDate>Thu, 07 Mar 2024 16:12:44 +0800</pubDate><guid>https://blog.kubeantony.com/archive/rancher/install-longhorn-on-talos-kubernetes/</guid><description>
&lt;h2&gt;PreRequest&lt;span class="hx:absolute hx:-mt-20" id="prerequest"&gt;&lt;/span&gt;
&lt;a href="#prerequest" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;System Extensions&lt;span class="hx:absolute hx:-mt-20" id="system-extensions"&gt;&lt;/span&gt;
&lt;a href="#system-extensions" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;要額外在 Talos K8S 的 Worker Node 上安裝 &lt;code&gt;iscsi-tools&lt;/code&gt; 和 &lt;code&gt;util-linux-tools&lt;/code&gt; 這兩個套件&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;customization:
systemExtensions:
officialExtensions:
- siderolabs/iscsi-tools
- siderolabs/util-linux-tools&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;siderolabs/iscsi-tools&lt;/code&gt;: this extension enables iscsid daemon and iscsiadm to be available to all nodes for the Kubernetes persistent volumes operations.
&lt;code&gt;siderolabs/util-linux-tools&lt;/code&gt;: this extension enables linux tool to be available to all nodes. For example, the fstrim binary is used for Longhorn volume trimming.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;Pod Security&lt;span class="hx:absolute hx:-mt-20" id="pod-security"&gt;&lt;/span&gt;
&lt;a href="#pod-security" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Longhorn 要求在 &lt;code&gt;longhorn-system&lt;/code&gt; Namespace 要有 &lt;code&gt;enforce: &amp;quot;privileged&amp;quot;&lt;/code&gt; 的權限&lt;/p&gt;
&lt;h3&gt;Data Path Mounts&lt;span class="hx:absolute hx:-mt-20" id="data-path-mounts"&gt;&lt;/span&gt;
&lt;a href="#data-path-mounts" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;You need provide additional data path mounts to be accessible to the Kubernetes Kubelet container.&lt;/p&gt;
&lt;p&gt;These mount is necessary to provide access to the host directories and attaching volumes required by the Longhorn components.&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;machine:
kubelet:
extraMounts:
- destination: /var/lib/longhorn
type: bind
source: /var/lib/longhorn
options:
- bind
- rshared
- rw&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;環境準備&lt;span class="hx:absolute hx:-mt-20" id="環境準備"&gt;&lt;/span&gt;
&lt;a href="#%e7%92%b0%e5%a2%83%e6%ba%96%e5%82%99" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;獲得 Talos System Extensions 的 image ID&lt;span class="hx:absolute hx:-mt-20" id="獲得-talos-system-extensions-的-image-id"&gt;&lt;/span&gt;
&lt;a href="#%e7%8d%b2%e5%be%97-talos-system-extensions-%e7%9a%84-image-id" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;## create the schematic file
$ cat &amp;lt;&amp;lt;EOF &amp;gt; longhorn.yaml
customization:
systemExtensions:
officialExtensions:
- siderolabs/iscsi-tools
- siderolabs/util-linux-tools
- siderolabs/gvisor
- siderolabs/qemu-guest-agent
EOF
## 到 Talos 官網的 Image Factory 查詢包含指定套件的 Image ID:
$ curl -X POST --data-binary @longhorn.yaml https://factory.talos.dev/schematics
{&amp;#34;id&amp;#34;:&amp;#34;c527b6b20fb22847304656677e9bd4c4055dfcce95f3385da5db80e35f5fa1dc&amp;#34;}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;Image Factory is a service that generates Talos boot assets on-demand. Image Factory allows to generate boot assets for the official Talos Linux releases and official Talos Linux system extensions.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;Controlplane node patch yaml&lt;span class="hx:absolute hx:-mt-20" id="controlplane-node-patch-yaml"&gt;&lt;/span&gt;
&lt;a href="#controlplane-node-patch-yaml" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;以下是 Controlplane node 使用 machine config 檔需要的 patch yaml&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;machine:
install:
image: factory.talos.dev/installer/c527b6b20fb22847304656677e9bd4c4055dfcce95f3385da5db80e35f5fa1dc:v1.6.5
cluster:
inlineManifests:
- name: namespace-longhorn-system
contents: |-
apiVersion: v1
kind: Namespace
metadata:
name: longhorn-system&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;Worker node patch yaml&lt;span class="hx:absolute hx:-mt-20" id="worker-node-patch-yaml"&gt;&lt;/span&gt;
&lt;a href="#worker-node-patch-yaml" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;以下是 Worker node 使用 machine config 檔需要的 patch yaml&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;machine:
kubelet:
extraMounts:
- destination: /var/lib/longhorn
type: bind
source: /var/lib/longhorn
options:
- bind
- rshared
- rw
install:
image: factory.talos.dev/installer/c527b6b20fb22847304656677e9bd4c4055dfcce95f3385da5db80e35f5fa1dc:v1.6.5&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;透過 patch yaml 修改 machineconfig&lt;span class="hx:absolute hx:-mt-20" id="透過-patch-yaml-修改-machineconfig"&gt;&lt;/span&gt;
&lt;a href="#%e9%80%8f%e9%81%8e-patch-yaml-%e4%bf%ae%e6%94%b9-machineconfig" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;## 修改 k1m1
$ talosctl machineconfig patch /home/bigred/k1/v1.6.5/controlplane.yaml --patch @/home/bigred/k1/v1.6.5/k1m1.patch --output /home/bigred/k1/v1.6.5/k1m1.yaml
## 修改 k1w1
$ talosctl machineconfig patch /home/bigred/k1/v1.6.5/worker.yaml --patch @/home/bigred/k1/v1.6.5/k1w1.patch --output /home/bigred/k1/v1.6.5/k1w1.yaml
## 修改 k1w2
$ talosctl machineconfig patch /home/bigred/k1/v1.6.5/worker.yaml --patch @/home/bigred/k1/v1.6.5/k1w2.patch --output /home/bigred/k1/v1.6.5/k1w2.yaml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;建立 Talos K8S&lt;span class="hx:absolute hx:-mt-20" id="建立-talos-k8s"&gt;&lt;/span&gt;
&lt;a href="#%e5%bb%ba%e7%ab%8b-talos-k8s" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ 1m2w.sh
Talos Control Plane (172.22.1.11) config
waiting 120
k1m1(172.22.1.11) config
waiting 300
k1w1(172.22.1.15) config
k1w2(172.22.1.16) config
waiting 120
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
k1m1 Ready control-plane 5m56s v1.29.2 172.22.1.11 &amp;lt;none&amp;gt; Talos (v1.6.5) 6.1.78-talos containerd://1.7.13
k1w1 Ready worker 63s v1.29.2 172.22.1.15 &amp;lt;none&amp;gt; Talos (v1.6.5) 6.1.78-talos containerd://1.7.13
k1w2 Ready worker 56s v1.29.2 172.22.1.16 &amp;lt;none&amp;gt; Talos (v1.6.5) 6.1.78-talos containerd://1.7.13&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;確認 System Extension 是否安裝成功&lt;span class="hx:absolute hx:-mt-20" id="確認-system-extension-是否安裝成功"&gt;&lt;/span&gt;
&lt;a href="#%e7%a2%ba%e8%aa%8d-system-extension-%e6%98%af%e5%90%a6%e5%ae%89%e8%a3%9d%e6%88%90%e5%8a%9f" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ talosctl -n 172.22.1.11,172.22.1.15,172.22.1.16 --talosconfig=/home/bigred/k1/v1.6.5/talosconfig get extensions
NODE NAMESPACE TYPE ID VERSION NAME VERSION
172.22.1.11 runtime ExtensionStatus 0 1 iscsi-tools v0.1.4
172.22.1.11 runtime ExtensionStatus 1 1 util-linux-tools $VERSION
172.22.1.11 runtime ExtensionStatus 2 1 schematic 613e1592b2da41ae5e265e8789429f22e121aab91cb4deb6bc3c0b6262961245
172.22.1.15 runtime ExtensionStatus 0 1 iscsi-tools v0.1.4
172.22.1.15 runtime ExtensionStatus 1 1 util-linux-tools $VERSION
172.22.1.15 runtime ExtensionStatus 2 1 schematic 613e1592b2da41ae5e265e8789429f22e121aab91cb4deb6bc3c0b6262961245
172.22.1.16 runtime ExtensionStatus 0 1 iscsi-tools v0.1.4
172.22.1.16 runtime ExtensionStatus 1 1 util-linux-tools $VERSION
172.22.1.16 runtime ExtensionStatus 2 1 schematic 613e1592b2da41ae5e265e8789429f22e121aab91cb4deb6bc3c0b6262961245&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;安裝 Longhorn&lt;span class="hx:absolute hx:-mt-20" id="安裝-longhorn"&gt;&lt;/span&gt;
&lt;a href="#%e5%ae%89%e8%a3%9d-longhorn" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ curl -s https://raw.githubusercontent.com/longhorn/longhorn/v1.6.0/deploy/longhorn.yaml | sed &amp;#39;s/numberOfReplicas: &amp;#34;3&amp;#34;/numberOfReplicas: &amp;#34;2&amp;#34;/&amp;#39; | kubectl apply -f -&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;檢查是否部屬成功&lt;span class="hx:absolute hx:-mt-20" id="檢查是否部屬成功"&gt;&lt;/span&gt;
&lt;a href="#%e6%aa%a2%e6%9f%a5%e6%98%af%e5%90%a6%e9%83%a8%e5%b1%ac%e6%88%90%e5%8a%9f" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ kubectl get pods --namespace longhorn-system
NAME READY STATUS RESTARTS AGE
csi-attacher-57689cc84b-btwsj 1/1 Running 0 12m
csi-attacher-57689cc84b-h7zw9 1/1 Running 0 12m
csi-attacher-57689cc84b-zsb4f 1/1 Running 0 12m
csi-provisioner-6c78dcb664-pc2f5 1/1 Running 0 12m
csi-provisioner-6c78dcb664-vjw8z 1/1 Running 0 12m
csi-provisioner-6c78dcb664-xfvc6 1/1 Running 0 12m
csi-resizer-7466f7b45f-b8qq9 1/1 Running 0 12m
csi-resizer-7466f7b45f-pbhwp 1/1 Running 0 12m
csi-resizer-7466f7b45f-pdqr5 1/1 Running 0 12m
csi-snapshotter-58bf69fbd5-54w76 1/1 Running 0 12m
csi-snapshotter-58bf69fbd5-8vznv 1/1 Running 0 12m
csi-snapshotter-58bf69fbd5-ps7nj 1/1 Running 0 12m
engine-image-ei-acb7590c-6jq2h 1/1 Running 0 12m
engine-image-ei-acb7590c-bhjs5 1/1 Running 0 12m
instance-manager-45ef10875bdd08b79ebfe014faeb1722 1/1 Running 0 12m
instance-manager-55c27a0ae5e3ee437940cd838ea3ccef 1/1 Running 0 12m
longhorn-csi-plugin-f8zqf 3/3 Running 0 12m
longhorn-csi-plugin-g22hx 3/3 Running 0 12m
longhorn-driver-deployer-576d574c8-j2lzq 1/1 Running 0 12m
longhorn-manager-2jf5d 1/1 Running 1 (12m ago) 12m
longhorn-manager-tfh54 1/1 Running 0 12m
longhorn-ui-556f7bb76c-fwf5d 1/1 Running 0 12m
longhorn-ui-556f7bb76c-ljflg 1/1 Running 0 12m&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;測試 mysql database 飄移在不同節點上不會遺失資料&lt;span class="hx:absolute hx:-mt-20" id="測試-mysql-database-飄移在不同節點上不會遺失資料"&gt;&lt;/span&gt;
&lt;a href="#%e6%b8%ac%e8%a9%a6-mysql-database-%e9%a3%84%e7%a7%bb%e5%9c%a8%e4%b8%8d%e5%90%8c%e7%af%80%e9%bb%9e%e4%b8%8a%e4%b8%8d%e6%9c%83%e9%81%ba%e5%a4%b1%e8%b3%87%e6%96%99" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;使用以下 yaml 測試&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ cat &amp;lt;&amp;lt;EOF &amp;gt; test-mysql.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc
spec:
accessModes:
- ReadWriteOnce
storageClassName: longhorn
resources:
requests:
storage: 2Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
labels:
app: mysql
spec:
selector:
matchLabels:
app: mysql # has to match .spec.template.metadata.labels
strategy:
type: Recreate
template:
metadata:
labels:
app: mysql
spec:
restartPolicy: Always
containers:
- image: mysql:5.6
name: mysql
livenessProbe:
exec:
command:
- ls
- /var/lib/mysql/lost&amp;#43;found
initialDelaySeconds: 5
periodSeconds: 5
env:
- name: MYSQL_ROOT_PASSWORD
value: changeme
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-volume
mountPath: /var/lib/mysql
volumes:
- name: mysql-volume
persistentVolumeClaim:
claimName: mysql-pvc
EOF&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;建立 mysql&lt;span class="hx:absolute hx:-mt-20" id="建立-mysql"&gt;&lt;/span&gt;
&lt;a href="#%e5%bb%ba%e7%ab%8b-mysql" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ kubectl apply -f test-mysql.yaml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;檢查部屬狀態&lt;span class="hx:absolute hx:-mt-20" id="檢查部屬狀態"&gt;&lt;/span&gt;
&lt;a href="#%e6%aa%a2%e6%9f%a5%e9%83%a8%e5%b1%ac%e7%8b%80%e6%85%8b" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
mysql-7b79bcfb7c-2zrxh 1/1 Running 0 33s 10.244.2.18 k1w2 &amp;lt;none&amp;gt; &amp;lt;none&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;在 mysql 產生資料&lt;span class="hx:absolute hx:-mt-20" id="在-mysql-產生資料"&gt;&lt;/span&gt;
&lt;a href="#%e5%9c%a8-mysql-%e7%94%a2%e7%94%9f%e8%b3%87%e6%96%99" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ mysql -u root -p -h 10.244.2.18
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.51 MySQL Community Server (GPL)
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type &amp;#39;help;&amp;#39; or &amp;#39;\h&amp;#39; for help. Type &amp;#39;\c&amp;#39; to clear the current input statement.
MySQL [(none)]&amp;gt; create database haha;
Query OK, 1 row affected (0.001 sec)
MySQL [(none)]&amp;gt; use haha;
Database changed
MySQL [haha]&amp;gt; CREATE TABLE customer (
-&amp;gt; ID int NOT NULL,
-&amp;gt; NAME varchar(100) NOT NULL,
-&amp;gt; AGE int,
-&amp;gt; ADDRESS varchar(255),
-&amp;gt; SALARY DECIMAL(10,2),
-&amp;gt; PRIMARY KEY (ID)
-&amp;gt; );
Query OK, 0 rows affected (0.028 sec)
MySQL [haha]&amp;gt; INSERT INTO customer
-&amp;gt; VALUES (1,&amp;#39;Ramesh&amp;#39;,32,&amp;#39;Ahmedabad&amp;#39;,&amp;#39;2000.00&amp;#39;),
-&amp;gt; (2,&amp;#39;Khilan&amp;#39;,25,&amp;#39;Delhi&amp;#39;,&amp;#39;1500.00&amp;#39;),
-&amp;gt; (3,&amp;#39;kaushik&amp;#39;,23,&amp;#39;kota&amp;#39;,&amp;#39;2000.00&amp;#39;),
-&amp;gt; (4,&amp;#39;Chaitali&amp;#39;,25,&amp;#39;Mumbai&amp;#39;,&amp;#39;6500.00&amp;#39;),
-&amp;gt; (5,&amp;#39;Hardik&amp;#39;,27,&amp;#39;Bhopal&amp;#39;,&amp;#39;8500.00&amp;#39;),
-&amp;gt; (6,&amp;#39;Komal&amp;#39;,22,&amp;#39;MP&amp;#39;,&amp;#39;4500.00&amp;#39;),
-&amp;gt; (7,&amp;#39;Muffy&amp;#39;,24,&amp;#39;Indore&amp;#39;,&amp;#39;10000.00&amp;#39;);
Query OK, 7 rows affected (0.005 sec)
Records: 7 Duplicates: 0 Warnings: 0
MySQL [haha]&amp;gt; select * from customer;
&amp;#43;----&amp;#43;----------&amp;#43;------&amp;#43;-----------&amp;#43;----------&amp;#43;
| ID | NAME | AGE | ADDRESS | SALARY |
&amp;#43;----&amp;#43;----------&amp;#43;------&amp;#43;-----------&amp;#43;----------&amp;#43;
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
&amp;#43;----&amp;#43;----------&amp;#43;------&amp;#43;-----------&amp;#43;----------&amp;#43;
7 rows in set (0.001 sec)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;將 Pod 轉移到其他節點上，並觀察資料是否還在&lt;span class="hx:absolute hx:-mt-20" id="將-pod-轉移到其他節點上並觀察資料是否還在"&gt;&lt;/span&gt;
&lt;a href="#%e5%b0%87-pod-%e8%bd%89%e7%a7%bb%e5%88%b0%e5%85%b6%e4%bb%96%e7%af%80%e9%bb%9e%e4%b8%8a%e4%b8%a6%e8%a7%80%e5%af%9f%e8%b3%87%e6%96%99%e6%98%af%e5%90%a6%e9%82%84%e5%9c%a8" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
mysql-7b79bcfb7c-2zrxh 1/1 Running 0 5m 10.244.2.18 k1w2 &amp;lt;none&amp;gt; &amp;lt;none&amp;gt;
bigred@kube-kadm:~$ kubectl cordon k1w2
node/k1w2 cordoned
bigred@kube-kadm:~$ kubectl scale deploy mysql --replicas=0
deployment.apps/mysql scaled
bigred@kube-kadm:~$ kubectl cordon k1w2
node/k1w2 already cordoned
bigred@kube-kadm:~$ kubectl get pods -o wide
No resources found in default namespace.
bigred@kube-kadm:~$ kubectl scale deploy mysql --replicas=1
deployment.apps/mysql scaled
$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
mysql-7b79bcfb7c-fz7pg 1/1 Running 0 30s 10.244.1.24 k1w1 &amp;lt;none&amp;gt; &amp;lt;none&amp;gt;
bigred@kube-kadm:~$ mysql -u root -p -h 10.244.1.24
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.51 MySQL Community Server (GPL)
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type &amp;#39;help;&amp;#39; or &amp;#39;\h&amp;#39; for help. Type &amp;#39;\c&amp;#39; to clear the current input statement.
MySQL [(none)]&amp;gt; select * from haha.customer;
&amp;#43;----&amp;#43;----------&amp;#43;------&amp;#43;-----------&amp;#43;----------&amp;#43;
| ID | NAME | AGE | ADDRESS | SALARY |
&amp;#43;----&amp;#43;----------&amp;#43;------&amp;#43;-----------&amp;#43;----------&amp;#43;
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
&amp;#43;----&amp;#43;----------&amp;#43;------&amp;#43;-----------&amp;#43;----------&amp;#43;
7 rows in set (0.005 sec)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h3&gt;Block Volume 測試&lt;span class="hx:absolute hx:-mt-20" id="block-volume-測試"&gt;&lt;/span&gt;
&lt;a href="#block-volume-%e6%b8%ac%e8%a9%a6" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;建立 pvc&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ echo &amp;#39;apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: longhorn-block-vol
spec:
accessModes:
- ReadWriteOnce
volumeMode: Block
storageClassName: longhorn
resources:
requests:
storage: 3Gi&amp;#39; | kubectl apply -f -&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;建立 pod 並且掛載 pvc&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ echo &amp;#39;apiVersion: apps/v1
kind: Deployment
metadata:
name: pod-with-raw-block-volume
labels:
os: alpine
spec:
replicas: 1
selector:
matchLabels:
os: alpine
template:
metadata:
labels:
os: alpine
spec:
containers:
- name: alpine
image: taiwanese/alpine:stable
imagePullPolicy: IfNotPresent
command: [&amp;#34;/bin/sleep&amp;#34;, &amp;#34;infinity&amp;#34;]
volumeDevices:
- name: data
devicePath: /dev/sdd
securityContext:
privileged: true
lifecycle:
postStart:
exec:
command:
- /bin/sh
- -c
- |
set -e
mkdir /longhorn
checkformat=$(blkid | grep -w /dev/sdd | cut -d &amp;#39;:&amp;#39; -f1)
[[ &amp;#34;$checkformat&amp;#34; != /dev/sdd ]] &amp;amp;&amp;amp; (mkfs.ext4 /dev/sdd &amp;amp;&amp;amp; mount /dev/sdd /longhorn) || mount /dev/sdd /longhorn
preStop:
exec:
command:
- /bin/sh
- -c
- |
umount /dev/sdd
volumes:
- name: data
persistentVolumeClaim:
claimName: longhorn-block-vol&amp;#39; | kubectl apply -f -&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ kubectl get po
NAME READY STATUS RESTARTS AGE
pod-with-raw-block-volume-57b7bf4d5d-nmrzn 1/1 Running 0 20s&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ kubectl exec -it pod-with-raw-block-volume-57b7bf4d5d-5wl9l -- bash
bash-5.1# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 4K 1 loop
loop1 7:1 0 28K 1 loop
loop2 7:2 0 2.3M 1 loop
loop3 7:3 0 53.8M 1 loop
loop4 7:4 0 16M 0 loop
loop5 7:5 0 3G 0 loop
sda 8:0 0 800G 0 disk
├─sda1 8:1 0 100M 0 part
├─sda2 8:2 0 1M 0 part
├─sda3 8:3 0 1000M 0 part
├─sda4 8:4 0 1M 0 part
├─sda5 8:5 0 100M 0 part
└─sda6 8:6 0 798.8G 0 part /etc/resolv.conf
/etc/hostname
/dev/termination-log
/etc/hosts
sdb 8:16 0 120G 0 disk
sdc 8:32 0 120G 0 disk
sdd 8:48 0 3G 0 disk /longhorn
sr0 11:0 1 81.4M 0 rom
bash-5.1# echo 123 &amp;gt; /longhorn/test
bash-5.1# cat /longhorn/test
123&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;測試 pod 移轉&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ kubectl get po -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod-with-raw-block-volume-57b7bf4d5d-5wl9l 1/1 Running 0 59s 10.244.2.24 k1w1 &amp;lt;none&amp;gt; &amp;lt;none&amp;gt;
$ kubectl scale deploy pod-with-raw-block-volume --replicas=0
$ kubectl cordon k1w1
$ kubectl scale deploy pod-with-raw-block-volume --replicas=1
$ kubectl get no
NAME STATUS ROLES AGE VERSION
k1m1 Ready control-plane 47m v1.29.2
k1w1 Ready,SchedulingDisabled worker 42m v1.29.2
k1w2 Ready worker 42m v1.29.2
$ kubectl uncordon k1w1
$ kubectl get po -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod-with-raw-block-volume-6cfcd9889-t6pzt 1/1 Running 0 25s 10.244.1.21 k1w2 &amp;lt;none&amp;gt; &amp;lt;none&amp;gt;
$ kubectl exec -it pod-with-raw-block-volume-6cfcd9889-t6pzt -- cat /longhorn/test
123&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;參考資料&lt;span class="hx:absolute hx:-mt-20" id="參考資料"&gt;&lt;/span&gt;
&lt;a href="#%e5%8f%83%e8%80%83%e8%b3%87%e6%96%99" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a
href="https://www.talos.dev/v1.6/talos-guides/configuration/system-extensions/"target="_blank" rel="noopener"&gt;System Extensions - Talos Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a
href="https://www.talos.dev/v1.6/talos-guides/install/boot-assets/#image-factory"target="_blank" rel="noopener"&gt;Boot Assets - Talos Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a
href="https://factory.talos.dev/"target="_blank" rel="noopener"&gt;Talos Linux Image Factory&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Introduction to SUSE Rancher</title><link>https://blog.kubeantony.com/archive/rancher/introduction-to-suse-rancher/</link><pubDate>Tue, 28 Nov 2023 10:45:28 +0800</pubDate><guid>https://blog.kubeantony.com/archive/rancher/introduction-to-suse-rancher/</guid><description>
&lt;style&gt;
.indent-title-1{
margin-left: 1em;
}
.indent-title-2{
margin-left: 2em;
}
.indent-title-3{
margin-left: 3em;
}
&lt;/style&gt;
&lt;h2&gt;Preface&lt;span class="hx:absolute hx:-mt-20" id="preface"&gt;&lt;/span&gt;
&lt;a href="#preface" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;本篇文章會介紹以下內容&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;公司和產品名稱&lt;/li&gt;
&lt;li&gt;介紹 SUSE Rancher 版本 2.6&lt;/li&gt;
&lt;li&gt;探索 SUSE Rancher 架構&lt;/li&gt;
&lt;li&gt;學習如何進入 SUSE Rancher 的圖形化使用者介面 (GUI)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;可以透過點擊展開以下目錄，選擇想看的內容，跳轉至特定章節&lt;/p&gt;
&lt;/div&gt;
&lt;h1&gt;Explain the Company and Product Name&lt;/h1&gt;&lt;h2&gt;Rancher vs SUSE Rancher&lt;span class="hx:absolute hx:-mt-20" id="rancher-vs-suse-rancher"&gt;&lt;/span&gt;
&lt;a href="#rancher-vs-suse-rancher" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Rancher Labs – 原始公司
&lt;ul&gt;
&lt;li&gt;成立於 2014 年&lt;/li&gt;
&lt;li&gt;於 2020 年被 SUSE 收購&lt;/li&gt;
&lt;li&gt;又稱 &amp;ldquo;Rancher&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;SUSE Rancher – 新產品
&lt;ul&gt;
&lt;li&gt;一個多叢集的 Kubernetes Container 管理平台&lt;/li&gt;
&lt;li&gt;透過 Helm chart 作為 Kubernetes 應用程式部署&lt;/li&gt;
&lt;li&gt;又稱 &amp;ldquo;Rancher Server&amp;rdquo;&lt;/li&gt;
&lt;li&gt;目前版本為 2.6.0（2021年8月）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;與開源的 Rancher 產品相同，但具有企業級支援服務&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;Introduce SUSE Rancher Version 2.6&lt;/h1&gt;&lt;h2&gt;SUSE Rancher&lt;span class="hx:absolute hx:-mt-20" id="suse-rancher"&gt;&lt;/span&gt;
&lt;a href="#suse-rancher" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;SUSE Rancher 是一個適合企業使用的(enterprise ready)、可用於生產環境(production-level) 的 Kubernetes 管理平台。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://i.imgur.com/rtSJfUh.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;What’s new in SUSE Rancher 2.6&lt;span class="hx:absolute hx:-mt-20" id="whats-new-in-suse-rancher-26"&gt;&lt;/span&gt;
&lt;a href="#whats-new-in-suse-rancher-26" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="indent-title-1"&gt;
&lt;ul&gt;
&lt;li&gt;SUSE Rancher 的使用者界面重新設計：
&lt;ul&gt;
&lt;li&gt;簡化和提高存取方便性&lt;/li&gt;
&lt;li&gt;Unified Cluster Manager 和 Cluster Explorer 在一個圖形化使用者介面內
&lt;ul&gt;
&lt;li&gt;改進單一和多叢集使用情境的使用者體驗&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;GUI 中恢復了 Metrics functionality (指標功能)
&lt;ul&gt;
&lt;li&gt;基本資源利用率資訊可在不切換至 Grafana GUI 的情況下查看&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Full lifecycle management (完整生命週期管理)
&lt;ul&gt;
&lt;li&gt;能夠部署、升級和摧毀 Rancher 託管的 Kubernetes 叢集&lt;/li&gt;
&lt;li&gt;Configuration management 被添加到 AKS、EKS 和 GKE 上註冊的 Kubernetes 集群中&lt;/li&gt;
&lt;li&gt;在 SUSE Rancher 之外進行的設定更改會同步回 SUSE Rancher&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Rancher 託管的 Kubernetes 叢集有 Project network isolation 的功能
&lt;ul&gt;
&lt;li&gt;用於叢集多租戶&lt;/li&gt;
&lt;li&gt;叢集不能看到其他叢集的資源&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Audit logs (審核日誌)現在顯示來自外部驗證提供者的實際使用者身份，不再需要手動設定使用者對應。&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;註：Kubernetes 對 DockerShim 的支持將被取消。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;h2&gt;版本說明和入門指南&lt;span class="hx:absolute hx:-mt-20" id="版本說明和入門指南"&gt;&lt;/span&gt;
&lt;a href="#%e7%89%88%e6%9c%ac%e8%aa%aa%e6%98%8e%e5%92%8c%e5%85%a5%e9%96%80%e6%8c%87%e5%8d%97" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;SUSE Rancher GUI has links to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Release Notes
&lt;code&gt;https://&amp;lt;RANCHER&amp;gt;/dashboard/docs/release-notes&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;有關新功能和已棄用功能的資訊&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Getting Started
&lt;code&gt;https://&amp;lt;RANCHER&amp;gt;/dashboard/docs/getting-started&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;對新 GUI 的簡短介紹&lt;/li&gt;
&lt;li&gt;包含一個表格，列出了舊 GUI 和新 GUI 之間的功能位置&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h1&gt;Explore SUSE Rancher Architecture&lt;/h1&gt;&lt;h2&gt;SUSE Rancher Cake&lt;span class="hx:absolute hx:-mt-20" id="suse-rancher-cake"&gt;&lt;/span&gt;
&lt;a href="#suse-rancher-cake" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src="https://i.imgur.com/ctlAqod.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;On-prem(本地)、Cloud(雲端)、混合式(hybrid)
&lt;ul&gt;
&lt;li&gt;支援多個 Kubernetes 發行版。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;可以建立新的叢集或匯入現有的叢集。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在 Kubernetes 叢集中，每個運算資源都被稱為「node(節點)」，節點可以是裸機伺服器或是虛擬機器。&lt;/p&gt;
&lt;p&gt;Kubernetes 可以執行許多功能，例如&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;scheduling (排程)&lt;/li&gt;
&lt;li&gt;scaling (擴充)&lt;/li&gt;
&lt;li&gt;service discovery (服務發現)&lt;/li&gt;
&lt;li&gt;health check(健康檢查)&lt;/li&gt;
&lt;li&gt;secret management (密碼管理)&lt;/li&gt;
&lt;li&gt;configuration management (配置管理)。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;SUSE Rancher Value Points&lt;span class="hx:absolute hx:-mt-20" id="suse-rancher-value-points"&gt;&lt;/span&gt;
&lt;a href="#suse-rancher-value-points" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;透過 Helm chart 輕鬆安裝&lt;/li&gt;
&lt;li&gt;Central authentication
&lt;ul&gt;
&lt;li&gt;SUSE Rancher 內部的驗證&lt;/li&gt;
&lt;li&gt;外部的驗證，例如 LDAP、OAuth、OIDC 和 SAML&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;提供單一管理點&lt;/li&gt;
&lt;li&gt;可以配置 Kubernetes v1.17 或更新版本的叢集
&lt;ul&gt;
&lt;li&gt;已存在的 v1.16 叢集仍然可以被管理&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;所有叢集都有基於角色的存取控制 (RBAC)&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;SUSE Rancher 他自己是一個在 Kubernetes 中的 Deployment 做的 Application，也可以在單一節點環境下進行測試。&lt;/p&gt;
&lt;p&gt;LDAP (Lightweight Directory Access Protocol)
一個公開的資料存儲庫，用於存放使用者相關資訊。LDAP（輕量級目錄訪問協議）還提供使用者身份驗證功能。&lt;/p&gt;
&lt;p&gt;OAuth (Open Authorization)
允許第三方服務交換您的資訊。它使用 tokens (令牌)進行身份驗證，因此您的密碼不需要用於訪問該服務。&lt;/p&gt;
&lt;p&gt;OIDC (OpenID Connect)
一個加入身份層的 OAuth 擴充功能。OIDC 允許客戶端使用授權服務器來確認終端使用者的身份。&lt;/p&gt;
&lt;p&gt;SAML (Security Assertion Markup Language)
一個開放的標準，允許身份提供者將授權憑證傳遞給服務提供商。&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;Rancher Terminology&lt;span class="hx:absolute hx:-mt-20" id="rancher-terminology"&gt;&lt;/span&gt;
&lt;a href="#rancher-terminology" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Rancher Server:
&lt;ul&gt;
&lt;li&gt;Is installed on top of any Kubernetes cluster&lt;/li&gt;
&lt;li&gt;Manages and provisions downstream Kubernetes clusters&lt;/li&gt;
&lt;li&gt;透過 SUSE Rancher GUI 或 Rancher CLI 的 API 與下游叢集進行互動。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;RKE - Rancher Kubernetes Engine:
&lt;ul&gt;
&lt;li&gt;經過 Cloud Native Computing Foundation（CNCF）認證的 Kubernetes 發行版。&lt;/li&gt;
&lt;li&gt;使用 CLI/程式庫 來建立和管理 Kubernetes 叢集。&lt;/li&gt;
&lt;li&gt;在 2021 年 12 月與 RKE2 進行統一。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Downstream Cluster
&lt;ul&gt;
&lt;li&gt;由 SUSE Rancher GUI 管理或與之互動的叢集。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;K3s - Lightweight Kubernetes
&lt;ul&gt;
&lt;li&gt;CNCF 認證的 Kubernetes 發行版&lt;/li&gt;
&lt;li&gt;只有一個二進制檔案 → 輕量級&lt;/li&gt;
&lt;li&gt;非常適合單節點邊緣叢集(Edge clusters)。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;RKE2
&lt;ul&gt;
&lt;li&gt;CNCF 認證的 Kubernetes 發行版&lt;/li&gt;
&lt;li&gt;專注於美國聯邦政府部門的安全性和合規性。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;RancherD
&lt;ul&gt;
&lt;li&gt;New installation utility for SUSE Rancher&lt;/li&gt;
&lt;li&gt;目前處於實驗狀態&lt;/li&gt;
&lt;li&gt;首先啟動一個 RKE2 Kubernetes 叢集，然後在該叢集上安裝 SUSE Rancher Server 的 Helm Chart。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;如果 SUSE Rancher 被安裝在 RKE Kubernetes 叢集上，最小的 HA 叢集設定應該要有 3 台 Node，且每台 Node 都需要擔任 Etcd、ContorlPlane 和 Worker 的角色。如果安裝在 K3S 叢集上的話，對於設定 Etcd HA 叢集的架構的話，只需兩台 Nodes 就可以了&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;SUSE Rancher Management Cluster&lt;span class="hx:absolute hx:-mt-20" id="suse-rancher-management-cluster"&gt;&lt;/span&gt;
&lt;a href="#suse-rancher-management-cluster" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;SUSE Rancher 是一個 Kubernetes 的 App&lt;/li&gt;
&lt;li&gt;基本的 high availability 設定要求
&lt;ul&gt;
&lt;li&gt;3 台 Etcd Nodes
&lt;ul&gt;
&lt;li&gt;儲存叢集內部設定資訊的資料庫&lt;/li&gt;
&lt;li&gt;可以與 Control Plane Node 共存&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2 台 Control Plane Nodes
&lt;ul&gt;
&lt;li&gt;SUSE Rancher management functionality&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2 台 worker nodes
&lt;ul&gt;
&lt;li&gt;Run the user workloads&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;Kubernetes 將 Node 劃分為三種類型&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;etcd nodes&lt;/li&gt;
&lt;li&gt;control plane nodes&lt;/li&gt;
&lt;li&gt;worker nodes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A Kubernetes cluster consists of at least one etcd, control plane, and worker node&lt;/p&gt;
&lt;p&gt;SUSE Rancher 在單節點和高可用性安裝中都使用 etcd 作為數據存儲。在 Kubernetes 中，etcd 也是一種節點角色，負責儲存叢集的設定和狀態。&lt;/p&gt;
&lt;p&gt;Kubernetes 叢集的狀態是由 etcd 維護的。Etcd Node 跑的是 Etcd Database，它是一個分散式的 key-value 存儲方式，用於作為 Kubernetes 的存儲來保存所有叢集資料，例如叢集協調和狀態管理。&lt;/p&gt;
&lt;p&gt;Control plane nodes 運行 Kubernetes API server、scheduler 和 controller manager。 這些 nodes 負責日常任務以確保集群維護其設定。 因為所有集群數據都存儲在 etcd 節點上，所以控制平面節點是無狀態的。&lt;/p&gt;
&lt;p&gt;Each worker node runs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Kubelets
&lt;ul&gt;
&lt;li&gt;監控 Node 狀態的 agent (代理)，確保 Container 的健康&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Workloads
&lt;ul&gt;
&lt;li&gt;包含實際應用程序的 Container 和 pod，以及其他類型的部署&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Worker nodes also run storage and networking drivers, and ingress controllers when required.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/HyRaAJvvn.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;Downstream Clusters&lt;span class="hx:absolute hx:-mt-20" id="downstream-clusters"&gt;&lt;/span&gt;
&lt;a href="#downstream-clusters" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;下游集群由 SUSE Rancher 管理&lt;/li&gt;
&lt;li&gt;SUSE Rancher 透過在叢集節點中運行的代理程式與標準的 Kubernetes API 進行通信。&lt;/li&gt;
&lt;li&gt;下游集群在 Kubernetes worker nodes 上運行應用程序和服務&lt;/li&gt;
&lt;li&gt;SUSE Rancher 是一個完整的 Kubernetes Container 管理平台，為管理員提供了在任何地方成功運行 Kubernetes 的工具。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/HJQJeewPh.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;SUSE Rancher Server&lt;span class="hx:absolute hx:-mt-20" id="suse-rancher-server"&gt;&lt;/span&gt;
&lt;a href="#suse-rancher-server" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;SUSE Rancher Server runs on top of a Kubernetes cluster:
&lt;ul&gt;
&lt;li&gt;包含管理整個 SUSE Rancher 部署所需的所有內容&lt;/li&gt;
&lt;li&gt;通過 cluster agent (集群代理) 或 node agent (節點代理) 提供的 API 與下游集群進行通信&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;SUSE Rancher cluster 應專門用於只運行 SUSE Rancher
&lt;ul&gt;
&lt;li&gt;For security and best performance&lt;/li&gt;
&lt;li&gt;User workloads are to be run on downstream clusters&lt;/li&gt;
&lt;li&gt;Rancher is deployed with a Helm chart.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Authentication and Cluster Access&lt;span class="hx:absolute hx:-mt-20" id="authentication-and-cluster-access"&gt;&lt;/span&gt;
&lt;a href="#authentication-and-cluster-access" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Authentication Proxy
&lt;ul&gt;
&lt;li&gt;對呼叫者進行身份驗證&lt;/li&gt;
&lt;li&gt;Sets the proper Kubernetes impersonation headers&lt;/li&gt;
&lt;li&gt;將 Kubernetes API 的請求轉發至下游叢集。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Integrated authentication services
&lt;ul&gt;
&lt;li&gt;Local authentication&lt;/li&gt;
&lt;li&gt;LDAP, OAuth, OIDC, SAML&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;SUSE Rancher 使用 Service Account 與 Kubernetes 集群進行溝通，該 Service Account 為在 pod 中運行的程序提供身份。&lt;/p&gt;
&lt;p&gt;默認情況下，使用 &lt;code&gt;kubeconfig&lt;/code&gt; 文件訪問 Kubernetes 集群。 &lt;code&gt;kubeconfig&lt;/code&gt; 文件包含對集群的完全訪問權限。&lt;/p&gt;
&lt;p&gt;使用 SUSE Rancher，由於認證代理（authentication proxy）的存在，這個檔案對於叢集 API 通訊並不需要，認證代理會被 SUSE Rancher Server 使用，以便連接到下游使用者叢集上的 Kubernetes API server。&lt;/p&gt;
&lt;p&gt;如果需要，可以繞過認證代理。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/ByOz_xwP3.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;Hosted Kubernetes Providers&lt;span class="hx:absolute hx:-mt-20" id="hosted-kubernetes-providers"&gt;&lt;/span&gt;
&lt;a href="#hosted-kubernetes-providers" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Kubernetes can be provisioned by cloud providers such as
&lt;ul&gt;
&lt;li&gt;Amazon Elastic Container Service for Kubernetes (EKS)&lt;/li&gt;
&lt;li&gt;Azure Kubernetes Service (AKS)&lt;/li&gt;
&lt;li&gt;Google Kubernetes Engine (GKE)&lt;/li&gt;
&lt;li&gt;And more &amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;SUSE Rancher integrates with the cloud provider’s API
&lt;ul&gt;
&lt;li&gt;Allows Role-Based Access Control from the Rancher GUI&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;SUSE Rancher Provisioned Kubernetes&lt;span class="hx:absolute hx:-mt-20" id="suse-rancher-provisioned-kubernetes"&gt;&lt;/span&gt;
&lt;a href="#suse-rancher-provisioned-kubernetes" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;在現有節點上設定 RKE:
&lt;ul&gt;
&lt;li&gt;透過 SUSE Rancher cluster agent 這台 Container 新增一台 Node&lt;/li&gt;
&lt;li&gt;SUSE Rancher GUI 使用 Docker 當作 container runtime&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Can be deployed on:
&lt;ul&gt;
&lt;li&gt;Bare metal server&lt;/li&gt;
&lt;li&gt;Virtualization platform&lt;/li&gt;
&lt;li&gt;Cloud provider virtual machines
&lt;ul&gt;
&lt;li&gt;Amazon EC2, Azure, Google, &amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Rancher 生成的 K8S 和 import 進 Rancher 的 K8S，這兩種 Cluster，沒有支援以下能力&lt;span class="hx:absolute hx:-mt-20" id="rancher-生成的-k8s-和-import-進-rancher-的-k8s這兩種-cluster沒有支援以下能力"&gt;&lt;/span&gt;
&lt;a href="#rancher-%e7%94%9f%e6%88%90%e7%9a%84-k8s-%e5%92%8c-import-%e9%80%b2-rancher-%e7%9a%84-k8s%e9%80%99%e5%85%a9%e7%a8%ae-cluster%e6%b2%92%e6%9c%89%e6%94%af%e6%8f%b4%e4%bb%a5%e4%b8%8b%e8%83%bd%e5%8a%9b" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Ability to rotate certificates&lt;/li&gt;
&lt;li&gt;Ability to back up the Kubernetes clusters&lt;/li&gt;
&lt;li&gt;Ability to recover and restore etcd&lt;/li&gt;
&lt;li&gt;Cleaning Kubernetes components when clusters are no longer reachable from SUSE Rancher&lt;/li&gt;
&lt;li&gt;Configuring Pod Security Policies&lt;/li&gt;
&lt;li&gt;Running Security Scans&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Imported Kubernetes Clusters&lt;span class="hx:absolute hx:-mt-20" id="imported-kubernetes-clusters"&gt;&lt;/span&gt;
&lt;a href="#imported-kubernetes-clusters" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;SUSE Rancher 能與已經運行中的 Kubernetes 群集進行溝通。
&lt;ul&gt;
&lt;li&gt;在下游群集上建立 SUSE Rancher node agent container ，以將群集導入到 SUSE Rancher Server 中。&lt;/li&gt;
&lt;li&gt;SUSE Rancher 的圖形使用者介面提供一個指令，這個指令可以在有權限訪問 &lt;code&gt;kubeconfig&lt;/code&gt; 檔案的群集節點上執行。&lt;/li&gt;
&lt;li&gt;註冊完成後，SUSE Rancher 可以透過 agent 使用原生的 Kubernetes API 與群集進行溝通。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Cluster Agent&lt;span class="hx:absolute hx:-mt-20" id="cluster-agent"&gt;&lt;/span&gt;
&lt;a href="#cluster-agent" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Downstream clusters run a cluster agent&lt;/li&gt;
&lt;li&gt;Cluster agent:
&lt;ul&gt;
&lt;li&gt;在 SUSE Rancher 啟動的 Kubernetes 集群上連接到 Kubernetes API Server&lt;/li&gt;
&lt;li&gt;觀察下游集群的資源變化&lt;/li&gt;
&lt;li&gt;使下游集群的當前狀態達到所需狀態&lt;/li&gt;
&lt;li&gt;設定對 Cluster (群集) 和 Project (專案) 的存取控制政策。&lt;/li&gt;
&lt;li&gt;通過調用所需的 Kubernetes 引擎（AKS、EKS、GKE）和 Docker 機器驅動程序 (RKE) 來配置集群&lt;/li&gt;
&lt;li&gt;管理每個集群內的 Workloads、pod 創建和部署&lt;/li&gt;
&lt;li&gt;套用每個群集的 global policies (全域策略) 中定義的 Role (角色) 和 binding (綁定)&lt;/li&gt;
&lt;li&gt;提供 Rancher Server 關於 Event (事件)、 stats (統計)、node info (節點信息)和 health (健康) 的信息&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;For RKE2 and K3s &lt;code&gt;containerd&lt;/code&gt; runtime is used.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Node Agent&lt;span class="hx:absolute hx:-mt-20" id="node-agent"&gt;&lt;/span&gt;
&lt;a href="#node-agent" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;如果目標沒有可用的 Cluster Agent，其中一個 Node Agent 會建立一個隧道到 Cluster Contorller ，以與 SUSE Rancher 進行通訊。
&lt;ul&gt;
&lt;li&gt;Infrastructure clusters
&lt;ul&gt;
&lt;li&gt;Amazon EC2, Azure, Google, &amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Existing registered, non-provisioned RKE, RKE2, and K3s clusters&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Node Agent 部署為 Kubernetes &lt;strong&gt;&lt;code&gt;DaemonSet&lt;/code&gt;&lt;/strong&gt; 以確保其運行在集群中的每個節點上&lt;/li&gt;
&lt;li&gt;Node agent interaction is used for:
&lt;ul&gt;
&lt;li&gt;Upgrading the Kubernetes version&lt;/li&gt;
&lt;li&gt;Creating or restoring etcd snapshots&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;&lt;code&gt;cattle-node-agent&lt;/code&gt; 是用來在進行群集操作時，與 Rancher 啟動的 Kubernetes 群集中的節點互動。群集操作的例子包括升級 Kubernetes 版本和創建/恢復 etcd 快照。&lt;code&gt;cattle-node-agent&lt;/code&gt; 是使用 DaemonSet 資源部署的，以確保它在每個節點上運行。當 &lt;code&gt;cattle-cluster-agent&lt;/code&gt; 不可用時，&lt;code&gt;cattle-node-agent&lt;/code&gt; 被用作備用選項，連接到 Rancher 啟動的 Kubernetes 群集的 Kubernetes API。&lt;/p&gt;
&lt;/div&gt;
&lt;h1&gt;Access SUSE Rancher GUI&lt;/h1&gt;&lt;h2&gt;First Login to SUSE Rancher&lt;span class="hx:absolute hx:-mt-20" id="first-login-to-suse-rancher"&gt;&lt;/span&gt;
&lt;a href="#first-login-to-suse-rancher" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;打開一個瀏覽器，輸入 SUSE Rancher URL
&lt;ul&gt;
&lt;li&gt;第一次登入時，會要求 &lt;code&gt;Bootstrap password&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;密碼可以手動設定，會由 Rancher 隨機產生&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/BJreHnUv2.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;h2&gt;SUSE Rancher GUI Basic Configuration&lt;span class="hx:absolute hx:-mt-20" id="suse-rancher-gui-basic-configuration"&gt;&lt;/span&gt;
&lt;a href="#suse-rancher-gui-basic-configuration" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;如果使用隨機 &lt;code&gt;Bootstrap password&lt;/code&gt; 引導密碼，必須設置管理密碼&lt;/li&gt;
&lt;li&gt;SUSE Rancher URL 用於
&lt;ul&gt;
&lt;li&gt;訪問 GUI 介面&lt;/li&gt;
&lt;li&gt;Downstream clusters API 的訪問
&lt;ul&gt;
&lt;li&gt;Downstream clusters 在建立時，會需要能夠訪問 SUSE Rancher URL&lt;/li&gt;
&lt;li&gt;SUSE Rancher URL 在 Rancher 建立好後不支援更改&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;同意條款和條件&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/H1alO2Uwn.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;SUSE Rancher Landing Page&lt;span class="hx:absolute hx:-mt-20" id="suse-rancher-landing-page"&gt;&lt;/span&gt;
&lt;a href="#suse-rancher-landing-page" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Contains links for What’s New, Getting Started etc&lt;/li&gt;
&lt;li&gt;A list of clusters is displayed in the bottom of the page&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/HJx7YnIv3.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;Cluster List&lt;span class="hx:absolute hx:-mt-20" id="cluster-list"&gt;&lt;/span&gt;
&lt;a href="#cluster-list" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;SUSE Rancher 主頁將顯示由 SUSE Rancher 啟動或導入的集群
&lt;ul&gt;
&lt;li&gt;The default name of the SUSE Rancher cluster is &lt;code&gt;local&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;可以導入現有集群或設定啟動新集群&lt;/li&gt;
&lt;li&gt;提供有關集群的基本詳細信息&lt;/li&gt;
&lt;li&gt;SUSE Rancher GUI 專注於多集群環境&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;SUSE Rancher Post-Install Configuration&lt;span class="hx:absolute hx:-mt-20" id="suse-rancher-post-install-configuration"&gt;&lt;/span&gt;
&lt;a href="#suse-rancher-post-install-configuration" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;安裝後，系統管理員可以配置和微調 SUSE Rancher 的一系列設置和功能，包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Authentication (身分驗證)&lt;/li&gt;
&lt;li&gt;Authorization (授權)&lt;/li&gt;
&lt;li&gt;Node and Cluster Drivers&lt;/li&gt;
&lt;li&gt;Helm repositories&lt;/li&gt;
&lt;li&gt;Continuous Delivery&lt;/li&gt;
&lt;li&gt;Security&lt;/li&gt;
&lt;li&gt;Advanced settings&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Questions:&lt;span class="hx:absolute hx:-mt-20" id="questions"&gt;&lt;/span&gt;
&lt;a href="#questions" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;Q1: SUSE Rancher Server 可以管理什麼類型的集群？&lt;/p&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;SUSE Rancher Server 可以管理在雲端、本地或混合環境中運行的各種 Kubernetes 集群。&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Q2: Downstream Cluster 是什麼意思?&lt;/p&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;由 SUSE Rancher 管理的集群稱為 Downstream Cluster (下游集群)。&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Q3: SUSE Rancher 如何管理 Kubernetes clusters?&lt;/p&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;當在 SUSE Rancher 中提供或匯入群集時，會在目標系統上部署 Cluster 或是 Node Agent。這些 Agent 提供了與 SUSE Rancher Server 溝通的 API。&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>Rancher 對 RKE2 Snapshot 的前置設定</title><link>https://blog.kubeantony.com/archive/rancher/rancher-%E5%B0%8D-rke2-snapshot-%E7%9A%84%E5%89%8D%E7%BD%AE%E8%A8%AD%E5%AE%9A/</link><pubDate>Thu, 27 Jul 2023 06:55:20 +0800</pubDate><guid>https://blog.kubeantony.com/archive/rancher/rancher-%E5%B0%8D-rke2-snapshot-%E7%9A%84%E5%89%8D%E7%BD%AE%E8%A8%AD%E5%AE%9A/</guid><description>
&lt;style&gt;
.indent-title-1{
margin-left: 1em;
}
.indent-title-2{
margin-left: 2em;
}
.indent-title-3{
margin-left: 3em;
}
&lt;/style&gt;
&lt;ul&gt;
&lt;li&gt;使用 Rancher 生成的 RKE2 Cluste，需要把 &lt;code&gt;rke2&lt;/code&gt; 命令複製到&lt;code&gt;/usr/local/bin/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;需要在叢集中的每一台 Node 上都執行以下命令&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo cp /opt/rke2/bin/* /usr/local/bin/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;檢視 SnapShot 列表&lt;span class="hx:absolute hx:-mt-20" id="檢視-snapshot-列表"&gt;&lt;/span&gt;
&lt;a href="#%e6%aa%a2%e8%a6%96-snapshot-%e5%88%97%e8%a1%a8" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/ryJJBqkin.png" alt="" loading="lazy" /&gt;&lt;/p&gt;</description></item><item><title>Pod 使用 K8S 外部 DNS Server &amp; Rancher 對 RKE2 Snapshot 的前置設定</title><link>https://blog.kubeantony.com/archive/rancher/pod-%E4%BD%BF%E7%94%A8-k8s-%E5%A4%96%E9%83%A8-dns-server-rancher-%E5%B0%8D-rke2-snapshot-%E7%9A%84%E5%89%8D%E7%BD%AE%E8%A8%AD%E5%AE%9A/</link><pubDate>Thu, 27 Jul 2023 05:48:50 +0800</pubDate><guid>https://blog.kubeantony.com/archive/rancher/pod-%E4%BD%BF%E7%94%A8-k8s-%E5%A4%96%E9%83%A8-dns-server-rancher-%E5%B0%8D-rke2-snapshot-%E7%9A%84%E5%89%8D%E7%BD%AE%E8%A8%AD%E5%AE%9A/</guid><description>
&lt;style&gt;
.indent-title-1{
margin-left: 1em;
}
.indent-title-2{
margin-left: 2em;
}
.indent-title-3{
margin-left: 3em;
}
&lt;/style&gt;
&lt;h1&gt;Preface&lt;/h1&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;本篇文章會介紹，&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;如何讓 Pod 使用 K8S 外部的 DNS Server&lt;/li&gt;
&lt;li&gt;Rancher 對 RKE2 Snapshot 的前置設定&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;可以透過點擊展開以下目錄，選擇想看的內容，跳轉至特定章節&lt;/p&gt;
&lt;/div&gt;
&lt;h1&gt;Pod 使用 K8S 外部 DNS Server&lt;/h1&gt;&lt;h2&gt;Sample: Pod Yaml File&lt;span class="hx:absolute hx:-mt-20" id="sample-pod-yaml-file"&gt;&lt;/span&gt;
&lt;a href="#sample-pod-yaml-file" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="indent-title-1"&gt;
&lt;pre&gt;
$ echo 'apiVersion: v1
kind: Pod
metadata:
name: test
namespace: default
spec:
containers:
- image: quay.io/hahappyman/alpine
command:
- sleep
- "360000"
imagePullPolicy: IfNotPresent
name: test
restartPolicy: Always
&lt;font color=red&gt;dnsConfig:
nameservers:
- 192.168.11.97&lt;/font&gt;' &gt; pod.yaml
&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;DNSConfig&lt;/code&gt; 可以讓使用者直接輸入 DNS 相關的參數，該參數會擴充該 Pod原本的 DNS 設定檔案。
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;dnsConfig.nameservers&lt;/code&gt;，指定 K8S 外部的 DNS Server IP Address&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;h3&gt;建立 Pod&lt;span class="hx:absolute hx:-mt-20" id="建立-pod"&gt;&lt;/span&gt;
&lt;a href="#%e5%bb%ba%e7%ab%8b-pod" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-1"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ kubectl apply -f pod.yaml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;檢視在 Pod 中，新加入的 DNS Server&lt;span class="hx:absolute hx:-mt-20" id="檢視在-pod-中新加入的-dns-server"&gt;&lt;/span&gt;
&lt;a href="#%e6%aa%a2%e8%a6%96%e5%9c%a8-pod-%e4%b8%ad%e6%96%b0%e5%8a%a0%e5%85%a5%e7%9a%84-dns-server" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-1"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ kubectl exec test -- cat /etc/resolv.conf&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;pre&gt;
search default.svc.cluster.local svc.cluster.local cluster.local
nameserver 10.43.0.10
&lt;font color=red&gt;nameserver 192.168.11.97&lt;/font&gt;
&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;在 nameserver 的欄位可以看到多了一筆 &lt;code&gt;192.168.11.97&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;h3&gt;測試名稱解析&lt;span class="hx:absolute hx:-mt-20" id="測試名稱解析"&gt;&lt;/span&gt;
&lt;a href="#%e6%b8%ac%e8%a9%a6%e5%90%8d%e7%a8%b1%e8%a7%a3%e6%9e%90" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-1"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ kubectl exec test -- ping -c 1 rancher.example.com&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;pre&gt;
PING rancher.example.com &lt;font color=red&gt;(192.168.11.11)&lt;/font&gt;: 56 data bytes
64 bytes from 192.168.11.11: seq=0 ttl=63 time=0.830 ms
--- rancher.example.com ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 0.830/0.830/0.830 ms
&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;可以看到成功將 &lt;code&gt;rancher.example.com&lt;/code&gt; 解析成 &lt;code&gt;192.168.11.11&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h1&gt;Rancher 對 RKE2 Snapshot 的前置設定&lt;/h1&gt;&lt;ul&gt;
&lt;li&gt;使用 Rancher 生成的 RKE2 Cluste，需要把 &lt;code&gt;rke2&lt;/code&gt; 命令複製到&lt;code&gt;/usr/local/bin/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;需要在叢集中的每一台 Node 上都執行以下命令&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-2"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo cp /opt/rke2/bin/* /usr/local/bin/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>Longhorn Introduction</title><link>https://blog.kubeantony.com/archive/rancher/longhorn-introduction/</link><pubDate>Fri, 21 Jul 2023 02:41:38 +0800</pubDate><guid>https://blog.kubeantony.com/archive/rancher/longhorn-introduction/</guid><description>
&lt;style&gt;
.indent-title-1{
margin-left: 1em;
}
.indent-title-2{
margin-left: 2em;
}
.indent-title-3{
margin-left: 3em;
}
&lt;/style&gt;
&lt;h1&gt;Preface&lt;/h1&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;本篇文章會介紹，甚麼是 Longhorn，它如何運作，如何安裝，即實作。&lt;/p&gt;
&lt;p&gt;可以透過點擊展開以下目錄，選擇想看的內容，跳轉至特定章節&lt;/p&gt;
&lt;/div&gt;
&lt;h1&gt;What is Longhorn?&lt;/h1&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;&lt;font size=5&gt;&lt;strong&gt;Longhorn 是 Kubernetes 的一個輕量級、可靠且易於使用的分散式區塊儲存系統。&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;本質上，它將普通硬體和雲端儲存空間轉變為可靠且分散式的塊儲存解決方案，為 Kubernetes 提供 software-defined storage (軟體定義儲存 [SDS])。&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;在 Kubernetes 環境中使用 Longhorn 的特性和優點&lt;span class="hx:absolute hx:-mt-20" id="在-kubernetes-環境中使用-longhorn-的特性和優點"&gt;&lt;/span&gt;
&lt;a href="#%e5%9c%a8-kubernetes-%e7%92%b0%e5%a2%83%e4%b8%ad%e4%bd%bf%e7%94%a8-longhorn-%e7%9a%84%e7%89%b9%e6%80%a7%e5%92%8c%e5%84%aa%e9%bb%9e" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;安裝和操作方便&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;Longhorn 可以透過一個指令在任何 Kubernetes 叢集上進行安裝。&lt;/p&gt;
&lt;p&gt;它提供了圖形使用者介面，創建和連接 volumes、進行快照的管理，以及設置備份。&lt;/p&gt;
&lt;/div&gt;
&lt;ol start="2"&gt;
&lt;li&gt;&lt;strong&gt;輕量化且可靠&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;Longhorn 的佔用空間很小，不需要任何額外的服務來運行，因此是一個輕量級的解決方案。它通過在叢集中的不同節點之間同步複製 volumes 來確保高可用性。如果一個節點或硬碟故障，Longhorn 會自動重新複製數據到其他節點，保護數據的安全性。&lt;/p&gt;
&lt;/div&gt;
&lt;ol start="3"&gt;
&lt;li&gt;&lt;strong&gt;Volumes 的災難復原&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;Longhorn 支援跨叢集災難恢復 volumes，使得在災難發生時可以快速啟動備援的 volumes。&lt;/p&gt;
&lt;/div&gt;
&lt;ol start="4"&gt;
&lt;li&gt;&lt;strong&gt;Incremental Snapshots and Backups&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;Longhorn 允許您對 volumes 進行增量式快照拍攝，並將其備份到第二個儲存空間。這種方法優化了儲存使用情況，加快了備份和恢復操作的速度。&lt;/p&gt;
&lt;/div&gt;
&lt;ol start="5"&gt;
&lt;li&gt;&lt;strong&gt;ReadWriteMany (RWX) Volumes Support&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;從 Longhorn 1.1.0 版本開始，Longhorn 支援 ReadWriteMany (RWX) volumes，允許多個節點同時讀寫一個 volumes。&lt;/p&gt;
&lt;/div&gt;
&lt;ol start="6"&gt;
&lt;li&gt;&lt;strong&gt;Active Monitoring and Alerts&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;Longhorn 透過與 Prometheus 的整合提供主動監控和警示功能。&lt;/p&gt;
&lt;/div&gt;
&lt;ol start="7"&gt;
&lt;li&gt;&lt;strong&gt;Built-In Data Locality and Affinity Features&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;Longhorn 支援資料本地化，嘗試保持資料和 Application 在同一節點上，以提高性能。&lt;/p&gt;
&lt;p&gt;它還支援 volume 和節點的 affinity/anti-affinity 策略，用於進階的 volume 排程。&lt;/p&gt;
&lt;/div&gt;
&lt;h1&gt;Longhorn 的運作架構&lt;/h1&gt;&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/ry-52br5h.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;h2&gt;Longhorn Manager&lt;span class="hx:absolute hx:-mt-20" id="longhorn-manager"&gt;&lt;/span&gt;
&lt;a href="#longhorn-manager" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;一個 DaemonSet in Kubernetes&lt;/li&gt;
&lt;li&gt;Longhorn Manager 在 Kubernetes 叢集的每個節點上運行。&lt;/li&gt;
&lt;li&gt;它負責在 Kubernetes 叢集中創建和管理 Volume，並處理來自使用者介面或 Kubernetes 的 volume plugins 的 API 呼叫。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Longhorn Engine&lt;span class="hx:absolute hx:-mt-20" id="longhorn-engine"&gt;&lt;/span&gt;
&lt;a href="#longhorn-engine" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;一個 Linux Process&lt;/li&gt;
&lt;li&gt;Longhorn Engine 是負責讀寫資料到儲存後端。&lt;/li&gt;
&lt;li&gt;每個 Longhorn volume 都有對應的 Longhorn Engine。&lt;/li&gt;
&lt;li&gt;Longhorn Engine 進行快照拍攝、建立備份，並在不同節點之間複製資料以確保高可用性。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Longhorn UI&lt;span class="hx:absolute hx:-mt-20" id="longhorn-ui"&gt;&lt;/span&gt;
&lt;a href="#longhorn-ui" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Longhorn 使用者介面（UI）是一個圖形使用者介面，讓使用者能夠管理 Volumes、進行快照拍攝、設置備份，並監控儲存系統的狀態。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Longhorn CSI (Container Storage Interface) Driver&lt;span class="hx:absolute hx:-mt-20" id="longhorn-csi-container-storage-interface-driver"&gt;&lt;/span&gt;
&lt;a href="#longhorn-csi-container-storage-interface-driver" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;CSI Driver 允許 Kubernetes 將 Longhorn 作為其儲存提供者。&lt;/li&gt;
&lt;li&gt;它將 Kubernetes 的 Volume 操作轉換為相應的 Longhorn 操作，例如
&lt;ul&gt;
&lt;li&gt;創建 Volume&lt;/li&gt;
&lt;li&gt;將 Volume 附加/分離到節點&lt;/li&gt;
&lt;li&gt;以及將 Volume 掛載/卸載到 Pod&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Longhorn Instance Manager&lt;span class="hx:absolute hx:-mt-20" id="longhorn-instance-manager"&gt;&lt;/span&gt;
&lt;a href="#longhorn-instance-manager" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;有兩種類型的 Instance Manager，
&lt;ul&gt;
&lt;li&gt;一個用於管理 Longhorn Engine instances，&lt;/li&gt;
&lt;li&gt;另一個用於管理 Longhorn Replica instances。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;叢集中的每個節點都運行一個 Instance Manager pod，每種類型一個。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Longhorn Replicas&lt;span class="hx:absolute hx:-mt-20" id="longhorn-replicas"&gt;&lt;/span&gt;
&lt;a href="#longhorn-replicas" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;這些是由 Longhorn Engine 在不同節點上同步創建的資料副本，用於實現冗餘和高可用性。&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;How Longhorn Operates&lt;/h1&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;在 Longhorn 中，當您在 Kubernetes 中創建一個 Persistent Volume Claim(PVC) 時，&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Longhorn CSI driver 會將此請求傳達給 Longhorn manager。&lt;/li&gt;
&lt;li&gt;Longhorn manager 會提供一個新的 Longhorn Volime 和對應的 Longhorn Engine。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Longhorn Engine 負責存儲 Volume 的實際資料，並管理將資料複製到分布在不同節點上的 Longhorn Replicas。這種複製確保您的資料即使節點發生故障，仍然安全可用。&lt;/p&gt;
&lt;p&gt;此外，當您進行快照時，Longhorn Engine 會在不影響運行 Application 的情況下創建資料的某一時間點副本。這些快照可以用於備份，這些備份是增量的，可以存儲在像 AWS S3 或 NFS 伺服器這樣的第二個儲存空間中。&lt;/p&gt;
&lt;/div&gt;</description></item><item><title>Rancher Webhook</title><link>https://blog.kubeantony.com/archive/rancher/rancher-webhook/</link><pubDate>Fri, 14 Jul 2023 02:45:44 +0800</pubDate><guid>https://blog.kubeantony.com/archive/rancher/rancher-webhook/</guid><description>
&lt;style&gt;
.indent-title-1{
margin-left: 1em;
}
.indent-title-2{
margin-left: 2em;
}
.indent-title-3{
margin-left: 3em;
}
&lt;/style&gt;
&lt;h1&gt;Preface&lt;/h1&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;本篇文章會介紹以下內容&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;甚麼是 Rancher Webhook，它在做什麼?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;可以透過點擊展開以下目錄，選擇想看的內容，跳轉至特定章節&lt;/p&gt;
&lt;/div&gt;
&lt;h1&gt;What is Rancher Webhook&lt;/h1&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;Rancher-Webhook 是 Rancher 的一個重要元件，與 Kubernetes 搭配使用，以增強安全性並啟用 Rancher 管理叢集的關鍵功能。&lt;/p&gt;
&lt;p&gt;Rancher webhook 同時是 Kubernetes 的 validating admission webhook 和 mutating admission webhook.&lt;/p&gt;
&lt;p&gt;Rancher-Webhook 與 Kubernetes 的 extensible admission controllers (可擴充入場控制器)整合在一起，就像 &lt;a
href="https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/#what-are-admission-webhooks"target="_blank" rel="noopener"&gt;Kubernetes documentation&lt;/a&gt; 中所描述的那樣。&lt;/p&gt;
&lt;p&gt;這使得 &lt;strong&gt;Rancher-Webhook 能夠檢視傳送至 Kubernetes API 伺服器的特定請求，並對 Rancher 相關的請求進行自訂的驗證和變更&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;Rancher-Webhook 透過 &lt;code&gt;rancher.cattle.io&lt;/code&gt; 的 &lt;code&gt;ValidatingWebhookConfiguration&lt;/code&gt; 和 &lt;code&gt;MutatingWebhookConfiguration&lt;/code&gt; 來管理要進行驗證的資源，並會覆蓋任何手動編輯。&lt;/p&gt;
&lt;p&gt;Rancher 在本地和下游叢集中將 Rancher-Webhook 部署為獨立的 Deployment 和 Service。Rancher 使用 Helm 來管理 Rancher-Webhook。值得注意的是，Rancher 可能會覆蓋使用者對 Helm 發行版所做的修改。&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;Why do we need it?&lt;span class="hx:absolute hx:-mt-20" id="why-do-we-need-it"&gt;&lt;/span&gt;
&lt;a href="#why-do-we-need-it" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;Rancher-Webhook 是 Rancher 的重要組件，用於保護叢集免受惡意攻擊並啟用各種功能。Rancher 依賴於 Rancher-Webhook 作為其功能的不可或缺的一部分。如果沒有這個網鉤，Rancher 將不會是一個完整的產品。它為 Rancher 管理的叢集提供了重要的保護，防止安全漏洞並確保叢集的一致性和穩定性。&lt;/p&gt;
&lt;/div&gt;
&lt;h1&gt;What are admission webhooks?&lt;/h1&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;「admission webhooks」是一種 HTTP callbacks (回調) 功能，用於接收「admission requests (入場請求)」並對其進行處理。&lt;/p&gt;
&lt;p&gt;你可以定義兩種類型的 admission webhooks，validating admission webhook (驗證型入場網鉤) 和 mutating admission webhook (變異型入場網鉤)。&lt;/p&gt;
&lt;p&gt;mutating admission webhook 會先被呼叫，並且可以修改傳送至 API Server 的物件，以強制套用自訂預設值。在所有物件修改完成後，且進入物件通過 API Server 的驗證後，validating admission webhook 會被呼叫，並且可以拒絕請求以套用自訂規則。&lt;/p&gt;
&lt;p&gt;Note. 需要確保看到物件的最終狀態以執行策略的 admission webhook 應該使用 Validating Admission Webhook，因為物件在被 mutating admission webhook 看到後可能會被修改。&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;What is Validating Admission Webhook&lt;span class="hx:absolute hx:-mt-20" id="what-is-validating-admission-webhook"&gt;&lt;/span&gt;
&lt;a href="#what-is-validating-admission-webhook" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;這個 admission controller (入場控制器)會呼叫符合請求的所有 Validating Admission Webhook。符合的 Webhook 會並行呼叫；如果其中任何一個拒絕請求，則請求將失敗。&lt;/p&gt;
&lt;p&gt;這個 admission controller 僅在驗證階段運行；它所呼叫的 Webhook 不能對物件進行變更，這與 MutatingAdmissionWebhook admission controller 所呼叫的 Webhook 相對。&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;What is MutatingAdmissionWebhook&lt;span class="hx:absolute hx:-mt-20" id="what-is-mutatingadmissionwebhook"&gt;&lt;/span&gt;
&lt;a href="#what-is-mutatingadmissionwebhook" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;這個 admission controller 會呼叫符合請求的所有 mutating webhooks。符合的 webhooks 會依序呼叫；每個 webhooks 都可以修改物件，如果需要的話。&lt;/p&gt;
&lt;p&gt;這個 admission controller（如其名所示）僅在 mutating (變異)階段運行。&lt;/p&gt;
&lt;/div&gt;</description></item><item><title>Rancher Introduction</title><link>https://blog.kubeantony.com/archive/rancher/rancher-introduction/</link><pubDate>Fri, 14 Jul 2023 01:09:36 +0800</pubDate><guid>https://blog.kubeantony.com/archive/rancher/rancher-introduction/</guid><description>
&lt;style&gt;
.indent-title-1{
margin-left: 1em;
}
.indent-title-2{
margin-left: 2em;
}
.indent-title-3{
margin-left: 3em;
}
&lt;/style&gt;
&lt;h1&gt;Preface&lt;/h1&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;本篇文章會介紹以下內容&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;甚麼是 Rancher，它的功能有哪些?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;可以透過點擊展開以下目錄，選擇想看的內容，跳轉至特定章節&lt;/p&gt;
&lt;/div&gt;
&lt;h1&gt;What is Rancher?&lt;/h1&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;Rancher 是一種管理 Kubernetes 工具，能在任何地方、任何供應商(GCP, AWS, Azure&amp;hellip;等)上部署和管理叢集。&lt;/p&gt;
&lt;p&gt;Rancher 可以從托管供應商那裡取得 Kubernetes，或是在運算節點上安裝 Kubernetes，甚至可以匯入任何地方運行的既有 Kubernetes 叢集。&lt;/p&gt;
&lt;p&gt;Rancher 在 Kubernetes 的基礎上增添了許多價值，首先，它集中了所有叢集的身份驗證和基於角色的訪問控制（RBAC），讓全域管理員能在一個地方控制叢集訪問。&lt;/p&gt;
&lt;p&gt;接著，它為叢集及其資源提供詳細的監控和警報，將日誌傳送到外部供應商，並且直接與 Helm 透過應用程式目錄進行整合。如果你有外部的 CI/CD 系統，你可以將它接入 Rancher，但如果你沒有，Rancher 甚至還包括了 Fleet，可以幫助你自動部署和升級 Workload。&lt;/p&gt;
&lt;p&gt;總的來說，Rancher 是一個完整的 Kubernetes Container 管理平台，提供你在任何地方成功運行 Kubernetes 的工具。&lt;/p&gt;
&lt;/div&gt;
&lt;h1&gt;Overview&lt;/h1&gt;&lt;h2&gt;Run Kubernetes Everywhere&lt;span class="hx:absolute hx:-mt-20" id="run-kubernetes-everywhere"&gt;&lt;/span&gt;
&lt;a href="#run-kubernetes-everywhere" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;Kubernetes 已經成為 Container orchestration (編排)的標準。大多數的雲端和虛擬化供應商現在都把它當作標準基礎設施來提供。Rancher 的使用者可以選擇用 Rancher Kubernetes Engine (RKE) 或者像是 GKE、AKS、和 EKS 這種雲端 Kubernetes 服務來創建 Kubernetes 叢集。Rancher 的使用者也可以匯入和管理他們用任何 Kubernetes 發行版或安裝程式所創建的現有 Kubernetes 叢集。&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;滿足 IT 需求&lt;span class="hx:absolute hx:-mt-20" id="滿足-it-需求"&gt;&lt;/span&gt;
&lt;a href="#%e6%bb%bf%e8%b6%b3-it-%e9%9c%80%e6%b1%82" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;Rancher 支援對所有在其控制之下的 Kubernetes 叢集進行集中的身份驗證、訪問控制和監控。例如，你可以：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;使用你的 Active Directory 憑證來訪問由雲端供應商，像是 GKE 所架設的 Kubernetes 叢集。&lt;/li&gt;
&lt;li&gt;設置並執行對所有使用者、群組、專案、叢集和雲端的訪問控制和安全政策。&lt;/li&gt;
&lt;li&gt;從一個統一的介面查看你的 Kubernetes 叢集的健康狀態和容量。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;h2&gt;增強 DevOps 團隊能力&lt;span class="hx:absolute hx:-mt-20" id="增強-devops-團隊能力"&gt;&lt;/span&gt;
&lt;a href="#%e5%a2%9e%e5%bc%b7-devops-%e5%9c%98%e9%9a%8a%e8%83%bd%e5%8a%9b" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;Rancher 為 DevOps 工程師提供了一個直觀的用戶介面來管理他們的應用程式工作負載。用戶不需要對 Kubernetes 的概念有深入的了解就能開始使用 Rancher。Rancher 的目錄包含了一套實用的 DevOps 工具。Rancher 獲得了廣泛的雲端原生生態系統產品的認證，包括例如安全工具、監控系統、Container Regestries，以及儲存和網路驅動等。&lt;/p&gt;
&lt;p&gt;下面這張圖說明了 Rancher 在 IT 和 DevOps 組織中的角色。每個團隊都在他們選擇的公有雲或私有雲上部署他們的應用程式。IT 管理員可以查看並執行針對所有用戶、叢集和雲端的政策。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://hackmd.io/_uploads/BJoSYTq_h.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;Rancher API Server 的功能&lt;span class="hx:absolute hx:-mt-20" id="rancher-api-server-的功能"&gt;&lt;/span&gt;
&lt;a href="#rancher-api-server-%e7%9a%84%e5%8a%9f%e8%83%bd" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;&lt;font size=5&gt;&lt;strong&gt;Authorization and Role-Based Access Control&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="indent-title-1"&gt;
&lt;ul&gt;
&lt;li&gt;使用者管理：Rancher 的 API 伺服器負責管理與外部認證服務，如 Active Directory 或 GitHub 對應的使用者身份，以及本地使用者。&lt;/li&gt;
&lt;li&gt;授權：Rancher 的 API 伺服器負責管理存取控制和安全政策。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</description></item><item><title>Podman Offline Installation of Rancher</title><link>https://blog.kubeantony.com/archive/rancher/podman-offline-installation-of-rancher/</link><pubDate>Thu, 29 Jun 2023 04:54:34 +0800</pubDate><guid>https://blog.kubeantony.com/archive/rancher/podman-offline-installation-of-rancher/</guid><description>
&lt;style&gt;
.indent-title-1{
margin-left: 1em;
}
.indent-title-2{
margin-left: 2em;
}
&lt;/style&gt;
&lt;h1&gt;Preface&lt;/h1&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;本篇文章會介紹如何在全離線的狀態下，透過 Podman 安裝 Rancher，並透過 Rancher 這個平台生成 Rancher Kubernetes Engine 2(RKE2)&lt;/p&gt;
&lt;/div&gt;
&lt;h1&gt;Prepare&lt;/h1&gt;&lt;h2&gt;將 Rancher Image 傳到 Podman-Host 主機&lt;span class="hx:absolute hx:-mt-20" id="將-rancher-image-傳到-podman-host-主機"&gt;&lt;/span&gt;
&lt;a href="#%e5%b0%87-rancher-image-%e5%82%b3%e5%88%b0-podman-host-%e4%b8%bb%e6%a9%9f" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="indent-title-1"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;&amp;gt; scp rancher-image.tar bigred@192.168.61.66:/home/bigred/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a
href="https://drive.google.com/drive/folders/1zjlKMNhoQ8tUZUMLLzYxYQ74FSseHDL5?usp=sharing"target="_blank" rel="noopener"&gt;套件下載點&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;h2&gt;Load Rancher Image on Podman-Host Machine&lt;span class="hx:absolute hx:-mt-20" id="load-rancher-image-on-podman-host-machine"&gt;&lt;/span&gt;
&lt;a href="#load-rancher-image-on-podman-host-machine" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="indent-title-1"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo podman load &amp;lt; rancher-image.tar&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h1&gt;Install Rancher with Default Rancher-generated Self-signed Certificate&lt;/h1&gt;&lt;div class="indent-title-1"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo podman run -d -p 80:80 -p 443:443 --privileged docker.io/rancher/rancher:v2.7.3&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;-d, --detach&lt;/code&gt;，在背景運行 Container
&lt;code&gt;-p, --publish strings&lt;/code&gt;，Publish a container&amp;rsquo;s port, or a range of ports, to the host (default [])
&lt;code&gt;--privileged&lt;/code&gt;，Give extended privileges to container&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;b0d309fae9150ae0a637e415e9f531a83eb542f2be60278a0567ec1cd05d35c4&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;檢查 Container 狀態&lt;span class="hx:absolute hx:-mt-20" id="檢查-container-狀態"&gt;&lt;/span&gt;
&lt;a href="#%e6%aa%a2%e6%9f%a5-container-%e7%8b%80%e6%85%8b" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="indent-title-1"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo podman ps -a&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b0d309fae915 docker.io/rancher/rancher:v2.7.3 --no-cacerts 5 minutes ago Up 5 minutes ago 0.0.0.0:80-&amp;gt;80/tcp, 0.0.0.0:443-&amp;gt;443/tcp great_easley&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;準備 Rancher Container 運作所需之 Image&lt;span class="hx:absolute hx:-mt-20" id="準備-rancher-container-運作所需之-image"&gt;&lt;/span&gt;
&lt;a href="#%e6%ba%96%e5%82%99-rancher-container-%e9%81%8b%e4%bd%9c%e6%89%80%e9%9c%80%e4%b9%8b-image" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="indent-title-1"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo podman cp rancher-2.7.3.tar $(sudo podman ps -aq):/var/lib/rancher/
$ sudo podman exec -it $(sudo podman ps -aq) bash
# ctr -n k8s.io image import rancher-2.7.3.tar&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;在 local 端測試 Rancher 網站&lt;span class="hx:absolute hx:-mt-20" id="在-local-端測試-rancher-網站"&gt;&lt;/span&gt;
&lt;a href="#%e5%9c%a8-local-%e7%ab%af%e6%b8%ac%e8%a9%a6-rancher-%e7%b6%b2%e7%ab%99" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="indent-title-1"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ curl -k https://192.168.61.66/dashboard/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;!doctype html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;title&amp;gt;dashboard&amp;lt;/title&amp;gt;&amp;lt;meta data-n-head=&amp;#34;1&amp;#34; charset=&amp;#34;utf-8&amp;#34;&amp;gt;&amp;lt;meta data-n-head=&amp;#34;1&amp;#34; name=&amp;#34;viewport&amp;#34; content=&amp;#34;width=device-width,initial-scale=1&amp;#34;&amp;gt;&amp;lt;meta data-n-head=&amp;#34;1&amp;#34; data-hid=&amp;#34;description&amp;#34; name=&amp;#34;description&amp;#34; content=&amp;#34;Rancher Dashboard&amp;#34;&amp;gt;&amp;lt;link data-n-head=&amp;#34;1&amp;#34; data-hid=&amp;#34;icon&amp;#34; rel=&amp;#34;icon&amp;#34; type=&amp;#34;image/x-icon&amp;#34; href=&amp;#34;/favicon.png&amp;#34;&amp;gt;&amp;lt;base href=&amp;#34;/dashboard/&amp;#34;&amp;gt;&amp;lt;link rel=&amp;#34;preload&amp;#34; href=&amp;#34;/dashboard/_nuxt/bc5a9b9.js&amp;#34; as=&amp;#34;script&amp;#34;&amp;gt;&amp;lt;link rel=&amp;#34;preload&amp;#34; href=&amp;#34;/dashboard/_nuxt/d0c1200b7e55ba295a21.js&amp;#34; as=&amp;#34;script&amp;#34;&amp;gt;&amp;lt;link rel=&amp;#34;preload&amp;#34; href=&amp;#34;/dashboard/_nuxt/b9199dcf32fef6f15dc0.js&amp;#34; as=&amp;#34;script&amp;#34;&amp;gt;&amp;lt;link rel=&amp;#34;preload&amp;#34; href=&amp;#34;/dashboard/_nuxt/44bf45d45b48440e6fea.js&amp;#34; as=&amp;#34;script&amp;#34;&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;div id=&amp;#34;__nuxt&amp;#34;&amp;gt;&amp;lt;style&amp;gt;.initial-load-spinner-container{align-items:center;background-color:#f8f8f8;display:flex;justify-content:center;height:100vh;left:0;position:absolute;top:0;width:100vw}.initial-load-spinner{animation:initial-load-animate 1s infinite linear;background-color:transparent;box-sizing:border-box;border:5px solid #008acf;border-radius:50%;border-top-color:#00b2e2;display:inline-block;height:80px;margin:0 auto;width:80px}@keyframes initial-load-animate{0%{transform:rotate(0)}100%{transform:rotate(359deg)}}&amp;lt;/style&amp;gt;&amp;lt;div class=&amp;#34;initial-load-spinner-container&amp;#34;&amp;gt; &amp;lt;i class=&amp;#34;initial-load-spinner&amp;#34;&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;window.__NUXT__={config:{rancherEnv:&amp;#34;web&amp;#34;,dashboardVersion:&amp;#34;v2.7.2&amp;#34;,_app:{basePath:&amp;#34;/dashboard/&amp;#34;,assetsPath:&amp;#34;/dashboard/_nuxt/&amp;#34;,cdnURL:null}}}&amp;lt;/script&amp;gt;
&amp;lt;script src=&amp;#34;/dashboard/_nuxt/bc5a9b9.js&amp;#34;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;script src=&amp;#34;/dashboard/_nuxt/d0c1200b7e55ba295a21.js&amp;#34;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;script src=&amp;#34;/dashboard/_nuxt/b9199dcf32fef6f15dc0.js&amp;#34;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;script src=&amp;#34;/dashboard/_nuxt/44bf45d45b48440e6fea.js&amp;#34;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;取得第一次登入密碼&lt;span class="hx:absolute hx:-mt-20" id="取得第一次登入密碼"&gt;&lt;/span&gt;
&lt;a href="#%e5%8f%96%e5%be%97%e7%ac%ac%e4%b8%80%e6%ac%a1%e7%99%bb%e5%85%a5%e5%af%86%e7%a2%bc" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="indent-title-1"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo podman logs $(sudo podman ps -aq) 2&amp;gt;&amp;amp;1 | grep &amp;#34;Bootstrap Password:&amp;#34;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h1&gt;全離線透過 Rancher 生成 RKE2&lt;/h1&gt;&lt;h2&gt;準備 rancher-agent 和 rke2 服務要用的 tar 檔&lt;span class="hx:absolute hx:-mt-20" id="準備-rancher-agent-和-rke2-服務要用的-tar-檔"&gt;&lt;/span&gt;
&lt;a href="#%e6%ba%96%e5%82%99-rancher-agent-%e5%92%8c-rke2-%e6%9c%8d%e5%8b%99%e8%a6%81%e7%94%a8%e7%9a%84-tar-%e6%aa%94" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;~&amp;gt; scp Downloads\d-rke2-image.tar Downloads\rke2-runtime-image.tar Downloads\system-agent-installer-rke2-image.tar bigred@192.168.61.11:/home/bigred/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;~&amp;gt; sudo mkdir -p /var/lib/rancher/agent/images/
~&amp;gt; sudo cp system-agent-installer-rke2-image.tar /var/lib/rancher/agent/images/
~&amp;gt; sudo mkdir -p /var/lib/rancher/rke2/agent/images/
~&amp;gt; sudo cp rke2-runtime-image.tar /var/lib/rancher/rke2/agent/images/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;安裝 containerd&lt;span class="hx:absolute hx:-mt-20" id="安裝-containerd"&gt;&lt;/span&gt;
&lt;a href="#%e5%ae%89%e8%a3%9d-containerd" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;~&amp;gt; sudo zypper in -y containerd&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;編輯設定檔&lt;span class="hx:absolute hx:-mt-20" id="編輯設定檔"&gt;&lt;/span&gt;
&lt;a href="#%e7%b7%a8%e8%bc%af%e8%a8%ad%e5%ae%9a%e6%aa%94" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;~&amp;gt; sudo nano /etc/containerd/config.toml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;version = 2
# persistent data location
root = &amp;#34;/var/lib/rancher/rke2/agent/containerd/&amp;#34;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;啟動 containerd&lt;span class="hx:absolute hx:-mt-20" id="啟動-containerd"&gt;&lt;/span&gt;
&lt;a href="#%e5%95%9f%e5%8b%95-containerd" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;~&amp;gt; sudo /usr/sbin/containerd &amp;amp;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;建立 k8s.io namespace&lt;span class="hx:absolute hx:-mt-20" id="建立-k8sio-namespace"&gt;&lt;/span&gt;
&lt;a href="#%e5%bb%ba%e7%ab%8b-k8sio-namespace" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;~&amp;gt; sudo ctr ns create k8s.io&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;Import Image&lt;span class="hx:absolute hx:-mt-20" id="import-image"&gt;&lt;/span&gt;
&lt;a href="#import-image" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;~&amp;gt; sudo ctr -n k8s.io image import d-rke2-image.tar&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;檢查&lt;span class="hx:absolute hx:-mt-20" id="檢查"&gt;&lt;/span&gt;
&lt;a href="#%e6%aa%a2%e6%9f%a5" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;~&amp;gt; sudo ctr -n k8s.io image ls
~&amp;gt; sudo ls -l /var/lib/rancher/rke2/agent/containerd/io.containerd.content.v1.content/blobs/sha256&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;將 containerd 程序終止&lt;span class="hx:absolute hx:-mt-20" id="將-containerd-程序終止"&gt;&lt;/span&gt;
&lt;a href="#%e5%b0%87-containerd-%e7%a8%8b%e5%ba%8f%e7%b5%82%e6%ad%a2" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;~&amp;gt; ps -eaf | grep containerd
~&amp;gt; sudo kill -9 3755 3756&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;檢查&lt;span class="hx:absolute hx:-mt-20" id="檢查-1"&gt;&lt;/span&gt;
&lt;a href="#%e6%aa%a2%e6%9f%a5-1" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;~&amp;gt; ps -eaf | grep containerd
root 9363 3823 0 00:20 pts/0 00:00:00 grep --color=auto containerd&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;執行註冊命令&lt;span class="hx:absolute hx:-mt-20" id="執行註冊命令"&gt;&lt;/span&gt;
&lt;a href="#%e5%9f%b7%e8%a1%8c%e8%a8%bb%e5%86%8a%e5%91%bd%e4%bb%a4" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;~&amp;gt; curl --insecure -fL https://rancher.twlottery.com.internal/system-agent-install.sh | sudo sh -s - --server https://rancher.twlottery.com.internal --label &amp;#39;cattle.io/os=linux&amp;#39; --token wd64wzwh9f8x4gz62fn6h72ghjpnz4jf4wdk2vfvxl22fx9sztmvvs --ca-checksum c317b93eaa455ae06169dcc86e2b49a77aacdde400b254ba6079dc9db6b50eaa --etcd --controlplane --worker&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;檢查 K8S 狀態&lt;span class="hx:absolute hx:-mt-20" id="檢查-k8s-狀態"&gt;&lt;/span&gt;
&lt;a href="#%e6%aa%a2%e6%9f%a5-k8s-%e7%8b%80%e6%85%8b" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;~&amp;gt; watch -n 0.1 kubectl get po -A&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h1&gt;參考資料&lt;/h1&gt;&lt;ul&gt;
&lt;li&gt;&lt;a
href="https://ranchermanager.docs.rancher.com/v2.7/pages-for-subheaders/installation-requirements"target="_blank" rel="noopener"&gt;Installation Requirements&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a
href="https://ranchermanager.docs.rancher.com/v2.7/pages-for-subheaders/rancher-on-a-single-node-with-docker"target="_blank" rel="noopener"&gt;Installing Rancher on a Single Node Using Docker&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>SECTION 4: User Management with SUSE Rancher</title><link>https://blog.kubeantony.com/archive/rancher/section-4-user-management-with-suse-rancher/</link><pubDate>Wed, 21 Jun 2023 06:01:58 +0800</pubDate><guid>https://blog.kubeantony.com/archive/rancher/section-4-user-management-with-suse-rancher/</guid><description>
&lt;style&gt;
.indent-title-1{
margin-left: 1em;
}
.indent-title-2{
margin-left: 2em;
}
.indent-title-3{
margin-left: 3em;
}
&lt;/style&gt;
&lt;h2&gt;Preface&lt;span class="hx:absolute hx:-mt-20" id="preface"&gt;&lt;/span&gt;
&lt;a href="#preface" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;本篇文章會介紹以下內容&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;管理 Users and Groups&lt;/li&gt;
&lt;li&gt;了解 Roles&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;h1&gt;Manage Users and Groups&lt;/h1&gt;&lt;h2&gt;SUSE Rancher admin User&lt;span class="hx:absolute hx:-mt-20" id="suse-rancher-admin-user"&gt;&lt;/span&gt;
&lt;a href="#suse-rancher-admin-user" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;預設情況下，SUSE Rancher 部署會創建一個名為 &lt;code&gt;admin&lt;/code&gt; 的本地使用者
&lt;ul&gt;
&lt;li&gt;The admin user:
&lt;ul&gt;
&lt;li&gt;可以訪問 SUSE Rancher 中的所有資源&lt;/li&gt;
&lt;li&gt;即使設定了外部認證，也可以使用&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;要列出使用者, 請點擊 &lt;strong&gt;Main Menu&lt;/strong&gt; → &lt;strong&gt;Users &amp;amp; Authentication Users&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;通過點擊 &lt;strong&gt;Create&lt;/strong&gt; 按鈕可以創建新的使用者&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/SJ9NxxgO2.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;Create Local Users&lt;span class="hx:absolute hx:-mt-20" id="create-local-users"&gt;&lt;/span&gt;
&lt;a href="#create-local-users" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;點擊 &lt;strong&gt;Create&lt;/strong&gt; 按鈕後：
&lt;ul&gt;
&lt;li&gt;輸入 &lt;strong&gt;Username&lt;/strong&gt; 和 &lt;strong&gt;Password&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;兩者都是區分大小寫的&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;指定 &lt;strong&gt;Global Permissions&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;還可以為使用者選擇額外的 &lt;strong&gt;Built-In (內建)&lt;/strong&gt; 的角色&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/SylHsZedh.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;Local Authentication&lt;span class="hx:absolute hx:-mt-20" id="local-authentication"&gt;&lt;/span&gt;
&lt;a href="#local-authentication" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;預設情況下，Users (使用者) 存儲在 SUSE Rancher 中
&lt;ul&gt;
&lt;li&gt;使用者詳細信息存儲在集群數據庫 (Etcd) 中&lt;/li&gt;
&lt;li&gt;Local authentication (本地身分認證)始終可用&lt;/li&gt;
&lt;li&gt;登錄前會選擇身分認證方法&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/BJhBh-g_n.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;External Authentication&lt;span class="hx:absolute hx:-mt-20" id="external-authentication"&gt;&lt;/span&gt;
&lt;a href="#external-authentication" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;將外部使用者關聯到本地使用者&lt;/li&gt;
&lt;li&gt;允許集中用戶管理&lt;/li&gt;
&lt;li&gt;點擊 &lt;strong&gt;Main Menu&lt;/strong&gt; → &lt;strong&gt;Users &amp;amp; Authentication&lt;/strong&gt; → &lt;strong&gt;Auth Provider&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/HkR6RbgO3.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;h2&gt;OpenLDAP Authentication Provider Configuration&lt;span class="hx:absolute hx:-mt-20" id="openldap-authentication-provider-configuration"&gt;&lt;/span&gt;
&lt;a href="#openldap-authentication-provider-configuration" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="indent-title-2"&gt;
&lt;p&gt;SUSE Rancher 為 Kubernetes 增加的主要功能之一是&amp;quot;集中的使用者認證&amp;quot;。該功能允許設置本地使用者和或連接到外部認證提供商。通過連接到外部認證提供商，可以利用該提供商的使用者和組信息與 SUSE Rancher 一起使用。&lt;/p&gt;
&lt;p&gt;該功能允許使用一組憑證來驗證 SUSE Rancher 中的任何 Kubernetes 集群。&lt;/p&gt;
&lt;p&gt;這種集中的使用者認證是通過 SUSE Rancher 認證代理完成的，它與 SUSE Rancher 的其他部分一起安裝。該代理對使用者進行認證，並使用 service account 將他們的請求轉發給 Kubernetes 集群。&lt;/p&gt;
&lt;p&gt;Enter&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Host IP&lt;/li&gt;
&lt;li&gt;LDAP port&lt;/li&gt;
&lt;li&gt;Admin user name and password&lt;/li&gt;
&lt;li&gt;Search container for users and groups&lt;/li&gt;
&lt;li&gt;Schema classes and attributes for users and groups&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/r1_lkGlOh.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;External User and Group Selection&lt;span class="hx:absolute hx:-mt-20" id="external-user-and-group-selection"&gt;&lt;/span&gt;
&lt;a href="#external-user-and-group-selection" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;所有或選定的使用者都可以啟用 SUSE Rancher 登錄&lt;/li&gt;
&lt;li&gt;對於外部使用者源，還可以使用群組成員身份來啟用使用者
&lt;ul&gt;
&lt;li&gt;本地認證不允許使用群組分配&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/rJmSzzxOn.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h1&gt;Understand Roles&lt;/h1&gt;</description></item><item><title>SCA in SUSE Rancher 2.6 講義筆記-首頁</title><link>https://blog.kubeantony.com/archive/rancher/sca-in-suse-rancher-2.6-%E8%AC%9B%E7%BE%A9%E7%AD%86%E8%A8%98-%E9%A6%96%E9%A0%81/</link><pubDate>Wed, 21 Jun 2023 03:03:00 +0800</pubDate><guid>https://blog.kubeantony.com/archive/rancher/sca-in-suse-rancher-2.6-%E8%AC%9B%E7%BE%A9%E7%AD%86%E8%A8%98-%E9%A6%96%E9%A0%81/</guid><description>
&lt;h2&gt;Preface&lt;span class="hx:absolute hx:-mt-20" id="preface"&gt;&lt;/span&gt;
&lt;a href="#preface" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;style&gt;
.indent-title-1{
margin-left: 1em;
&lt;/style&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;這裡紀錄了我準備 SCA in SUSE Rancher 2.6 這張證照，對於講義的內容學習時所記錄的筆記，請點選左側目錄(建議)，或是以下連結至各章節。&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;Contents&lt;span class="hx:absolute hx:-mt-20" id="contents"&gt;&lt;/span&gt;
&lt;a href="#contents" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a
href="https://hackmd.io/@QI-AN/SUSE_RANCHER_Course_Introduction"target="_blank" rel="noopener"&gt;SECTION 1: Course Introduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a
href="https://hackmd.io/@QI-AN/SUSE_RANCHER_Introduction_to_SUSE_Rancher"target="_blank" rel="noopener"&gt;SECTION 2: Introduction to SUSE Rancher&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a
href="https://hackmd.io/@QI-AN/SUSE_RANCHER_Cluster_Management_with_SUSE_Rancher"target="_blank" rel="noopener"&gt;SECTION 3: Cluster Management with SUSE Rancher&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a
href="https://hackmd.io/@QI-AN/SUSE_RANCHER_User_Management_with_SUSE_Rancher"target="_blank" rel="noopener"&gt;SECTION 4: User Management with SUSE Rancher&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a
href="https://hackmd.io/@QI-AN/Template_Management_with_SUSE_Rancher"target="_blank" rel="noopener"&gt;SECTION 5: Template Management with SUSE Rancher&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a
href="https://hackmd.io/@QI-AN/Application_Management_with_SUSE_Rancher"target="_blank" rel="noopener"&gt;SECTION 6: Application Management with SUSE&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a
href="https://hackmd.io/@QI-AN/Continuous_Delivery_with_SUSE_Rancher"target="_blank" rel="noopener"&gt;SECTION 7: Continuous Delivery with SUSE&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a
href="https://hackmd.io/@QI-AN/SUSE_RANCHER_Logging_and_Monitoring_with_SUSE"target="_blank" rel="noopener"&gt;SECTION 8: Logging and Monitoring with SUSE&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a
href="https://hackmd.io/@QI-AN/Security_Tools_with_SUSE_Rancher"target="_blank" rel="noopener"&gt;SECTION 9: Security Tools with SUSE Rancher&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a
href="https://hackmd.io/@QI-AN/SUSE_Rancher_Shell_Access"target="_blank" rel="noopener"&gt;SECTION 10: SUSE Rancher Shell Access&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a
href="https://hackmd.io/@QI-AN/Backup_and_Restore_with_SUSE_Rancher"target="_blank" rel="noopener"&gt;SECTION 11: Backup and Restore with SUSE Rancher&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>SCA in SUSE Rancher 2.6 講義筆記</title><link>https://blog.kubeantony.com/archive/rancher/sca-in-suse-rancher-2.6-%E8%AC%9B%E7%BE%A9%E7%AD%86%E8%A8%98/</link><pubDate>Wed, 21 Jun 2023 03:02:54 +0800</pubDate><guid>https://blog.kubeantony.com/archive/rancher/sca-in-suse-rancher-2.6-%E8%AC%9B%E7%BE%A9%E7%AD%86%E8%A8%98/</guid><description>
&lt;style&gt;
.indent-title-1{
margin-left: 1em;
&lt;/style&gt;
&lt;h2&gt;&lt;a
href="https://hackmd.io/@QI-AN/sca_rancher_home_page"target="_blank" rel="noopener"&gt;&lt;font color=black&gt;Preface&lt;/font&gt;&lt;/a&gt;&lt;span class="hx:absolute hx:-mt-20" id=""&gt;&lt;/span&gt;
&lt;a href="#" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h2&gt;Contents&lt;span class="hx:absolute hx:-mt-20" id="contents"&gt;&lt;/span&gt;
&lt;a href="#contents" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a
href="https://hackmd.io/@QI-AN/SUSE_RANCHER_Course_Introduction"target="_blank" rel="noopener"&gt;SECTION 1: Course Introduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a
href="https://hackmd.io/@QI-AN/SUSE_RANCHER_Introduction_to_SUSE_Rancher"target="_blank" rel="noopener"&gt;SECTION 2: Introduction to SUSE Rancher&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a
href="https://hackmd.io/@QI-AN/SUSE_RANCHER_Cluster_Management_with_SUSE_Rancher"target="_blank" rel="noopener"&gt;SECTION 3: Cluster Management with SUSE Rancher&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a
href="https://hackmd.io/@QI-AN/SUSE_RANCHER_User_Management_with_SUSE_Rancher"target="_blank" rel="noopener"&gt;SECTION 4: User Management with SUSE Rancher&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a
href="https://hackmd.io/@QI-AN/Template_Management_with_SUSE_Rancher"target="_blank" rel="noopener"&gt;SECTION 5: Template Management with SUSE Rancher&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a
href="https://hackmd.io/@QI-AN/Application_Management_with_SUSE_Rancher"target="_blank" rel="noopener"&gt;SECTION 6: Application Management with SUSE&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a
href="https://hackmd.io/@QI-AN/Continuous_Delivery_with_SUSE_Rancher"target="_blank" rel="noopener"&gt;SECTION 7: Continuous Delivery with SUSE&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a
href="https://hackmd.io/@QI-AN/SUSE_RANCHER_Logging_and_Monitoring_with_SUSE"target="_blank" rel="noopener"&gt;SECTION 8: Logging and Monitoring with SUSE&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a
href="https://hackmd.io/@QI-AN/Security_Tools_with_SUSE_Rancher"target="_blank" rel="noopener"&gt;SECTION 9: Security Tools with SUSE Rancher&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a
href="https://hackmd.io/@QI-AN/SUSE_Rancher_Shell_Access"target="_blank" rel="noopener"&gt;SECTION 10: SUSE Rancher Shell Access&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a
href="https://hackmd.io/@QI-AN/Backup_and_Restore_with_SUSE_Rancher"target="_blank" rel="noopener"&gt;SECTION 11: Backup and Restore with SUSE Rancher&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>SECTION 11: Backup and Restore with SUSE Rancher</title><link>https://blog.kubeantony.com/archive/rancher/section-11-backup-and-restore-with-suse-rancher/</link><pubDate>Wed, 21 Jun 2023 03:00:12 +0800</pubDate><guid>https://blog.kubeantony.com/archive/rancher/section-11-backup-and-restore-with-suse-rancher/</guid><description>
&lt;style&gt;
.indent-title-1{
margin-left: 1em;
}
.indent-title-2{
margin-left: 2em;
}
.indent-title-3{
margin-left: 3em;
}
&lt;/style&gt;
&lt;h2&gt;Preface&lt;span class="hx:absolute hx:-mt-20" id="preface"&gt;&lt;/span&gt;
&lt;a href="#preface" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="indent-title-1"&gt;
&lt;/div&gt;
&lt;h2&gt;&lt;span class="hx:absolute hx:-mt-20" id=""&gt;&lt;/span&gt;
&lt;a href="#" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h2&gt;&lt;span class="hx:absolute hx:-mt-20" id=""&gt;&lt;/span&gt;
&lt;a href="#" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h2&gt;&lt;span class="hx:absolute hx:-mt-20" id=""&gt;&lt;/span&gt;
&lt;a href="#" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;</description></item><item><title>SECTION 10: SUSE Rancher Shell Access</title><link>https://blog.kubeantony.com/archive/rancher/section-10-suse-rancher-shell-access/</link><pubDate>Wed, 21 Jun 2023 02:58:36 +0800</pubDate><guid>https://blog.kubeantony.com/archive/rancher/section-10-suse-rancher-shell-access/</guid><description>
&lt;style&gt;
.indent-title-1{
margin-left: 1em;
}
.indent-title-2{
margin-left: 2em;
}
.indent-title-3{
margin-left: 3em;
}
&lt;/style&gt;
&lt;h2&gt;Preface&lt;span class="hx:absolute hx:-mt-20" id="preface"&gt;&lt;/span&gt;
&lt;a href="#preface" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="indent-title-1"&gt;
&lt;/div&gt;
&lt;h2&gt;&lt;span class="hx:absolute hx:-mt-20" id=""&gt;&lt;/span&gt;
&lt;a href="#" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h2&gt;&lt;span class="hx:absolute hx:-mt-20" id=""&gt;&lt;/span&gt;
&lt;a href="#" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h2&gt;&lt;span class="hx:absolute hx:-mt-20" id=""&gt;&lt;/span&gt;
&lt;a href="#" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;</description></item><item><title>SECTION 9: Security Tools with SUSE Rancher</title><link>https://blog.kubeantony.com/archive/rancher/section-9-security-tools-with-suse-rancher/</link><pubDate>Wed, 21 Jun 2023 02:57:50 +0800</pubDate><guid>https://blog.kubeantony.com/archive/rancher/section-9-security-tools-with-suse-rancher/</guid><description>
&lt;style&gt;
.indent-title-1{
margin-left: 1em;
}
.indent-title-2{
margin-left: 2em;
}
.indent-title-3{
margin-left: 3em;
}
&lt;/style&gt;
&lt;h2&gt;Preface&lt;span class="hx:absolute hx:-mt-20" id="preface"&gt;&lt;/span&gt;
&lt;a href="#preface" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="indent-title-1"&gt;
&lt;/div&gt;
&lt;h2&gt;&lt;span class="hx:absolute hx:-mt-20" id=""&gt;&lt;/span&gt;
&lt;a href="#" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h2&gt;&lt;span class="hx:absolute hx:-mt-20" id=""&gt;&lt;/span&gt;
&lt;a href="#" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h2&gt;&lt;span class="hx:absolute hx:-mt-20" id=""&gt;&lt;/span&gt;
&lt;a href="#" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;</description></item><item><title>SECTION 7: Continuous Delivery with SUSE Rancher</title><link>https://blog.kubeantony.com/archive/rancher/section-7-continuous-delivery-with-suse-rancher/</link><pubDate>Wed, 21 Jun 2023 02:54:46 +0800</pubDate><guid>https://blog.kubeantony.com/archive/rancher/section-7-continuous-delivery-with-suse-rancher/</guid><description>
&lt;style&gt;
.indent-title-1{
margin-left: 1em;
}
.indent-title-2{
margin-left: 2em;
}
.indent-title-3{
margin-left: 3em;
}
&lt;/style&gt;
&lt;h2&gt;Preface&lt;span class="hx:absolute hx:-mt-20" id="preface"&gt;&lt;/span&gt;
&lt;a href="#preface" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="indent-title-1"&gt;
&lt;/div&gt;
&lt;h2&gt;&lt;span class="hx:absolute hx:-mt-20" id=""&gt;&lt;/span&gt;
&lt;a href="#" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h2&gt;&lt;span class="hx:absolute hx:-mt-20" id=""&gt;&lt;/span&gt;
&lt;a href="#" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h2&gt;&lt;span class="hx:absolute hx:-mt-20" id=""&gt;&lt;/span&gt;
&lt;a href="#" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;</description></item><item><title>SECTION 6: Application Management with SUSE Rancher</title><link>https://blog.kubeantony.com/archive/rancher/section-6-application-management-with-suse-rancher/</link><pubDate>Wed, 21 Jun 2023 02:53:06 +0800</pubDate><guid>https://blog.kubeantony.com/archive/rancher/section-6-application-management-with-suse-rancher/</guid><description>
&lt;style&gt;
.indent-title-1{
margin-left: 1em;
}
.indent-title-2{
margin-left: 2em;
}
.indent-title-3{
margin-left: 3em;
}
&lt;/style&gt;
&lt;h2&gt;Preface&lt;span class="hx:absolute hx:-mt-20" id="preface"&gt;&lt;/span&gt;
&lt;a href="#preface" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="indent-title-1"&gt;
&lt;/div&gt;
&lt;h2&gt;&lt;span class="hx:absolute hx:-mt-20" id=""&gt;&lt;/span&gt;
&lt;a href="#" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h2&gt;&lt;span class="hx:absolute hx:-mt-20" id=""&gt;&lt;/span&gt;
&lt;a href="#" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h2&gt;&lt;span class="hx:absolute hx:-mt-20" id=""&gt;&lt;/span&gt;
&lt;a href="#" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;</description></item><item><title>SECTION 5: Template Management with SUSE Rancher</title><link>https://blog.kubeantony.com/archive/rancher/section-5-template-management-with-suse-rancher/</link><pubDate>Wed, 21 Jun 2023 02:50:32 +0800</pubDate><guid>https://blog.kubeantony.com/archive/rancher/section-5-template-management-with-suse-rancher/</guid><description>
&lt;style&gt;
.indent-title-1{
margin-left: 1em;
}
.indent-title-2{
margin-left: 2em;
}
.indent-title-3{
margin-left: 3em;
}
&lt;/style&gt;
&lt;h2&gt;Preface&lt;span class="hx:absolute hx:-mt-20" id="preface"&gt;&lt;/span&gt;
&lt;a href="#preface" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="indent-title-1"&gt;
&lt;/div&gt;
&lt;h2&gt;&lt;span class="hx:absolute hx:-mt-20" id=""&gt;&lt;/span&gt;
&lt;a href="#" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h2&gt;&lt;span class="hx:absolute hx:-mt-20" id=""&gt;&lt;/span&gt;
&lt;a href="#" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h2&gt;&lt;span class="hx:absolute hx:-mt-20" id=""&gt;&lt;/span&gt;
&lt;a href="#" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;</description></item><item><title>Cluster Management with SUSE Rancher</title><link>https://blog.kubeantony.com/archive/rancher/cluster-management-with-suse-rancher/</link><pubDate>Wed, 21 Jun 2023 02:42:54 +0800</pubDate><guid>https://blog.kubeantony.com/archive/rancher/cluster-management-with-suse-rancher/</guid><description>
&lt;style&gt;
.indent-title-1{
margin-left: 1em;
}
.indent-title-2{
margin-left: 2em;
}
.indent-title-3{
margin-left: 3em;
}
&lt;/style&gt;
&lt;h2&gt;Preface&lt;span class="hx:absolute hx:-mt-20" id="preface"&gt;&lt;/span&gt;
&lt;a href="#preface" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;本篇文章會介紹以下內容&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;探索 SUSE Rancher 的圖形使用者介面&lt;/li&gt;
&lt;li&gt;查看 Cluster and Node Agents&lt;/li&gt;
&lt;li&gt;導入已存在的 Kubernetes 叢集&lt;/li&gt;
&lt;li&gt;在已存在的節點上配置一個 RKE 叢集&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;h1&gt;Explore SUSE Rancher GUI&lt;/h1&gt;&lt;h2&gt;SUSE Rancher Home Page&lt;span class="hx:absolute hx:-mt-20" id="suse-rancher-home-page"&gt;&lt;/span&gt;
&lt;a href="#suse-rancher-home-page" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;SUSE Rancher GUI 允許管理多個集群
&lt;ul&gt;
&lt;li&gt;主頁列出了 SUSE Rancher 集群本身以及任何被管理和註冊的下游集群
&lt;ul&gt;
&lt;li&gt;SUSE Rancher 集群的默認顯示名稱是 &lt;strong&gt;&lt;code&gt;local&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/HJvd0cpv2.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;h2&gt;SUSE Rancher Main Menu&lt;span class="hx:absolute hx:-mt-20" id="suse-rancher-main-menu"&gt;&lt;/span&gt;
&lt;a href="#suse-rancher-main-menu" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;左上角的主菜單按鈕&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Home (首頁) → SUSE Rancher 登入頁面&lt;/li&gt;
&lt;li&gt;Explore Cluster (探索集群) → 下游集群的 App (應用程序)、 Service (服務)、 Storage (存儲)和其他資源的 信息 和 管理&lt;/li&gt;
&lt;li&gt;Continuous Delivery (持續交付) → 用於多集群應用自動化的 Git repo 配置&lt;/li&gt;
&lt;li&gt;Cluster Management (集群管理) → Downstream cluster (下游集群)、cloud credentials (雲憑證) 和 driver 驅動程序管理&lt;/li&gt;
&lt;li&gt;Users &amp;amp; Authentication (用戶和認證) → 本地用戶和外部認證提供商配置和角色管理&lt;/li&gt;
&lt;li&gt;Global Settings (全局設置) → SUSE Rancher 設定和品牌推廣&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/HyjZL5nvh.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;Cluster Dashboard&lt;span class="hx:absolute hx:-mt-20" id="cluster-dashboard"&gt;&lt;/span&gt;
&lt;a href="#cluster-dashboard" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;包含特定於所選集群的信息和資源&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/rJDyD53Pn.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;Continuous Delivery&lt;span class="hx:absolute hx:-mt-20" id="continuous-delivery"&gt;&lt;/span&gt;
&lt;a href="#continuous-delivery" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;通過持續交付，可以輕鬆管理跨多個集群的應用程序部署
&lt;ul&gt;
&lt;li&gt;一次設定，多次部署&lt;/li&gt;
&lt;li&gt;Cluster groups​ 是根據 Kubernetes 的標籤來分的。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;GitOps at scale
&lt;ul&gt;
&lt;li&gt;The app developer modifies code
&lt;ul&gt;
&lt;li&gt;The change is deployed on running Kubernetes clusters&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Cluster Management&lt;span class="hx:absolute hx:-mt-20" id="cluster-management"&gt;&lt;/span&gt;
&lt;a href="#cluster-management" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;顯示當前集群的列表
&lt;ul&gt;
&lt;li&gt;從最右邊的三點式菜單進行集群設定&lt;/li&gt;
&lt;li&gt;從 &amp;ldquo;Explore&amp;rdquo; 按鈕查看集群資源&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;New clusters can be imported or provisioned
&lt;ul&gt;
&lt;li&gt;Hosted or infrastructure provider clusters require cloud credentials and cluster or node drivers enabled in SUSE Rancher&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/S1q_K9nwn.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;Users &amp;amp; Authentication&lt;span class="hx:absolute hx:-mt-20" id="users--authentication"&gt;&lt;/span&gt;
&lt;a href="#users--authentication" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;User management
&lt;ul&gt;
&lt;li&gt;Local&lt;/li&gt;
&lt;li&gt;External
&lt;ul&gt;
&lt;li&gt;用於設定的用戶賬戶將被映射到 local 本地管理用戶上&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/Syl_5chP3.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;Global Settings&lt;span class="hx:absolute hx:-mt-20" id="global-settings"&gt;&lt;/span&gt;
&lt;a href="#global-settings" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;修改 Advanced Settings (高級設置)時必須小心&lt;/li&gt;
&lt;li&gt;Feature Flags (功能標誌)是為了測試目的
&lt;ul&gt;
&lt;li&gt;不建議用於生產系統&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Branding
&lt;ul&gt;
&lt;li&gt;Company logo&lt;/li&gt;
&lt;li&gt;Company colors&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/S1Kv292w2.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;Configuration for Branding&lt;span class="hx:absolute hx:-mt-20" id="configuration-for-branding"&gt;&lt;/span&gt;
&lt;a href="#configuration-for-branding" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/rkceMj6vh.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;Accessing Cluster Dashboard (1/3)&lt;span class="hx:absolute hx:-mt-20" id="accessing-cluster-dashboard-13"&gt;&lt;/span&gt;
&lt;a href="#accessing-cluster-dashboard-13" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Option 1: 從 &lt;strong&gt;SUSE Rancher Home&lt;/strong&gt; 裡面的集群列表中點擊&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/B1W8Moavh.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;Accessing Cluster Dashboard (2/3)&lt;span class="hx:absolute hx:-mt-20" id="accessing-cluster-dashboard-23"&gt;&lt;/span&gt;
&lt;a href="#accessing-cluster-dashboard-23" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Option 2: Click from the &lt;strong&gt;Main Menu&lt;/strong&gt; cluster list&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/r1VyXopP2.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;Accessing Cluster Dashboard (3/3)&lt;span class="hx:absolute hx:-mt-20" id="accessing-cluster-dashboard-33"&gt;&lt;/span&gt;
&lt;a href="#accessing-cluster-dashboard-33" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Option 3: Click &lt;strong&gt;Explore&lt;/strong&gt; button from &lt;strong&gt;Cluster Management&lt;/strong&gt; view&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/rybwXsTw2.png" alt="" loading="lazy" /&gt;
&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/ry3tXjTw2.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;Cluster Dashboard&lt;span class="hx:absolute hx:-mt-20" id="cluster-dashboard-1"&gt;&lt;/span&gt;
&lt;a href="#cluster-dashboard-1" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;顯示基本的資源和使用信息&lt;/li&gt;
&lt;li&gt;如果部署了 monitoring (監控)，則顯示圖形集群指標&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/BJuq0mTP2.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;Cluster Events&lt;span class="hx:absolute hx:-mt-20" id="cluster-events"&gt;&lt;/span&gt;
&lt;a href="#cluster-events" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;集群的近期事件列表顯示在利用率統計信息下方&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/r1GcJVawh.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;Cluster Menu&lt;span class="hx:absolute hx:-mt-20" id="cluster-menu"&gt;&lt;/span&gt;
&lt;a href="#cluster-menu" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Cluster: Projects/Namespaces and node information&lt;/li&gt;
&lt;li&gt;Workload: Pod, deployment and daemon set details&lt;/li&gt;
&lt;li&gt;Apps &amp;amp; Marketplace: Chart repositories, app oinstallation and information about installed apps&lt;/li&gt;
&lt;li&gt;Service Discovery: Services and ingresses&lt;/li&gt;
&lt;li&gt;Storage: Storage classes, persistent volumes, config maps and secrets&lt;/li&gt;
&lt;li&gt;RBAC: User and role assignments for the cluster&lt;/li&gt;
&lt;li&gt;More Resources: All other Kubernetes resources&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/H1tb0d6w2.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;Menu Items for Cluster Resources&lt;span class="hx:absolute hx:-mt-20" id="menu-items-for-cluster-resources"&gt;&lt;/span&gt;
&lt;a href="#menu-items-for-cluster-resources" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;菜單項可能根據集群上部署的軟件而有所不同。例如，安裝 Monitoring (監控)、 Logging (日誌) 、CIS Scanning (CIS 掃描) 、OPA Gatekeeper (OPA 門衛)、Rancher 備份等將在菜單中添加新的選項。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/H1Ts0_aPn.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;Cluster Management View&lt;span class="hx:absolute hx:-mt-20" id="cluster-management-view"&gt;&lt;/span&gt;
&lt;a href="#cluster-management-view" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Cluster configuration details are available from
&lt;strong&gt;Main Menu&lt;/strong&gt; → &lt;strong&gt;Cluster Management&lt;/strong&gt; → &lt;strong&gt;Triple Dot Menu&lt;/strong&gt; → &lt;strong&gt;Edit Config&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/r1JAk9pP2.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;Edit Cluster with YAML&lt;span class="hx:absolute hx:-mt-20" id="edit-cluster-with-yaml"&gt;&lt;/span&gt;
&lt;a href="#edit-cluster-with-yaml" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;SUSE Rancher 提供了 &lt;strong&gt;YAML view&lt;/strong&gt; 的集群配置&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Edit YAML&lt;/strong&gt; 可以顯示在圖形化介面中看不到的額外細節
&lt;ul&gt;
&lt;li&gt;這個選項可以讓你快速地進行變更&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/Sk6BripD3.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;Cluster Management Tasks&lt;span class="hx:absolute hx:-mt-20" id="cluster-management-tasks"&gt;&lt;/span&gt;
&lt;a href="#cluster-management-tasks" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;其他選項的可用性，如 Take Snapshot (採取快照)、 Rotate Certificates (更換證書)和 Save as RKE Template (保存為 RKE 模板)，取決於集群類型
&lt;ul&gt;
&lt;li&gt;SUSE Rancher provisioned clusters have more functionality than imported clusters&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/rkFMrspDn.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;Cluster Related Information (1/5)&lt;span class="hx:absolute hx:-mt-20" id="cluster-related-information-15"&gt;&lt;/span&gt;
&lt;a href="#cluster-related-information-15" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Click on a cluster from the list&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/rkvtWcpvh.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Machines tab 提供有關當前集群節點、它們的狀態和角色的信息&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/HJb-zqpv2.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;刪除功能被用來從雲端供應商那裡移除有問題的節點。當管理員刪除一個有問題的節點，如果該節點在一個節點池中並且啟用了自動替換節點的功能，SUSE Rancher 可以自動用一個配置完全相同的節點來替換它。&lt;/p&gt;
&lt;p&gt;對節點進行 Cordoning (封鎖) 會停用該節點上的 scheduling (排程) 功能。這個特性對於在短暫的維護時間窗口內對節點執行短任務很有用，像是重新開機、升級或停用。當維護完成後，再開啟電源並通過解封鎖來重新啟用節點上的排程功能。&lt;/p&gt;
&lt;p&gt;Draining 是先封鎖節點，然後驅逐其所有 Pods 的過程。這個特性對於進行節點維護（像是核心升級或硬體維護）很有用。它防止新的 Pods 部署到節點，同時重新分配現有的 Pods，以確保使用者不會經歷服務中斷。對於有副本集的 Pods，該 Pod 會被一個新的 Pod 替換，並且會被排程到一個新的節點。&lt;/p&gt;
&lt;p&gt;There are two drain modes:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Aggressive Mode&lt;/strong&gt;&lt;/p&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;在這種模式下，即使 Pods 沒有 controller，也不會被重新調度到新的節點。Kubernetes 期望管理員有一個處理這些 Pods 刪除的邏輯。Kubernetes 也期望實現能決定如何處理使用 emptyDir 的 Pods。如果一個 Pod 使用 emptyDir 來存儲本地數據，管理員可能無法安全地刪除它，因為一旦 Pod 從節點中移除，emptyDir 中的數據將被刪除。選擇 aggressive mode (激進模式)將刪除這些 Pods。&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Safe Mode&lt;/strong&gt;&lt;/p&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;如果一個 Node 有獨立的 Pods 或短暫的數據，它將被 cordoned ，但不會被 drained。&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;Cluster Related Information (2/5)&lt;span class="hx:absolute hx:-mt-20" id="cluster-related-information-25"&gt;&lt;/span&gt;
&lt;a href="#cluster-related-information-25" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Registration tab displays:
&lt;ul&gt;
&lt;li&gt;節點註冊的角色&lt;/li&gt;
&lt;li&gt;用於註冊的命令&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/HyinI9pDn.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;Cluster Related Information (3/5)&lt;span class="hx:absolute hx:-mt-20" id="cluster-related-information-35"&gt;&lt;/span&gt;
&lt;a href="#cluster-related-information-35" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Snapshots tab 包含關於所拍快照的信息
&lt;ul&gt;
&lt;li&gt;Automatic&lt;/li&gt;
&lt;li&gt;Manual
&lt;ul&gt;
&lt;li&gt;要拍攝一個新的手動快照，請點擊 &lt;strong&gt;&lt;code&gt;Snapshot Now&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Restore from the Triple Dot Menu&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;![](/images/hackmd-uploads/rJ_0D5pD2.png =100%x)&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;Cluster Related Information (4/5)&lt;span class="hx:absolute hx:-mt-20" id="cluster-related-information-45"&gt;&lt;/span&gt;
&lt;a href="#cluster-related-information-45" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Conditions tab contains information about:
&lt;ul&gt;
&lt;li&gt;Cluster type&lt;/li&gt;
&lt;li&gt;Cluster status&lt;/li&gt;
&lt;li&gt;Deployed components and their statuses&lt;/li&gt;
&lt;li&gt;State of the cluster processes&lt;/li&gt;
&lt;li&gt;Initial roles&lt;/li&gt;
&lt;li&gt;Disk and memory pressure status&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/rkJAYcaPn.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;Cluster Related Information (5/5)&lt;span class="hx:absolute hx:-mt-20" id="cluster-related-information-55"&gt;&lt;/span&gt;
&lt;a href="#cluster-related-information-55" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Related Resources tab contains information about:
&lt;ul&gt;
&lt;li&gt;State&lt;/li&gt;
&lt;li&gt;Type&lt;/li&gt;
&lt;li&gt;Name
&lt;ul&gt;
&lt;li&gt;超鏈接以便於導航&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;View Cluster and Node Agents&lt;/h1&gt;&lt;h2&gt;Cluster Agent&lt;span class="hx:absolute hx:-mt-20" id="cluster-agent"&gt;&lt;/span&gt;
&lt;a href="#cluster-agent" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;The name of the agent is cattle-cluster-agent&lt;/li&gt;
&lt;li&gt;The type of the Kubernetes resource is Deployment
&lt;ul&gt;
&lt;li&gt;Replicated for high availability&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Connects to the Kubernetes API of the cluster&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Main Menu&lt;/strong&gt; → &lt;strong&gt;&lt;code&gt;&amp;lt;CLUSTER&amp;gt;&lt;/code&gt;&lt;/strong&gt; → &lt;strong&gt;Workload&lt;/strong&gt; → &lt;strong&gt;Deployments → cattle-system&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/r1GpeRTDh.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;Node Agent&lt;span class="hx:absolute hx:-mt-20" id="node-agent"&gt;&lt;/span&gt;
&lt;a href="#node-agent" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;The name of the agent pod is cattle-node-agent&lt;/li&gt;
&lt;li&gt;The type of the Kubernetes resource is DaemonSet&lt;/li&gt;
&lt;li&gt;Runs on every node for the Kubernetes distribution if required
&lt;ul&gt;
&lt;li&gt;For example K3s clusters do not require node agent for snapshots&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Interacts with the nodes
&lt;ul&gt;
&lt;li&gt;執行集群操作，如 Kubernetes 升級、快照等&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Main Menu&lt;/strong&gt; → &lt;strong&gt;&lt;code&gt;&amp;lt;CLUSTER&amp;gt;&lt;/code&gt;&lt;/strong&gt; → &lt;strong&gt;Workload DaemonSet&lt;/strong&gt; → &lt;strong&gt;cattle-node-agent&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;當 &lt;code&gt;cattle-cluster-agent&lt;/code&gt; 不可用時，&lt;code&gt;cattle-node-agent&lt;/code&gt; 用作回退選項以連接到 SUSE Rancher 啟動的 Kubernetes 集群的 Kubernetes API。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/r1vO0cRP2.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h1&gt;Import an Existing Kubernetes Cluster&lt;/h1&gt;&lt;h2&gt;Importing a Cluster&lt;span class="hx:absolute hx:-mt-20" id="importing-a-cluster"&gt;&lt;/span&gt;
&lt;a href="#importing-a-cluster" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;From &lt;strong&gt;SUSE Rancher Home page&lt;/strong&gt;, click &lt;strong&gt;Import Existing&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/S12k1i0wn.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;Cluster Type&lt;span class="hx:absolute hx:-mt-20" id="cluster-type"&gt;&lt;/span&gt;
&lt;a href="#cluster-type" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Imported clusters can run on infrastructure provider’s cloud or on physical/VM nodes&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/rJHLkiRw2.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;Cluster Name&lt;span class="hx:absolute hx:-mt-20" id="cluster-name"&gt;&lt;/span&gt;
&lt;a href="#cluster-name" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Enter &lt;strong&gt;Cluster Name&lt;/strong&gt; and other configuration details&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/B1CR1iCv3.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;Registration Details&lt;span class="hx:absolute hx:-mt-20" id="registration-details"&gt;&lt;/span&gt;
&lt;a href="#registration-details" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Cluster registration information and requirements will be displayed
&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;Registration&lt;/strong&gt; tab contains alternative ways for completing the registration&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;kubeconfig&lt;/strong&gt; file for the cluster is required on the node the command is run on&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/SyyPxsAv2.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;Updated Cluster List&lt;span class="hx:absolute hx:-mt-20" id="updated-cluster-list"&gt;&lt;/span&gt;
&lt;a href="#updated-cluster-list" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;The imported cluster will be listed
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Provider&lt;/strong&gt; displays &lt;strong&gt;Imported&lt;/strong&gt; until the cluster agent is up and running
&lt;ul&gt;
&lt;li&gt;It then changes to match the actual Kubernetes distribution&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;For a healthy cluster, the &lt;strong&gt;State&lt;/strong&gt; should reach &lt;strong&gt;Active&lt;/strong&gt; in minutes&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/B15EZjCw2.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h1&gt;Provision an RKE Cluster on Existing Nodes&lt;/h1&gt;&lt;h2&gt;RKE Cluster Provisioning on Existing Nodes&lt;span class="hx:absolute hx:-mt-20" id="rke-cluster-provisioning-on-existing-nodes"&gt;&lt;/span&gt;
&lt;a href="#rke-cluster-provisioning-on-existing-nodes" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;From &lt;strong&gt;SUSE Rancher Home&lt;/strong&gt; page, click &lt;strong&gt;Create&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Verify &lt;strong&gt;RKE1&lt;/strong&gt; is selected&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Custom&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/S1GEO3RP3.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;RKE Cluster Configuration&lt;span class="hx:absolute hx:-mt-20" id="rke-cluster-configuration"&gt;&lt;/span&gt;
&lt;a href="#rke-cluster-configuration" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Enter &lt;strong&gt;Cluster Name&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Kubernetes Version&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;The newest available is the default&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Network Provider&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Canal is the default&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/HkApsAyOn.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;Cluster Roles&lt;span class="hx:absolute hx:-mt-20" id="cluster-roles"&gt;&lt;/span&gt;
&lt;a href="#cluster-roles" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Select the cluster roles for the node
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;etcd&lt;/strong&gt;, &lt;strong&gt;Control Plane&lt;/strong&gt; and/or &lt;strong&gt;Worker&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Copy the command box content to clipboard
&lt;ul&gt;
&lt;li&gt;在具有預期角色的節點上運行命令&lt;/li&gt;
&lt;li&gt;&lt;code&gt;docker.service&lt;/code&gt; 必須正在運行。&lt;/li&gt;
&lt;li&gt;使用者必須是 &lt;strong&gt;docker&lt;/strong&gt; 群組的成員&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/Hk-U2Ayu2.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;Docker Container Deployment&lt;span class="hx:absolute hx:-mt-20" id="docker-container-deployment"&gt;&lt;/span&gt;
&lt;a href="#docker-container-deployment" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Docker images are downloaded if not available on the node&lt;/li&gt;
&lt;li&gt;Images are extracted&lt;/li&gt;
&lt;li&gt;Containers are created&lt;/li&gt;
&lt;li&gt;Node starts to communicate with SUSE Rancher API
&lt;ul&gt;
&lt;li&gt;The GUI displays a message: &lt;strong&gt;1 new node has registered&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/ryUQCRkO3.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;Unable to find image &amp;#39;rancher/rancher/rancher-agent:v2.7.3&amp;#39; locally
v2.7.3: Pulling from rancher/rancher-agent
cac05f14fd97: Extracting 24.58MB/47.2MB
cac05f14fd97: Pull complete
b76012a3083a: Pull complete
f19fb49c5ef4: Pull complete
452025625e7f: Pull complete
933e576da79e: Pull complete
3524f405b0a8: Pull complete
dae8b18ada91: Pull complete
Digest: sha256:3b3ea0427211a530a22c2e8f0146fbd8324dd5827496cd289aa43202788fd50b
Status: Downloaded newer image for rancher/rancher/rancher-agent:v2.7.3
1a7413595f54afa888783493dd29c9c417627d529dd0e925073533e9055e4af4&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;RKE Cluster Provisioning&lt;span class="hx:absolute hx:-mt-20" id="rke-cluster-provisioning"&gt;&lt;/span&gt;
&lt;a href="#rke-cluster-provisioning" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;SUSE Rancher GUI 顯示 RKE 集群的設定過程
&lt;ul&gt;
&lt;li&gt;狀態將在 Provisioning (供應)、Waiting (等待)、 Error (錯誤)、 Updating (更新)等過程中運行，直到所有 Container 都被正確啟動&lt;/li&gt;
&lt;li&gt;集群 State (狀態) 需要 5-10 分鐘才能達到 Active (激活)狀態&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;重複角色配置並設定其他節點&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/HyeDkylO2.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;Management Options for Clusters&lt;span class="hx:absolute hx:-mt-20" id="management-options-for-clusters"&gt;&lt;/span&gt;
&lt;a href="#management-options-for-clusters" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;請注意，與 import (導入) 的集群相比，SUSE Rancher provisioned 集群有更多的管理選項&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/rJOZlkgOh.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/BJWzgJeun.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;Questions:&lt;span class="hx:absolute hx:-mt-20" id="questions"&gt;&lt;/span&gt;
&lt;a href="#questions" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Q1: SUSE Rancher 集群的默認預設名稱是什麼？&lt;/p&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;local&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Q2: 集群的 Cluster Dashboard (儀表板) 顯示什麼樣的信息？&lt;/p&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;Displays basic resource and utilization information
顯示基本資源和利用率資訊&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Q3: 與 SUSE Rancher 一起使用的 Kubernetes 節點的 role names (角色名稱) 是什麼？&lt;/p&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;etcd, ControlPlane, and Worker.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Q4: Import (導入) Rancher 後，會創建一個新的 Kubernetes 集群，對還是錯?&lt;/p&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;錯。 Import ㄕ將一個現有的 Kubernetes 集群導入 SUSE Rancher GUI。&lt;/p&gt;
&lt;/div&gt;</description></item><item><title>Course Introduction</title><link>https://blog.kubeantony.com/archive/rancher/course-introduction/</link><pubDate>Sat, 15 Apr 2023 08:07:06 +0800</pubDate><guid>https://blog.kubeantony.com/archive/rancher/course-introduction/</guid><description>
&lt;style&gt;
.indent-title-1{
margin-left: 1em;
&lt;/style&gt;
&lt;h2&gt;Preface&lt;span class="hx:absolute hx:-mt-20" id="preface"&gt;&lt;/span&gt;
&lt;a href="#preface" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;本篇文章主要在介紹，課程將會讓我們學到 SUSE Rancher 的哪些知識，以及環境上的要求有哪些要注意的點。&lt;/p&gt;
&lt;p&gt;可以透過點擊展開以下目錄，選擇想看的內容，跳轉至特定章節&lt;/p&gt;
&lt;/div&gt;
&lt;h1&gt;Course Overview&lt;/h1&gt;&lt;ul&gt;
&lt;li&gt;SUSE Rancher 架構及它的組成&lt;/li&gt;
&lt;li&gt;透過 SUSE Rancher 圖形化介面完成多個 Kubernetes 叢集管理和管理任務，例如：
&lt;ul&gt;
&lt;li&gt;匯入和配置 Kubernetes 叢集&lt;/li&gt;
&lt;li&gt;管理 RKE 和 node templates&lt;/li&gt;
&lt;li&gt;管理本地和外部使用者&lt;/li&gt;
&lt;li&gt;使用 Helm 部署應用程式和持續交付&lt;/li&gt;
&lt;li&gt;Logging and Monitoring 日誌記錄和監控&lt;/li&gt;
&lt;li&gt;執行安全性工具 CIS 和 OPA Gatekeeper&lt;/li&gt;
&lt;li&gt;備份和還原 SUSE Rancher 或是 Downstream Cluster&lt;/li&gt;
&lt;li&gt;透過 Shell 訪問 SUSE Rancher&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;Course Lab Environment&lt;/h1&gt;&lt;h2&gt;Lab Environment Diagram&lt;span class="hx:absolute hx:-mt-20" id="lab-environment-diagram"&gt;&lt;/span&gt;
&lt;a href="#lab-environment-diagram" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src="https://i.imgur.com/W1mmGcn.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;實作環境有 9 台 VM，每台 VM 的作業系統都是 SLES15 SP3&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Management Host (RAN201V2.6-management)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;包含環境要求的基礎架構服務，例如 DHCP、DNS、PXE network boot services 和 Repository Management Tool 伺服器。&lt;/li&gt;
&lt;li&gt;這台 VM 要先啟動，並保持一直運行，否則其他虛擬機器上的一些服務可能會無法正常運作。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Load Balancer (RAN201V2.6-lb)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;這個虛擬機器已經配置為通過 &lt;code&gt;rancher.example.com&lt;/code&gt; 將流量隨機轉發到 SUSE Rancher 叢集的三台節點。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rancher cluster (RAN201V2.6-rancher01, RAN201V2.6-rancher02, RAN201V2.6-rancher03)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;這個虛擬機器上已經部署了 SUSE Rancher，並運行在擁有三個節點的 K3s 叢集上。需要注意的是，這種設置並不適用於生產環境，因為它沒有任何高可用性的功能。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;K3s Cluster (RAN201V2.6-control01, RAN201V2.6-worker01)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;預先安裝好的 Kubernetes 叢集，將被導入到 SUSE Rancher 中。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RKE Cluster (RAN201v2.6-control01, RAN201V2.6-worker02)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;這些 VM 將被配置為 RKE 叢集，並被加入 SUSE Rancher 來做管理。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;注意 ! 為了在叢集上部署 downstream clusters (下游叢集)和應用程式，&lt;strong&gt;需要網路連線&lt;/strong&gt;來下載 Container image。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Required Minimum Product Version&lt;span class="hx:absolute hx:-mt-20" id="required-minimum-product-version"&gt;&lt;/span&gt;
&lt;a href="#required-minimum-product-version" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;課程基於以下產品版本：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Product: SUSE Rancher&lt;/li&gt;
&lt;li&gt;Version: 2.6.0&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Hardware / Software Requirements&lt;span class="hx:absolute hx:-mt-20" id="hardware--software-requirements"&gt;&lt;/span&gt;
&lt;a href="#hardware--software-requirements" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;CPU: 8 CPU cores is the absolute minimum&lt;/li&gt;
&lt;li&gt;RAM: 64 GB&lt;/li&gt;
&lt;li&gt;Disk: 200GB SSD&lt;/li&gt;
&lt;li&gt;Min host OS: openSUSE Leap 15 SP2&lt;/li&gt;
&lt;li&gt;Internet Connection: Required&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Logging and Monitoring with SUSE</title><link>https://blog.kubeantony.com/archive/rancher/logging-and-monitoring-with-suse/</link><pubDate>Fri, 14 Apr 2023 05:04:20 +0800</pubDate><guid>https://blog.kubeantony.com/archive/rancher/logging-and-monitoring-with-suse/</guid><description>
&lt;style&gt;
.indent-title-1{
margin-left: 1em;
&lt;/style&gt;
&lt;h2&gt;Preface&lt;span class="hx:absolute hx:-mt-20" id="preface"&gt;&lt;/span&gt;
&lt;a href="#preface" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="indent-title-1"&gt;
&lt;/div&gt;
&lt;h1&gt;Deploy Monitoring Stack&lt;/h1&gt;&lt;h2&gt;Monitoring Stack&lt;span class="hx:absolute hx:-mt-20" id="monitoring-stack"&gt;&lt;/span&gt;
&lt;a href="#monitoring-stack" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;SUSE Rancher monitoring stack consists of &lt;strong&gt;Prometheus&lt;/strong&gt;, &lt;strong&gt;Grafana&lt;/strong&gt; and &lt;strong&gt;Alertmanager&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Prometheus allows the administrator to:
&lt;ul&gt;
&lt;li&gt;Monitor the state and processes of the &lt;strong&gt;cluster nodes&lt;/strong&gt;, &lt;strong&gt;Kubernetes component&lt;/strong&gt;s and &lt;strong&gt;software deployments&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Collect pre-computed time series based metrics&lt;/li&gt;
&lt;li&gt;Define alerts based on the collected metrics
&lt;ul&gt;
&lt;li&gt;Notifications can be sent to multiple destinations by Alertmanager&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Grafana allows an administrator to:
&lt;ul&gt;
&lt;li&gt;See the current state or collected metrics as graphical representation&lt;/li&gt;
&lt;li&gt;Create custom dashboards to suit the needs&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Prometheus 是一個提供時間序列資料的工具，這些資料是屬於同一個指標和標籤維度的、帶有時間戳記的數值流，同時也提供監控集群的綜合統計信息和指標。透過時間戳記，管理者可以使用 SUSE Rancher GUI 或者與 Prometheus 一起部署的分析視覺化平台 Grafana，輕鬆地查詢和查看這些指標的圖表和視覺化資料。&lt;/p&gt;
&lt;h1&gt;Understand SUSE Rancher Logging&lt;/h1&gt;&lt;h1&gt;Configure an External Logging Service for Grafana&lt;/h1&gt;</description></item><item><title>nginx.conf with `Rancher.LB`</title><link>https://blog.kubeantony.com/archive/rancher/nginx.conf-with-rancher.lb/</link><pubDate>Wed, 12 Apr 2023 07:58:30 +0800</pubDate><guid>https://blog.kubeantony.com/archive/rancher/nginx.conf-with-rancher.lb/</guid><description>
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;user nginx;
worker_processes auto;
load_module /usr/lib64/nginx/modules/ngx_stream_module.so;
error_log /var/log/nginx/error.log;
error_log /var/log/nginx/error.log notice;
error_log /var/log/nginx/error.log info;
events {
worker_connections 1024;
use epoll;
}
stream {
log_format proxy &amp;#39;$remote_addr [$time_local] &amp;#39;
&amp;#39;$protocol $status $bytes_sent $bytes_received &amp;#39;
&amp;#39;$session_time &amp;#34;$upstream_addr&amp;#34;&amp;#39;;
error_log /var/log/nginx/k8s-masters-lb-error.log;
access_log /var/log/nginx/k8s-masters-lb-access.log proxy;
# upstream k8s-masters {
# #hash $remote_addr consistent;
# server master01.example.com:6443 weight=1 max_fails=1;
# #server master02.example.com:6443 weight=1 max_fails=1;
# #server master03.example.com:6443 weight=1 max_fails=1;
# }
upstream rancher_http {
#hash $remote_addr consistent;
server rancher01.example.com:80 weight=1 max_fails=1;
server rancher02.example.com:80 weight=1 max_fails=1;
server rancher03.example.com:80 weight=1 max_fails=1;
}
upstream rancher_https {
#hash $remote_addr consistent;
server rancher01.example.com:443 weight=1 max_fails=1;
server rancher02.example.com:443 weight=1 max_fails=1;
server rancher03.example.com:443 weight=1 max_fails=1;
}
upstream rancher_certs {
#hash $remote_addr consistent;
server rancher01.example.com:2379 weight=1 max_fails=1;
server rancher02.example.com:2379 weight=1 max_fails=1;
server rancher03.example.com:2379 weight=1 max_fails=1;
}
upstream rancher_kubernetes_masters {
#hash $remote_addr consistent;
server rancher01.example.com:6443 weight=1 max_fails=1;
server rancher02.example.com:6443 weight=1 max_fails=1;
server rancher03.example.com:6443 weight=1 max_fails=1;
}
upstream rancher_nodeport_1_workers {
#hash $remote_addr consistent;
server worker01.example.com:31999 weight=1 max_fails=1;
# server agent02.example.com:31999 weight=1 max_fails=1;
# server agent03.example.com:31999 weight=1 max_fails=1;
}
# server {
# listen 31999;
#proxy_connect_timeout 1s;
#proxy_timeout 3s;
# proxy_pass rancher_nodeport_1_workers;
# }
server {
listen 6443;
#proxy_connect_timeout 1s;
#proxy_timeout 3s;
proxy_pass rancher_kubernetes_masters;
}
server {
listen 80;
proxy_pass rancher_http;
}
server {
listen 2379;
proxy_pass rancher_certs;
}
server {
listen 443;
proxy_pass rancher_https;
}
upstream rancher_wordpress_http_workers {
#hash $remote_addr consistent;
server worker01.example.com:30292 weight=1 max_fails=1;
#server worker02.example.com:30292 weight=1 max_fails=1;
#server worker03.example.com:30292 weight=1 max_fails=1;
}
server {
listen 30292;
proxy_pass rancher_wordpress_http_workers;
}
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;Nginx Unit File&lt;span class="hx:absolute hx:-mt-20" id="nginx-unit-file"&gt;&lt;/span&gt;
&lt;a href="#nginx-unit-file" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;cat /usr/lib/systemd/system/nginx.service&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;[Unit]
Description=The nginx HTTP and reverse proxy server
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx -g &amp;#34;daemon off;&amp;#34;
ExecReload=/bin/kill -s HUP $MAINPID
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=mixed
PrivateTmp=true
[Install]
WantedBy=multi-user.target&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item></channel></rss>