用 YAML 建立和編輯物件
在專案裡貼上 YAML 建立任何 Kubernetes 物件,或直接編輯、刪除既有物件的 YAML。
表單沒有的設定,直接寫 YAML。在專案的 物件 頁按 建立 貼上 YAML,就能建立 ConfigMap、Deployment、Service 或叢集提供的任何自訂資源。既有的物件點進去切到 YAML 檢視,按 編輯 或 刪除。每次寫入都會先開啟檢查畫面,確認後才套用。
- 有權在專案裡建立或修改這種物件。權限不夠時,表單會先提醒,檢查變更時再向叢集確認。
- Zeabur 只在專案的 Namespace 裡建立物件。Namespace、ClusterRole 這類屬於整個叢集的物件,要用 kubectl。
- 由 Helm、Argo CD 或 Flux 管理的物件不能在這裡編輯或刪除,要回到那個工具修改。重新啟動例外,見重新啟動、回滾與暫停服務。
從 YAML 建立物件
Section titled “從 YAML 建立物件”進入專案,到 物件 頁按 建立,或在搜尋選 在 demo 建立…。畫面標題是 在 demo 建立。
寫入 YAML
Section titled “寫入 YAML”在 要建立的 YAML 貼上一份或多份文件,文件之間用 --- 分隔。不知道怎麼寫時,按 插入範例,從 常用類型、自訂資源 或 其他可建立的類型 選一種,會插入那種物件的範本。
下面這份建立一個 ConfigMap、一個讀取它的 Deployment 和一個 Service:
apiVersion: v1kind: ConfigMapmetadata: name: hello-config namespace: demodata: MESSAGE: hello---apiVersion: apps/v1kind: Deploymentmetadata: name: hello namespace: demo labels: app.kubernetes.io/name: hellospec: 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: v1kind: Servicemetadata: name: hello namespace: demo labels: app.kubernetes.io/name: hellospec: selector: app.kubernetes.io/name: hello ports: - name: http port: 8080 targetPort: 8080namespace 可以省略,Zeabur 會填入目前的專案。
看問題和建立順序
Section titled “看問題和建立順序”編輯器旁邊會列出 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
Section titled “編輯物件的 YAML”在 YAML 檢視按 編輯。編輯器裡是目前叢集裡的設定,改了會照原樣寫入。機密變數的值留著 (hidden) 就不會變,要改就填入新值。
按 檢查變更。檢查畫面寫出改了哪些欄位、服務會不會中斷。技術細節 裡有 YAML 差異 和 欄位擁有者,後者列出每個欄位上次由誰寫入,例如 kubectl 或 helm。確認後套用。
Zeabur 只寫入你改的欄位,每一處都先確認叢集裡的值和你開始編輯時相同。編輯期間有人改了同一個物件,套用會失敗,要重新開啟再改一次。
status、resourceVersion、ownerReferences 這類由叢集維護的欄位,改了也不會寫入。Pod、ReplicaSet 這類由其他物件產生的物件不能編輯或刪除,要改擁有它的物件。
改了用 kubectl apply 寫入的欄位時,檢查畫面會提醒 下次執行 kubectl apply 時會把 hello 的 …改回去。這時也要更新你手上的 YAML 檔,不然下次 apply 又會蓋掉。
在 YAML 檢視按 刪除,檢查畫面會寫出刪除後的影響,確認後套用。刪除後無法復原。刪除工作負載時,它產生的 ReplicaSet 和 Pod 會一起刪掉。
用 kubectl 做同樣的事
Section titled “用 kubectl 做同樣的事”建立 對應 kubectl create,遇到已存在的物件會失敗。以下以專案 demo 為例:
kubectl -n demo create -f hello.yamlkubectl -n demo edit deployment hellokubectl -n demo delete deployment hellokubectl create -f 依檔案裡的順序建立,不會像 Zeabur 重新排序,把 ConfigMap 和 Secret 寫在前面。
Zeabur 的寫入不加任何自己的欄位,kubectl apply 管理的物件可以照樣繼續用 kubectl apply。在 Zeabur 改了的欄位,要同步改進你的 YAML 檔。
物件 頁會列出新建立的物件。工作負載也會出現在專案的服務列表,概覽 顯示副本是否就緒。
kubectl -n demo get configmap,deployment,service -l app.kubernetes.io/name=hellokubectl -n demo get configmap hello-configkubectl -n demo get deployment hello -o yamlkubectl -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,再改一次。 |