Control theory has proven to be a practical approach for the design and implementation of controllers, which does not inherit the problems of non-control theoretic controllers due to its strong mathematical background. State of the art auto-scaling controllers suffer from one or more of the following limitations: 1) lack of a reliable performance model, 2) using a performance model with low scalability, tractability or fidelity, 3) being application or architecture-specific leading to low extendability and 4) no guarantee on their efficiency. Consequently, in this paper, we strive to mitigate these problems by leveraging an adaptive controller, which is comprising of a neural network as the performance model and a PID controller as the scaling engine. More specifically, we design, implement and analyze different flavours of these adaptive and non-adaptive controllers, compare and contrast them against each other to find the most suitable one for managing containerized cloud software systems at runtime. The controller’s objective is to maintain the response time of the controlled software system in a pre-defined range, and meeting the Service Level Agreements (SLA) while leading to efficient resource provisioning.