Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Integrate Image Streams #4

Merged
merged 9 commits into from
Mar 6, 2018
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
14 changes: 14 additions & 0 deletions openshift/01-apicast-cloud-hosted-imagestream.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
apiVersion: v1
kind: ImageStream
metadata:
name: apicast-cloud-hosted
labels:
app: apicast-cloud-hosted
spec:
tags:
- name: latest
annotations:
openshift.io/display-name: APIcast Cloud Hosted (latest)
from:
kind: ImageStreamTag
name: latest
14 changes: 14 additions & 0 deletions openshift/02-apicast-builder-imagestream.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
apiVersion: v1
kind: ImageStream
metadata:
name: apicast
labels:
app: apicast
spec:
tags:
- name: master-builder
from:
kind: DockerImage
name: quay.io/3scale/apicast:master-builder
Copy link
Contributor

Choose a reason for hiding this comment

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

Would be good to have a comment pointing to how is this refreshed.
#4 (comment)

Copy link
Author

Choose a reason for hiding this comment

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

TBH, I don't know how quay.io/3scale/apicast:master-builder is refreshed either... Or are you talking about the scheduled imports from the registry?

Copy link
Contributor

Choose a reason for hiding this comment

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

Yep. Scheduled imports.

Those quay images are built when master branch is updated.

Copy link
Author

Choose a reason for hiding this comment

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

Done in 287e33c

importPolicy:
scheduled: true
16 changes: 7 additions & 9 deletions openshift/BuildConfig.yml → openshift/03-build-config.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
apiVersion: build.openshift.io/v1
apiVersion: v1
kind: BuildConfig
metadata:
labels:
Expand All @@ -9,16 +9,14 @@ spec:
nodeSelector: null
postCommit:
args:
- '--dev'
- '--daemon'
- '--test'
- '--lazy'
command:
- bin/apicast
output:
pushSecret:
name: quay
to:
kind: DockerImage
name: 'quay.io/3scale/apicast-cloud-hosted:apicast-master'
kind: ImageStreamTag
name: apicast-cloud-hosted:latest
source:
contextDir: /apicast
git:
Expand All @@ -31,5 +29,5 @@ spec:
sourceStrategy:
forcePull: true
from:
kind: DockerImage
name: 'quay.io/3scale/apicast:master-builder'
kind: ImageStreamTag
name: apicast:master-builder
95 changes: 60 additions & 35 deletions openshift/template.yml → openshift/04-deployment-template.yml
Original file line number Diff line number Diff line change
@@ -1,23 +1,23 @@
apiVersion: v1
kind: Template
metadata:
name: "apicast-cloud-hosted"
name: "apicast-cloud-hosted-deployment"
objects:

- apiVersion: v1
kind: DeploymentConfig
metadata:
name: apicast-mapping-service
name: apicast-mapping-service-${RELEASE_REF}
spec:
replicas: 1
selector:
deploymentconfig: apicast-mapping-service
deploymentconfig: apicast-mapping-service-${RELEASE_REF}
strategy:
type: Rolling
template:
metadata:
labels:
deploymentconfig: apicast-mapping-service
deploymentconfig: apicast-mapping-service-${RELEASE_REF}
spec:
containers:
- name: apicast-mapping-service
Expand Down Expand Up @@ -50,23 +50,30 @@ objects:
- containerPort: 8090
name: management
protocol: TCP
resources:
limits:
cpu: '1'
memory: 128Mi
requests:
cpu: 500m
memory: 64Mi
triggers:
- type: ConfigChange

- apiVersion: v1
kind: DeploymentConfig
metadata:
name: apicast
name: apicast-${RELEASE_REF}
spec:
replicas: 1
selector:
deploymentconfig: apicast
deploymentconfig: apicast-${RELEASE_REF}
strategy:
type: Rolling
template:
metadata:
labels:
deploymentconfig: apicast
deploymentconfig: apicast-${RELEASE_REF}
spec:
containers:
- env:
Expand All @@ -77,8 +84,10 @@ objects:
- name: THREESCALE_DEPLOYMENT_ENV
value: "${ENVIRONMENT}"
- name: THREESCALE_PORTAL_ENDPOINT
value: "http://apicast-mapping-service/config"
image: "${APICAST_IMAGE}"
value: "http://apicast-mapping-service-${RELEASE_REF}/config"
- name: APICAST_OIDC_LOG_LEVEL
value: "notice"
image: apicast-cloud-hosted:${RELEASE_REF}
imagePullPolicy: IfNotPresent
name: apicast
livenessProbe:
Expand All @@ -101,29 +110,46 @@ objects:
- containerPort: 8090
name: management
protocol: TCP
- containerPort: 9421
name: metrics
protocol: TCP
resources:
Copy link
Author

