Change:
<!-- Please only use this template for submitting enhancement requests --What would you like to be : The documentation suggests that "The default pull policy is IfNotPresent" This is not the case when imagePullPolicy is defined under the spec section in a Pod definition without a specific value. Example: This will result in a Pod having imagePullPolicy as Always. Why is this needed: This is needed for clarification of the default behaviour. It is necessary for the appropriate handling of helm charts, in cases that the imagePullPolicy is empty.
/sig docs
The imagePullPolicy default value is .
In this paragraph you can see that In your reference it points out the default action for the kubelet, not the behaviour when imagePullPolicy is declared. Please do have in mind that the imagePullPolicy option for Never is mentioned only in this paragraph in the document.
If an image tag of "latest" is used, the imagePullPolicy defaults to to "Always": If no tag and no digest are specified on the image, an image tag of "latest" is used: The behavior when no image digest or tag is specified should be documented in the API docs for the and fields:
I am interested on helping this issue, but I am new to kubernete repo, it could take me sometime
I found the following which is well documented in "Best Practices for Configuration" It would be expected to include more information on the options in the main link under
I'd like to work on this one.
Very welcome, but yesterday also mentioned that he is following up on this issue, you can communicate with him before starting

Discussion:
"Rerun it with at least two nodes to get complete coverage.") } <del> podNames := LaunchNetTestPodPerNode(f, nodes, svcname, "1.7") </del> <ins> podNames := LaunchNetTestPodPerNode(f, nodes, svcname, "1.8") </ins> // Clean up the pods defer func() {

DoRaw() } <del> timeout := time.Now().Add(2 * time.Minute) </del> <ins> // nettest containers will wait for all service endpoints to come up for 2 minutes // apply a 3 minutes observation period here to avoid this test to time out before the nettest starts to contact peers timeout := time.Now().Add(3 * time.Minute) </ins> for i := 0; !passed && timeout.After(time.Now()); i++ { time.Sleep(2 * time.Second) Logf("About to make a proxy status call")

# See the License for the specific language governing permissions and # limitations under the License. <del> TAG = 1.7 </del> <ins> TAG = 1.8 </ins> PREFIX = gcr.io/google_containers all: push

"containers": [ { "name": "webserver", <del> "image": "gcr.io/google_containers/nettest:1.7", </del> <ins> "image": "gcr.io/google_containers/nettest:1.8", </ins> "imagePullPolicy": "Always", "args": [ "-service=nettest",

"containers": [ { "name": "webserver", <del> "image": "gcr.io/google_containers/nettest:1.7", </del> <ins> "image": "gcr.io/google_containers/nettest:1.8", </ins> "args": [ "-service=nettest", "-delay-shutdown=10"

"fmt" "io/ioutil" "log" <del> "math/rand" </del> "net/http" "os" "os/signal"

// Find all sibling pods in the service and post to their /write handler. func contactOthers(state *State) { <ins> const waitTimeout = 2 * time.Minute </ins> defer state.doneContactingPeers() client, err := client.NewInCluster() if err != nil {

log.Printf("Server version: %#vn", v) } <ins> for start := time.Now(); time.Since(start) < waitTimeout; time.Sleep(5 * time.Second) { eps := getWebserverEndpoints(client) if eps.Len() >= *peerCount { break } state.Logf("%v/%v has %v endpoints, which is less than %v as expected. Waiting for all endpoints to come up.", *namespace, *service, len(eps), *peerCount) } </ins> // Do this repeatedly, in case there's some propagation delay with getting // newly started pods into the endpoints list. for i := 0; i < 15; i++ { <del> endpoints, err := client.Endpoints(*namespace).Get(*service) if err != nil { state.Logf("Unable to read the endpoints for %v/%v: %v; will try again.", *namespace, *service, err) time.Sleep(time.Duration(1+rand.Intn(10)) * time.Second) } eps := sets.String{} for _, ss := range endpoints.Subsets { for _, a := range ss.Addresses { for _, p := range ss.Ports { eps.Insert(fmt.Sprintf("http://%s:%d", a.IP, p.Port)) } } } </del> <ins> eps := getWebserverEndpoints(client) </ins> for ep := range eps { state.Logf("Attempting to contact %s", ep) contactSingle(ep, state) } time.Sleep(5 * time.Second) } } <ins> //getWebserverEndpoints returns the webserver endpoints as a set of String, each in the format like "http://{ip}:{port}" func getWebserverEndpoints(client *client.Client) sets.String { endpoints, err := client.Endpoints(*namespace).Get(*service) eps := sets.String{} if err != nil { state.Logf("Unable to read the endpoints for %v/%v: %v.", *namespace, *service, err) return eps } for _, ss := range endpoints.Subsets { for _, a := range ss.Addresses { for _, p := range ss.Ports { eps.Insert(fmt.Sprintf("http://%s:%d", a.IP, p.Port)) } } } return eps } </ins> // contactSingle dials the address 'e' and tries to POST to its /write address. func contactSingle(e string, state *State) { body, err := json.Marshal(&WritePost{