Design a container orchestration system that can efficiently deploy, manage, and scale containerized applications across a cluster of machines. Focus on container scheduling algorithms, service discovery mechanisms, and strategies for load balancing and auto-scaling. Address challenges like ensuring high availability, implementing rolling updates, and managing inter-container networking and communication.