top | item 27657028

El Carro: Run Oracle Databases on Kubernetes

32 points| kelseyhightower | 4 years ago |github.com

23 comments

order

dijit|4 years ago

Note: i never really considered putting oracle in kubernetes to be a technical problem; since you can pass a “raw” block device from a distributed block storage.

I consider it to be a licensing nightmare as the normal oracle license means you’ll need to license every single vCPU on the cluster.

The express edition used here has some relatively anaemic usage limits which you could brush up against very quickly:

“Oracle Database 18c Express Edition automatically constrains itself to the following resource restrictions;

2 CPU threads; 2 GB of RAM;and 12 GB of user data.”

Still, it’s cool, but I would caution anyone against introducing an oracle dependency.

gravypod|4 years ago

I've never used Oracle and, given it's reputation, never will. Is there anything that it does better than other databases?

spullara|4 years ago

If, like me, you at some point need to support Oracle coming from Postgres there are a few annoyances you should be aware of:

- No boolean type. Different folks will choose T/F chars, Y/N chars or 0/1 integers. - Strings are not nullable. An empty string and a null string are the same thing. - Date also has time.

By default, you end up with some very annoying bugs. Expect to actually change the way some of your columns work.

sureglymop|4 years ago

That is quite weird.. but I don't really understand it actually. Isn't the best way to store a boolean to literally store 1(bit)? More than 0 and 1 isn't needed right?

I'm just guessing but a CHAR would be 4 byte if it's Unicode and an INTEGER also right?

So you're telling me there's really no way to store just one or a few bits?

zepolen|4 years ago

This is legit the biggest wtf I've read today, this is an over 20 year old enterprise db...

salmo|4 years ago

Oh my goodness, this is an awful idea. Oracle just runs hosted Exadata for OCI last I checked.

RAC requires shared block storage and L2 private network. Cloud SDNs and storage require gross hacks with horrible performance consequences. Even “modern” virtualization is painful, but can work.

Oracle isn’t going to fix all the bare-metal spaghetti assumptions in their clustered DB stack, and has been pretty clear about that.

This could be useful for throwaway dev/test environments. Or maybe for apps that aren’t performance intensive or critical that are in “maintenance mode” and folks want to lift-and-shift. But they’ll probably spend more time on that than fixing/replacing/retiring the app. And all will require smaller data sets than what I see with big company legacy systems.

And typically those systems are using Oracle to access data populated by another system, which makes me die a little inside.

Pretty clearly a play to get big companies into GCP contracts, more than anything real.

It’s to sell to execs who want to do the cool thing without paying to fix the old thing. ahem Thomas Kurian cough.

jandrewrogers|4 years ago

I'm curious about this for tangential reasons. Does it allow you to pass through actual raw storage and network devices to the container?

qeternity|4 years ago

Kubernetes has a large ecosystem of network storage drivers which provide replication for non-HA applications.

That said - it is entirely possible to run local storage for applications that provide their own replication. We run an LVM local storage provisioner for our in-cluster Postgres (orchestrated by Patroni). This gives us all sorts of snapshotting and resizing that you would find in network storage while having the performance of locally attached NVMEs

qeternity|4 years ago

Would love to see Google throw this sort of effort at something other than Oracle. The Zalando crew have done an amazing job with Patroni and their Postgres operator. But having Google’s resources could really elevate in-cluster databases to the mainstream.

foobarbazetc|4 years ago

This, but for Postgres…

kelseyhightower|4 years ago

Stay tuned. A lot of the tech behind El Carro can be extracted into a generic controller and serve as the foundation for other databases including Postgres.