Comparing Cloud Run pricing with VMs and Preemptible VMs you can see why. I'm going to ignore networking bandwidth costs as I assume (maybe incorrectly) that they're the same across Google Cloud services. That leaves us with CPU, Memory and Requests pricing.
CPU Pricing:
Cloud Run: $0.00002400 per vCPU-second [1]
On-demand VM: $0.00000605861 per vCPU-second ($0.021811 / vCPU hour) (~75% cheaper vs. Cloud Run) [2]
Preemptible VM: $0.0000018175 per vCPU-second($0.006543 / vCPU hour) (~92% cheaper vs. Cloud Run) [2]
Memory Pricing:
Cloud Run: $0.00000250 per GiB-Second [1]
On-demand VM: $0.00000081194 per GiB-second ($0.002923 / GB hour) (~67% cheaper vs. Cloud Run) [2]
Preemptible VM: $0.0000002436 per GiB-second($0.000877 / GB hour) (~90% cheaper vs. Cloud Run) [2]
Requests Pricing:
This is complicated since Cloud Run charges per request ($0.40 per million requests[1]) which would put them at roughly $378,000 per year (at a 30k request per second average). Load balancers charge per hour and per bandwidth (regardless of traffic of which they have it sustained) at $0.025 per hour per proxy instance and $0.008 per GB of data transfer[3]. I'm not sure how it compares but I'm sure it's much on an averaged our per request basis.
Looking at the CPU and Memory alone you can see the price differential and why it might not be worth it when you're paying hundred of thousands of dollars per month in infrastructure per year (they might spending much more but at this scale it is when its starts to matter). Assuming a middle ground somewhere in the 80% savings using on-demand and preemptibles vs. cloud run at low costs you're talking about $60/mo vs $300/mo respectively but once you're in the $50,000/mo range you're talking about the difference between $50,000/mo using on-demand/preemptibles vs $250,000/mo on Cloud Run.
[1] https://cloud.google.com/run#section-14 [2] https://cloud.google.com/compute/vm-instance-pricing#general... [3] https://cloud.google.com/vpc/network-pricing#lb
The pricing calculation is even more complex than it seems. Cloud Run doesn't charge per request if you have "always allocated CPU" (a new feature). Also, instances can handle up to 1000 concurrent requests. So, we'd need to know processing time and work out how many instances would need to run concurrently. There's also committed usage discounts for Cloud Run.
Another factor to consider is operational cost - Cloud Run has a lower ops burden than K8s - particularly if you wanted to run multi-regional instances.
But you're right - at the sustained usage they have, the infrastructure cost of Cloud Run would almost certainly be worse than VMs in GKE, particularly if they could run on a decent percentage of preemptible instances.
The first-generation standard App Engine service was/is a PaaS environment that provided a lot of functionality on top of the basic load balancing servers, such as an automatically high availability distributed NoSQL datastore, memcache, task queues, mail services, cron, and some special libraries. So migrating off of this involves not just the infrastructure but also a considerable amount of re-implementing equivalent services.
Edit: And as a point of reference, our application has hit basically every single GAE limitation/quota over the years, including the 10,000 file limit (mostly source code files). So migration is a serious concern.