Choose a reason for hiding this comment

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

@mikz Should we set the APICAST_WORKERS too?

Copy link
Contributor

Choose a reason for hiding this comment

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

Nope. APIcast autodetects number of requested CPU cores: 3scale/APIcast#600

Copy link
Author

Choose a reason for hiding this comment

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

ok

limits:
cpu: '1'
memory: 128Mi
requests:
cpu: 500m
memory: 64Mi
triggers:
- type: ConfigChange
- type: ImageChange
imageChangeParams:
automatic: true
containerNames:
- apicast
from:
kind: ImageStreamTag
name: apicast-cloud-hosted:${RELEASE_REF}

- apiVersion: v1
kind: Service
metadata:
name: apicast-mapping-service
name: apicast-mapping-service-${RELEASE_REF}
spec:
ports:
- name: mapping
port: 80
protocol: TCP
targetPort: mapping
selector:
deploymentconfig: apicast-mapping-service
deploymentconfig: apicast-mapping-service-${RELEASE_REF}

- apiVersion: v1
kind: Service
metadata:
name: apicast
name: apicast-${RELEASE_REF}
annotations:
service.alpha.openshift.io/dependencies: |-
[{"name": "apicast-mapping-service", "kind": "Service"}]
[{"name": "apicast-mapping-service-${RELEASE_REF}", "kind": "Service"}]
spec:
ports:
- name: proxy
Expand All @@ -135,28 +161,31 @@ objects:
port: 8090
targetPort: management
selector:
deploymentconfig: apicast
deploymentconfig: apicast-${RELEASE_REF}

- apiVersion: v1
kind: Route
kind: Service
metadata:
name: apicast-router
labels:
app: apicast-router
name: apicast-metrics-${RELEASE_REF}
annotations:
prometheus.io/scrape: 'true'
prometheus.io/path: '/metrics'
prometheus.io/port: '9421'
spec:
host: apicast.${ENVIRONMENT}.gw.apicast.io
to:
kind: Service
name: apicast
port:
targetPort: proxy
wildcardPolicy: Subdomain
tls:
termination: edge
insecureEdgeTerminationPolicy: Allow
ports:
- name: metrics
protocol: TCP
port: 9421
targetPort: metrics
selector:
deploymentconfig: apicast-${RELEASE_REF}

parameters:

- description: "Release version reference"
name: RELEASE_REF
required: true

- description: "Deployment environment. `staging` or `production`"
name: ENVIRONMENT
required: true
Expand All @@ -168,14 +197,10 @@ parameters:
- name: MAPPING_SERVICE_IMAGE
description: "Mapping Service image name. Used to discover proxy configurations."
required: true
value: "quay.io/3scale/apicast-cloud-hosted:mapping-service-v3.0.0-cloud1"

- name: APICAST_IMAGE
description: "APIcast image name."
required: true
value: "quay.io/3scale/apicast-cloud-hosted:apicast-v3.0.0-cloud1"
value: "quay.io/3scale/apicast-cloud-hosted:mapping-service-master"

- name: MASTER_ACCESS_TOKEN_SECRET
description: "Secret name that containts System Master Access Token password"
required: true
value: 'master-access-token-secret'

49 changes: 49 additions & 0 deletions openshift/05-routes.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
apiVersion: v1
kind: Template
metadata:
name: "apicast-cloud-hosted"
objects:

- apiVersion: v1
kind: Route
metadata:
name: apicast-router
labels:
app: apicast-router
spec:
host: apicast.${ENVIRONMENT}.gw.apicast.io
to:
kind: Service
name: apicast
port:
targetPort: proxy
wildcardPolicy: Subdomain
tls:
termination: edge
insecureEdgeTerminationPolicy: Allow

