**What this PR does / why we need it**:
Split the gRPC client used by the querier into two, one for the communication with the scheduler, the other for communicating with the query-frontend.
- This change is retrocompatible: you don't have to change anything to keep existing behavior.
- To configure the custom scheduler grpc client, you can use the new `query_scheduler_grpc_client` config or the new CLI flag `querier.scheduler-grpc-client`
- If you'd like to configure your frontend grpc client using a better named section, you can use the new `query_frontend_grpc_client` instead of the old `grpc_client_config`. Just make sure you don't use both at the same time, it will result in an error.
This work is necessary for configuring custom behavior between `querier<->scheduler` vs `querier<->frontend`. A use case is configuring mTLS when a different certificate is used by queriers, schedulers and frontends. You can only configure a single `server_name` with our current setup, making it impossible.
NewQueryFrontendGRPCClientConfiggrpcclient.Config`yaml:"query_frontend_grpc_client" doc:"description=Configures the querier gRPC client used to communicate with the query-frontend. Shouldn't be used in conjunction with 'grpc_client_config'."`
OldQueryFrontendGRPCClientConfiggrpcclient.Config`yaml:"grpc_client_config" doc:"description=Configures the querier gRPC client used to communicate with the query-frontend and with the query-scheduler if 'query_scheduler_grpc_client' isn't defined. This shouldn't be used if 'query_frontend_grpc_client' is defined."`
QuerySchedulerGRPCClientConfiggrpcclient.Config`yaml:"query_scheduler_grpc_client" doc:"description=Configures the querier gRPC client used to communicate with the query-scheduler. If not defined, 'grpc_client_config' is used instead."`
f.DurationVar(&cfg.DNSLookupPeriod,"querier.dns-lookup-period",3*time.Second,"How often to query DNS for query-frontend or query-scheduler address. Also used to determine how often to poll the scheduler-ring for addresses if the scheduler-ring is configured.")
f.StringVar(&cfg.QuerierID,"querier.id","","Querier ID, sent to frontend service to identify requests from the same querier. Defaults to hostname.")
returnnil,errors.New("unable to start the querier worker, need to configure one of frontend_address, scheduler_address, or a ring config in the query_scheduler config block")