Same reliability as AWS, similar performance, much cheaper.
Sure, in case all of Paris goes down, you’re down, too. But in day-to-day usage you can have good reliability on a shoestring budget.
Genuinely interested.
VMs are the most reliable thing of any cloud, and often more reliable then their own managed services because of complexity. GKE does live-migration of VMs and Azure/AWS are close to the same thing, so building on that foundation and doing your own "managed" layer via Kubernetes provides a better experience, while also giving you that spot instance discount that you wouldn't get otherwise with PaaS.
EDIT: No, really, k8s won't make a typical RDBMS suddenly able to run in three datacenters across three continents.
Honestly, at that point, what does k8s get you?
AIUI, Kubernetes is fine for stateless systems, but it is really no better on the storing-state question.
But the parent's comment is missing the point. K8s is not for failover. K8s is literally just a giant monolith of microservices for running microservices. It's not intended to provide failover for non-microservices, it's intended only to run microservices, and as a side-effect of needing to be able to scale them, it inherently provides some failover mechanisms.
$ docker build . -tag gcr.io/google-samples/hello-app:1.0
$ docker push gcr.io/google-samples/hello-app:1.0
$ kubectl run hello-server --image gcr.io/google-samples/hello-app:1.0 --port 8080
$ kubectl expose deployment hello-server --type "LoadBalancer"
where the Dockerfile content is: FROM golang:1.8-alpine
ADD . /go/src/hello-app
RUN go install hello-app
FROM alpine:latest
COPY --from=0 /go/bin/hello-app .
ENV PORT 8080
CMD ["./hello-app"]
https://cloud.google.com/kubernetes-engine/docs/quickstarthttps://github.com/GoogleCloudPlatform/kubernetes-engine-sam...
I'm not saying that is a bad thing by itself, but there definitely is huge amount of added complexity behind the scenes.
To the best of my exposure, Kubernetes is a well engineered system.
You can try to go cross-country with either of them. One was engineered to survive extreme environments, protect you from the elements, and move really fast. The other was engineered to leave you exposed, operate in a moderate climate, and go much slower.
If you have problems with the former, it's time to call the technicians. If you have problems with the latter, you might fix it yourself with a pocket screwdriver.
https://docs.aws.amazon.com/codedeploy/latest/userguide/gett...
Distelli (now Puppet Pipelines) too:
https://www.youtube.com/watch?v=ZZlYADohS4Q
And then there are the PaaS options like Heroku, Beanstalk, AppEngine, Lambda, Serverless, and Apex.
That was my point. I wanted to point out that while some people have only/first heard about failover in the context of kubernetes, it is not something that is specific to kubernetes or even the problem that kubernetes was build to solve.
Of course it is not designed to be a failover solution specifically and using it (exclusively) as such would be ill-advised; I was just trying to be diplomatic while pointing that out.
Some ideas for things you could do in a web/website/internet context assuming you have a single point of presence:
One type of "HA" is network-level failover; haproxy (L7), nginx (L7) and pacemaker (usually L3) seem to be very popular options, but I think there are dozens of other alternatives. In terms of network-level failover, things get more interesting once you are running in multiple locations, have more than one physical uplink to the internet or do the routing for your IP block yourself.
For application-level failover and HA, one option for client/server style applications is to move all state into a database which has some form of HA/failover built in (so pretty much every DB). I think this is very common for web applications and also for some intranet applications.
Assuming you have a more complex application running in a datacenter, there is also a lot of very interesting stuff you can do using a lock service like Zookeeper or etcd or really almost any database. Of course, you can also make your app highly available without using an external service; there is a mountain of failover/HA research and algorithms that you can put directly into your app (2pc, paxos, raft, etc). Of course all of these require some cooperation/knowledge from the application. For some apps it might be very hard to make them "HA" without relying on an external system, but for some apps it will be trivial.
Note that when you move away from a web/datacenter context, to something like telecommunication or industrial automation, so something that doesn't run as a process in a datacenter but is implemented {as, on} hardware in the field, failover and high availability will have an entirely different meaning and will be done in a totally different way.