- apiVersion: v1
kind: Route
metadata:
name: apicast-${ENVIRONMENT}-policies
spec:
host: apicast.${ENVIRONMENT}.${WILDCARD_DOMAIN}
path: /policies
to:
kind: Service
name: apicast
port:
targetPort: management
wildcardPolicy: None
tls:
termination: edge

parameters:

- description: "Deployment environment. `staging` or `production`"
name: ENVIRONMENT
required: true

- description: "Openshift Cluster Wildcard Domain"
name: WILDCARD_DOMAIN
required: true
28 changes: 28 additions & 0 deletions openshift/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
.PHONY: all imagestream buildconfig deploy route help
.DEFAULT_GOAL := help

MKFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST)))
THISDIR_PATH := $(patsubst %/,%,$(abspath $(dir $(MKFILE_PATH))))

all: imagestream buildconfig deploy route

imagestream: ## Create the Imagestreams (APIcast and Builder APICast).
oc create -f $(THISDIR_PATH)/01-apicast-cloud-hosted-imagestream.yml
oc create -f $(THISDIR_PATH)/02-apicast-builder-imagestream.yml

buildconfig: ## Create the BuildConfig.
oc create -f $(THISDIR_PATH)/03-build-config.yml

deploy: ## Create the BuildConfig. Parameters: RELEASE_REF, ENVIRONMENT, CACHE_TTL.
oc new-app -f $(THISDIR_PATH)/04-deployment-template.yml \
-p RELEASE_REF=${RELEASE_REF} \
-p ENVIRONMENT=${ENVIRONMENT} \
-p CACHE_TTL=${CACHE_TTL}
Copy link
Contributor

Choose a reason for hiding this comment

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

Will this crash when CACHE_TTL is empty? It should.

Copy link
Author

Choose a reason for hiding this comment

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

yes it crashes because there is no predefined value in the template.

Actually it brakes without RELEASE_REF AND ENVIRONMENT also.

The actuall error message:

oc new-app -f /Users/dcesario/src/apicast-cloud-hosted/openshift/04-deployment-template.yml \
		-p RELEASE_REF=test-dani3 \
		-p ENVIRONMENT=staging \
		-p CACHE_TTL=
error: error processing template "apicast-staging/apicast-cloud-hosted-deployment": Template "apicast-cloud-hosted-deployment" is invalid: template.parameters[2]: Required value: template.parameters[2]: parameter CACHE_TTL is required and must be specified
make: *** [deploy] Error 1

Copy link
Contributor

Choose a reason for hiding this comment

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

👍


route: ## Create the Routes.Parameters: WILDCARD_DOMAIN, ENVIRONMENT.
oc new-app -f $(THISDIR_PATH)/05-routes.yml \
-p ENVIRONMENT=${ENVIRONMENT} \
-p WILDCARD_DOMAIN=${WILDCARD_DOMAIN}

help: ## Print this help
@awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST)
5 changes: 4 additions & 1 deletion openshift/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,7 @@
1. `oc create -f secret.yml`
1. `oc secrets add serviceaccount/default secrets/3scale-openshift-pull-secret --for=pull`
1. `oc secret new-basicauth master-access-token-secret --password=MASTER_ACCESS_TOKEN`
1. `oc new-app -f openshift/template.yml` (with `-p ENVIRONMENT=production -p CACHE_TTL=300` for production or `-p ENVIRONMENT=staging -p CACHE_TTL=0` for staging)
1. `make imagestream` to deploy the imageStreams (Apicast Cloud Hosted and Apicast Builder)
1. `make buildconfig` to create the BuildConfig
1. `make deploy RELEASE_REF=release_number ENVIRONMENT=staging CACHE_TTL=0` - (with `ENVIRONMENT=production CACHE_TTL=300` for production or `ENVIRONMENT=staging CACHE_TTL=0` for staging)
1. `make route ENVIRONMENT=staging WILDCARD_DOMAIN=cluster.wildcard.domain.com` - Wildcard Domain Concatenation: `apicast.${ENVIRONMENT}.${WILDCARD_DOMAIN}`