{"id":4026,"date":"2024-04-23T14:01:13","date_gmt":"2024-04-23T14:01:13","guid":{"rendered":"https:\/\/code2deploy.com\/blog\/?p=4026"},"modified":"2024-04-23T14:01:14","modified_gmt":"2024-04-23T14:01:14","slug":"statefulsets","status":"publish","type":"post","link":"https:\/\/code2deploy.com\/blog\/statefulsets\/","title":{"rendered":"StatefulSets"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">StatefulSets in Kubernetes provide a unique and robust solution for managing stateful applications. They offer a set of Pods with distinct identities and stable hostnames, ensuring stable network identifiers, persistent storage, and ordered deployment and scaling. Let&#8217;s dive deeper into understanding StatefulSets and how to effectively manage them.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>What are StatefulSets?<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">StatefulSets are ideal for applications that require:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Stable, unique network identifiers<\/li>\n\n\n\n<li>Stable, persistent storage<\/li>\n\n\n\n<li>Ordered, graceful deployment and scaling<\/li>\n\n\n\n<li>Ordered, graceful deletion and termination<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">However, if your application doesn&#8217;t necessitate stable identifiers or ordered lifecycle management, other controllers like Deployments or ReplicaSets might be more suitable.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Components of a StatefulSet:<\/strong><\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Headless Service:<\/strong> Responsible for managing the network identity of the Pods.<\/li>\n\n\n\n<li><strong>StatefulSet: <\/strong>Defines the desired state for the Pods.<\/li>\n\n\n\n<li><strong>PersistentVolume:<\/strong> Provides persistent storage for the Pods.<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image\"><img data-dominant-color=\"e1e8ea\" data-has-transparency=\"true\" style=\"--dominant-color: #e1e8ea;\" loading=\"lazy\" decoding=\"async\" width=\"960\" height=\"720\" sizes=\"auto, (max-width: 960px) 100vw, 960px\" src=\"https:\/\/code2deploy.com\/blog\/wp-content\/uploads\/2024\/04\/image-2.png\" alt=\"\" class=\"wp-image-4027 has-transparency\" srcset=\"https:\/\/code2deploy.com\/blog\/wp-content\/uploads\/2024\/04\/image-2.png 960w, https:\/\/code2deploy.com\/blog\/wp-content\/uploads\/2024\/04\/image-2-300x225.png 300w, https:\/\/code2deploy.com\/blog\/wp-content\/uploads\/2024\/04\/image-2-768x576.png 768w\" \/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">Let&#8217;s create manifests for deploying a stateful database application, such as MySQL, with persistent storage.<\/h4>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>1. Service Manifest:<\/strong><\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>apiVersion: v1<br>kind: Service<br>metadata:<br>name: mysql<br>labels:<br>app: mysql<br>spec:<br>ports:<br>&#8211; port: 3306<br>name: mysql<br>clusterIP: None<br>selector:<br>app: mysql<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">This manifest defines a Kubernetes Service named &#8220;mysql&#8221; with the label &#8220;app: mysql&#8221;. It exposes port 3306 for MySQL. The clusterIP is set to &#8220;None&#8221;, indicating a headless service. It selects Pods labeled with &#8220;app: mysql&#8221;.<\/h4>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>2. StatefulSet Manifest:<\/strong><\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>apiVersion: apps\/v1<br>kind: StatefulSet<br>metadata:<br>name: mysql<br>spec:<br>selector:<br>matchLabels:<br>app: mysql<br>serviceName: &#8220;mysql&#8221;<br>replicas: 1<br>template:<br>metadata:<br>labels:<br>app: mysql<br>spec:<br>containers:<br>&#8211; name: mysql<br>image: mysql:latest<br>env:<br>&#8211; name: MYSQL_ROOT_PASSWORD<br>value: your-root-password<br>ports:<br>&#8211; containerPort: 3306<br>name: mysql<br>volumeMounts:<br>&#8211; name: mysql-persistent-storage<br>mountPath: \/var\/lib\/mysql<br>volumeClaimTemplates:<br>&#8211; metadata:<br>name: mysql-persistent-storage<br>spec:<br>accessModes: [ &#8220;ReadWriteOnce&#8221; ]<br>resources:<br>requests:<br>storage: 10Gi<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">This manifest defines a StatefulSet named &#8220;mysql&#8221;. It specifies a selector to match Pods labeled with &#8220;app: mysql&#8221;. The serviceName field specifies the headless Service to use. It sets the number of replicas to 1. Inside the template, it defines a Pod with a MySQL container using the official MySQL image. It sets the MySQL root password via environment variables. It exposes port 3306 and mounts a persistent volume named &#8220;mysql-persistent-storage&#8221; to &#8220;\/var\/lib\/mysql&#8221;. The volumeClaimTemplates section defines the PersistentVolumeClaim template for dynamically provisioning persistent storage.<\/h4>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>3. PersistentVolumeClaim Manifest:<\/strong><\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>apiVersion: v1<br>kind: PersistentVolumeClaim<br>metadata:<br>name: mysql-persistent-storage<br>spec:<br>accessModes:<br>&#8211; ReadWriteOnce<br>resources:<br>requests:<br>storage: 10Gi<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">This manifest defines a PersistentVolumeClaim named <strong>&#8220;mysql-persistent-storage&#8221;.<\/strong> It specifies that it requires ReadWriteOnce access mode and requests a storage of 10 gigabytes.<\/h4>\n\n\n\n<h4 class=\"wp-block-heading\">These manifests collectively define a StatefulSet application for MySQL with persistent storage. The StatefulSet ensures that the MySQL Pod is created and managed in an ordered and persistent manner, suitable for database applications. Adjust the image and configuration according to your specific database requirements.<\/h4>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Managing StatefulSets:<\/strong><\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">Creation:<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>$ kubectl create -f mysql-statefulset.yaml<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">This command creates the MySQL StatefulSet according to the specifications defined in the &#8220;mysql-statefulset.yaml&#8221; file.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Scaling:<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>$ kubectl scale statefulset mysql &#8211;replicas=3<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">This command scales the MySQL StatefulSet named &#8220;mysql&#8221; to have 3 replicas.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Deletion:<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>$ kubectl delete statefulset mysql<br>$ kubectl delete service mysql<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">These commands delete the MySQL StatefulSet named &#8220;mysql&#8221; and the Service named &#8220;mysql&#8221;. The Service deletion must be done manually.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Considerations and Limitations:<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Beta Resource:<\/strong> StatefulSet was introduced as a beta resource in Kubernetes 1.9 and wasn&#8217;t available before 1.5.<\/li>\n\n\n\n<li><strong>Storage Management:<\/strong> Ensure that storage for each Pod is either provisioned by a PersistentVolume Provisioner or pre-provisioned by an admin.<\/li>\n\n\n\n<li><strong>Data Safety:<\/strong> Deleting or scaling down a StatefulSet won&#8217;t delete associated volumes to ensure data safety.<\/li>\n\n\n\n<li><strong>Headless Service Requirement:<\/strong> StatefulSets require a Headless Service for managing network identity.<\/li>\n\n\n\n<li><strong>Pod Termination: <\/strong>StatefulSets don&#8217;t guarantee pod termination order upon deletion, but scaling down to 0 prior to deletion can achieve ordered and graceful termination.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">This setup provides a scalable and reliable deployment of MySQL as a StatefulSet in Kubernetes, ensuring persistent storage and ordered management of Pods. Adjust the configuration and passwords according to your specific MySQL requirements.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>StatefulSets in Kubernetes provide a unique and robust solution for managing stateful applications. They offer a set of Pods with distinct identities and stable hostnames, ensuring stable network identifiers, persistent storage, and ordered deployment and scaling. Let&#8217;s dive deeper into understanding StatefulSets and how to effectively manage them. What are StatefulSets? StatefulSets are ideal for [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[115,237,216],"tags":[498,497,10,500,499],"class_list":["post-4026","post","type-post","status-publish","format-standard","hentry","category-k8s-kubernetes","category-k8s-storage","category-kubernetes-basic","tag-headless-service","tag-k8s-statefulsets","tag-kubernetes","tag-persistent-storage","tag-persistentvolume"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>StatefulSets - code2deploy.com<\/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:\/\/blog.code2deploy.com\/statefulsets\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"StatefulSets - code2deploy.com\" \/>\n<meta property=\"og:description\" content=\"StatefulSets in Kubernetes provide a unique and robust solution for managing stateful applications. They offer a set of Pods with distinct identities and stable hostnames, ensuring stable network identifiers, persistent storage, and ordered deployment and scaling. Let&#8217;s dive deeper into understanding StatefulSets and how to effectively manage them. What are StatefulSets? StatefulSets are ideal for [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.code2deploy.com\/statefulsets\/\" \/>\n<meta property=\"og:site_name\" content=\"code2deploy.com\" \/>\n<meta property=\"article:published_time\" content=\"2024-04-23T14:01:13+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-23T14:01:14+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.code2deploy.com\/wp-content\/uploads\/2024\/04\/image-2.png\" \/>\n<meta name=\"author\" content=\"enam\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"enam\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. 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:\\\/\\\/blog.code2deploy.com\\\/statefulsets\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blog.code2deploy.com\\\/statefulsets\\\/\"},\"author\":{\"name\":\"enam\",\"@id\":\"https:\\\/\\\/code2deploy.com\\\/blog\\\/#\\\/schema\\\/person\\\/e46930c19b999a87f12566fa8357481b\"},\"headline\":\"StatefulSets\",\"datePublished\":\"2024-04-23T14:01:13+00:00\",\"dateModified\":\"2024-04-23T14:01:14+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blog.code2deploy.com\\\/statefulsets\\\/\"},\"wordCount\":605,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/code2deploy.com\\\/blog\\\/#\\\/schema\\\/person\\\/e46930c19b999a87f12566fa8357481b\"},\"image\":{\"@id\":\"https:\\\/\\\/blog.code2deploy.com\\\/statefulsets\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/code2deploy.com\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/04\\\/image-2.png\",\"keywords\":[\"Headless Service\",\"k8s-StatefulSets\",\"kubernetes\",\"Persistent Storage\",\"PersistentVolume\"],\"articleSection\":[\"K8s Kubernetes\",\"k8s Storage\",\"Kubernetes Basic\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blog.code2deploy.com\\\/statefulsets\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blog.code2deploy.com\\\/statefulsets\\\/\",\"url\":\"https:\\\/\\\/blog.code2deploy.com\\\/statefulsets\\\/\",\"name\":\"StatefulSets - code2deploy.com\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/code2deploy.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blog.code2deploy.com\\\/statefulsets\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blog.code2deploy.com\\\/statefulsets\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/code2deploy.com\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/04\\\/image-2.png\",\"datePublished\":\"2024-04-23T14:01:13+00:00\",\"dateModified\":\"2024-04-23T14:01:14+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blog.code2deploy.com\\\/statefulsets\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blog.code2deploy.com\\\/statefulsets\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/blog.code2deploy.com\\\/statefulsets\\\/#primaryimage\",\"url\":\"https:\\\/\\\/code2deploy.com\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/04\\\/image-2.png\",\"contentUrl\":\"https:\\\/\\\/code2deploy.com\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/04\\\/image-2.png\",\"width\":960,\"height\":720},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blog.code2deploy.com\\\/statefulsets\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/code2deploy.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"StatefulSets\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/code2deploy.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/code2deploy.com\\\/blog\\\/\",\"name\":\"code2deploy.com\\\/blog\",\"description\":\"TechOps\",\"publisher\":{\"@id\":\"https:\\\/\\\/code2deploy.com\\\/blog\\\/#\\\/schema\\\/person\\\/e46930c19b999a87f12566fa8357481b\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/code2deploy.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/code2deploy.com\\\/blog\\\/#\\\/schema\\\/person\\\/e46930c19b999a87f12566fa8357481b\",\"name\":\"enam\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d864e2f082f4499f8f1b33f004ec166eea77b9e94738553b120b6dca2410f203?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d864e2f082f4499f8f1b33f004ec166eea77b9e94738553b120b6dca2410f203?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d864e2f082f4499f8f1b33f004ec166eea77b9e94738553b120b6dca2410f203?s=96&d=mm&r=g\",\"caption\":\"enam\"},\"logo\":{\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d864e2f082f4499f8f1b33f004ec166eea77b9e94738553b120b6dca2410f203?s=96&d=mm&r=g\"},\"sameAs\":[\"https:\\\/\\\/code2deploy.com\\\/blog\"],\"url\":\"https:\\\/\\\/code2deploy.com\\\/blog\\\/author\\\/enam\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"StatefulSets - code2deploy.com","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:\/\/blog.code2deploy.com\/statefulsets\/","og_locale":"en_US","og_type":"article","og_title":"StatefulSets - code2deploy.com","og_description":"StatefulSets in Kubernetes provide a unique and robust solution for managing stateful applications. They offer a set of Pods with distinct identities and stable hostnames, ensuring stable network identifiers, persistent storage, and ordered deployment and scaling. Let&#8217;s dive deeper into understanding StatefulSets and how to effectively manage them. What are StatefulSets? StatefulSets are ideal for [&hellip;]","og_url":"https:\/\/blog.code2deploy.com\/statefulsets\/","og_site_name":"code2deploy.com","article_published_time":"2024-04-23T14:01:13+00:00","article_modified_time":"2024-04-23T14:01:14+00:00","og_image":[{"url":"https:\/\/blog.code2deploy.com\/wp-content\/uploads\/2024\/04\/image-2.png","type":"","width":"","height":""}],"author":"enam","twitter_card":"summary_large_image","twitter_misc":{"Written by":"enam","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.code2deploy.com\/statefulsets\/#article","isPartOf":{"@id":"https:\/\/blog.code2deploy.com\/statefulsets\/"},"author":{"name":"enam","@id":"https:\/\/code2deploy.com\/blog\/#\/schema\/person\/e46930c19b999a87f12566fa8357481b"},"headline":"StatefulSets","datePublished":"2024-04-23T14:01:13+00:00","dateModified":"2024-04-23T14:01:14+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.code2deploy.com\/statefulsets\/"},"wordCount":605,"commentCount":0,"publisher":{"@id":"https:\/\/code2deploy.com\/blog\/#\/schema\/person\/e46930c19b999a87f12566fa8357481b"},"image":{"@id":"https:\/\/blog.code2deploy.com\/statefulsets\/#primaryimage"},"thumbnailUrl":"https:\/\/code2deploy.com\/blog\/wp-content\/uploads\/2024\/04\/image-2.png","keywords":["Headless Service","k8s-StatefulSets","kubernetes","Persistent Storage","PersistentVolume"],"articleSection":["K8s Kubernetes","k8s Storage","Kubernetes Basic"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blog.code2deploy.com\/statefulsets\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blog.code2deploy.com\/statefulsets\/","url":"https:\/\/blog.code2deploy.com\/statefulsets\/","name":"StatefulSets - code2deploy.com","isPartOf":{"@id":"https:\/\/code2deploy.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.code2deploy.com\/statefulsets\/#primaryimage"},"image":{"@id":"https:\/\/blog.code2deploy.com\/statefulsets\/#primaryimage"},"thumbnailUrl":"https:\/\/code2deploy.com\/blog\/wp-content\/uploads\/2024\/04\/image-2.png","datePublished":"2024-04-23T14:01:13+00:00","dateModified":"2024-04-23T14:01:14+00:00","breadcrumb":{"@id":"https:\/\/blog.code2deploy.com\/statefulsets\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.code2deploy.com\/statefulsets\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.code2deploy.com\/statefulsets\/#primaryimage","url":"https:\/\/code2deploy.com\/blog\/wp-content\/uploads\/2024\/04\/image-2.png","contentUrl":"https:\/\/code2deploy.com\/blog\/wp-content\/uploads\/2024\/04\/image-2.png","width":960,"height":720},{"@type":"BreadcrumbList","@id":"https:\/\/blog.code2deploy.com\/statefulsets\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/code2deploy.com\/blog\/"},{"@type":"ListItem","position":2,"name":"StatefulSets"}]},{"@type":"WebSite","@id":"https:\/\/code2deploy.com\/blog\/#website","url":"https:\/\/code2deploy.com\/blog\/","name":"code2deploy.com\/blog","description":"TechOps","publisher":{"@id":"https:\/\/code2deploy.com\/blog\/#\/schema\/person\/e46930c19b999a87f12566fa8357481b"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/code2deploy.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/code2deploy.com\/blog\/#\/schema\/person\/e46930c19b999a87f12566fa8357481b","name":"enam","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/d864e2f082f4499f8f1b33f004ec166eea77b9e94738553b120b6dca2410f203?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/d864e2f082f4499f8f1b33f004ec166eea77b9e94738553b120b6dca2410f203?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d864e2f082f4499f8f1b33f004ec166eea77b9e94738553b120b6dca2410f203?s=96&d=mm&r=g","caption":"enam"},"logo":{"@id":"https:\/\/secure.gravatar.com\/avatar\/d864e2f082f4499f8f1b33f004ec166eea77b9e94738553b120b6dca2410f203?s=96&d=mm&r=g"},"sameAs":["https:\/\/code2deploy.com\/blog"],"url":"https:\/\/code2deploy.com\/blog\/author\/enam\/"}]}},"_links":{"self":[{"href":"https:\/\/code2deploy.com\/blog\/wp-json\/wp\/v2\/posts\/4026","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/code2deploy.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/code2deploy.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/code2deploy.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/code2deploy.com\/blog\/wp-json\/wp\/v2\/comments?post=4026"}],"version-history":[{"count":1,"href":"https:\/\/code2deploy.com\/blog\/wp-json\/wp\/v2\/posts\/4026\/revisions"}],"predecessor-version":[{"id":4028,"href":"https:\/\/code2deploy.com\/blog\/wp-json\/wp\/v2\/posts\/4026\/revisions\/4028"}],"wp:attachment":[{"href":"https:\/\/code2deploy.com\/blog\/wp-json\/wp\/v2\/media?parent=4026"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/code2deploy.com\/blog\/wp-json\/wp\/v2\/categories?post=4026"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/code2deploy.com\/blog\/wp-json\/wp\/v2\/tags?post=4026"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}