Every time you iterate through your loop, $output gets overwritten, which is why you only get the data for the final tab. You can avoid that by storing the values of $output as an array. Here’s an example, based on your code. My edits follow each comment block.
<?php
/*
* Create an empty array
*/
?>
<?php $outputs = array(); ?>
<div class="page-tile row">
<?php $i = 0; ?>
<?php while ( $page_query->have_posts() ) : $page_query->the_post(); ?>
<div class="tile col-lg-2 col-md-2 col-sm-2 col-xs-12">
<a class="nav nav-tabs" role="tablist" href="#collapse-<?php the_ID(); ?>" data-toggle="tab" aria-expanded="false" aria-controls="collapse-<?php the_ID(); ?>">
<?php the_post_thumbnail( "kontakt-thumb", array( 'class' => 'img-responsive' ) ); ?>
</a>
</div>
<?php ob_start() ?>
<div class="kontakt-content tab-content">
<div class="tab-pane" role="tabpanel" id="collapse-<?php the_ID(); ?>"> <?php echo the_content(); ?> </div>
</div>
<?php
/*
* Store the data with a new array key
*/
?>
<?php $outputs[] = ob_get_clean(); ?>
<?php $i++; ?>
<?php endwhile; ?>
Now for your tabs, you iterate through the array.
<div class="row">
<?php
/*
* Iterate through the array
*/
foreach( $outputs AS $output ) {
echo $output;
}
?>
</div>