One option:
(df
 .pivot("fruit", "year", "sales")
 .assign(min_year=lambda df: df.columns.min(), 
         max_year=lambda df: df.columns[:-1].max())
 .rename(columns=lambda col: f"sales_{col}" 
                             if isinstance(col, int) 
                             else col)
 .rename_axis(columns=None)
 .reset_index()
)
    fruit  sales_2010  sales_2011  min_year  max_year
0   Apple          10          20      2010      2011
1  Banans       50000          30      2010      2011
Another option, that might be more efficient:
grouper = df.groupby('fruit')
(df
.assign(min_year=grouper.year.transform("min"), 
        max_year=grouper.year.transform("max"))
.pivot(["fruit", "min_year", "max_year"], "year", "sales")
.add_prefix("sales_")
.rename_axis(columns=None)
.reset_index()
)
    fruit  min_year  max_year  sales_2010  sales_2011
0   Apple      2010      2011          10          20
1  Banans      2010      2011       50000          30