The "Running k6" tutorial describes how k6 runs a test script for a specified number of Virtual Users (VUs) and duration of time or a fixed number of iterations for each VU.
When the duration option is specified, k6 will continuously run the test script for each VU until the duration amount of time has elapsed.
Alternatively, you could set the iterations option to specify the number of complete loops of the test script k6 will execute for each VU.
__VU and __ITER are both global variables with execution context information that k6 makes available to the test script.
A numeric counter with the current iteration number for a specific VU. Zero-based.
Current VU number. The value is assigned incrementally for each new VU instance. One-based. However, VU number is 0 while executing the setup and teardown functions.
If you are running a test in k6 Cloud you will have additional environment variables that will tell you on which server, load zone and distribution of the test you are currently executing. You can read more about them here
k6 Virtual Users are concurrent, they will continuously execute through their script until the test is over or they hit their iteration limit (if you set one as described above). When you ramp up more Virtual Users, k6 will start new ones at that time. When you ramp down, k6 will stop them after the completion of the iteration.
Different test behaviors and parameterizations can be accomplished by making use of the execution context variables. A typical use case would be a load test simulating different users performing a login flow.