The win puts the Cobras into second place on the log with the Warriors slightly ahead on net run-rate only.
Justin Kemp won the toss and opted to bat first on a slow track ideally suited to the spinners.
In their run chase, the Knights lost captain Morne van Wyk (8) as Peterson struck early.
With both openers back in the change rooms having added only 31 runs, Rilee Rossouw (50) and Dean Elgar (88) rescued the innings and put on 96 runs together before Peterson struck again.
The Knights lost wickets at regular intervals and were unable to improve their run-rate, finishing on 281 for eight.
The visitors posted a formidable target of 297 for the loss of six wickets with 88 runs coming off the last ten overs.
Puttick top-scored for his side, with 62 off 91 deliveries, scoring
his 18th half-century in the one-day format, while Owais Shah contributed 61.
Justin Ontong played an impressive innings for his 48 off 37 balls, hitting six boundaries and a six, while wicketkeeper Dane Vilas chipped in with his run-a-ball 43.
While Werner Coetsee only got the one wicket, he was the pick of the bowlers, conceding 47 runs off his 10 overs.
He captured the wicket of Shah, caught behind, while the former England batsman was in full flight.
Dillon du Preez returned the best figures for his 10 overs, with three for 66.
Teams:
Chevrolet Knights: Morné van Wyk (captain), Reeza Hendricks, Rilee Rossouw, Dean Elgar, Obus Pienaar, Werner Coetsee, Michael Erlank, Aubrey Swanepoel, Dillon du Preez, Johann van der Wath, Shadley van Schalkwyk.
Nashua Mobile Cape Cobras: Justin Kemp (captain), Richard Levi, Andrew Puttick, Dane Vilas, Owais Shah, Justin Ontong, JP Duminy, Robin Peterson, Rory Kleinveldt, Charl Langeveldt, Dane Piedt.