You create a custom post type with register_post_type(). Code to do this is placed in regular plugin code inside a callback for the ‘init’ action.
It’s not enough to create a CPT on activation, it actually needs to be registered every time the plugin loads. Your code can check the returned value from register_post_type() to confirm success. A WP_Error object is returned on failure. On success a default post object of your type is returned. Most coders tend to ignore the return, there’s little reason for it to fail.
That said, I suspect you actually want to create a post object of that type on activation and save it to the DB. This too is possible. You register a plugin activation hook with register_activation_hook().
In the callback, create a new WP_Post object, setting all the properties except the ID. Then use wp_insert_post() to save it. You can also verify this post exists by simply using get_post(). The trick is knowing what arguments to use to get the post. You could query for the post’s slug, but what if that slug existed on activation? The slug would be then have ‘-2’ or similar appended to it. How would your plugin know this?
Instead, I would save the post’s ID in plugin options upon creation. Then your plugin can merely check if this option has a value to confirm the post exists.