{"id":72096,"date":"2023-03-20T09:01:03","date_gmt":"2023-03-20T09:01:03","guid":{"rendered":"https:\/\/www.cryptocabaret.com\/?p=72096"},"modified":"2023-03-20T09:01:03","modified_gmt":"2023-03-20T09:01:03","slug":"develop-on-kubernetes-with-open-source-tools","status":"publish","type":"post","link":"https:\/\/www.cryptocabaret.com\/?p=72096","title":{"rendered":"Develop on Kubernetes with open source tools"},"content":{"rendered":"<p><span class=\"field field--name-title field--type-string field--label-hidden\">Develop on Kubernetes with open source tools<\/span><br \/>\n<span class=\"field field--name-uid field--type-entity-reference field--label-hidden\"><a title=\"View user profile.\" href=\"https:\/\/opensource.com\/users\/rberrelleza\" class=\"username\">rberrelleza<\/a><\/span><br \/>\n<span class=\"field field--name-created field--type-created field--label-hidden\">Mon, 03\/20\/2023 &#8211; 03:00<\/span><\/p>\n<div class=\"clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item\">\n<p>Over the last five years, a massive shift in how applications get deployed has occurred. It\u2019s gone from self-hosted infrastructure to the world of the cloud and Kubernetes clusters. This change in deployment practices brought a lot of new things to the world of developers, including <a href=\"https:\/\/opensource.com\/resources\/what-are-linux-containers\">containers<\/a>, <a href=\"https:\/\/www.redhat.com\/architect\/what-is-rosa?intcmp=7013a000002qLH8AAM\" target=\"_blank\" rel=\"noopener\">cloud provider configuration<\/a>, <a href=\"https:\/\/www.redhat.com\/en\/topics\/containers\/what-is-kubernetes?intcmp=7013a000002qLH8AAM\" target=\"_blank\" rel=\"noopener\">container orchestration<\/a>, and more. There\u2019s been a shift away from coding monoliths towards cloud-native applications consisting of multiple microservices.<\/p>\n<p>While application deployment has advanced, the workflows and tooling for development have largely remained stagnant. They didn\u2019t adapt completely or feel \u201cnative\u201d to this brave new world of cloud-native applications. This can mean an unpleasant developer experience, involving a massive loss in developer productivity.<\/p>\n<p>But there\u2019s a better way. What if you could seamlessly integrate Kubernetes and unlimited cloud resources with your favorite local development tools?<\/p>\n<h2>The current state of cloud-native development<\/h2>\n<p>Imagine that you\u2019re building a cloud-native application that includes a Postgres database in a <a href=\"https:\/\/www.redhat.com\/en\/technologies\/cloud-computing\/openshift\/aws?intcmp=7013a000002qLH8AAM\" target=\"_blank\" rel=\"noopener\">managed application platform<\/a>, a data set, and three different microservices.<\/p>\n<p>Normally, this would involve the following steps:<\/p>\n<ol type=\"1\">\n<li>Open a ticket to get your IT team to provision a DB in your corporate AWS account.<\/li>\n<li>Go through documentation to find where to get a copy of last week\u2019s DB dump from your staging environment (you are not using prod data in dev, right?)<\/li>\n<li>Figure out how to install and run service one on your local machine<\/li>\n<li>Figure out how to install and run service two on your local machine<\/li>\n<li>Figure out how to install and run service three on your local machine<\/li>\n<\/ol>\n<p>And that\u2019s just to get started. Once you\u2019ve made your code changes, you then have to go through these steps to test them in a realistic environment:<\/p>\n<ol type=\"1\">\n<li>Create a Git branch<\/li>\n<li>Commit your changes<\/li>\n<li>Figure out a meaningful commit message<\/li>\n<li>Push your changes<\/li>\n<li>Wait your turn in the CI queue<\/li>\n<li>CI builds your artifacts<\/li>\n<li>CI deploys your application<\/li>\n<li>You finally validate your changes<\/li>\n<\/ol>\n<p>I\u2019ve worked with teams where this process takes anything from a few minutes to several hours. But as a developer, waiting even a few minutes to see whether my code works was a terrible experience. It was slow, frustrating, and made me dread making complex changes.<\/p>\n<h2>Simplify your cloud-native development workflow with Crossplane and Okteto<\/h2>\n<p><a href=\"https:\/\/github.com\/crossplane\/crossplane\" target=\"_blank\" rel=\"noopener\">Crossplane<\/a> is an open source project that connects your Kubernetes cluster to external, non-Kubernetes resources and allows platform teams to build a custom Kubernetes API to consume those resources. This enables you to do something like <code>kubectl apply -f db.yaml<\/code> to create a database in any cloud provider. And this enables your DevOps or IT team to give you access to cloud infra without having to create accounts, distribute passwords, or manually limit what you can or can\u2019t do. It&#8217;s self-service heaven.<\/p>\n<p>The <a href=\"https:\/\/github.com\/okteto\/okteto\" target=\"_blank\" rel=\"noopener\">Okteto CLI<\/a> is an open source tool that enables you to build, develop, and debug cloud native applications directly in any Kubernetes cluster. Instead of writing code, building, and then deploying in Kubernetes to see your changes, you simply run <code>okteto up<\/code>, and your code changes are synchronized in real time. At the same time, your application is hot-reloaded in the container. It\u2019s a fast inner loop for cloud-native applications.<\/p>\n<p>On their own, each of these tools is very useful, and I recommend you try them both. The Crossplane and Okteto projects enable you to build a great developer experience for you and your team, making building cloud-native applications easier, faster, and joyful.<\/p>\n<p>Here\u2019s the example I mentioned in the previous section, but instead of a traditional setup, imagine you\u2019re using Crossplane and Okteto:<\/p>\n<ol type=\"1\">\n<li>You type <code>okteto up<\/code><\/li>\n<li>Okteto deploys your services in Kubernetes while Crossplane provisions your database (and data!)<\/li>\n<li>Okteto synchronizes your code changes and enables hot-reloading in all your services<\/li>\n<\/ol>\n<div class=\"embedded-resource-list callout-float-right\">\n<div class=\"field field--name-title field--type-string field--label-hidden field__item\">More on Kubernetes<\/div>\n<div class=\"field field--name-links field--type-link field--label-hidden field__items\">\n<div class=\"field__item\"><a href=\"https:\/\/www.redhat.com\/en\/topics\/containers\/what-is-kubernetes?intcmp=7016000000127cYAAQ\">What is Kubernetes?<\/a><\/div>\n<div class=\"field__item\"><a href=\"https:\/\/www.redhat.com\/en\/services\/training\/do080-deploying-containerized-applications-technical-overview?intcmp=7016000000127cYAAQ\">Free online course: Containers, Kubernetes and Red Hat OpenShift technical over\u2026<\/a><\/div>\n<div class=\"field__item\"><a href=\"https:\/\/www.redhat.com\/en\/engage\/openshift-storage-testdrive-20170718?intcmp=7016000000127cYAAQ\">Test drive OpenShift hands-on<\/a><\/div>\n<div class=\"field__item\"><a href=\"https:\/\/www.redhat.com\/en\/resources\/managing-containers-kubernetes-openshift-technology-detail?intcmp=7016000000127cYAAQ\">An introduction to enterprise Kubernetes<\/a><\/div>\n<div class=\"field__item\"><a href=\"https:\/\/enterprisersproject.com\/article\/2017\/10\/how-explain-kubernetes-plain-english?intcmp=7016000000127cYAAQ\">How to explain Kubernetes in plain terms<\/a><\/div>\n<div class=\"field__item\"><a href=\"https:\/\/opensource.com\/downloads\/kubernetes-raspberry-pi?intcmp=7016000000127cYAAQ\">eBook: Running Kubernetes on your Raspberry Pi homelab<\/a><\/div>\n<div class=\"field__item\"><a href=\"https:\/\/opensource.com\/downloads\/kubernetes-cheat-sheet?intcmp=7016000000127cYAAQ\">Kubernetes cheat sheet<\/a><\/div>\n<div class=\"field__item\"><a href=\"https:\/\/opensource.com\/downloads\/kubernetes-sysadmin?intcmp=7016000000127cYAAQ\">eBook: A guide to Kubernetes for SREs and sysadmins<\/a><\/div>\n<div class=\"field__item\"><a href=\"https:\/\/opensource.com\/tags\/kubernetes?intcmp=7016000000127cYAAQ\">Latest Kubernetes articles<\/a><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<p>At this point, you have a live environment in Kubernetes, just for you. You saved a ton of time by not having to go through IT, figuring out local dependencies, and remembering the commands needed to run each service. And because everything is defined as code, it means that everyone in your team can get their environment in exactly the same way. No degree in cloud infrastructure required.<\/p>\n<p>But there\u2019s one more thing. Every time you make a code change, Okteto automatically refreshes your services without requiring you to commit code. There\u2019s no waiting for artifacts to build, no redeploying your application, or going through lengthy CI queues. You can write code, save the file, and see your changes running live in Kubernetes in less than a second.<\/p>\n<p>How\u2019s that for a fast cloud-native development experience?<\/p>\n<h2>Get into the cloud<\/h2>\n<p>If you\u2019re building applications meant to run in Kubernetes, why are you not developing in Kubernetes?<\/p>\n<p>Using Crossplane and Okteto together gives your team a fast cloud-native development workflow. By introducing Crossplane and Okteto into your team:<\/p>\n<ul>\n<li>Everyone on your team can spin up a fully-configured environment by running a single command<\/li>\n<li>Your cloud development environment spans Kubernetes-based workloads, as well as cloud services<\/li>\n<li>Your team can share a single Kubernetes cluster instead of having to spin up one cluster on every developer machine, CI pipeline, and so on<\/li>\n<li>Your development environment looks a lot like your production environment<\/li>\n<li>You don\u2019t have to train every developer on Kubernetes, containers, <a href=\"https:\/\/opensource.com\/article\/22\/3\/cloud-services-providers\" target=\"_blank\" rel=\"noopener\">cloud providers<\/a>, and so on.<\/li>\n<\/ul>\n<p>Just type <code>okteto up<\/code>, and you\u2019re developing within seconds!<\/p>\n<\/div>\n<div class=\"clearfix text-formatted field field--name-field-article-subhead field--type-text-long field--label-hidden field__item\">\n<p>Use Crossplane and Okteto for cloud-native development in a matter of seconds.<\/p>\n<\/div>\n<div class=\"field field--name-field-lead-image field--type-entity-reference field--label-hidden field__item\">\n<article class=\"media media--type-image media--view-mode-caption\">\n<div class=\"field field--name-field-media-image field--type-image field--label-hidden field__item\">  <img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.cryptocabaret.com\/wp-content\/uploads\/2023\/03\/kubernetes_containers_ship_lead.png\" width=\"1040\" height=\"584\" alt=\"Ships at sea on the web\" title=\"Ships at sea on the web\"><\/div>\n<\/article>\n<\/div>\n<div class=\"field field--name-field-tags field--type-entity-reference field--label-hidden field__items\">\n<div class=\"field__item\"><a href=\"https:\/\/opensource.com\/tags\/kubernetes\" hreflang=\"en\">Kubernetes<\/a><\/div>\n<div class=\"field__item\"><a href=\"https:\/\/opensource.com\/tags\/cloud\" hreflang=\"en\">Cloud<\/a><\/div>\n<div class=\"field__item\"><a href=\"https:\/\/opensource.com\/tags\/containers\" hreflang=\"en\">Containers<\/a><\/div>\n<div class=\"field__item\"><a href=\"https:\/\/opensource.com\/tags\/scale\" hreflang=\"en\">SCaLE<\/a><\/div>\n<\/p><\/div>\n<div class=\"hidden field field--name-field-listicle-title field--type-string field--label-hidden field__item\">What to read next<\/div>\n<div class=\"field field--name-field-default-license field--type-list-string field--label-hidden field__item\"><a rel=\"license\" href=\"http:\/\/creativecommons.org\/licenses\/by-sa\/4.0\/\"><br \/>\n        <img decoding=\"async\" alt=\"Creative Commons License\" src=\"https:\/\/www.cryptocabaret.com\/wp-content\/uploads\/2023\/03\/cc-by-sa--38.png\" title=\"This work is licensed under a Creative Commons Attribution-Share Alike 4.0 International License.\"><\/a>This work is licensed under a Creative Commons Attribution-Share Alike 4.0 International License.<\/div>\n<section class=\"field field--name-field-comments field--type-comment field--label-hidden comment-wrapper\">\n<div class=\"comments__count\">\n<div class=\"login\"><a href=\"https:\/\/opensource.com\/user\/register?absolute=1\">Register<\/a> or <a href=\"https:\/\/opensource.com\/user\/login?destination=\/feed&amp;absolute=1\">Login<\/a> to post a comment.<\/div>\n<\/p><\/div>\n<\/section>\n<p class=\"wpematico_credit\"><small>Powered by <a href=\"http:\/\/www.wpematico.com\" target=\"_blank\" rel=\"noopener\">WPeMatico<\/a><\/small><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Develop on Kubernetes with open source tools rberrelleza Mon, 03\/20\/2023 &#8211; 03:00 Over the last five years, a massive shift in how applications get deployed has occurred. It\u2019s gone from self-hosted infrastructure to the world of the cloud and Kubernetes clusters. This change in deployment practices brought a lot of new things to the world [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":72097,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[307],"tags":[],"class_list":["post-72096","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-open-source"],"_links":{"self":[{"href":"https:\/\/www.cryptocabaret.com\/index.php?rest_route=\/wp\/v2\/posts\/72096","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.cryptocabaret.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.cryptocabaret.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.cryptocabaret.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.cryptocabaret.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=72096"}],"version-history":[{"count":0,"href":"https:\/\/www.cryptocabaret.com\/index.php?rest_route=\/wp\/v2\/posts\/72096\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.cryptocabaret.com\/index.php?rest_route=\/wp\/v2\/media\/72097"}],"wp:attachment":[{"href":"https:\/\/www.cryptocabaret.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=72096"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.cryptocabaret.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=72096"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.cryptocabaret.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=72096"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}