Skip to content
This repository was archived by the owner on Jul 11, 2023. It is now read-only.

charts/osm: use image digest for default images #4108

Merged
merged 1 commit into from
Sep 21, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 57 additions & 0 deletions .github/workflows/pre-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
name: Pre-release
on:
push:
tags:
- "pre-rel-v*"

jobs:
version:
name: Set Version from git ref
runs-on: ubuntu-latest
outputs:
version: ${{ steps.version.outputs.version }}
steps:
- id: version
run: echo "::set-output name=version::$(sed 's#^refs/tags/pre-rel-\(.*\)#\1#' <<< '${{ github.ref }}')"

images:
name: Docker Images
runs-on: ubuntu-latest
needs: version
env:
DOCKER_USER: ${{ secrets.RELEASE_DOCKER_USER }}
DOCKER_PASS: ${{ secrets.RELEASE_DOCKER_PASS }}
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Restore Module Cache
uses: actions/cache@v2
with:
path: ~/go/pkg/mod
key: ${{ runner.os }}-gomod2-${{ hashFiles('**/go.sum') }}
restore-keys: |
${{ runner.os }}-gomod2-
- name: Restore Build Cache
uses: actions/cache@v2
with:
path: ~/.cache/go-build
key: ${{ runner.os }}-gobuild-${{ hashFiles('**/*.go') }}
- name: Setup Go 1.16
uses: actions/setup-go@v1
with:
go-version: 1.16
- name: Docker Login
run: docker login --username "$DOCKER_USER" --password-stdin <<< "$DOCKER_PASS"
- name: Push images with version tag
env:
CTR_TAG: ${{ needs.version.outputs.version }}
run: make docker-push VERIFY_TAGS=1
- name: Push images with latest tag
env:
CTR_TAG: latest
run: make docker-push
- name: Upload image digest
uses: actions/upload-artifact@v2
with:
name: osm_image_digests
path: /tmp/osm_image_digest_*
37 changes: 0 additions & 37 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -105,40 +105,3 @@ jobs:
asset_path: _dist/sha256sums.txt
asset_name: sha256sums.txt
asset_content_type: text/plain

images:
name: Docker Images
runs-on: ubuntu-latest
needs: version
env:
DOCKER_USER: ${{ secrets.RELEASE_DOCKER_USER }}
DOCKER_PASS: ${{ secrets.RELEASE_DOCKER_PASS }}
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Restore Module Cache
uses: actions/cache@v2
with:
path: ~/go/pkg/mod
key: ${{ runner.os }}-gomod2-${{ hashFiles('**/go.sum') }}
restore-keys: |
${{ runner.os }}-gomod2-
- name: Restore Build Cache
uses: actions/cache@v2
with:
path: ~/.cache/go-build
key: ${{ runner.os }}-gobuild-${{ hashFiles('**/*.go') }}
- name: Setup Go 1.16
uses: actions/setup-go@v1
with:
go-version: 1.16
- name: Docker Login
run: docker login --username "$DOCKER_USER" --password-stdin <<< "$DOCKER_PASS"
- name: Push images with version tag
env:
CTR_TAG: ${{ needs.version.outputs.version }}
run: make docker-push VERIFY_TAGS=1
- name: Push images with latest tag
env:
CTR_TAG: latest
run: make docker-push
8 changes: 4 additions & 4 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ BINNAME ?= osm
DIST_DIRS := find * -type d -exec
CTR_REGISTRY ?= openservicemesh
CTR_TAG ?= latest
CTR_DIGEST_FILE ?= /tmp/osm_image_digest
CTR_DIGEST_FILE ?= /tmp/osm_image_digest_$(CTR_TAG).txt
VERIFY_TAGS ?= 0

