How can I declare global array with its length stored in EEPROM?
You can't create variable length arrays in C. That's not how C works.

Instead you have to create an array that is big enough to store the maximum number of pumps you want to be able to deal with. 

The array "size" is then just a number in a variable obtained from wherever you like (including EEPROM).

It doesn't matter if you don't use all of the array. The rest just sits there twiddling its metaphorical thumbs.

The other option, if you are only going to define the array once at startup, or very rarely change the size, is to use malloc():

uint8_t *pumps;
uint8_t nPumps = 0;

void setup() {
    nPumps = EEPROM.read(32);
    pumps = (uint8_t *)malloc(nPumps);
}


You can change the array size then with:

nPumps = 8; // for example
pumps = realloc(pumps, nPumps);


And dispose of the array with:

nPumps = 0;
free(pumps);


It's best to try not to change the array size once created, since that can make swiss cheese of your heap, and is not a friendly thing to do on a small microcontroller. If you can decide the array size once in setup and keep it the same all the time the program is running this is a safe operation. Otherwise it becomes risky.