I agree with the posts above - he needs to learn through consequences for his behaviour, you can't expect him at 21 months to understand (or care!) about it being 'morally wrong'. He has probably learned to say 'sorry' through habit, or by realising that he is let off the hook after he says it, not because he is able to feel guilty etc.
Time out is a great consequence which ususally works, if he is hitting out of frustration or for attention. However, you must analyse the reason he is hitting. For example, if you're talking to another adult and he hits to get your attention (very common) if you then give him a big talk about how hitting is unkind, you've rewarded his hitting with attention and he will probably repeat this behaviour next time (attention is so important to children, they crave it even if it's angry). This is why it's so important not to give any attention what so ever during time out - if he moves, take him back with no talking or eye contacts and keep repeating. 2 minutes is appropriate for his age. It is worth recording the number of times he hits a day to check that it is working, and make sure that everyone (including helper) is taking the same approach. If time out does not reduce hitting after a few weeks, then consider other consequences.
The only time I wouldn't use time out is if he hits to escape a demand, for example if you've told him to eat his food, put his shoes on etc (not that there would be many demands at this age) if this is the case, block the hits as much as possible but otherwise ignore them and continue with the demand - this will prevent him using hitting as an 'escape' behaviour.
Also, if your son is able to understand, talk about other ways to deal with anger - e.g. taking big breaths, squeezing hands together. You can practise these when he's not angry, and as soon as you see him getting cross and looking as if he might hit, give him a 'model prompt' by squeezing your own hands and taking deep breaths yourself. After the situation has cooled down, make sure you tell him how well he did.
Aside from the 'time out' punishment, please use positive reinforcement too - for example, you could have a 'kind hands' prize chart - if he goes a certain amount of time (eventually a day, but even an hour or 5 minutes at first, then gradually increase the time) he gets a prize (Thomas clip on youtube? a chocolate? etc). Make it visual for him, and have a timer that goes off when the time is up. Make a BIG fuss and give him lots of attention for having 'kind hands'.
Good Luck!