跳到內容
開源

用 YAML 建立和編輯物件

在專案裡貼上 YAML 建立任何 Kubernetes 物件,或直接編輯、刪除既有物件的 YAML。

表單沒有的設定,直接寫 YAML。在專案的 物件 頁按 建立 貼上 YAML,就能建立 ConfigMap、Deployment、Service 或叢集提供的任何自訂資源。既有的物件點進去切到 YAML 檢視,按 編輯 或 刪除。每次寫入都會先開啟檢查畫面,確認後才套用。

  • 有權在專案裡建立或修改這種物件。權限不夠時,表單會先提醒,檢查變更時再向叢集確認。
  • Zeabur 只在專案的 Namespace 裡建立物件。Namespace、ClusterRole 這類屬於整個叢集的物件,要用 kubectl。
  • 由 Helm、Argo CD 或 Flux 管理的物件不能在這裡編輯或刪除,要回到那個工具修改。重新啟動例外,見重新啟動、回滾與暫停服務。

進入專案,到 物件 頁按 建立,或在搜尋選 在 demo 建立…。畫面標題是 在 demo 建立。

在 要建立的 YAML 貼上一份或多份文件,文件之間用 --- 分隔。不知道怎麼寫時,按 插入範例,從 常用類型、自訂資源 或 其他可建立的類型 選一種,會插入那種物件的範本。

下面這份建立一個 ConfigMap、一個讀取它的 Deployment 和一個 Service:

apiVersion: v1
kind: ConfigMap
metadata:
name: hello-config
namespace: demo
data:
MESSAGE: hello
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello
namespace: demo
labels:
app.kubernetes.io/name: hello
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: hello
template:
metadata:
labels:
app.kubernetes.io/name: hello
spec:
automountServiceAccountToken: false
securityContext:
seccompProfile:
type: RuntimeDefault
containers:
- name: hello
image: nginxinc/nginx-unprivileged:1.29
ports:
- containerPort: 8080
envFrom:
- configMapRef:
name: hello-config
securityContext:
allowPrivilegeEscalation: false
---
apiVersion: v1
kind: Service
metadata:
name: hello
namespace: demo
labels:
app.kubernetes.io/name: hello
spec:
selector:
app.kubernetes.io/name: hello
ports:
- name: http
port: 8080
targetPort: 8080

namespace 可以省略,Zeabur 會填入目前的專案。

編輯器旁邊會列出 N 個問題,點一則會跳到那一行。有問題時要先修正才能檢查變更:

  • YAML 格式錯誤,或缺少 apiVersion、kind、metadata.name。
  • 屬於整個叢集的物件,例如 Namespace。
  • namespace 寫成別的專案。
  • 叢集沒有提供這種物件,例如沒裝 cert-manager 卻寫了 Certificate。
  • 同一個物件寫了兩次。
  • 已經有同名的物件。建立不會修改既有的物件,要改它請用 編輯。

建立順序 列出實際的順序:先建立設定檔、機密變數、磁碟與 ServiceAccount,再建立 Service,然後是工作負載,最後是其他物件,讓工作負載啟動時讀得到它需要的東西。

按 檢查變更,確認畫面上要建立的物件,按 建立 3 個物件。

Kubernetes 無法一次復原多個物件。叢集拒絕其中一個時,前面已經建立的會留著,畫面顯示 已建立 1/3 個,並列出 尚未建立 的物件。這時選 刪除剛建立的 1 個 回到原狀,或選 保留,修正 YAML 後只建立剩下的。

專案的 物件 頁依種類列出 Namespace 裡的所有物件,用 篩選物件 依名稱找。由其他物件產生的會標 自動產生 和 由 Deployment 建立 這類來源,例如 Deployment 產生的 ReplicaSet 和 Pod。

點一個物件,可以看它的狀態、狀況 和 YAML。服務的 YAML 也可以從服務 設定,把上方的切換從 設定 換到 YAML。

機密變數的值在 YAML 裡顯示成 (hidden)。

在 YAML 檢視按 編輯。編輯器裡是目前叢集裡的設定,改了會照原樣寫入。機密變數的值留著 (hidden) 就不會變,要改就填入新值。

按 檢查變更。檢查畫面寫出改了哪些欄位、服務會不會中斷。技術細節 裡有 YAML 差異 和 欄位擁有者,後者列出每個欄位上次由誰寫入,例如 kubectl 或 helm。確認後套用。

Zeabur 只寫入你改的欄位,每一處都先確認叢集裡的值和你開始編輯時相同。編輯期間有人改了同一個物件,套用會失敗,要重新開啟再改一次。

status、resourceVersion、ownerReferences 這類由叢集維護的欄位,改了也不會寫入。Pod、ReplicaSet 這類由其他物件產生的物件不能編輯或刪除,要改擁有它的物件。

改了用 kubectl apply 寫入的欄位時,檢查畫面會提醒 下次執行 kubectl apply 時會把 hello 的 …改回去。這時也要更新你手上的 YAML 檔,不然下次 apply 又會蓋掉。

在 YAML 檢視按 刪除,檢查畫面會寫出刪除後的影響,確認後套用。刪除後無法復原。刪除工作負載時,它產生的 ReplicaSet 和 Pod 會一起刪掉。

建立 對應 kubectl create,遇到已存在的物件會失敗。以下以專案 demo 為例:

kubectl -n demo create -f hello.yaml
kubectl -n demo edit deployment hello
kubectl -n demo delete deployment hello

kubectl create -f 依檔案裡的順序建立,不會像 Zeabur 重新排序,把 ConfigMap 和 Secret 寫在前面。

Zeabur 的寫入不加任何自己的欄位,kubectl apply 管理的物件可以照樣繼續用 kubectl apply。在 Zeabur 改了的欄位,要同步改進你的 YAML 檔。

物件 頁會列出新建立的物件。工作負載也會出現在專案的服務列表,概覽 顯示副本是否就緒。

kubectl -n demo get configmap,deployment,service -l app.kubernetes.io/name=hello
kubectl -n demo get configmap hello-config
kubectl -n demo get deployment hello -o yaml
kubectl -n demo get deployment hello --show-managed-fields -o jsonpath='{.metadata.managedFields[*].manager}'

前兩行確認物件都在。-o yaml 的內容和你在 Zeabur 看到的 YAML 相同。最後一行列出寫過這個物件的程式,和檢查畫面 欄位擁有者 的資料來源相同。

畫面或結果接著處理
Namespace … 屬於整個叢集,Zeabur 只在專案內建立物件。用 kubectl 建立,或請管理員處理。
這個叢集沒有提供 Certificate(cert-manager.io/v1)。先安裝提供這種物件的元件,或確認 apiVersion 有沒有打錯。
已經有名為 hello 的 Deployment。建立不會修改既有的物件。改用那個物件的 編輯,或換一個名稱。
已建立 1/3 個看被拒絕的原因,選 刪除剛建立的 1 個 或 保留 後修正剩下的。
編輯或刪除時說由 Helm、Argo CD 或 Flux 管理回到那個工具的 values 或 Git 儲存庫修改。
這類物件由 Kubernetes 自行管理,要修改請編輯擁有它的物件。物件由其他物件產生,例如 Pod。改它的 Deployment。
套用時說物件已經變了編輯期間有人改了它。重新開啟 YAML,再改一次。