{"id":679,"date":"2026-02-20T10:09:35","date_gmt":"2026-02-20T01:09:35","guid":{"rendered":"https:\/\/tech.softbell.net\/?p=679"},"modified":"2026-03-22T00:37:58","modified_gmt":"2026-03-21T15:37:58","slug":"gitlab-helm-chart-%ec%97%85%ea%b7%b8%eb%a0%88%ec%9d%b4%eb%93%9c-%ec%8b%9c-db-migration-%ec%8b%a4%ed%8c%a8-%ed%8a%b8%eb%9f%ac%eb%b8%94%ec%8a%88%ed%8c%85-9-8-0%e2%86%929-9-0","status":"publish","type":"post","link":"https:\/\/tech.softbell.net\/?p=679","title":{"rendered":"GitLab Helm Chart \uc5c5\uadf8\ub808\uc774\ub4dc \uc2dc DB Migration \uc2e4\ud328 \ud2b8\ub7ec\ube14\uc288\ud305 (9.8.0\u21929.9.0)"},"content":{"rendered":"<h2>\ud83d\udccc \ud575\uc2ec \uc694\uc57d<\/h2>\n<p>GitLab Helm chart\ub97c 9.8.0\uc5d0\uc11c 9.9.0 (\uc571 \ubc84\uc804 v18.8 \u2192 v18.9)\uc73c\ub85c \uc5c5\uadf8\ub808\uc774\ub4dc\ud558\ub294 \uacfc\uc815\uc5d0\uc11c DB migration job\uc774 \uc2e4\ud328\ud558\uace0, \uc0c8\ub85c \ubc30\ud3ec\ub41c sidekiq\/webservice pod\ub4e4\uc774 <code>Init:CrashLoopBackOff<\/code> \uc0c1\ud0dc\uc5d0 \ube60\uc9c0\ub294 \uc7a5\uc560\uac00 \ubc1c\uc0dd\ud588\ub2e4.<\/p>\n<p><strong>\uadfc\ubcf8 \uc6d0\uc778<\/strong>\uc740 <code>pool_repositories<\/code> \ud14c\uc774\ube14\uc758 <code>organization_id<\/code> \uceec\ub7fc\uc5d0 NULL \uac12\uc774 \uc874\uc7ac\ud558\ub294 \ub370\uc774\ud130 \uc815\ud569\uc131 \ubb38\uc81c\uc600\ub2e4. v18.9\uc758 migration\uc774 \ud574\ub2f9 \uceec\ub7fc\uc5d0 NOT NULL \uc81c\uc57d\uc870\uac74\uc744 \ucd94\uac00\ud558\ub824\ub2e4 <code>PG::CheckViolation<\/code> \uc5d0\ub7ec\uac00 \ubc1c\uc0dd\ud588\ub2e4.<\/p>\n<p><strong>\ud574\uacb0\ucc45<\/strong>: NULL \uac12\uc744 \uc62c\ubc14\ub978 organization_id(1, Default org)\ub85c UPDATE\ud558\uace0, \uc2e4\ud328\ud55c migration job\uc744 \uc0ad\uc81c\ud558\uc5ec ArgoCD self-heal\ub85c \uc7ac\uc2e4\ud589\ud558\uba74 \ub41c\ub2e4.<\/p>\n<hr>\n<h2>\ud83c\udfd7\ufe0f \ud658\uacbd<\/h2>\n<ul>\n<li><strong>Kubernetes<\/strong>: RKE2<\/li>\n<li><strong>GitOps<\/strong>: ArgoCD<\/li>\n<li><strong>Database<\/strong>: PostgreSQL 17 (Zalando PostgreSQL Operator\ub85c \uad00\ub9ac, Spilo 4.0-p2)<\/li>\n<li><strong>GitLab Helm chart<\/strong>: 9.8.0 \u2192 9.9.0<\/li>\n<li><strong>GitLab App<\/strong>: v18.8 \u2192 v18.9<\/li>\n<li><strong>\ub85c\uadf8 \uc218\uc9d1<\/strong>: Loki + Grafana<\/li>\n<\/ul>\n<hr>\n<h2>\ud83d\udea8 \uc0c1\ud669<\/h2>\n<p>ArgoCD\uc5d0\uc11c GitLab Helm chart \ubc84\uc804\uc744 9.9.0\uc73c\ub85c \uc62c\ub9ac\uace0 sync\ub97c \uc2e4\ud589\ud588\ub2e4. \uadf8\ub7f0\ub370 \uc815\uc0c1\uc801\uc73c\ub85c \uc644\ub8cc\ub418\uc5b4\uc57c \ud560 \uc5c5\uadf8\ub808\uc774\ub4dc\uac00 \ub2e4\uc74c \uc99d\uc0c1\uc744 \ubcf4\uc774\uba70 \uc2e4\ud328\ud588\ub2e4.<\/p>\n<h3>\uc99d\uc0c1 1: DB Migration Job \uc2e4\ud328<\/h3>\n<pre><code>NAME                                          STATUS\ngitlab-migrations-x-xxxxxxxx-xxxxx           BackoffLimitExceeded<\/code><\/pre>\n<p>migration job\uc758 \ubc31\uc624\ud504 \uc81c\ud55c\uc744 \ucd08\uacfc\ud558\uc5ec pod\uac00 \uacc4\uc18d \uc7ac\uc2dc\uc791\ub418\ub2e4 \ucd5c\uc885 \uc2e4\ud328 \uc0c1\ud0dc\ub85c \uc804\ud658\ub418\uc5c8\ub2e4.<\/p>\n<h3>\uc99d\uc0c1 2: \uc0c8 \ubc84\uc804 Pod\ub4e4\uc758 Init:CrashLoopBackOff<\/h3>\n<pre><code>gitlab-sidekiq-all-in-1-v2-xxx-xxxxx         0\/1   Init:CrashLoopBackOff   8   15m\ngitlab-webservice-default-xxx-xxxxx          0\/2   Init:CrashLoopBackOff   8   15m<\/code><\/pre>\n<p>\uc0c8 \ubc84\uc804\uc73c\ub85c \ubc30\ud3ec\ub41c sidekiq\uacfc webservice pod\ub4e4\uc758 <code>dependencies<\/code> init container\uac00 migration\uc774 \uc644\ub8cc\ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9ac\ub294 \ub85c\uc9c1\uc73c\ub85c \uc778\ud574 CrashLoopBackOff\uc5d0 \ube60\uc84c\ub2e4.<\/p>\n<hr>\n<h2>\ud83d\udd0d \uc6d0\uc778 \ubd84\uc11d<\/h2>\n<h3>1\ub2e8\uacc4: Loki\ub85c Migration \ub85c\uadf8 \ud655\uc778<\/h3>\n<p>Grafana\uc5d0\uc11c Loki\ub97c \ud1b5\ud574 migration pod\uc758 \ub85c\uadf8\ub97c \uc870\ud68c\ud588\ub2e4.<\/p>\n<pre><code>{namespace=\"gitlab\", pod=~\"gitlab-migrations.*\"}<\/code><\/pre>\n<p>\ub85c\uadf8\uc5d0\uc11c \ub2e4\uc74c\uacfc \uac19\uc740 \uc5d0\ub7ec\ub97c \ud655\uc778\ud588\ub2e4:<\/p>\n<pre><code>== 20250101000000 AddNotNullConstraintOnOrganizationIdForPoolRepositories: migrating =====\n-- execute(\"ALTER TABLE pool_repositories VALIDATE CONSTRAINT check_96233d37c0\")\nPG::CheckViolation: ERROR:  new row for relation \"pool_repositories\" violates check constraint \"check_96233d37c0\"\nDETAIL:  Failing row contains (1, ..., null, ...).\nrake aborted!\nStandardError: An error has occurred, all later migrations canceled:\nPG::CheckViolation: ERROR:  new row for relation \"pool_repositories\" violates check constraint \"check_96233d37c0\"<\/code><\/pre>\n<h3>2\ub2e8\uacc4: \uadfc\ubcf8 \uc6d0\uc778 \ud30c\uc545<\/h3>\n<p>v18.9\uc758 migration <code>AddNotNullConstraintOnOrganizationIdForPoolRepositories<\/code>\ub294 <code>pool_repositories.organization_id<\/code> \uceec\ub7fc\uc5d0 NOT NULL \uc81c\uc57d\uc870\uac74\uc744 \ucd94\uac00\ud558\ub824 \ud588\ub2e4. \uadf8\ub7f0\ub370 \ud574\ub2f9 \ud14c\uc774\ube14\uc5d0 <code>organization_id<\/code>\uac00 <code>NULL<\/code>\uc778 \ud589\uc774 1\uac74 \uc874\uc7ac\ud558\uace0 \uc788\uc5c8\ub2e4.<\/p>\n<p>\uc774\ub294 \uc774\uc804 \ubc84\uc804\uc5d0\uc11c <code>organization_id<\/code>\uac00 NULL\uc744 \ud5c8\uc6a9\ud558\ub358 \uc2dc\uc808\uc5d0 \uc0dd\uc131\ub41c \ub370\uc774\ud130\ub85c, \uc815\uc0c1\uc801\uc73c\ub85c\ub294 \uc874\uc7ac\ud558\uc9c0 \uc54a\uc544\uc57c \ud558\ub294 \uace0\uc544 \ub370\uc774\ud130\uc600\ub2e4.<\/p>\n<pre><code>-- PostgreSQL\uc5d0\uc11c \uc9c1\uc811 \ud655\uc778\nSELECT id, organization_id FROM pool_repositories WHERE organization_id IS NULL;\n\n id |  organization_id\n----+------------------\n  1 | (null)<\/code><\/pre>\n<hr>\n<h2>\u2705 \ud574\uacb0 \uacfc\uc815<\/h2>\n<h3>1. NULL \ub370\uc774\ud130 \uc218\uc815<\/h3>\n<p>Zalando PostgreSQL Operator\ub85c \uad00\ub9ac\ub418\ub294 PostgreSQL\uc758 primary pod\uc5d0 \uc811\uc18d\ud574\uc11c NULL \uac12\uc744 \uc218\uc815\ud588\ub2e4.<\/p>\n<pre><code># PostgreSQL primary pod \uc811\uc18d\nkubectl exec -it -n gitlab \\\n  $(kubectl get pods -n gitlab -l application=spilo,cluster-name=gitlab-postgresql \\\n    -o jsonpath='{.items[?(@.labels.spilo-role==\"master\")].metadata.name}') \\\n  -- psql -U gitlab -d gitlabhq_production\n\n# NULL \ub370\uc774\ud130 \uc218\uc815\nUPDATE pool_repositories SET organization_id = 1 WHERE organization_id IS NULL;\n-- UPDATE 1\n\n# \ud655\uc778\nSELECT id, organization_id FROM pool_repositories WHERE organization_id IS NULL;\n-- (0 rows)<\/code><\/pre>\n<h3>2. \uc2e4\ud328\ud55c Migration Job \uc0ad\uc81c<\/h3>\n<pre><code>kubectl delete job -n gitlab gitlab-migrations-x-xxxxxxxx<\/code><\/pre>\n<p>ArgoCD\uc758 self-heal \uae30\ub2a5\uc774 \uc790\ub3d9\uc73c\ub85c migration job\uc744 \uc7ac\uc0dd\uc131\ud588\ub2e4. \uc774\ubc88\uc5d0\ub294 \ub370\uc774\ud130 \uc815\ud569\uc131 \ubb38\uc81c\uac00 \ud574\uacb0\ub418\uc5c8\uc73c\ubbc0\ub85c 17\uac1c\uc758 migration\uc774 \ubaa8\ub450 \uc131\uacf5\uc801\uc73c\ub85c \uc644\ub8cc\ub418\uc5c8\ub2e4.<\/p>\n<pre><code>== 20250101000000 AddNotNullConstraintOnOrganizationIdForPoolRepositories: migrating ====\n-- execute(\"ALTER TABLE pool_repositories VALIDATE CONSTRAINT check_96233d37c0\")\n   -> 0.0234s\n== 20250101000000 AddNotNullConstraintOnOrganizationIdForPoolRepositories: migrated (0.0235s) ==\n\n...\n\nMigrated 17 files.<\/code><\/pre>\n<h3>3. CrashLoopBackOff Pod \uc7ac\uc2dc\uc791<\/h3>\n<p>CrashLoopBackOff \uc0c1\ud0dc\uc5d0 \ube60\uc9c4 pod\ub4e4\uc744 \uc0ad\uc81c\ud558\uba74 Kubernetes\uac00 \uc989\uc2dc \uc7ac\uc0dd\uc131\ud55c\ub2e4. \uc774\ubbf8 migration\uc774 \uc644\ub8cc\ub41c \uc0c1\ud0dc\uc774\ubbc0\ub85c init container\uac00 \uc815\uc0c1 \ud1b5\uacfc\ud558\uace0 pod\ub4e4\uc774 Running \uc0c1\ud0dc\ub85c \uc804\ud658\ub41c\ub2e4.<\/p>\n<pre><code>kubectl delete pods -n gitlab -l app=sidekiq\nkubectl delete pods -n gitlab -l app=webservice<\/code><\/pre>\n<h3>4. \ucd5c\uc885 \uc0c1\ud0dc \ud655\uc778<\/h3>\n<pre><code>ArgoCD: Synced \/ Healthy \u2705\nkubectl get pods -n gitlab | grep -v Running\n# (\ucd9c\ub825 \uc5c6\uc74c - \ubaa8\ub4e0 pod \uc815\uc0c1)<\/code><\/pre>\n<hr>\n<h2>\ud83d\udee1\ufe0f \uc7ac\ubc1c \ubc29\uc9c0<\/h2>\n<h3>migration \uc2e4\ud328 \uc2dc \ub370\uc774\ud130 \uc815\ud569\uc131 \ud655\uc778<\/h3>\n<p>\uc77c\ubc18\uc801\uc778 GitLab \uc5c5\uadf8\ub808\uc774\ub4dc\uc5d0\uc11c\ub294 \ubcc4\ub3c4\uc758 \ub370\uc774\ud130 \uac80\uc99d\uc774 \ud544\uc694\ud558\uc9c0 \uc54a\ub2e4. \ub2e4\ub9cc \uc774\ubc88\ucc98\ub7fc <strong>NOT NULL \uc81c\uc57d\uc870\uac74 \ucd94\uac00 migration\uc774 \uc2e4\ud328<\/strong>\ud588\uc744 \ub54c\ub294, \ud574\ub2f9 \ud14c\uc774\ube14\uc5d0 NULL \ub370\uc774\ud130\uac00 \ub0a8\uc544\uc788\ub294\uc9c0 \ud655\uc778\ud558\ub294 \uac83\uc774 \ube60\ub978 \uc9c4\ub2e8 \ubc29\ubc95\uc774\ub2e4.<\/p>\n<pre><code>-- migration \uc2e4\ud328 \uc2dc NULL \ub370\uc774\ud130 \ud655\uc778 \uc608\uc2dc\nSELECT 'pool_repositories' as table_name, COUNT(*) as null_count\nFROM pool_repositories\nWHERE organization_id IS NULL;<\/code><\/pre>\n<p>\uc774\ub7ec\ud55c \uace0\uc544 \ub370\uc774\ud130\ub294 \uc774\uc804 \ubc84\uc804\uc5d0\uc11c \ud5c8\uc6a9\ub418\ub358 \ud615\uc2dd\uc774 \uc0c8 \ubc84\uc804\uc5d0\uc11c \uc5c4\uaca9\ud574\uc9c0\uba74\uc11c \ubc1c\uc0dd\ud558\ub294 \uac83\uc73c\ub85c, GitLab\uc758 <a href=\"https:\/\/docs.gitlab.com\/ee\/update\/\">\uacf5\uc2dd \uc5c5\uadf8\ub808\uc774\ub4dc \uac00\uc774\ub4dc<\/a>\uc5d0\uc11c\ub3c4 background migration \uc644\ub8cc \uc5ec\ubd80 \ud655\uc778\uc744 \uad8c\uc7a5\ud558\uace0 \uc788\ub2e4.<\/p>\n<h3>Migration \uc2e4\ud328 \uc54c\ub9bc \uac15\ud654<\/h3>\n<p>Kubernetes Job \uc2e4\ud328 \uc2dc \uc989\uc2dc \uc54c\ub9bc\uc744 \ubc1b\uc744 \uc218 \uc788\ub3c4\ub85d \ubaa8\ub2c8\ud130\ub9c1 \uaddc\uce59\uc744 \ucd94\uac00\ud55c\ub2e4.<\/p>\n<pre><code># Prometheus AlertManager \uaddc\uce59 \uc608\uc2dc\n- alert: KubernetesJobFailed\n  expr: kube_job_status_failed > 0\n  for: 5m\n  labels:\n    severity: critical\n  annotations:\n    summary: \"Job {{ $labels.job_name }} \uc2e4\ud328\"<\/code><\/pre>\n<h3>GitLab \uc5c5\uadf8\ub808\uc774\ub4dc \uccb4\ud06c\ub9ac\uc2a4\ud2b8<\/h3>\n<ol>\n<li>\uacf5\uc2dd <a href=\"https:\/\/docs.gitlab.com\/ee\/update\/\">\uc5c5\uadf8\ub808\uc774\ub4dc \uacbd\ub85c<\/a> \ud655\uc778<\/li>\n<li>\uc2a4\ud14c\uc774\uc9d5 \ud658\uacbd\uc5d0\uc11c \uc5c5\uadf8\ub808\uc774\ub4dc \ud14c\uc2a4\ud2b8<\/li>\n<li>\uc5c5\uadf8\ub808\uc774\ub4dc \ud6c4 migration \uc2e4\ud328 \uc2dc \ub370\uc774\ud130 \uc815\ud569\uc131 \ud655\uc778<\/li>\n<li>\uc5c5\uadf8\ub808\uc774\ub4dc \uc804 DB \ubc31\uc5c5 \ud655\uc778<\/li>\n<li>ArgoCD sync \uc911 migration job \ub85c\uadf8 \uc2e4\uc2dc\uac04 \ubaa8\ub2c8\ud130\ub9c1<\/li>\n<\/ol>\n<hr>\n<h2>\ud83d\udcac \ub9c8\uce58\uba70<\/h2>\n<p>\uc774\ubc88 \uc7a5\uc560\uc758 \ud575\uc2ec \uad50\ud6c8\uc740 <strong>&#8220;\ub370\uc774\ud130 \uc815\ud569\uc131 \ubb38\uc81c\ub294 \uc5b8\uc81c\ub4e0 migration \uc2e4\ud328\ub85c \uc774\uc5b4\uc9c8 \uc218 \uc788\ub2e4&#8221;<\/strong>\ub294 \uc810\uc774\ub2e4.<\/p>\n<p>GitLab\ucc98\ub7fc \ubcf5\uc7a1\ud55c \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc740 \ubc84\uc804\uc774 \uc62c\ub77c\uac00\uba74\uc11c \uae30\uc874\uc5d0 \ud5c8\uc6a9\ub418\ub358 \ub370\uc774\ud130 \ud615\uc2dd\uc5d0 \ub354 \uc5c4\uaca9\ud55c \uc81c\uc57d\uc744 \ucd94\uac00\ud558\ub294 \uacbd\uc6b0\uac00 \uc788\ub2e4. \ud2b9\ud788 Kubernetes \ud658\uacbd\uc5d0\uc11c\ub294 \uc774\ub7ec\ud55c \uc2e4\ud328\uac00 init container\uc758 \ubb34\ud55c \ub8e8\ud504\ub85c \uc774\uc5b4\uc838 \uc99d\uc0c1\uc774 \ubcf5\uc7a1\ud574 \ubcf4\uc77c \uc218 \uc788\uc9c0\ub9cc, \uacb0\uad6d \uadfc\ubcf8 \uc6d0\uc778\uc740 \ub2e8\uc21c\ud55c NULL \ub370\uc774\ud130 1\uac74\uc774\uc5c8\ub2e4.<\/p>\n<p>Loki\uc640 \uac19\uc740 \ub85c\uadf8 \uc218\uc9d1 \ub3c4\uad6c\uac00 \uc788\uc5b4 migration pod\uc758 \uc815\ud655\ud55c \uc5d0\ub7ec \uba54\uc2dc\uc9c0\ub97c \ube60\ub974\uac8c \ud30c\uc545\ud560 \uc218 \uc788\uc5c8\uace0, ArgoCD\uc758 self-heal \uae30\ub2a5 \ub355\ubd84\uc5d0 job \uc7ac\uc0dd\uc131\uc744 \ubcc4\ub3c4\ub85c \ucc98\ub9ac\ud560 \ud544\uc694\uac00 \uc5c6\uc5c8\ub2e4. \uc140\ud504\ud638\uc2a4\ud305 GitLab\uc744 \uc6b4\uc601\ud55c\ub2e4\uba74 \uc5c5\uadf8\ub808\uc774\ub4dc \uc804 \ub370\uc774\ud130 \uc815\ud569\uc131 \uc810\uac80 \ub8e8\ud2f4\uc744 \uaf2d \ucd94\uac00\ud574\ub450\ub294 \uac8c \uc88b\ub2e4.<\/p>\n<hr>\n<h2>\ud83d\udcda \ucc38\uace0 \uc790\ub8cc<\/h2>\n<ul>\n<li><a href=\"https:\/\/docs.gitlab.com\/ee\/update\/\">GitLab \uacf5\uc2dd \uc5c5\uadf8\ub808\uc774\ub4dc \uac00\uc774\ub4dc<\/a><\/li>\n<li><a href=\"https:\/\/docs.gitlab.com\/charts\/\">GitLab Helm Chart \ubb38\uc11c<\/a><\/li>\n<li><a href=\"https:\/\/argo-cd.readthedocs.io\/en\/stable\/user-guide\/resource_hooks\/\">ArgoCD Resource Hooks<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/zalando\/postgres-operator\">Zalando PostgreSQL Operator<\/a><\/li>\n<li><a href=\"https:\/\/docs.gitlab.com\/ee\/update\/upgrading_from_source.html#checking-for-background-migrations-before-upgrading\">GitLab: Background Migrations \ud655\uc778 \ubc29\ubc95<\/a><\/li>\n<li><a href=\"https:\/\/kubernetes.io\/docs\/concepts\/workloads\/controllers\/job\/\">Kubernetes Jobs \uacf5\uc2dd \ubb38\uc11c<\/a><\/li>\n<\/ul>\n<p>\uc870\ud68c\uc218: 67<\/p>","protected":false},"excerpt":{"rendered":"<p>\ud83d\udccc \ud575\uc2ec \uc694\uc57d GitLab Helm chart\ub97c 9.8.0\uc5d0\uc11c 9.9.0 (\uc571 \ubc84\uc804 v18.8 \u2192 v18.9)\uc73c\ub85c \uc5c5\uadf8\ub808\uc774\ub4dc\ud558\ub294 \uacfc\uc815\uc5d0\uc11c DB migration job\uc774 \uc2e4\ud328\ud558\uace0, \uc0c8\ub85c \ubc30\ud3ec\ub41c sidekiq\/webservice pod\ub4e4\uc774 Init:CrashLoopBackOff \uc0c1\ud0dc\uc5d0 \ube60\uc9c0\ub294 \uc7a5\uc560\uac00 \ubc1c\uc0dd\ud588\ub2e4. \uadfc\ubcf8 \uc6d0\uc778\uc740 pool_repositories \ud14c\uc774\ube14\uc758 organization_id \uceec\ub7fc\uc5d0 NULL \uac12\uc774 \uc874\uc7ac\ud558\ub294 \ub370\uc774\ud130 \uc815\ud569\uc131 \ubb38\uc81c\uc600\ub2e4. v18.9\uc758 migration\uc774 \ud574\ub2f9 \uceec\ub7fc\uc5d0 NOT NULL \uc81c\uc57d\uc870\uac74\uc744 \ucd94\uac00\ud558\ub824\ub2e4 PG::CheckViolation \uc5d0\ub7ec\uac00 \ubc1c\uc0dd\ud588\ub2e4. \ud574\uacb0\ucc45: NULL \uac12\uc744 \uc62c\ubc14\ub978 [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[60],"tags":[],"class_list":["post-679","post","type-post","status-publish","format-standard","hentry","category-kubernetes"],"aioseo_notices":[],"jetpack_featured_media_url":"","jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/tech.softbell.net\/index.php?rest_route=\/wp\/v2\/posts\/679","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tech.softbell.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tech.softbell.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tech.softbell.net\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/tech.softbell.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=679"}],"version-history":[{"count":2,"href":"https:\/\/tech.softbell.net\/index.php?rest_route=\/wp\/v2\/posts\/679\/revisions"}],"predecessor-version":[{"id":694,"href":"https:\/\/tech.softbell.net\/index.php?rest_route=\/wp\/v2\/posts\/679\/revisions\/694"}],"wp:attachment":[{"href":"https:\/\/tech.softbell.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=679"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tech.softbell.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=679"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tech.softbell.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=679"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}