 Hi, everyone. Good afternoon. It's a pleasure for me to be here today and present at DevConf Sizi. My name is Juarez Barbosa Jr. I work for Oracle as a senior principal developer evangelist. And today I'm here to talk about Kubernetes operators for databases. And of course, as an example of implementation, the Oracle Database operator. So without further ado, let's get started. Yeah, that's me, just a quick intro. If you scan this QR code, you can see my full profile and perhaps connected me on social media if you are interested in discussing the topics that I'm going to present shortly today here. I have over 20 years of experience in several different IT companies with a focus primarily on Java, which is my primary language, programming language, that I focus on, of course, but also several different cloud providers of DevOps, something that I'm really passionate about, Cloud Native, and a little bit of blockchain as well. But that's not a presentation about my profile, so let's get started. OK, so yeah, with Cloud Native computing, we understand what are the benefits of container orchestration and container-based development, and what container brings to the table in terms of a better approach to leverage the hardware resources and so on, and simplification with the advent of microservices as well. And there are several different things described here in this slide. This is just a kind of level set slide for the sake of fairness to make sure that people who are starting their journey into Cloud Native understand it. But at the end of the day, management of applications, microservices, if you compare the declarative approach to provisioning resources and managing resources in comparison with a kind of non-immutable approach to that or manual implementations and ways that you can do things without automation, for example. The loop that we have in terms of observability, analysis, and then possible action that happens as part of the platform and the environment, service discoverability, things like there are plenty of different frameworks and libraries that you can use in different platforms. ECU, CADA, and so on. Statement tenants, self-healing, all the benefits. And Kubernetes in terms of popularity, it gains traction, but it is still ramping up, right? So every day we are seeing more and more projects using Kubernetes as the de facto container orchestration platform. So it is important for us to consider that in the scope of databases as well. Challenges in terms of the deployments, usually if you are working with a cloud provider, for example, it's important for you to use maybe some extensions that are available as part of that platform, but without, I would say, having an approach that will result in vendor locking and make sure that perhaps your provider is also sticking to the upstream open source component and the collaboration with the Cloud Native Computing Foundation under the Linux Foundation umbrella, open source, and so on. There are several different alternatives in terms of platforms, Red Rat OpenShift, Rancher, Dockersware, Azure Community Service, and the one provided by Oracle as well, okay. Container images, just a snapshot, not so updated one, and of course, it is not an exhaustive example, but you can see that in terms of components that I don't know, maybe we can talk about, have a focus on storage persistence and so on. There are several different players here apart from Oracle, so definitely if you are running a project, you know, microservices and that is involving container orchestration, Kubernetes and Cloud Native and so on, possibly at some point we will have to interact and maybe also have that as part of your Kubernetes cluster, so that's a common concern indeed. Let's talk about Oracle's strategy to Cloud Native application development, you know, just a quick overview to give you a glimpse of what we have. The integration with our cloud platform which is called OCI, Oracle Cloud Infrastructure, Generation 2, by the way, many people don't know that what Oracle used to have a cloud called Oracle Cloud Infrastructure Classic, but years ago, Oracle actually decided to redesign everything from scratch with the best practices and learnings from different experiences and you know, exchanging information in the scope of some initiatives like CNCF for example and this is the cloud that we have. We have pretty much, you know, all the services you need to develop our applications, including Cloud Native related applications, but just to perhaps let you know that all the bits in terms of the platform, the example that I have here today, I included some slides concerning the OpenShift platform as well, but we can do that with the Oracle Cloud, you know, alone. OCI container based platform then, moving now from the cloud services, you know, in terms of IS or perhaps past, but more with the focus on the services that are available there for you to implement container based apps. We have pretty much all the bits as well and support in terms of, for example, Java applications to the mainstream frameworks and libraries, things like Spring Boot, Gravium, you know, Gravium, which is created and maintained somehow by Oracle Labs, which is our research institute, right. We've just released a new version of it, quite interesting, we have something now called Oracle Gravium, which is free and with several different things that you can do in terms of using native image, just in the scope of cloud native apps as well, to not only to better leverage the hardware resources, but also to reduce the footprint of your application when you are using a container based image with native compilation, for example, at the end of the day you can reduce the surface attack area of your application because the unused classes they are removed, you know, there are several different ways that you can keep things that are important for your application and tools to support this migration in case you are using, for example, reflection and things like that, but this is something that you should have a look at. Same thing with Halidon, for example, we have now Gravium cloud native with some specific facilitators and accelerators for your application in case you decide to use micronaut. And Halidon, you know, which is also a cloud native focus framework created and maintained by Oracle. And you can see again here, you know, in terms of security, observability, and application runtimes and so on, Oracle has everything to support your development. These are the choices in case you want to go with Docker and Docker compose, Podman, you know, Kubernetes, or Rancher, you decide or OpenShift, and so on. And at the end of the day, you can use several different tools for things like infrastructure as code, Ansible, but also, you know, Terraform, or if you want to give it instead of declarative approach to IAC, perhaps a more programmatic one, Puyumi. There are several different ways that you can use to provision cloud services nowadays, right? You can also access usually the central hub, you know, or proxy that is available and provided by these cloud providers, like resource managers, and you can use SDKs for Java, Golang, Python. But concerning these different options here and how you can collaborate and use these container runtimes and the platforms, I want to start to focus now on the DB operator. We have an operator, which is open source, by the way, and also available on the, yes, no, I can talk about that later. But it is open source, and one implementation that perhaps if you have another database or if you have an idea for containerizing different data stores and databases you can use also as a blueprint. Because as I said, the code is there for you, you can just check the implementation, perhaps improve it. You can also collaborate with us and PRs and so on. Okay, our database, the app and the simple mission here, you know, with this focus on container based, as I explained, you know, it is really important for us to consider, you know, the use of such databases in the scope of cloud native and Kubernetes. And this database operator at the end of the day, you can do things with Helm charts, for example, right? But it is not so natural or so straightforward when you are talking about stateful workloads, for example, okay, so usually an operator and the way that we provisioned it, you can, for example, attach to an existing cloud provisioned Oracle Autonomous Database, for example, and then use Kubernetes to pretty much perform all the most important operations with that database, and that's primarily what the auto operator does. In terms of the cloud and the database versions, you know, Oracle, we have single instance, you know, as I said, the Autonomous Database, ShardedDB, you know, real application clusters. If you are perhaps aware of that, or if you've participated in a project that involved Oracle Database, I'm sure you can understand easily what I'm talking about, but otherwise, my deck has all the proper resources and possibly the event organizers will make that available for you. Full support to Kubernetes in terms of the database, as I said, right? We have, you know, for example, the Oracle Container Registry as well as part of this cloud platform where you can host your images, custom images, or you can leverage the existing ones, right? And combine that with other different components that we have, just as a couple of examples here, we have micro-TX, which is a kind of framework for microservices where you can easily compose and use and, you know, distributed transactions, saga, pattern, and all those things, okay? And there is now a new offering as part of our marketplace as well called Spring Boot Backend. So it is not only about having the database clusterized and also as part of a Kubernetes deployment, but you can also use other different accelerators, okay? Let's now deep dive into the Oracle Operator or the Oracle Database Operator for Kubernetes, okay? Again, this is just level set. I remember, you know, just a refresh of the main Kubernetes-related components and we have the so-called operators, right, as part of this architecture. And this is the basic blueprint concerning how you can somehow customize and create your custom operator, you know, and the approach that we've taken when implementing this operator. No tricks here, just the usual blueprint, right? But this is just for illustrational purposes indeed. The thing is that, again, as I said, you know, the challenge if you don't use an operator for a database, for example, is managing the state and the complexity involved in this implementation, you know? So it is good when you have, for example, Oracle as the creator and the maintainer of Oracle Database and all the different open source libraries and SDKs and everything around that, providing also the Kubernetes operator for you, okay? So you can avoid headaches, you can just focus on what you have to do and that's it. The Kubernetes operator for database, you know, at the end of the stateful applications, you know, these things, as I said, you know, replica sets and unique states, you know, and also the life cycle of your database, the examples and the scripts that I have here, for example, if you want to apply a patch, for example, for your Oracle database, you have to make sure that the database is in a given state, it has to be available, for example. So it is somehow a frequent, you know, and common mistake to think that, okay, no, I can do that quickly, but when you start to implement an operator for a situation like this one where you have to work with databases, for example, more and more requirements will appear, you know? So it is not a matter of overlooking it, it's just a matter of, you know, when you start to explore and really, in practical terms, implement this stuff, there are many real challenges here and that's what this slide is about somehow, you know? Also, here is just a high-level overview of these architecture, you know? We can use the common tools, CubeCTL, of course, and we have the DB operator as part of the Kubernetes cluster and then the different databases that you can orchestrate and also use, you know? Container-Rised Oracle DBs or what we call the BaseDB, you know, a simple database instance. The Autonomous Database, when we call Autonomous, perhaps you don't know all the Oracle Autonomous DB, you know, there are two flavors of that, Autonomous Transaction Processing or the OLTP Database and the DW version of it for data warehousing, but it is autonomous because some tasks behind the scenes, you know, there are some AI-based agents running for you to do things that usually a DBA has to do, like patching security included, okay? Because if you go open source, that's easy, but there's a cost, right? If you overlook maybe applying a patch, that's what the crackers will explore in your architecture because open source is free, but it is not easy to manage, you know? The governance of open source is something that you have to take into consideration and that's why we have companies selling what we call professional open source services, right? Things like training, consulting, support, and so on. They give you the open source component, but usually the component is not optimized, so you have to go and work with them to maybe have a better implementation. And that's what you can get out of the box with the Autonomous Database, you know? Patching, performance stunning as well, indexes are created for you, so the AI-based agents, they are running continuously behind the scenes to take care of your database instance and the deployments. And the last one here, we have on-prem database as well, so depending on the scenario, you can also use the Kubernetes operator for that. Oh, I forgot to mention the lifecycle operations. At the end of the day, that's the main and the ultimate goal of this operator and the benefits, you know? You can just provision the database, you can bind to an existing one, as I said, that you provision it regardless of which tools you used, IAC or the SDK, as I said, or the Oracle Cloud Infrastructure Portal, you decide. And you can stop, start terminating the database, perform backups, restore patch, upgrade, also scale, and do a little bit of the security-related tasks as well, because Oracle has what we call the wallet, which is, that implements MTLS, Mutual TLS, so it's another layer of security that can be managed with the Kubernetes operator as well. The examples that we have here, you can see at the bottom, you know, kubectl apply-f or a code database operator. So everything, no tricks here, as I said, no, we are not introducing new tools or extensions or you just use the plain and the usual ones and that's it. Okay, why the Kubernetes operator for database, right? As I said, we want to be as comprehensive as possible and work and collaborate with all the different tools and the possibly the cloud providers that we can, not only the Oracle Cloud, right? That's why the operator is open source. If you decide you can also extend that. We want to make that, you know, you can go and provision the Oracle database. I have an example here where I provisioned the Autonomous Database with Terraform and IAC, but then I can use the operator just to bind to it and then use it from kubectl and so on. Of course, again, address the pain point of using stateful Kubernetes applications and all the problems that might arise from that, you know, that perhaps you are overlooking. And extend that to other environments, you know, not only the cloud-focused ones, but also as an approach to hybrid cloud, you know, on-prem systems and data centers and the public cloud as well, or multi-cloud, you know, because some people, they somehow are confused that frequently they think that hybrid cloud and multi-cloud is the same thing, but it is not, you know. Even the literature, if you check, but we have all the bits to support all the scenarios here. While you should care, you know, of course, I don't have to overemphasize that here because at the end of the day, that's what this event is about, you know, discuss all the nice things concerning, you know, platform engineering, DevOps, Cloud Native and programming and so on. Okay, so DevOps, GitHub, CI, CD pipelines, you know, that's the world we are living in at the moment. Automation, of course, we do need that, right? There's no way to reach and have the proper scale without looking at these things. Those are not only things that you can include in your list of requirements as nice to have once, you know, but you have to work with them. Okay, the developer preview, just a glimpse of the features here that you can explore later in the different databases as well. Okay, and depending on the flavor that you want to work with, there are some operations and features that you can leverage. The production version, you know, which is about to be released soon. Okay, we have a team working on that and a couple of PMs dedicated to this effort. And the roadmap, I just want to perhaps highlight here, DB23C, which is our upcoming release for the enterprise database, but we have one at the moment, what we call 23C Free Developer Release, a free database that you can download and install and it is the same Oracle database or DBMS, same engine, same features and everything. You can run that, you know, for your own site projects or maybe for learning and so on. It is there for you. I have a slide about this one here in case you want to have a look later. Yeah, talking about the OpenShift platform then, Oracle collaborated with a partner to also expose that as part of the Red Rat ecosystem catalog. Okay, so all the features are there for you as well in case you want to go to another level and really abstract the complexity of that, you know, that's a possible path. You'll just look for it or a operator, you'll find it, okay. Just some screenshots here, how you can install and, you know, all the details. But of course you can do it with the Oracle Cloud as well. Why? Because we have this database operator add-on as a tile, you know, included in our Cloud portal and console. All right? Yeah, the demo steps here, you know, just for example concerning the lifecycle and as I said, the main benefits of using that, you know, the typical scenarios or use cases, if we can call them use cases, okay. Bidding to an existing database, that's the one that I have here, but my slide, my deck, actually, I have some backup slides, including all the remaining scenarios. You know, DevOps, it is sometimes, it is difficult for you to pack and talk about everything in a talk. But provisioning ADB as well, scaling a database up, stopping terminating a database and so on. So just to give you a glimpse, you log into the console and you click Autonomous Transaction Processing, that's the Autonomous Database ATP, okay. You just select the database then, you copy what we call OCID, this is kind of a unique identifier for the Cloud related services that belong to the Oracle Cloud Infrastructure environment, okay. With that, you just prepare your YAM file, you just provide your OCID for the target database and then you can just apply, you know, kubectl apply-f and the specific YAM file with the configuration and that's it, it will be built. So you can now move forward and use the other remaining scripts to work with this database, okay. It is as easy as that, no catches here. Same thing, scaling up, okay, same steps here. You just increase the OCPU count. The example here, we are going from one to two. Apply again, then you can scale it. There's a way to query for it, to check and make sure that it is available. Some examples here, I'm using environment variables, but of course you can use, depending on the, if we are talking about credentials and so on, just use your vote of choice, you know, and you are good to go. It's stopping a database, same thing, okay. You can just, depending on the current state, you can just modify it and if you'll have to check if it is available, terminated and so on. And in order to really terminate it, there is a specific configuration property that you can use, hardlink, and that's it. Terminate means I don't need these database instance anymore, okay. So I want to terminate it, remove the underlying resources and it will be gone. In terms of observability, you know the exporters here, metrics exporter and log exporter, you know. So you can leverage Prometheus and Grafana as well to get some metrics and also observe your database as usual, right. That's a common requirement as well. And depending on the specific database version that you are using, there's something called enterprise manager database express as well and you can use that console. It is basic observability, but you know the charts are there for you and you can just serve them alive. Yeah, before I conclude now, let me just shift gears here and show you. Yeah, this is the database that I have, you know, on Oracle Cloud, an autonomous database. You can see the status that I talked about here. You know, when you access the DB instance, you just have to copy OCID here, okay. For example, I can just have it here. This is a typical OCID as I said, you know that is a kind of unique identifier. That's the only thing you need to work with the operator of them, okay. So the bind operation or action as you can call it, okay, you just include the OCID here and you are good to go. Kubectl, apply, dash f and this file here, okay. Autonomous database on the score bind and that's it. Same thing for the other operations then, you can see them here, backup, delete resource, rename a database, restore, scale. One of the examples with a CPU account that I talked about, is stop, start and terminate the database. Update admin, password, MTLS that's related to mutual TLS as I talked about when I started my talk and the wallet that you can use. Update network access, you know, in terms of white listing and creating some ACLs, access control lists and the specific wallet that I'm talking about. I happen to have a wallet here, you know, because I'm talking about wallet, but what is this wallet? The wallet, when you create a database instance, you go to database connection here. You have two choices, you can download this wallet or you can use the connection strings in case you decide not to use MTLS, mutual TLS with the wallet, which is better, but use just the usual credentials, username, password and a connection URL to the database. When you download this wallet, for example, I have one here, it is a zip file, you unzip it, you can see the usual or a co-configuration files here, also a Java key store, some certificates and so on. Okay, yeah, and in order to provision the database as well, talking about automation with Kubernetes first, yeah, let's just finish this one here. These are at the end of the day actions, you know, or things that you have to do with your database instance, you can maybe use DevOps platform for that, you decide about which one, okay, OCI DevOps or Azure DevOps or maybe GitHub actions, which I love, you know, because the action is what you want to do, I want to maybe bind or stop or start the database and so on, actions are comments, if you like design patterns, for example, we can go for patterns, so the comment pattern, so you can just go and create simple actions too and run them as you need, okay. Same thing to provision the database then, you can use the portal of course, but my example here, I can do that from Terraform, so I just created a Terraform file here with some variables, basically the compartment OCI, the compartment is a specific container, let's put it that way that you can use to aggregate your cloud services, if you do that or you are used to other cloud providers like, I don't know, maybe Azure, this is the same as Azure resource group, okay. And then you'll provide the database name here, your desired password, usually you'll receive a notification when the database instance is completed. Outputs, the connection string configuration and the specification for the database, I decided about OLTP, the autonomous transaction processing, that's what I have and as I said, I can run that from, for example, as a GitHub action if I want, okay, I can just go and provision the database and I can combine that as I want regarding any DevOps solution. Last thing, if you want to explore that, Oracle GitHub, our Oracle's handle on GitHub, Oracle Database Operator, okay, the scenario that I explained, it is here for you, you know, plenty of samples for all the different databases, the link to the Oracle Database Operator on RedRats ecosystem catalog. And just to finalize, also my deck has all the references, including the links. And talking about the Oracle Waze program, this is a program that Oracle has for distinguished community members, so if you are doing things related to Java, open source, or the Oracle Database, feel free to perhaps approach me on social media and we can collaborate, I can nominate you. There are several benefits. Live Labs, we have some free workshops available for you. Everything is there, Python, Golan, Java, database, cloud, you know, Oracle is running a campaign at the moment concerning free training and free vouchers for the Oracle Cloud Infrastructure Certification. The 23C database that I talked about, the free developer release, please make sure to have a look at that because you can test everything that you get from the autonomous database running as a cloud instance, for example, with this local one. Okay? If you want, the Oracle Cloud also has what we call always free services, so just go there and create an account. Thank you very much. And then I can take some questions now if we have any. Yeah? Actually, this is something that we are, okay, yes, you're asking about the support for on-prem databases, right? Yeah. There's a way to actually work with, depending on what you are using for the on-prem environment to, or if you are going, what we can call the do-it-yourself approach to Kubernetes, right? With the open source components and so on. If that's part of your cluster, you know, there are ways that the operator can target that as well, but this is a feature that it is not released yet as part of the developer preview because I talked about the production release. So I don't have all the details about it, but if you want, I can connect you with the product managers who are responsible for this feature, okay? We can talk about that offline. Any other questions? No? Okay, once again, thank you very much for the opportunity to introduce you to the Oracle operator for Kubernetes just to create awareness about it and hopefully you will have a look at it and perhaps provide us meaningful feedback as well. Thanks again.