code: func NewStorage(optsGetter generic.RESTOptionsGetter, k client.ConnectionInfoGetter, proxyTransport http.RoundTripper, podDisruptionBudgetClient policyclient.PodDisruptionBudgetsGetter) PodStorage {
  
  	store := &genericregistry.Store{
  		NewFunc:                  func() runtime.Object { return &api.Pod{} },
  		NewListFunc:              func() runtime.Object { return &api.PodList{} },
  		PredicateFunc:            pod.MatchPod,
  		DefaultQualifiedResource: api.Resource("pods"),
  
  		CreateStrategy:      pod.Strategy,
  		UpdateStrategy:      pod.Strategy,
  		DeleteStrategy:      pod.Strategy,
  		ReturnDeletedObject: true,
  
  		TableConvertor: printerstorage.TableConvertor{TableGenerator: printers.NewTableGenerator().With(printersinternal.AddHandlers)},
  	}
  	options := &generic.StoreOptions{RESTOptions: optsGetter, AttrFunc: pod.GetAttrs, TriggerFunc: pod.NodeNameTriggerFunc}
  	if err := store.CompleteWithOptions(options); err != nil {
  		panic(err) // TODO: Propagate error up
  	}
  
  	statusStore := *store
  	statusStore.UpdateStrategy = pod.StatusStrategy
  
  	return PodStorage{
  		Pod:         &REST{store, proxyTransport},
  		Binding:     &BindingREST{store: store},
  		Eviction:    newEvictionStorage(store, podDisruptionBudgetClient),
  		Status:      &StatusREST{store: &statusStore},
  		Log:         &podrest.LogREST{Store: store, KubeletConn: k},
  		Proxy:       &podrest.ProxyREST{Store: store, ProxyTransport: proxyTransport},
  		Exec:        &podrest.ExecREST{Store: store, KubeletConn: k},
  		Attach:      &podrest.AttachREST{Store: store, KubeletConn: k},
  		PortForward: &podrest.PortForwardREST{Store: store, KubeletConn: k},
  	}
  }
docs: // NewStorage returns a RESTStorage object that will work against pods.