{"id":22,"date":"2024-03-28T07:10:12","date_gmt":"2024-03-28T07:10:12","guid":{"rendered":"https:\/\/infivit.com\/blog\/?p=22"},"modified":"2024-05-17T10:44:46","modified_gmt":"2024-05-17T10:44:46","slug":"gitops_workflow_with_argo_cd","status":"publish","type":"post","link":"https:\/\/infivit.com\/blog\/gitops_workflow_with_argo_cd\/","title":{"rendered":"GitOps Workflow with Argo CD"},"content":{"rendered":"\n<h3 class=\"wp-block-heading\"><strong>What is Argo CD and why should you use it for Kubernetes GitOps:<\/strong><\/h3>\n\n\n\n<p id=\"c0de\">Argo CD is a powerful and easy-to-use tool that&nbsp;<strong>facilitates<\/strong>&nbsp;the implementation of a GitOps workflow for your Kubernetes applications. GitOps is a paradigm that uses Git as the single source of truth for your infrastructure and application configuration. With GitOps, you can declaratively define the desired state of your Kubernetes cluster in a Git repository. Use a GitOps controller, such as Argo CD, to automatically sync and apply the changes from the repository to the cluster.<\/p>\n\n\n\n<p id=\"21b4\">Due to various advantages, Agro CD is the most popular continuous deployment tool for Kubernetes. Some of these advantages are:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>It supports various types of Kubernetes manifests, such as YAML files, Helm charts, Kustomize applications, or Jsonnet files.<\/li>\n\n\n\n<li>With Agro CD, you can effortlessly manage and monitor your application on Kubernetes by using a web UI and a CLI.<\/li>\n\n\n\n<li>It integrates with popular Git platforms, such as GitHub, GitLab, or Bitbucket, and supports webhook notifications for triggering syncs.<\/li>\n\n\n\n<li>It has an App of Apps pattern that enables you to bootstrap and manage multiple Argo CD applications from a single Git repository. This way, you can avoid creating each application manually and leverage the features of Git, such as version control, branching, merging, and pull requests, to manage your applications.<\/li>\n<\/ul>\n\n\n\n<p id=\"e102\">In this article, you will learn how to use Argo CD to create and deploy a simple Kubernetes application using a GitOps workflow. You will also learn how to use the App of Apps pattern to create and manage multiple Argo CD applications from a single Git repository. By the end of this article, you will better understand the benefits and best practices of GitOps with Argo CD.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Requirements<\/strong>: <\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A Kubernetes cluster. This article is based on&nbsp;<strong>kind<\/strong>, but any K8s cluster will do; Minikube, EKS, AKS, etc.<\/li>\n\n\n\n<li>A Git repository with a dedicated folder that contains Kubernetes manifest files. Argo CD looks at Kubernetes manifest files to maintain the desired state.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Steps to follow<\/strong>:<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>1. Creating Local Kubernetes Cluster:<\/strong><\/h4>\n\n\n\n<p><a href=\"https:\/\/sigs.k8s.io\/kind\" target=\"_blank\" rel=\"noreferrer noopener\">kind<\/a>&nbsp;is a tool for running local Kubernetes clusters using Docker container \u201cnodes\u201d. To initiate a kind cluster first we need docker installed. You can follow this link if you don\u2019t have a running docker.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Install kind binary:<\/strong><\/h4>\n\n\n\n<h5 class=\"wp-block-heading\"><strong>On Linux:<\/strong><\/h5>\n\n\n\n<pre class=\"wp-block-code\"><code>\ncurl -Lo .\/kind https:\/\/kind.sigs.k8s.io\/dl\/v0.11.1\/kind-linux-amd64\nchmod +x .\/kind\nmv .\/kind \/some-dir-in-your-PATH\/kind brew install kind<\/code><\/pre>\n\n\n\n<h5 class=\"wp-block-heading\"><strong>On Mac (homebrew):<\/strong><\/h5>\n\n\n\n<pre class=\"wp-block-code\"><code>\nbrew install kind<\/code><\/pre>\n\n\n\n<h5 class=\"wp-block-heading\"><strong>On Windows:<\/strong><\/h5>\n\n\n\n<pre class=\"wp-block-code\"><code>curl.exe -Lo kind-windows-amd64.exe https:\/\/kind.sigs.k8s.io\/dl\/v0.11.1\/kind-windows-amd64\nMove-Item .\\kind-windows-amd64.exe c:\\some-dir-in-your-PATH\\kind.exe<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Create a local Kubernetes Cluster:<\/strong><\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>$ kind create cluster --name kind\nCreating cluster \u201ckind\u201d \u2026\n\u2713 Ensuring node image (kindest\/node:v1.21.1) \ud83d\uddbc\n\u2713 Preparing nodes \ud83d\udce6\n\u2713 Writing configuration \ud83d\udcdc\n\u2713 Starting control-plane \ud83d\udd79\ufe0f\n\u2713 Installing CNI \ud83d\udd0c\n\u2713 Installing StorageClass \ud83d\udcbe\nSet kubectl context to \u201ckind-my-cluster\u201d\nYou can now use your cluster with:\nkubectl cluster-info \u2014 context kind\nThanks for using kind! \ud83d\ude0a<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Check the cluster is running and healthy.<\/strong><\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>$ kubectl cluster-info \u2014 context kind\nKubernetes control plane is running at https:\/\/127.0.0.1:57338\nCoreDNS is running at https:\/\/127.0.0.1:57338\/api\/v1\/namespaces\/kube-system\/services\/kube-dns:dns\/proxy\nTo further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>2. Install Argo In Your Cluster:<\/strong><\/h4>\n\n\n\n<p>Next, install Argo in your Kubernetes cluster. This will deploy a bunch of Kubernetes resources inside&nbsp;<code>argocd&nbsp;<\/code>namespace.<br>Create this namespace if it\u2019s not created.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kubectl apply -n argocd -f https:\/\/raw.githubusercontent.com\/argoproj\/argo-cd\/stable\/manifests\/install.yaml<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img fetchpriority=\"high\" decoding=\"async\" width=\"720\" height=\"417\" data-id=\"25\" src=\"https:\/\/infivit.com\/blog\/wp-content\/uploads\/2nd-image.webp\" alt=\"\" class=\"wp-image-25\" srcset=\"https:\/\/infivit.com\/blog\/wp-content\/uploads\/2nd-image.webp 720w, https:\/\/infivit.com\/blog\/wp-content\/uploads\/2nd-image-300x174.webp 300w\" sizes=\"(max-width: 720px) 100vw, 720px\" \/><\/figure>\n<\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>3. Install Argo In Your Cluster:<\/strong><\/h4>\n\n\n\n<p>The Argo CD UI is served by&nbsp;<code>argocd-server<\/code>&nbsp;service. By default,&nbsp;<code>argocd-server<\/code>&nbsp;is of type&nbsp;<code>ClusterIP<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>tushardighe@Tushars-MacBook-Pro ~ % k get svc -n argocd\nNAME                                      TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE\nargocd-applicationset-controller          ClusterIP   10.96.53.32     &lt;none&gt;        7000\/TCP,8080\/TCP            19d\nargocd-dex-server                         ClusterIP   10.96.65.54     &lt;none&gt;        5556\/TCP,5557\/TCP,5558\/TCP   19d\nargocd-metrics                            ClusterIP   10.96.12.67     &lt;none&gt;        8082\/TCP                     19d\nargocd-notifications-controller-metrics   ClusterIP   10.96.220.199   &lt;none&gt;        9001\/TCP                     19d\nargocd-redis                              ClusterIP   10.96.152.139   &lt;none&gt;        6379\/TCP                     19d\nargocd-repo-server                        ClusterIP   10.96.89.128    &lt;none&gt;        8081\/TCP,8084\/TCP            19d\nargocd-server                             ClusterIP   10.96.156.70    &lt;none&gt;        80\/TCP,443\/TCP               19d\nargocd-server-metrics                     ClusterIP   10.96.50.166    &lt;none&gt;        8083\/TCP                     19d<\/code><\/pre>\n\n\n\n<p>You have multiple options to access the UI. The easiest way to access the UI on macOS is by forwarding the Argo CD server HTTPS port 443 to a different port.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>tushardighe@Tushars-MacBook-Pro ~ % kubectl port-forward -n argocd service\/argocd-server 8080:443\nForwarding from 127.0.0.1:8080 -&gt; 8080\nForwarding from &#91;::1]:8080 -&gt; 8080\nHandling connection for 8080\nHandling connection for 8080<\/code><\/pre>\n\n\n\n<p id=\"dd2d\"><strong><em>As you can see above, I port-forwarded the service to 8080.<\/em><\/strong><\/p>\n\n\n\n<p id=\"a7a4\">Of course, you can edit the service &amp; change it to&nbsp;<strong>NodePort<\/strong>&nbsp;or you can also access the UI via&nbsp;<strong>Ingress<\/strong>.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>4. Get the password required for accessing the dashboard login<\/strong>:<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath=\"{.data.password}\" | base64 -d &amp;&amp; echo<\/code><\/pre>\n\n\n\n<p id=\"e4e2\">Once you\u2019re in, head straight to the User Info item in the left sidebar, then click the \u201cUpdate Password\u201d button at the top of the screen. Follow the prompts to change your password to something unique.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"720\" height=\"175\" src=\"https:\/\/infivit.com\/blog\/wp-content\/uploads\/3rd-image.webp\" alt=\"\" class=\"wp-image-26\" srcset=\"https:\/\/infivit.com\/blog\/wp-content\/uploads\/3rd-image.webp 720w, https:\/\/infivit.com\/blog\/wp-content\/uploads\/3rd-image-300x73.webp 300w\" sizes=\"(max-width: 720px) 100vw, 720px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>5. Login to the ArgoCD dashboard:<\/strong><\/h4>\n\n\n\n<p>Navigate to&nbsp;<a href=\"https:\/\/localhost:8443\/\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/localhost:8080\/<\/a>&nbsp;if you forwarded the port to 8080 or if you specified any other port\/NodePort then use that one.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" width=\"720\" height=\"436\" src=\"https:\/\/infivit.com\/blog\/wp-content\/uploads\/4th-image.webp\" alt=\"\" class=\"wp-image-27\" style=\"width:820px;height:auto\" srcset=\"https:\/\/infivit.com\/blog\/wp-content\/uploads\/4th-image.webp 720w, https:\/\/infivit.com\/blog\/wp-content\/uploads\/4th-image-300x182.webp 300w\" sizes=\"(max-width: 720px) 100vw, 720px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>The default username is&nbsp;<strong>admin<\/strong>. Login using the password you obtained in the last step.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>6. Create a new Application in Argo CD:<\/strong><\/h4>\n\n\n\n<p>Click the&nbsp;<strong>CREATE APPLICATION<\/strong>&nbsp;button.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"720\" height=\"362\" src=\"https:\/\/infivit.com\/blog\/wp-content\/uploads\/5th-image.webp\" alt=\"\" class=\"wp-image-28\" style=\"width:820px;height:auto\" srcset=\"https:\/\/infivit.com\/blog\/wp-content\/uploads\/5th-image.webp 720w, https:\/\/infivit.com\/blog\/wp-content\/uploads\/5th-image-300x151.webp 300w\" sizes=\"(max-width: 720px) 100vw, 720px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p id=\"d64f\">Fill out the details. Remember that the&nbsp;<strong>Application Name<\/strong>&nbsp;should be valid and conform to Kubernetes nomenclature. It means the name should not contain any capital letters or spaces.<\/p>\n\n\n\n<p id=\"a401\">Leave&nbsp;<strong>Project Name<\/strong>&nbsp;to default &amp; also leave other settings as it is.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"720\" height=\"424\" src=\"https:\/\/infivit.com\/blog\/wp-content\/uploads\/6th-image.webp\" alt=\"\" class=\"wp-image-29\" srcset=\"https:\/\/infivit.com\/blog\/wp-content\/uploads\/6th-image.webp 720w, https:\/\/infivit.com\/blog\/wp-content\/uploads\/6th-image-300x177.webp 300w\" sizes=\"(max-width: 720px) 100vw, 720px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"720\" height=\"432\" src=\"https:\/\/infivit.com\/blog\/wp-content\/uploads\/7th-image.webp\" alt=\"\" class=\"wp-image-30\" srcset=\"https:\/\/infivit.com\/blog\/wp-content\/uploads\/7th-image.webp 720w, https:\/\/infivit.com\/blog\/wp-content\/uploads\/7th-image-300x180.webp 300w\" sizes=\"(max-width: 720px) 100vw, 720px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p id=\"7052\">Under&nbsp;<strong>SOURCE<\/strong>, enter the Git repo. The Path is important. This path is the folder inside your Git repo where Kubernetes manifest files are present.<\/p>\n\n\n\n<p id=\"4212\">To follow this tutorial, please use my GitHub repo&nbsp;<a href=\"https:\/\/github.com\/dighetushar654\/spark.git\" rel=\"noreferrer noopener\" target=\"_blank\">https:\/\/github.com\/dighetushar654\/spark.git<\/a>&nbsp;It has a folder called&nbsp;<code>argocd<\/code>&nbsp;where I have put my Kubernetes deployment &amp; service manifest files.<\/p>\n\n\n\n<p id=\"641a\">Under&nbsp;<strong>DESTINATION<\/strong>, use&nbsp;<a href=\"https:\/\/kubernetes.default.svc\/\" rel=\"noreferrer noopener\" target=\"_blank\">https:\/\/kubernetes.default.svc<\/a>&nbsp;as the&nbsp;<strong>Cluster URL<\/strong>. Under&nbsp;<strong>Namespace<\/strong>, type in the name of any namespace where you want Argo CD to deploy your application.<\/p>\n\n\n\n<p id=\"b7ba\">Once the details have been filled in, press the&nbsp;<strong>CREATE<\/strong>&nbsp;button.<\/p>\n\n\n\n<p id=\"5ebc\">After creating the application, it should be visible as a tile. Below is what a tile looks like.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"720\" height=\"423\" src=\"https:\/\/infivit.com\/blog\/wp-content\/uploads\/8th-image.webp\" alt=\"\" class=\"wp-image-31\" srcset=\"https:\/\/infivit.com\/blog\/wp-content\/uploads\/8th-image.webp 720w, https:\/\/infivit.com\/blog\/wp-content\/uploads\/8th-image-300x176.webp 300w\" sizes=\"(max-width: 720px) 100vw, 720px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>You can see that Argo CD has deployed the application.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"720\" height=\"217\" src=\"https:\/\/infivit.com\/blog\/wp-content\/uploads\/9th-image.webp\" alt=\"\" class=\"wp-image-32\" srcset=\"https:\/\/infivit.com\/blog\/wp-content\/uploads\/9th-image.webp 720w, https:\/\/infivit.com\/blog\/wp-content\/uploads\/9th-image-300x90.webp 300w\" sizes=\"(max-width: 720px) 100vw, 720px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>In my Spark application, I\u2019ve implemented a simple HelloWorld Scala application. So, to verify whether the application is running or not, we can check the logs of the application pod.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"720\" height=\"259\" src=\"https:\/\/infivit.com\/blog\/wp-content\/uploads\/10-th-image.webp\" alt=\"\" class=\"wp-image-33\" srcset=\"https:\/\/infivit.com\/blog\/wp-content\/uploads\/10-th-image.webp 720w, https:\/\/infivit.com\/blog\/wp-content\/uploads\/10-th-image-300x108.webp 300w\" sizes=\"(max-width: 720px) 100vw, 720px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>The application is running successfully.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>7. Update the application &amp; deploy automatically via Argo CD:<\/strong><\/h4>\n\n\n\n<p id=\"f4e0\">Now, let\u2019s update our app. Here\u2019s what I did:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Edited the&nbsp;<strong><em>HelloWorldSpark.scala<\/em><\/strong>&nbsp;file in my application to change the message on the logs.<\/li>\n\n\n\n<li>Utilized a GitHub workflow to build the new Docker image and pushed it to the Docker Registry.<\/li>\n\n\n\n<li>Modified the argocd\/deployment.yml file, changing the Docker image tag to reflect the latest version.<\/li>\n<\/ol>\n\n\n\n<p id=\"78cf\">We have enabled Autosync, and Argo CD ensures that the application\u2019s intended state is aligned with the actual state on the Kubernetes cluster. If we make any changes to the files that describe our application, Argocd will automatically put those changes into action on our Kubernetes cluster.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"720\" height=\"432\" src=\"https:\/\/infivit.com\/blog\/wp-content\/uploads\/11th-image.webp\" alt=\"\" class=\"wp-image-34\" srcset=\"https:\/\/infivit.com\/blog\/wp-content\/uploads\/11th-image.webp 720w, https:\/\/infivit.com\/blog\/wp-content\/uploads\/11th-image-300x180.webp 300w\" sizes=\"(max-width: 720px) 100vw, 720px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>You can see that the latest version of the application has been deployed without any issues, and the application\u2019s logs confirm this.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"720\" height=\"184\" src=\"https:\/\/infivit.com\/blog\/wp-content\/uploads\/12th-image.webp\" alt=\"\" class=\"wp-image-35\" srcset=\"https:\/\/infivit.com\/blog\/wp-content\/uploads\/12th-image.webp 720w, https:\/\/infivit.com\/blog\/wp-content\/uploads\/12th-image-300x77.webp 300w\" sizes=\"(max-width: 720px) 100vw, 720px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>That\u2019s fantastic! We\u2019ve successfully installed Argo CD on our Kubernetes cluster and set it up to deploy applications automatically.<\/p>\n\n\n<div class=\"wp-block-post-author\"><div class=\"wp-block-post-author__avatar\"><img alt='' src='https:\/\/secure.gravatar.com\/avatar\/a1680104299b59456f18004186a3f122387b47ed20ee54512bca33d40352ec11?s=48&#038;d=mm&#038;r=g' srcset='https:\/\/secure.gravatar.com\/avatar\/a1680104299b59456f18004186a3f122387b47ed20ee54512bca33d40352ec11?s=96&#038;d=mm&#038;r=g 2x' class='avatar avatar-48 photo' height='48' width='48' \/><\/div><div class=\"wp-block-post-author__content\"><p class=\"wp-block-post-author__name\">Tushar D<\/p><\/div><\/div>\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>What is Argo CD and why should you use it for Kubernetes GitOps: Argo CD is a powerful and easy-to-use tool that&nbsp;facilitates&nbsp;the implementation of a GitOps workflow for your Kubernetes applications. GitOps is a paradigm that uses Git as the single source of truth for your infrastructure and application configuration. With GitOps, you can declaratively &#8230; <a title=\"GitOps Workflow with Argo CD\" class=\"read-more\" href=\"https:\/\/infivit.com\/blog\/gitops_workflow_with_argo_cd\/\" aria-label=\"Read more about GitOps Workflow with Argo CD\">Read more<\/a><\/p>\n","protected":false},"author":2,"featured_media":24,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-22","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/infivit.com\/blog\/wp-json\/wp\/v2\/posts\/22","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/infivit.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/infivit.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/infivit.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/infivit.com\/blog\/wp-json\/wp\/v2\/comments?post=22"}],"version-history":[{"count":6,"href":"https:\/\/infivit.com\/blog\/wp-json\/wp\/v2\/posts\/22\/revisions"}],"predecessor-version":[{"id":111,"href":"https:\/\/infivit.com\/blog\/wp-json\/wp\/v2\/posts\/22\/revisions\/111"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/infivit.com\/blog\/wp-json\/wp\/v2\/media\/24"}],"wp:attachment":[{"href":"https:\/\/infivit.com\/blog\/wp-json\/wp\/v2\/media?parent=22"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/infivit.com\/blog\/wp-json\/wp\/v2\/categories?post=22"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/infivit.com\/blog\/wp-json\/wp\/v2\/tags?post=22"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}