GOPATH = $(shell go env GOPATH)
Expand Down Expand Up @@ -253,7 +253,7 @@ DOCKER_PUSH_CONTROL_PLANE_TARGETS = $(addprefix docker-push-, init osm-controlle
.PHONY: $(DOCKER_PUSH_CONTROL_PLANE_TARGETS)
$(DOCKER_PUSH_CONTROL_PLANE_TARGETS): NAME=$(@:docker-push-%=%)
$(DOCKER_PUSH_CONTROL_PLANE_TARGETS):
@if [ $(VERIFY_TAGS) != 1 ]; then make docker-build-$(NAME) && docker push "$(CTR_REGISTRY)/$(NAME):$(CTR_TAG)"; else bash scripts/publish-image.sh $(NAME) "linux"; fi
@if [ $(VERIFY_TAGS) != 1 ]; then make docker-build-$(NAME) && docker push "$(CTR_REGISTRY)/$(NAME):$(CTR_TAG)"; else bash scripts/publish-image.sh "$(NAME)" "linux" "$(CTR_REGISTRY)"; fi
@docker images --digests | grep "$(CTR_REGISTRY)/$(NAME)\s*$(CTR_TAG)" >> "$(CTR_DIGEST_FILE)"


Expand All @@ -262,15 +262,15 @@ DOCKER_PUSH_LINUX_TARGETS = $(addprefix docker-push-, $(DEMO_TARGETS))
.PHONY: $(DOCKER_PUSH_LINUX_TARGETS)
$(DOCKER_PUSH_LINUX_TARGETS): NAME=$(@:docker-push-%=%)
$(DOCKER_PUSH_LINUX_TARGETS):
@if [ $(VERIFY_TAGS) != 1 ]; then make docker-build-$(NAME) && docker push "$(CTR_REGISTRY)/$(NAME):$(CTR_TAG)"; else bash scripts/publish-image.sh $(NAME) "linux"; fi
@if [ $(VERIFY_TAGS) != 1 ]; then make docker-build-$(NAME) && docker push "$(CTR_REGISTRY)/$(NAME):$(CTR_TAG)"; else bash scripts/publish-image.sh "$(NAME)" "linux" "$(CTR_REGISTRY)"; fi


# Windows demo applications
DOCKER_PUSH_WINDOWS_TARGETS = $(addprefix docker-push-windows-, $(DEMO_TARGETS))
.PHONY: $(DOCKER_PUSH_WINDOWS_TARGETS)
$(DOCKER_PUSH_WINDOWS_TARGETS): NAME=$(@:docker-push-%=%)
$(DOCKER_PUSH_WINDOWS_TARGETS):
@if [ $(VERIFY_TAGS) != 1 ]; then make ARGS=--output=type=registry docker-build-$(NAME); else bash scripts/publish-image.sh $(addprefix windows-, $(NAME)) "windows"; fi
@if [ $(VERIFY_TAGS) != 1 ]; then make ARGS=--output=type=registry docker-build-$(NAME); else bash scripts/publish-image.sh "$(NAME)" "windows" "$(CTR_REGISTRY)"; fi


.PHONY: docker-control-plane-push
Expand Down
2 changes: 1 addition & 1 deletion charts/osm/Chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ version: 0.9.2

# This is the version number of the application being deployed. This version number should be
# incremented each time you make changes to the application.
appVersion: v0.9.2
appVersion: latest-main

# This specifies the minimum Kubernetes version OSM is compatible with.
kubeVersion: ">= 1.19.0-0"
Expand Down
12 changes: 9 additions & 3 deletions charts/osm/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -101,9 +101,15 @@ The following table lists the configurable parameters of the osm chart and their
| OpenServiceMesh.fluentBit.workspaceId | string | `""` | WorkspaceId for Fluent Bit output plugin to Log Analytics |
| OpenServiceMesh.grafana.enableRemoteRendering | bool | `false` | Enable Remote Rendering in Grafana |
| OpenServiceMesh.grafana.port | int | `3000` | Grafana service's port |
| OpenServiceMesh.image.pullPolicy | string | `"IfNotPresent"` | Container image pull policy |
| OpenServiceMesh.image.registry | string | `"openservicemesh"` | Container image registry |
| OpenServiceMesh.image.tag | string | `"v0.9.2"` | Container image tag |
| OpenServiceMesh.image.digest | object | `{"osmBootstrap":"","osmCRDs":"","osmController":"","osmInjector":"","osmSidecarInit":""}` | Image digest (defaults to latest compatible tag) |
| OpenServiceMesh.image.digest.osmBootstrap | string | `""` | osm-boostrap's image digest |
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For readability - I wonder if instead of OpenServiceMesh.image.digest.osmBootstrap this should be OpenServiceMesh.image.osmBootstrap.digest (i.e. swap the positions of digest and osmBootstrap)
This mainly because I see that the comment to this value is osm-boostrap's image digest (first name of image, then digest)

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That works, I felt it's easier to keep image.digest as the top-level key and use the image names as child keys, so we have:

image
  digest:
     foo: ..
     bar: ...
     baz: ...

instead of:

image:
  foo:
    digest: ...
  bar:
    digest: ...
  baz:
    digest: ...

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure it makes much of a difference now, but if we decide later to encode more things for each image, like if we make it possible to pull different images from different repos and with different tags, then it definitely makes sense to reorganize the values to image.<name>.digest. But reorganizing the values like that would be a breaking change to the Helm chart which we should do our best to avoid.

Copy link
Member Author

@shashankram shashankram Sep 21, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For simplicity, I don't think we should be allowing mixing tags for different images, that's an unnecessary complexity I wouldn't consider at the moment. We have been using the image tags property as before, and given that only the digests are different it makes sense to keep this change as is, else it would also make sense to move the tags, pullPolicy etc. per image which I think we should avoid.

| OpenServiceMesh.image.digest.osmCRDs | string | `""` | osm-crds' image digest |
| OpenServiceMesh.image.digest.osmController | string | `""` | osm-controller's image digest |
| OpenServiceMesh.image.digest.osmInjector | string | `""` | osm-injector's image digest |
| OpenServiceMesh.image.digest.osmSidecarInit | string | `""` | Sidecar init container's image digest |
| OpenServiceMesh.image.pullPolicy | string | `"IfNotPresent"` | Container image pull policy for control plane containers |
| OpenServiceMesh.image.registry | string | `"openservicemesh"` | Container image registry for control plane images |
| OpenServiceMesh.image.tag | string | `"latest-main"` | Container image tag for control plane images |
| OpenServiceMesh.imagePullSecrets | list | `[]` | `osm-controller` image pull secret |
| OpenServiceMesh.inboundPortExclusionList | list | `[]` | Specifies a global list of ports to exclude from inbound traffic interception by the sidecar proxy. If specified, must be a list of positive integers. |
| OpenServiceMesh.injector.autoScale | object | `{"enable":false,"maxReplicas":5,"minReplicas":1,"targetAverageUtilization":80}` | Auto scale configuration |
Expand Down
45 changes: 45 additions & 0 deletions charts/osm/templates/_helpers.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -38,4 +38,49 @@ securityContext:
{{- define "osm.validatorWebhookConfigName" -}}
{{- $validatorWebhookConfigName := printf "osm-validator-mesh-%s" .Values.OpenServiceMesh.meshName -}}
{{ default $validatorWebhookConfigName .Values.OpenServiceMesh.validatorWebhook.webhookConfigurationName}}
{{- end -}}

{{/* osm-controller image */}}
{{- define "osmController.image" -}}
{{- if .Values.OpenServiceMesh.image.digest.osmController -}}
{{- printf "%s/osm-controller@%s" .Values.OpenServiceMesh.image.registry .Values.OpenServiceMesh.image.digest.osmController -}}
{{- else -}}
{{- printf "%s/osm-controller:%s" .Values.OpenServiceMesh.image.registry .Values.OpenServiceMesh.image.tag -}}
{{- end -}}
{{- end -}}

{{/* osm-injector image */}}
{{- define "osmInjector.image" -}}
{{- if .Values.OpenServiceMesh.image.digest.osmInjector -}}
{{- printf "%s/osm-injector@%s" .Values.OpenServiceMesh.image.registry .Values.OpenServiceMesh.image.digest.osmInjector -}}
{{- else -}}
{{- printf "%s/osm-injector:%s" .Values.OpenServiceMesh.image.registry .Values.OpenServiceMesh.image.tag -}}
{{- end -}}
{{- end -}}

{{/* Sidecar init image */}}
{{- define "osmSidecarInit.image" -}}
{{- if .Values.OpenServiceMesh.image.digest.osmSidecarInit -}}
{{- printf "%s/init@%s" .Values.OpenServiceMesh.image.registry .Values.OpenServiceMesh.image.digest.osmSidecarInit -}}
{{- else -}}
{{- printf "%s/init:%s" .Values.OpenServiceMesh.image.registry .Values.OpenServiceMesh.image.tag -}}
{{- end -}}
{{- end -}}

{{/* osm-bootstrap image */}}
{{- define "osmBootstrap.image" -}}
{{- if .Values.OpenServiceMesh.image.digest.osmBootstrap -}}
{{- printf "%s/osm-bootstrap@%s" .Values.OpenServiceMesh.image.registry .Values.OpenServiceMesh.image.digest.osmBootstrap -}}
{{- else -}}
{{- printf "%s/osm-bootstrap:%s" .Values.OpenServiceMesh.image.registry .Values.OpenServiceMesh.image.tag -}}
{{- end -}}
{{- end -}}

{{/* osm-crds image */}}
{{- define "osmCRDs.image" -}}
{{- if .Values.OpenServiceMesh.image.digest.osmCRDs -}}
{{- printf "%s/osm-crds@%s" .Values.OpenServiceMesh.image.registry .Values.OpenServiceMesh.image.digest.osmCRDs -}}
{{- else -}}
{{- printf "%s/osm-crds:%s" .Values.OpenServiceMesh.image.registry .Values.OpenServiceMesh.image.tag -}}
{{- end -}}
{{- end -}}
2 changes: 1 addition & 1 deletion charts/osm/templates/cleanup-hook.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ spec:
restartPolicy: Never
containers:
- name: garbage-collector
image: "{{ .Values.OpenServiceMesh.image.registry }}/osm-crds:{{ .Values.OpenServiceMesh.image.tag }}"
image: "{{ include "osmCRDs.image" . }}"
imagePullPolicy: {{ .Values.OpenServiceMesh.image.pullPolicy }}
command:
- sh
Expand Down
4 changes: 2 additions & 2 deletions charts/osm/templates/osm-bootstrap-deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -33,15 +33,15 @@ spec:
kubernetes.io/os: linux
initContainers:
- name: init-osm-bootstrap
image: "{{ .Values.OpenServiceMesh.image.registry }}/osm-crds:{{ .Values.OpenServiceMesh.image.tag }}"
image: "{{ include "osmCRDs.image" . }}"
imagePullPolicy: {{ .Values.OpenServiceMesh.image.pullPolicy }}
args:
- apply
- -f
- /osm-crds
containers:
- name: osm-bootstrap
image: "{{ .Values.OpenServiceMesh.image.registry }}/osm-bootstrap:{{ .Values.OpenServiceMesh.image.tag }}"
image: "{{ include "osmBootstrap.image" . }}"
imagePullPolicy: {{ .Values.OpenServiceMesh.image.pullPolicy }}
ports:
- name: "tls"
Expand Down
2 changes: 1 addition & 1 deletion charts/osm/templates/osm-deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ spec:
done
containers:
- name: osm-controller
image: "{{ .Values.OpenServiceMesh.image.registry }}/osm-controller:{{ .Values.OpenServiceMesh.image.tag }}"
image: "{{ include "osmController.image" . }}"
imagePullPolicy: {{ .Values.OpenServiceMesh.image.pullPolicy }}
ports:
- name: "admin-port"
Expand Down
2 changes: 1 addition & 1 deletion charts/osm/templates/osm-injector-deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ spec:
done
containers:
- name: osm-injector
image: "{{ .Values.OpenServiceMesh.image.registry }}/osm-injector:{{ .Values.OpenServiceMesh.image.tag }}"
image: "{{ include "osmInjector.image" . }}"
imagePullPolicy: {{ .Values.OpenServiceMesh.image.pullPolicy }}
ports:
- name: "sidecar-inject"
Expand Down
2 changes: 1 addition & 1 deletion charts/osm/templates/preset-mesh-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ data:
"maxDataPlaneConnections": {{.Values.OpenServiceMesh.maxDataPlaneConnections}},
"envoyImage": "{{.Values.OpenServiceMesh.sidecarImage}}",
"envoyWindowsImage": "{{.Values.OpenServiceMesh.sidecarWindowsImage}}",
"initContainerImage": "{{ .Values.OpenServiceMesh.image.registry }}/init:{{ .Values.OpenServiceMesh.image.tag }}",
"initContainerImage": "{{ include "osmSidecarInit.image" . }}",
"configResyncInterval": "{{.Values.OpenServiceMesh.configResyncInterval}}"
},
"traffic": {
Expand Down
48 changes: 47 additions & 1 deletion charts/osm/values.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -215,7 +215,8 @@
"required": [
"registry",
"pullPolicy",
"tag"
"tag",
"digest"
],
"properties": {
"registry": {
Expand Down Expand Up @@ -245,6 +246,51 @@
"examples": [
"v0.4.2"
]
},
"digest": {
"$id": "#/properties/OpenServiceMesh/properties/image/properties/digest",
"type": "object",
"title": "Default image digests",
"description": "Default image digests for control plane.",
"required": [
"osmController",
"osmInjector",
"osmSidecarInit",
"osmCRDs",
"osmBootstrap"
],
"properties": {
"osmController": {
"$id": "#/properties/OpenServiceMesh/properties/image/properties/digest/properties/osmController",
"type": "string",
"title": "osm-controller's image digest",
"description": "osm-controller container's image digest."
},
"osmInjector": {
"$id": "#/properties/OpenServiceMesh/properties/image/properties/digest/properties/osmInjector",
"type": "string",
"title": "osm-injector's image digest",
"description": "osm-injector container's image digest."
},
"osmSidecarInit": {
"$id": "#/properties/OpenServiceMesh/properties/image/properties/digest/properties/osmSidecarInit",
"type": "string",
"title": "osm-osmSidecarInit's image digest",
"description": "osm-osmSidecarInit container's image digest."
},
"osmCRDs": {
"$id": "#/properties/OpenServiceMesh/properties/image/properties/digest/properties/osmCRDs",
"type": "string",
"title": "osm-crds' image digest",
"description": "osm-crds container's image digest."
},
"osmBootstrap": {
"$id": "#/properties/OpenServiceMesh/properties/image/properties/digest/properties/osmBootstrap",
"type": "string",
"title": "osm-boostrap's image digest",
"description": "osm-bootstrap container's image digest."
}
}
}
},
"additionalProperties": false
Expand Down
21 changes: 17 additions & 4 deletions charts/osm/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,25 @@ OpenServiceMesh:
#
# -- OSM control plane image parameters
image:
# -- Container image registry
# -- Container image registry for control plane images
registry: openservicemesh
# -- Container image pull policy
# -- Container image pull policy for control plane containers
pullPolicy: IfNotPresent
# -- Container image tag
tag: v0.9.2
# -- Container image tag for control plane images
tag: "latest-main"
Comment on lines +12 to +15
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's change the pull policy to Always by default if latest-main images are used by default.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I didn't change this just because the demo scripts sets this to Always. We have to be careful in not setting this to Always for release versions, so it makes sense to default it to IfNotPresent.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@nojnhuh, what's the reason behind your request to change to Always? It seems to me that IfNotPresent is the safest bet for production environments (so Kubernetes does not do any extra unnecessary work) and Always perhaps for development.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I didn't change this just because the demo scripts sets this to Always. We have to be careful in not setting this to Always for release versions, so it makes sense to default it to IfNotPresent.

I suppose we could effectively get this behavior "for free" if the latest-main images were instead named latest and take advantage of the default behavior by blanking the pull policy. Not sure how many people are currently relying on latest images though.

what's the reason behind your request to change to Always?

latest-main is a floating tag whose meaning changes frequently. If I were running a cluster and installed the chart using latest-main images pulled IfNotPresent, then installing a new version of the chart some time later without changing the tag or pull policy will still use the old images since images with the latest-main tag already exist on the node. The only way to get the new images to pull would be to manually delete them from the node. If the images were pulled Always, then each install of OSM would get the newest images automatically. I find those kinds of issues where I'm not running the versions of images that I think I am particularly frustrating.

It seems to me that IfNotPresent is the safest bet for production environments (so Kubernetes does not do any extra unnecessary work) and Always perhaps for development.

Isn't that exactly the distinction we're making here with the tags, where the main branch is set up for development and the release branches are set up for production?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@nojnhuh I don't mind changing the PullPolicy to Always for the main branch, but we have to make it a part of the release checklist to ensure the PullPolicy is always set to IfNotPresent for released images.
I don't think this should be a major concern for this PR in any way, given that we can easily override it.

# -- Image digest (defaults to latest compatible tag)
digest:
# -- osm-controller's image digest
osmController: ""
# -- osm-injector's image digest
osmInjector: ""
# -- Sidecar init container's image digest
osmSidecarInit: ""
# -- osm-crds' image digest
osmCRDs: ""
# -- osm-boostrap's image digest
osmBootstrap: ""


# -- `osm-controller` image pull secret
imagePullSecrets: []
Expand Down
2 changes: 1 addition & 1 deletion cmd/cli/mesh_upgrade.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import (

const (
defaultContainerRegistry = "openservicemesh"
defaultOsmImageTag = "v0.9.2"
defaultOsmImageTag = "latest-main"
)

const upgradeDesc = `
Expand Down
2 changes: 1 addition & 1 deletion cmd/osm-bootstrap/osm-bootstrap_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ func TestCreateDefaultMeshConfig(t *testing.T) {
"logLevel": "error",
"maxDataPlaneConnections": 0,
"envoyImage": "envoyproxy/envoy-alpine@sha256:6502a637c6c5fba4d03d0672d878d12da4bcc7a0d0fb3f1d506982dde0039abd",
"initContainerImage": "openservicemesh/init:v0.9.2",
"initContainerImage": "openservicemesh/init:latest-main",
"configResyncInterval": "2s"
},
"traffic": {
Expand Down
2 changes: 1 addition & 1 deletion docs/example/manifests/apps/bookbuyer.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ spec:
kubernetes.io/os: linux
containers:
- name: bookbuyer
image: openservicemesh/bookbuyer:v0.9.2
image: openservicemesh/bookbuyer:latest-main
imagePullPolicy: Always
command: ["/bookbuyer"]
env:
Expand Down
2 changes: 1 addition & 1 deletion docs/example/manifests/apps/bookstore-v2.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ spec:
kubernetes.io/os: linux
containers:
- name: bookstore
image: openservicemesh/bookstore:v0.9.2
image: openservicemesh/bookstore:latest-main
imagePullPolicy: Always
ports:
- containerPort: 14001
Expand Down
Loading