{"id":304,"date":"2023-03-09T11:31:28","date_gmt":"2023-03-09T10:31:28","guid":{"rendered":"https:\/\/pierre.porcheret.org\/?p=304"},"modified":"2023-08-21T15:53:29","modified_gmt":"2023-08-21T13:53:29","slug":"basic-kubernetes-usage","status":"publish","type":"post","link":"https:\/\/pierre.porcheret.org\/en\/computer\/304\/","title":{"rendered":"Basic Kubernetes usage"},"content":{"rendered":"<p><a href=\"\/en\/.\/info\/285\/\">Please read the Kubernetes installation if needed<\/a><\/p>\n\n\n\n<p>How kubernetes works ?<\/p>\n\n\n\n<p>Kubernetes will first need a Namespace where we will push pods (containers).<\/p>\n\n\n\n<p>Here, for example, we will create a Namespace called \u00ab\u00a0webserver\u00a0\u00bb where we will run nginx pods.<\/p>\n\n\n\n<p>The workflow will consist of create a Namespace (If no Namespace is defined, it will use a \u00ab\u00a0default\u00a0\u00bb one), deploy a Pod image with an image (here nginx) and expose them in the kubernetes cluster.<\/p>\n\n\n\n<p>All will be done on Master Node<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Namespace configuration<\/h2>\n\n\n\n<p>To create the Namespace, just do :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kubectl create namespace webwerver<\/code><\/pre>\n\n\n\n<p>Most of the time, you can also use shorter commands in kubernetes, for example here<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kubectl create ns webserver<\/code><\/pre>\n\n\n\n<p>Note that this Namespace&rsquo;s name must be in lowercase <\/p>\n\n\n\n<p>You can delete Namespace using <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kubectl delete namespace webserver<\/code><\/pre>\n\n\n\n<p>To view your Namespace use :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kubectl get namespaces<\/code><\/pre>\n\n\n\n<p>You will see all the current namespace created and network namespace if you use for example Calico.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Deployement and services<\/h2>\n\n\n\n<p>You must create a deployment and services in order to push them in pods.<\/p>\n\n\n\n<p>For that, you have many ways to do this.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Using only commands :<\/h3>\n\n\n\n<p>Create the deployment :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kubectl create deployment nginx --image=nginx -n webserver<\/code><\/pre>\n\n\n\n<p>Create the associate service:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kubectl create service nodeport nginx --tcp=80:80 -n webserver<\/code><\/pre>\n\n\n\n<p>Or better,<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Use an YAML file <\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apiVersion: apps\/v1<br>kind: Deployment<br>metadata:<br>    name: nginx<br>spec:<br>   selector:<br>      matchLabels:<br>         app: nginx<br>   replicas: 2<br>   template:<br>      metadata:<br>          labels:<br>             app: nginx<br>          spec:<br>            containers:<br>              - name: nginx<br>                 image: nginx:stable<br>                 ports:<br>                    - containerPort: 80<\/code><\/pre>\n\n\n\n<p>Here we have :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>kind: type of file (here deployment)<\/li>\n\n\n\n<li>replicas: number of desired pods (here 2)<\/li>\n\n\n\n<li>image: Image&rsquo;s name<\/li>\n\n\n\n<li>containerPort: exposed port (here the host port will be set automatically)<\/li>\n<\/ul>\n\n\n\n<p>You can then apply your YAML file in your Namespace using :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kubectl apply -f nginx.yaml -n webserver<\/code><\/pre>\n\n\n\n<p>Of course, change the YAML file&rsquo;s name according to your file.<\/p>\n\n\n\n<p>I prefer this method with YAML file because if you have to rebuild your application, you will just have to run the YAML file again, and you don&rsquo;t have to remember the parameters you used. It also provides the deployment specification and services in one shot.<\/p>\n\n\n\n<p>Once you ran your deployment, you can, as the Namespace, check or delete them :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kubectl get deployments -n webserver<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>kubectl delete deployments nginx -n webserver<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Expose you deployment \/ service<\/h2>\n\n\n\n<p>You have now created your application with the configuration (port, number of pods, image)<\/p>\n\n\n\n<p>You can now push and activate them (expose them)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kubectl expose deployment nginx --type=NodePort -n webserver<\/code><\/pre>\n\n\n\n<p>It will create the number of \u00ab\u00a0replica\u00a0\u00bb pods in your kubernetes cluster and expose the specified port.<\/p>\n\n\n\n<p>You can check this service and get the host port:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kubectl get service nginx -n webserver<\/code><\/pre>\n\n\n\n<p>You should have an output like :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\nnginx NodePort 10.101.82.65 80:3272\/TCP 26s<\/code><\/pre>\n\n\n\n<p>Here, we have the service nginx listening on port 80 internally and expose to the port 3272 in host.<\/p>\n\n\n\n<p>You can also have more info using this command:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kubectl describe service nginx -n webserver<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Patches, Scale and other commands<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Patching<\/h3>\n\n\n\n<p>Patch can be used to change on the fly, for example, the host port if you want to specify a new one :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kubectl patch service nginx -n webserver --type='json' --patch='&#91;{\"op\": \"replace\", \"path\": \"\/spec\/ports\/0\/nodePort\", \"value\":31001}]'<\/code><\/pre>\n\n\n\n<p>For example, here, we force the service nginx to get the host port 31001 instead of the previous 3272.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Scale<\/h3>\n\n\n\n<p>Scale is used to increase the desire replica (or pods) or to unexposed them:<\/p>\n\n\n\n<p>kubectl scale deployment nginx -n webserver &#8211;replicas=3<\/p>\n\n\n\n<p>kubectl scale deployment nginx -n webserver &#8211;replicas=0<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Endpoints (describe)<\/h3>\n\n\n\n<p>Ok you create pods&#8230;but you may want to know where they are no ? You can for that use the previous describe command:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kubectl describe service nginx -n webserver | grep \"Endpoints\"<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Point to take care<\/h2>\n\n\n\n<p>The common error is to forget to add the Namespace if you use one, just check if you specify it in all your commands :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;command&gt; -n namespce<\/code><\/pre>\n\n\n\n<p>Don&rsquo;t forget to check at each step what you did before doing the next step <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kubectk get &lt;pods,deploymenets,services....&gt;<\/code><\/pre>\n\n\n\n<p><\/p>","protected":false},"excerpt":{"rendered":"<p>Please read the Kubernetes installation if needed How kubernetes works ? Kubernetes will first need a Namespace where we will push pods (containers). Here, for example, we will create a Namespace called \u00ab\u00a0webserver\u00a0\u00bb where we will run nginx pods. The workflow will consist of create a Namespace (If no Namespace [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":289,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"two_page_speed":null,"footnotes":""},"categories":[8,41,9],"tags":[42,43,28],"class_list":["post-304","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-computer","category-devops","category-linux","tag-bases","tag-devops","tag-kubernetes"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Basic Kubernetes usage -<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/pierre.porcheret.org\/en\/computer\/304\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Basic Kubernetes usage -\" \/>\n<meta property=\"og:description\" content=\"Please read the Kubernetes installation if needed How kubernetes works ? Kubernetes will first need a Namespace where we will push pods (containers). Here, for example, we will create a Namespace called \u00ab\u00a0webserver\u00a0\u00bb where we will run nginx pods. The workflow will consist of create a Namespace (If no Namespace [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/pierre.porcheret.org\/en\/computer\/304\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-03-09T10:31:28+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-21T13:53:29+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/pierre.porcheret.org\/wp-content\/uploads\/2023\/03\/kub.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"800\" \/>\n\t<meta property=\"og:image:height\" content=\"342\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"pporcheret\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"pporcheret\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/pierre.porcheret.org\\\/computer\\\/304\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/pierre.porcheret.org\\\/computer\\\/304\\\/\"},\"author\":{\"name\":\"pporcheret\",\"@id\":\"https:\\\/\\\/pierre.porcheret.org\\\/#\\\/schema\\\/person\\\/7cf1070cb05adff1e5b95c7ca9b0dd52\"},\"headline\":\"Basic Kubernetes usage\",\"datePublished\":\"2023-03-09T10:31:28+00:00\",\"dateModified\":\"2023-08-21T13:53:29+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/pierre.porcheret.org\\\/computer\\\/304\\\/\"},\"wordCount\":528,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/pierre.porcheret.org\\\/computer\\\/304\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/pierre.porcheret.org\\\/wp-content\\\/uploads\\\/2023\\\/03\\\/kub.jpeg\",\"keywords\":[\"Bases\",\"DevOps\",\"Kubernetes\"],\"articleSection\":[\"Computer\",\"DevOps\",\"Linux\"],\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/pierre.porcheret.org\\\/computer\\\/304\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/pierre.porcheret.org\\\/computer\\\/304\\\/\",\"url\":\"https:\\\/\\\/pierre.porcheret.org\\\/computer\\\/304\\\/\",\"name\":\"Basic Kubernetes usage -\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/pierre.porcheret.org\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/pierre.porcheret.org\\\/computer\\\/304\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/pierre.porcheret.org\\\/computer\\\/304\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/pierre.porcheret.org\\\/wp-content\\\/uploads\\\/2023\\\/03\\\/kub.jpeg\",\"datePublished\":\"2023-03-09T10:31:28+00:00\",\"dateModified\":\"2023-08-21T13:53:29+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/pierre.porcheret.org\\\/#\\\/schema\\\/person\\\/7cf1070cb05adff1e5b95c7ca9b0dd52\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/pierre.porcheret.org\\\/computer\\\/304\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/pierre.porcheret.org\\\/computer\\\/304\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/pierre.porcheret.org\\\/computer\\\/304\\\/#primaryimage\",\"url\":\"https:\\\/\\\/pierre.porcheret.org\\\/wp-content\\\/uploads\\\/2023\\\/03\\\/kub.jpeg\",\"contentUrl\":\"https:\\\/\\\/pierre.porcheret.org\\\/wp-content\\\/uploads\\\/2023\\\/03\\\/kub.jpeg\",\"width\":800,\"height\":342},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/pierre.porcheret.org\\\/computer\\\/304\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/pierre.porcheret.org\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Basic Kubernetes usage\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/pierre.porcheret.org\\\/#website\",\"url\":\"https:\\\/\\\/pierre.porcheret.org\\\/\",\"name\":\"\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/pierre.porcheret.org\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/pierre.porcheret.org\\\/#\\\/schema\\\/person\\\/7cf1070cb05adff1e5b95c7ca9b0dd52\",\"name\":\"pporcheret\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/04949048b44501d434ac6a78cb6790e936aef0a9dce8f0cfcfd1cd9926f1ffb7?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/04949048b44501d434ac6a78cb6790e936aef0a9dce8f0cfcfd1cd9926f1ffb7?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/04949048b44501d434ac6a78cb6790e936aef0a9dce8f0cfcfd1cd9926f1ffb7?s=96&d=mm&r=g\",\"caption\":\"pporcheret\"},\"sameAs\":[\"https:\\\/\\\/pierre2.porcheret.org\"],\"url\":\"https:\\\/\\\/pierre.porcheret.org\\\/en\\\/author\\\/pporcheret\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Basic Kubernetes usage -","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/pierre.porcheret.org\/en\/computer\/304\/","og_locale":"en_GB","og_type":"article","og_title":"Basic Kubernetes usage -","og_description":"Please read the Kubernetes installation if needed How kubernetes works ? Kubernetes will first need a Namespace where we will push pods (containers). Here, for example, we will create a Namespace called \u00ab\u00a0webserver\u00a0\u00bb where we will run nginx pods. The workflow will consist of create a Namespace (If no Namespace [&hellip;]","og_url":"https:\/\/pierre.porcheret.org\/en\/computer\/304\/","article_published_time":"2023-03-09T10:31:28+00:00","article_modified_time":"2023-08-21T13:53:29+00:00","og_image":[{"width":800,"height":342,"url":"https:\/\/pierre.porcheret.org\/wp-content\/uploads\/2023\/03\/kub.jpeg","type":"image\/jpeg"}],"author":"pporcheret","twitter_card":"summary_large_image","twitter_misc":{"Written by":"pporcheret","Estimated reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/pierre.porcheret.org\/computer\/304\/#article","isPartOf":{"@id":"https:\/\/pierre.porcheret.org\/computer\/304\/"},"author":{"name":"pporcheret","@id":"https:\/\/pierre.porcheret.org\/#\/schema\/person\/7cf1070cb05adff1e5b95c7ca9b0dd52"},"headline":"Basic Kubernetes usage","datePublished":"2023-03-09T10:31:28+00:00","dateModified":"2023-08-21T13:53:29+00:00","mainEntityOfPage":{"@id":"https:\/\/pierre.porcheret.org\/computer\/304\/"},"wordCount":528,"commentCount":0,"image":{"@id":"https:\/\/pierre.porcheret.org\/computer\/304\/#primaryimage"},"thumbnailUrl":"https:\/\/pierre.porcheret.org\/wp-content\/uploads\/2023\/03\/kub.jpeg","keywords":["Bases","DevOps","Kubernetes"],"articleSection":["Computer","DevOps","Linux"],"inLanguage":"en-GB","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/pierre.porcheret.org\/computer\/304\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/pierre.porcheret.org\/computer\/304\/","url":"https:\/\/pierre.porcheret.org\/computer\/304\/","name":"Basic Kubernetes usage -","isPartOf":{"@id":"https:\/\/pierre.porcheret.org\/#website"},"primaryImageOfPage":{"@id":"https:\/\/pierre.porcheret.org\/computer\/304\/#primaryimage"},"image":{"@id":"https:\/\/pierre.porcheret.org\/computer\/304\/#primaryimage"},"thumbnailUrl":"https:\/\/pierre.porcheret.org\/wp-content\/uploads\/2023\/03\/kub.jpeg","datePublished":"2023-03-09T10:31:28+00:00","dateModified":"2023-08-21T13:53:29+00:00","author":{"@id":"https:\/\/pierre.porcheret.org\/#\/schema\/person\/7cf1070cb05adff1e5b95c7ca9b0dd52"},"breadcrumb":{"@id":"https:\/\/pierre.porcheret.org\/computer\/304\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/pierre.porcheret.org\/computer\/304\/"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/pierre.porcheret.org\/computer\/304\/#primaryimage","url":"https:\/\/pierre.porcheret.org\/wp-content\/uploads\/2023\/03\/kub.jpeg","contentUrl":"https:\/\/pierre.porcheret.org\/wp-content\/uploads\/2023\/03\/kub.jpeg","width":800,"height":342},{"@type":"BreadcrumbList","@id":"https:\/\/pierre.porcheret.org\/computer\/304\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/pierre.porcheret.org\/"},{"@type":"ListItem","position":2,"name":"Basic Kubernetes usage"}]},{"@type":"WebSite","@id":"https:\/\/pierre.porcheret.org\/#website","url":"https:\/\/pierre.porcheret.org\/","name":"","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/pierre.porcheret.org\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Person","@id":"https:\/\/pierre.porcheret.org\/#\/schema\/person\/7cf1070cb05adff1e5b95c7ca9b0dd52","name":"pporcheret","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/secure.gravatar.com\/avatar\/04949048b44501d434ac6a78cb6790e936aef0a9dce8f0cfcfd1cd9926f1ffb7?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/04949048b44501d434ac6a78cb6790e936aef0a9dce8f0cfcfd1cd9926f1ffb7?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/04949048b44501d434ac6a78cb6790e936aef0a9dce8f0cfcfd1cd9926f1ffb7?s=96&d=mm&r=g","caption":"pporcheret"},"sameAs":["https:\/\/pierre2.porcheret.org"],"url":"https:\/\/pierre.porcheret.org\/en\/author\/pporcheret\/"}]}},"_links":{"self":[{"href":"https:\/\/pierre.porcheret.org\/en\/wp-json\/wp\/v2\/posts\/304","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pierre.porcheret.org\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pierre.porcheret.org\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pierre.porcheret.org\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/pierre.porcheret.org\/en\/wp-json\/wp\/v2\/comments?post=304"}],"version-history":[{"count":12,"href":"https:\/\/pierre.porcheret.org\/en\/wp-json\/wp\/v2\/posts\/304\/revisions"}],"predecessor-version":[{"id":385,"href":"https:\/\/pierre.porcheret.org\/en\/wp-json\/wp\/v2\/posts\/304\/revisions\/385"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/pierre.porcheret.org\/en\/wp-json\/wp\/v2\/media\/289"}],"wp:attachment":[{"href":"https:\/\/pierre.porcheret.org\/en\/wp-json\/wp\/v2\/media?parent=304"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pierre.porcheret.org\/en\/wp-json\/wp\/v2\/categories?post=304"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pierre.porcheret.org\/en\/wp-json\/wp\/v2\/tags?post=304"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}