80 changed files with 1004 additions and 911 deletions
@ -0,0 +1,239 @@ |
|||||
|
apiVersion: apiextensions.k8s.io/v1beta1 |
||||
|
kind: CustomResourceDefinition |
||||
|
metadata: |
||||
|
creationTimestamp: null |
||||
|
name: applications.app.k8s.io |
||||
|
spec: |
||||
|
group: app.k8s.io |
||||
|
names: |
||||
|
kind: Application |
||||
|
plural: applications |
||||
|
scope: Namespaced |
||||
|
validation: |
||||
|
openAPIV3Schema: |
||||
|
properties: |
||||
|
apiVersion: |
||||
|
type: string |
||||
|
kind: |
||||
|
type: string |
||||
|
metadata: |
||||
|
type: object |
||||
|
spec: |
||||
|
properties: |
||||
|
addOwnerRef: |
||||
|
type: boolean |
||||
|
assemblyPhase: |
||||
|
type: string |
||||
|
componentKinds: |
||||
|
items: |
||||
|
type: object |
||||
|
type: array |
||||
|
descriptor: |
||||
|
properties: |
||||
|
description: |
||||
|
type: string |
||||
|
icons: |
||||
|
items: |
||||
|
properties: |
||||
|
size: |
||||
|
type: string |
||||
|
src: |
||||
|
type: string |
||||
|
type: |
||||
|
type: string |
||||
|
required: |
||||
|
- src |
||||
|
type: object |
||||
|
type: array |
||||
|
keywords: |
||||
|
items: |
||||
|
type: string |
||||
|
type: array |
||||
|
links: |
||||
|
items: |
||||
|
properties: |
||||
|
description: |
||||
|
type: string |
||||
|
url: |
||||
|
type: string |
||||
|
type: object |
||||
|
type: array |
||||
|
maintainers: |
||||
|
items: |
||||
|
properties: |
||||
|
email: |
||||
|
type: string |
||||
|
name: |
||||
|
type: string |
||||
|
url: |
||||
|
type: string |
||||
|
type: object |
||||
|
type: array |
||||
|
notes: |
||||
|
type: string |
||||
|
owners: |
||||
|
items: |
||||
|
properties: |
||||
|
email: |
||||
|
type: string |
||||
|
name: |
||||
|
type: string |
||||
|
url: |
||||
|
type: string |
||||
|
type: object |
||||
|
type: array |
||||
|
type: |
||||
|
type: string |
||||
|
version: |
||||
|
type: string |
||||
|
type: object |
||||
|
info: |
||||
|
items: |
||||
|
properties: |
||||
|
name: |
||||
|
type: string |
||||
|
type: |
||||
|
type: string |
||||
|
value: |
||||
|
type: string |
||||
|
valueFrom: |
||||
|
properties: |
||||
|
configMapKeyRef: |
||||
|
properties: |
||||
|
apiVersion: |
||||
|
type: string |
||||
|
fieldPath: |
||||
|
type: string |
||||
|
key: |
||||
|
type: string |
||||
|
kind: |
||||
|
type: string |
||||
|
name: |
||||
|
type: string |
||||
|
namespace: |
||||
|
type: string |
||||
|
resourceVersion: |
||||
|
type: string |
||||
|
uid: |
||||
|
type: string |
||||
|
type: object |
||||
|
ingressRef: |
||||
|
properties: |
||||
|
apiVersion: |
||||
|
type: string |
||||
|
fieldPath: |
||||
|
type: string |
||||
|
host: |
||||
|
type: string |
||||
|
kind: |
||||
|
type: string |
||||
|
name: |
||||
|
type: string |
||||
|
namespace: |
||||
|
type: string |
||||
|
path: |
||||
|
type: string |
||||
|
resourceVersion: |
||||
|
type: string |
||||
|
uid: |
||||
|
type: string |
||||
|
type: object |
||||
|
secretKeyRef: |
||||
|
properties: |
||||
|
apiVersion: |
||||
|
type: string |
||||
|
fieldPath: |
||||
|
type: string |
||||
|
key: |
||||
|
type: string |
||||
|
kind: |
||||
|
type: string |
||||
|
name: |
||||
|
type: string |
||||
|
namespace: |
||||
|
type: string |
||||
|
resourceVersion: |
||||
|
type: string |
||||
|
uid: |
||||
|
type: string |
||||
|
type: object |
||||
|
serviceRef: |
||||
|
properties: |
||||
|
apiVersion: |
||||
|
type: string |
||||
|
fieldPath: |
||||
|
type: string |
||||
|
kind: |
||||
|
type: string |
||||
|
name: |
||||
|
type: string |
||||
|
namespace: |
||||
|
type: string |
||||
|
path: |
||||
|
type: string |
||||
|
port: |
||||
|
format: int32 |
||||
|
type: integer |
||||
|
resourceVersion: |
||||
|
type: string |
||||
|
uid: |
||||
|
type: string |
||||
|
type: object |
||||
|
type: |
||||
|
type: string |
||||
|
type: object |
||||
|
type: object |
||||
|
type: array |
||||
|
selector: |
||||
|
type: object |
||||
|
type: object |
||||
|
status: |
||||
|
properties: |
||||
|
components: |
||||
|
items: |
||||
|
properties: |
||||
|
group: |
||||
|
type: string |
||||
|
kind: |
||||
|
type: string |
||||
|
link: |
||||
|
type: string |
||||
|
name: |
||||
|
type: string |
||||
|
status: |
||||
|
type: string |
||||
|
type: object |
||||
|
type: array |
||||
|
conditions: |
||||
|
items: |
||||
|
properties: |
||||
|
lastTransitionTime: |
||||
|
format: date-time |
||||
|
type: string |
||||
|
lastUpdateTime: |
||||
|
format: date-time |
||||
|
type: string |
||||
|
message: |
||||
|
type: string |
||||
|
reason: |
||||
|
type: string |
||||
|
status: |
||||
|
type: string |
||||
|
type: |
||||
|
type: string |
||||
|
required: |
||||
|
- type |
||||
|
- status |
||||
|
type: object |
||||
|
type: array |
||||
|
observedGeneration: |
||||
|
format: int64 |
||||
|
type: integer |
||||
|
type: object |
||||
|
version: v1beta1 |
||||
|
status: |
||||
|
acceptedNames: |
||||
|
kind: "" |
||||
|
plural: "" |
||||
|
conditions: [] |
||||
|
storedVersions: [] |
@ -0,0 +1,4 @@ |
|||||
|
apiVersion: kustomize.config.k8s.io/v1beta1 |
||||
|
kind: Kustomization |
||||
|
resources: |
||||
|
- crd.yaml |
@ -0,0 +1,5 @@ |
|||||
|
apiVersion: kustomize.config.k8s.io/v1beta1 |
||||
|
bases: |
||||
|
- base |
||||
|
kind: Kustomization |
||||
|
namespace: kubeflow |
@ -0,0 +1,11 @@ |
|||||
|
apiVersion: rbac.authorization.k8s.io/v1 |
||||
|
kind: ClusterRoleBinding |
||||
|
metadata: |
||||
|
name: cluster-role-binding |
||||
|
roleRef: |
||||
|
apiGroup: rbac.authorization.k8s.io |
||||
|
kind: ClusterRole |
||||
|
name: cluster-role |
||||
|
subjects: |
||||
|
- kind: ServiceAccount |
||||
|
name: service-account |
@ -0,0 +1,21 @@ |
|||||
|
apiVersion: rbac.authorization.k8s.io/v1 |
||||
|
kind: ClusterRole |
||||
|
metadata: |
||||
|
name: cluster-role |
||||
|
rules: |
||||
|
- apiGroups: |
||||
|
- '*' |
||||
|
resources: |
||||
|
- '*' |
||||
|
verbs: |
||||
|
- get |
||||
|
- list |
||||
|
- update |
||||
|
- patch |
||||
|
- watch |
||||
|
- apiGroups: |
||||
|
- app.k8s.io |
||||
|
resources: |
||||
|
- '*' |
||||
|
verbs: |
||||
|
- '*' |
@ -0,0 +1,29 @@ |
|||||
|
apiVersion: kustomize.config.k8s.io/v1beta1 |
||||
|
kind: Kustomization |
||||
|
resources: |
||||
|
- cluster-role.yaml |
||||
|
- cluster-role-binding.yaml |
||||
|
- service-account.yaml |
||||
|
- service.yaml |
||||
|
- stateful-set.yaml |
||||
|
namespace: kubeflow |
||||
|
nameprefix: application-controller- |
||||
|
configMapGenerator: |
||||
|
- name: parameters |
||||
|
env: params.env |
||||
|
generatorOptions: |
||||
|
disableNameSuffixHash: true |
||||
|
images: |
||||
|
- name: gcr.io/kubeflow-images-public/kubernetes-sigs/application |
||||
|
newName: gcr.io/kubeflow-images-public/kubernetes-sigs/application |
||||
|
newTag: 1.0-beta |
||||
|
vars: |
||||
|
- name: project |
||||
|
objref: |
||||
|
kind: ConfigMap |
||||
|
name: parameters |
||||
|
apiVersion: v1 |
||||
|
fieldref: |
||||
|
fieldpath: data.project |
||||
|
configurations: |
||||
|
- params.yaml |
@ -0,0 +1 @@ |
|||||
|
project= |
@ -0,0 +1,3 @@ |
|||||
|
varReference: |
||||
|
- path: spec/template/spec/containers/image |
||||
|
kind: StatefulSet |
@ -0,0 +1,4 @@ |
|||||
|
apiVersion: v1 |
||||
|
kind: ServiceAccount |
||||
|
metadata: |
||||
|
name: service-account |
@ -0,0 +1,7 @@ |
|||||
|
apiVersion: v1 |
||||
|
kind: Service |
||||
|
metadata: |
||||
|
name: service |
||||
|
spec: |
||||
|
ports: |
||||
|
- port: 443 |
@ -0,0 +1,27 @@ |
|||||
|
apiVersion: apps/v1 |
||||
|
kind: StatefulSet |
||||
|
metadata: |
||||
|
name: stateful-set |
||||
|
spec: |
||||
|
serviceName: service |
||||
|
selector: |
||||
|
matchLabels: |
||||
|
app: application-controller |
||||
|
template: |
||||
|
metadata: |
||||
|
labels: |
||||
|
app: application-controller |
||||
|
annotations: |
||||
|
sidecar.istio.io/inject: "false" |
||||
|
spec: |
||||
|
containers: |
||||
|
- name: manager |
||||
|
command: |
||||
|
- /root/manager |
||||
|
image: gcr.io/kubeflow-images-public/kubernetes-sigs/application |
||||
|
imagePullPolicy: Always |
||||
|
env: |
||||
|
- name: project |
||||
|
value: $(project) |
||||
|
serviceAccountName: service-account |
||||
|
volumeClaimTemplates: [] |
@ -0,0 +1,15 @@ |
|||||
|
apiVersion: kustomize.config.k8s.io/v1beta1 |
||||
|
bases: |
||||
|
- base |
||||
|
commonLabels: |
||||
|
app.kubernetes.io/component: kubeflow |
||||
|
app.kubernetes.io/instance: kubeflow-v0.7.0 |
||||
|
app.kubernetes.io/managed-by: kfctl |
||||
|
app.kubernetes.io/name: kubeflow |
||||
|
app.kubernetes.io/part-of: kubeflow |
||||
|
app.kubernetes.io/version: v0.7.0 |
||||
|
kind: Kustomization |
||||
|
namespace: kubeflow |
||||
|
resources: |
||||
|
- overlays/application/application.yaml |
||||
|
namePrefix: application1 |
@ -0,0 +1,34 @@ |
|||||
|
apiVersion: app.k8s.io/v1beta1 |
||||
|
kind: Application |
||||
|
metadata: |
||||
|
name: kubeflow |
||||
|
spec: |
||||
|
selector: |
||||
|
matchLabels: |
||||
|
app.kubernetes.io/name: kubeflow |
||||
|
app.kubernetes.io/instance: kubeflow-v0.7.0 |
||||
|
app.kubernetes.io/managed-by: kfctl |
||||
|
app.kubernetes.io/component: kubeflow |
||||
|
app.kubernetes.io/part-of: kubeflow |
||||
|
app.kubernetes.io/version: v0.7.0 |
||||
|
componentKinds: |
||||
|
- group: app.k8s.io |
||||
|
kind: Application |
||||
|
descriptor: |
||||
|
type: kubeflow |
||||
|
version: v1beta1 |
||||
|
description: application that aggregates all kubeflow applications |
||||
|
maintainers: |
||||
|
- name: Jeremy Lewi |
||||
|
email: jlewi@google.com |
||||
|
- name: Kam Kasravi |
||||
|
email: kam.d.kasravi@intel.com |
||||
|
owners: |
||||
|
- name: Jeremy Lewi |
||||
|
email: jlewi@google.com |
||||
|
keywords: |
||||
|
- kubeflow |
||||
|
links: |
||||
|
- description: About |
||||
|
url: "https://kubeflow.org" |
||||
|
addOwnerRef: true |
@ -0,0 +1,13 @@ |
|||||
|
apiVersion: kustomize.config.k8s.io/v1beta1 |
||||
|
kind: Kustomization |
||||
|
bases: |
||||
|
- ../../base |
||||
|
resources: |
||||
|
- application.yaml |
||||
|
commonLabels: |
||||
|
app.kubernetes.io/name: kubeflow |
||||
|
app.kubernetes.io/instance: kubeflow-v0.7.0 |
||||
|
app.kubernetes.io/managed-by: kfctl |
||||
|
app.kubernetes.io/component: kubeflow |
||||
|
app.kubernetes.io/part-of: kubeflow |
||||
|
app.kubernetes.io/version: v0.7.0 |
@ -0,0 +1,10 @@ |
|||||
|
apiVersion: kustomize.config.k8s.io/v1beta1 |
||||
|
kind: Kustomization |
||||
|
bases: |
||||
|
- ../../base |
||||
|
patchesStrategicMerge: |
||||
|
- stateful-set.yaml |
||||
|
images: |
||||
|
- name: gcr.io/$(project)/application-controller |
||||
|
newName: gcr.io/$(project)/application-controller |
||||
|
newTag: latest |
@ -0,0 +1,25 @@ |
|||||
|
apiVersion: apps/v1 |
||||
|
kind: StatefulSet |
||||
|
metadata: |
||||
|
name: stateful-set |
||||
|
spec: |
||||
|
template: |
||||
|
metadata: |
||||
|
annotations: |
||||
|
sidecar.istio.io/inject: "false" |
||||
|
spec: |
||||
|
containers: |
||||
|
- name: manager |
||||
|
image: gcr.io/$(project)/application-controller:latest |
||||
|
command: |
||||
|
- /go/bin/dlv |
||||
|
args: |
||||
|
- --listen=:2345 |
||||
|
- --headless=true |
||||
|
- --api-version=2 |
||||
|
- exec |
||||
|
- /go/src/github.com/kubernetes-sigs/application/manager |
||||
|
ports: |
||||
|
- containerPort: 2345 |
||||
|
securityContext: |
||||
|
privileged: true |
@ -0,0 +1,19 @@ |
|||||
|
apiVersion: argoproj.io/v1alpha1 |
||||
|
kind: Application |
||||
|
metadata: |
||||
|
name: application-crds |
||||
|
namespace: kubeflow |
||||
|
finalizers: |
||||
|
- resources-finalizer.argocd.argoproj.io |
||||
|
spec: |
||||
|
destination: |
||||
|
namespace: kubeflow |
||||
|
server: {{ .Values.spec.destination.server }} |
||||
|
project: default |
||||
|
source: |
||||
|
path: application-crds |
||||
|
repoURL: {{ .Values.spec.source.repoURL }} |
||||
|
targetRevision: {{ .Values.spec.source.targetRevision }} |
||||
|
|
||||
|
|
||||
|
|
@ -0,0 +1,16 @@ |
|||||
|
apiVersion: argoproj.io/v1alpha1 |
||||
|
kind: Application |
||||
|
metadata: |
||||
|
name: application |
||||
|
namespace: kubeflow |
||||
|
finalizers: |
||||
|
- resources-finalizer.argocd.argoproj.io |
||||
|
spec: |
||||
|
destination: |
||||
|
namespace: kubeflow |
||||
|
server: {{ .Values.spec.destination.server }} |
||||
|
project: default |
||||
|
source: |
||||
|
path: application |
||||
|
repoURL: {{ .Values.spec.source.repoURL }} |
||||
|
targetRevision: {{ .Values.spec.source.targetRevision }} |
@ -0,0 +1,16 @@ |
|||||
|
apiVersion: argoproj.io/v1alpha1 |
||||
|
kind: Application |
||||
|
metadata: |
||||
|
name: jupyter-web-app |
||||
|
namespace: kubeflow |
||||
|
finalizers: |
||||
|
- resources-finalizer.argocd.argoproj.io |
||||
|
spec: |
||||
|
destination: |
||||
|
namespace: kubeflow |
||||
|
server: {{ .Values.spec.destination.server }} |
||||
|
project: default |
||||
|
source: |
||||
|
path: jupyter-web-app |
||||
|
repoURL: {{ .Values.spec.source.repoURL }} |
||||
|
targetRevision: {{ .Values.spec.source.targetRevision }} |
@ -1,21 +0,0 @@ |
|||||
# Patterns to ignore when building packages. |
|
||||
# This supports shell glob matching, relative path matching, and |
|
||||
# negation (prefixed with !). Only one pattern per line. |
|
||||
.DS_Store |
|
||||
# Common VCS dirs |
|
||||
.git/ |
|
||||
.gitignore |
|
||||
.bzr/ |
|
||||
.bzrignore |
|
||||
.hg/ |
|
||||
.hgignore |
|
||||
.svn/ |
|
||||
# Common backup files |
|
||||
*.swp |
|
||||
*.bak |
|
||||
*.tmp |
|
||||
*~ |
|
||||
# Various IDEs |
|
||||
.project |
|
||||
.idea/ |
|
||||
*.tmproj |
|
@ -1,5 +0,0 @@ |
|||||
apiVersion: v1 |
|
||||
appVersion: "1.0" |
|
||||
description: A Helm chart for Kubernetes |
|
||||
name: helm-guestbook |
|
||||
version: 0.1.0 |
|
@ -1,30 +0,0 @@ |
|||||
# Blue Green |
|
||||
|
|
||||
The blue green strategy is not supported by built-in Kubernetes Deployment but available via third-party Kubernetes controller. |
|
||||
This example demonstrates how to implement blue-green deployment via [Argo Rollouts](https://github.com/argoproj/argo-rollouts): |
|
||||
|
|
||||
1. Install Argo Rollouts controller: https://github.com/argoproj/argo-rollouts#installation |
|
||||
2. Create a sample application and sync it. |
|
||||
|
|
||||
``` |
|
||||
argocd app create --name blue-green --repo https://github.com/argoproj/argocd-example-apps --dest-server https://kubernetes.default.svc --dest-namespace default --path blue-green && argocd app sync blue-green |
|
||||
``` |
|
||||
|
|
||||
Once the application is synced you can access it using `blue-green-helm-guestbook` service. |
|
||||
|
|
||||
3. Change image version parameter to trigger blue-green deployment process: |
|
||||
|
|
||||
``` |
|
||||
argocd app set blue-green -p image.tag=0.2 && argocd app sync blue-green |
|
||||
``` |
|
||||
|
|
||||
Now application runs `ks-guestbook-demo:0.1` and `ks-guestbook-demo:0.2` images simultaneously. |
|
||||
The `ks-guestbook-demo:0.2` is still considered `blue` available only via preview service `blue-green-helm-guestbook-preview`. |
|
||||
|
|
||||
4. Promote `ks-guestbook-demo:0.2` to `green` by patching `Rollout` resource: |
|
||||
|
|
||||
``` |
|
||||
argocd app patch-resource blue-green --kind Rollout --resource-name blue-green-helm-guestbook --patch '{ "status": { "verifyingPreview": false } }' --patch-type 'application/merge-patch+json' |
|
||||
``` |
|
||||
|
|
||||
This promotes `ks-guestbook-demo:0.2` to `green` status and `Rollout` deletes old replica which runs `ks-guestbook-demo:0.1`. |
|
@ -1,19 +0,0 @@ |
|||||
1. Get the application URL by running these commands: |
|
||||
{{- if .Values.ingress.enabled }} |
|
||||
{{- range .Values.ingress.hosts }} |
|
||||
http{{ if $.Values.ingress.tls }}s{{ end }}://{{ . }}{{ $.Values.ingress.path }} |
|
||||
{{- end }} |
|
||||
{{- else if contains "NodePort" .Values.service.type }} |
|
||||
export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ template "helm-guestbook.fullname" . }}) |
|
||||
export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") |
|
||||
echo http://$NODE_IP:$NODE_PORT |
|
||||
{{- else if contains "LoadBalancer" .Values.service.type }} |
|
||||
NOTE: It may take a few minutes for the LoadBalancer IP to be available. |
|
||||
You can watch the status of by running 'kubectl get svc -w {{ template "helm-guestbook.fullname" . }}' |
|
||||
export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ template "helm-guestbook.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}') |
|
||||
echo http://$SERVICE_IP:{{ .Values.service.port }} |
|
||||
{{- else if contains "ClusterIP" .Values.service.type }} |
|
||||
export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ template "helm-guestbook.name" . }},release={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") |
|
||||
echo "Visit http://127.0.0.1:8080 to use your application" |
|
||||
kubectl port-forward $POD_NAME 8080:80 |
|
||||
{{- end }} |
|
@ -1,32 +0,0 @@ |
|||||
{{/* vim: set filetype=mustache: */}} |
|
||||
{{/* |
|
||||
Expand the name of the chart. |
|
||||
*/}} |
|
||||
{{- define "helm-guestbook.name" -}} |
|
||||
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} |
|
||||
{{- end -}} |
|
||||
|
|
||||
{{/* |
|
||||
Create a default fully qualified app name. |
|
||||
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). |
|
||||
If release name contains chart name it will be used as a full name. |
|
||||
*/}} |
|
||||
{{- define "helm-guestbook.fullname" -}} |
|
||||
{{- if .Values.fullnameOverride -}} |
|
||||
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} |
|
||||
{{- else -}} |
|
||||
{{- $name := default .Chart.Name .Values.nameOverride -}} |
|
||||
{{- if contains $name .Release.Name -}} |
|
||||
{{- .Release.Name | trunc 63 | trimSuffix "-" -}} |
|
||||
{{- else -}} |
|
||||
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} |
|
||||
{{- end -}} |
|
||||
{{- end -}} |
|
||||
{{- end -}} |
|
||||
|
|
||||
{{/* |
|
||||
Create chart name and version as used by the chart label. |
|
||||
*/}} |
|
||||
{{- define "helm-guestbook.chart" -}} |
|
||||
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} |
|
||||
{{- end -}} |
|
@ -1,56 +0,0 @@ |
|||||
apiVersion: argoproj.io/v1alpha1 |
|
||||
kind: Rollout |
|
||||
metadata: |
|
||||
name: {{ template "helm-guestbook.fullname" . }} |
|
||||
labels: |
|
||||
app: {{ template "helm-guestbook.name" . }} |
|
||||
chart: {{ template "helm-guestbook.chart" . }} |
|
||||
release: {{ .Release.Name }} |
|
||||
heritage: {{ .Release.Service }} |
|
||||
spec: |
|
||||
replicas: {{ .Values.replicaCount }} |
|
||||
revisionHistoryLimit: 3 |
|
||||
selector: |
|
||||
matchLabels: |
|
||||
app: {{ template "helm-guestbook.name" . }} |
|
||||
release: {{ .Release.Name }} |
|
||||
strategy: |
|
||||
blueGreen: |
|
||||
activeService: {{ template "helm-guestbook.fullname" . }} |
|
||||
previewService: {{ template "helm-guestbook.fullname" . }}-preview |
|
||||
template: |
|
||||
metadata: |
|
||||
labels: |
|
||||
app: {{ template "helm-guestbook.name" . }} |
|
||||
release: {{ .Release.Name }} |
|
||||
spec: |
|
||||
containers: |
|
||||
- name: {{ .Chart.Name }} |
|
||||
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" |
|
||||
imagePullPolicy: {{ .Values.image.pullPolicy }} |
|
||||
ports: |
|
||||
- name: http |
|
||||
containerPort: 80 |
|
||||
protocol: TCP |
|
||||
livenessProbe: |
|
||||
httpGet: |
|
||||
path: / |
|
||||
port: http |
|
||||
readinessProbe: |
|
||||
httpGet: |
|
||||
path: / |
|
||||
port: http |
|
||||
resources: |
|
||||
{{ toYaml .Values.resources | indent 12 }} |
|
||||
{{- with .Values.nodeSelector }} |
|
||||
nodeSelector: |
|
||||
{{ toYaml . | indent 8 }} |
|
||||
{{- end }} |
|
||||
{{- with .Values.affinity }} |
|
||||
affinity: |
|
||||
{{ toYaml . | indent 8 }} |
|
||||
{{- end }} |
|
||||
{{- with .Values.tolerations }} |
|
||||
tolerations: |
|
||||
{{ toYaml . | indent 8 }} |
|
||||
{{- end }} |
|
@ -1,40 +0,0 @@ |
|||||
--- |
|
||||
apiVersion: v1 |
|
||||
kind: Service |
|
||||
metadata: |
|
||||
name: {{ template "helm-guestbook.fullname" . }} |
|
||||
labels: |
|
||||
app: {{ template "helm-guestbook.name" . }} |
|
||||
chart: {{ template "helm-guestbook.chart" . }} |
|
||||
release: {{ .Release.Name }} |
|
||||
heritage: {{ .Release.Service }} |
|
||||
spec: |
|
||||
type: {{ .Values.service.type }} |
|
||||
ports: |
|
||||
- port: {{ .Values.service.port }} |
|
||||
targetPort: http |
|
||||
protocol: TCP |
|
||||
name: http |
|
||||
selector: |
|
||||
app: {{ template "helm-guestbook.name" . }} |
|
||||
release: {{ .Release.Name }} |
|
||||
--- |
|
||||
apiVersion: v1 |
|
||||
kind: Service |
|
||||
metadata: |
|
||||
name: {{ template "helm-guestbook.fullname" . }}-preview |
|
||||
labels: |
|
||||
app: {{ template "helm-guestbook.name" . }} |
|
||||
chart: {{ template "helm-guestbook.chart" . }} |
|
||||
release: {{ .Release.Name }} |
|
||||
heritage: {{ .Release.Service }} |
|
||||
spec: |
|
||||
type: {{ .Values.service.type }} |
|
||||
ports: |
|
||||
- port: {{ .Values.service.port }} |
|
||||
targetPort: http |
|
||||
protocol: TCP |
|
||||
name: http |
|
||||
selector: |
|
||||
app: {{ template "helm-guestbook.name" . }} |
|
||||
release: {{ .Release.Name }} |
|
@ -1,45 +0,0 @@ |
|||||
# Default values for helm-guestbook. |
|
||||
# This is a YAML-formatted file. |
|
||||
# Declare variables to be passed into your templates. |
|
||||
|
|
||||
replicaCount: 1 |
|
||||
|
|
||||
image: |
|
||||
repository: gcr.io/heptio-images/ks-guestbook-demo |
|
||||
tag: 0.1 |
|
||||
pullPolicy: IfNotPresent |
|
||||
|
|
||||
service: |
|
||||
type: ClusterIP |
|
||||
port: 80 |
|
||||
|
|
||||
ingress: |
|
||||
enabled: false |
|
||||
annotations: {} |
|
||||
# kubernetes.io/ingress.class: nginx |
|
||||
# kubernetes.io/tls-acme: "true" |
|
||||
path: / |
|
||||
hosts: |
|
||||
- chart-example.local |
|
||||
tls: [] |
|
||||
# - secretName: chart-example-tls |
|
||||
# hosts: |
|
||||
# - chart-example.local |
|
||||
|
|
||||
resources: {} |
|
||||
# We usually recommend not to specify default resources and to leave this as a conscious |
|
||||
# choice for the user. This also increases chances charts run on environments with little |
|
||||
# resources, such as Minikube. If you do want to specify resources, uncomment the following |
|
||||
# lines, adjust them as necessary, and remove the curly braces after 'resources:'. |
|
||||
# limits: |
|
||||
# cpu: 100m |
|
||||
# memory: 128Mi |
|
||||
# requests: |
|
||||
# cpu: 100m |
|
||||
# memory: 128Mi |
|
||||
|
|
||||
nodeSelector: {} |
|
||||
|
|
||||
tolerations: [] |
|
||||
|
|
||||
affinity: {} |
|
@ -1,20 +0,0 @@ |
|||||
apiVersion: apps/v1 |
|
||||
kind: Deployment |
|
||||
metadata: |
|
||||
name: guestbook-ui |
|
||||
spec: |
|
||||
replicas: 1 |
|
||||
revisionHistoryLimit: 3 |
|
||||
selector: |
|
||||
matchLabels: |
|
||||
app: guestbook-ui |
|
||||
template: |
|
||||
metadata: |
|
||||
labels: |
|
||||
app: guestbook-ui |
|
||||
spec: |
|
||||
containers: |
|
||||
- image: gcr.io/heptio-images/ks-guestbook-demo:0.2 |
|
||||
name: guestbook-ui |
|
||||
ports: |
|
||||
- containerPort: 80 |
|
@ -1,10 +0,0 @@ |
|||||
apiVersion: v1 |
|
||||
kind: Service |
|
||||
metadata: |
|
||||
name: guestbook-ui |
|
||||
spec: |
|
||||
ports: |
|
||||
- port: 80 |
|
||||
targetPort: 80 |
|
||||
selector: |
|
||||
app: guestbook-ui |
|
@ -1 +0,0 @@ |
|||||
name: wordpress |
|
@ -1,55 +0,0 @@ |
|||||
# Helm Dependencies |
|
||||
|
|
||||
This example application demonstrates how an OTS (off-the-shelf) helm chart can be retrieved and |
|
||||
pinned to a specific helm sem version from an upstream helm repository, and customized using a custom |
|
||||
values.yaml in the private git repository. |
|
||||
|
|
||||
In this example, the wordpress application is pulled from the stable helm repo, and pinned to v5.0.2: |
|
||||
|
|
||||
```yaml |
|
||||
dependencies: |
|
||||
- name: wordpress |
|
||||
version: 5.0.2 |
|
||||
repository: https://kubernetes-charts.storage.googleapis.com |
|
||||
``` |
|
||||
|
|
||||
A custom values.yaml is used to customize the parameters of the wordpress helm chart: |
|
||||
|
|
||||
```yaml |
|
||||
wordpress: |
|
||||
wordpressPassword: foo |
|
||||
mariadb: |
|
||||
db: |
|
||||
password: bar |
|
||||
rootUser: |
|
||||
password: baz |
|
||||
``` |
|
||||
|
|
||||
### Subchart Note |
|
||||
|
|
||||
The wordpress chart referenced in this example contains a subchart for mariadb as specified in the requirements.yaml file of the wordpress chart: |
|
||||
```yaml |
|
||||
- name: mariadb |
|
||||
version: 5.x.x |
|
||||
repository: https://kubernetes-charts.storage.googleapis.com/ |
|
||||
condition: mariadb.enabled |
|
||||
tags: |
|
||||
- wordpress-database |
|
||||
``` |
|
||||
|
|
||||
In order to disable this chart, you must set the value to false for both `mariadb.enabled` and `wordpress.mariadb.enabled`. The first is used by the mariadb subchart condition field, the second is used by the wordpress chart deployment template. An example demonstration is available in the values-nomaria.yaml file: |
|
||||
```yaml |
|
||||
mariadb: |
|
||||
enabled: false |
|
||||
|
|
||||
wordpress: |
|
||||
wordpressPassword: foo |
|
||||
mariadb: |
|
||||
enabled: false |
|
||||
externalDatabase: |
|
||||
host: localhost |
|
||||
user: bn_wordpress |
|
||||
password: "" |
|
||||
database: bitnami_wordpress |
|
||||
port: 3306 |
|
||||
``` |
|
@ -1,4 +0,0 @@ |
|||||
dependencies: |
|
||||
- name: wordpress |
|
||||
version: 5.0.2 |
|
||||
repository: https://kubernetes-charts.storage.googleapis.com |
|
@ -1,13 +0,0 @@ |
|||||
mariadb: |
|
||||
enabled: false |
|
||||
|
|
||||
wordpress: |
|
||||
wordpressPassword: foo |
|
||||
mariadb: |
|
||||
enabled: false |
|
||||
externalDatabase: |
|
||||
host: localhost |
|
||||
user: bn_wordpress |
|
||||
password: "" |
|
||||
database: bitnami_wordpress |
|
||||
port: 3306 |
|
@ -1,7 +0,0 @@ |
|||||
wordpress: |
|
||||
wordpressPassword: foo |
|
||||
mariadb: |
|
||||
db: |
|
||||
password: bar |
|
||||
rootUser: |
|
||||
password: baz |
|
@ -1,21 +0,0 @@ |
|||||
# Patterns to ignore when building packages. |
|
||||
# This supports shell glob matching, relative path matching, and |
|
||||
# negation (prefixed with !). Only one pattern per line. |
|
||||
.DS_Store |
|
||||
# Common VCS dirs |
|
||||
.git/ |
|
||||
.gitignore |
|
||||
.bzr/ |
|
||||
.bzrignore |
|
||||
.hg/ |
|
||||
.hgignore |
|
||||
.svn/ |
|
||||
# Common backup files |
|
||||
*.swp |
|
||||
*.bak |
|
||||
*.tmp |
|
||||
*~ |
|
||||
# Various IDEs |
|
||||
.project |
|
||||
.idea/ |
|
||||
*.tmproj |
|
@ -1,5 +0,0 @@ |
|||||
apiVersion: v1 |
|
||||
appVersion: "1.0" |
|
||||
description: A Helm chart for Kubernetes |
|
||||
name: helm-guestbook |
|
||||
version: 0.1.0 |
|
@ -1,19 +0,0 @@ |
|||||
1. Get the application URL by running these commands: |
|
||||
{{- if .Values.ingress.enabled }} |
|
||||
{{- range .Values.ingress.hosts }} |
|
||||
http{{ if $.Values.ingress.tls }}s{{ end }}://{{ . }}{{ $.Values.ingress.path }} |
|
||||
{{- end }} |
|
||||
{{- else if contains "NodePort" .Values.service.type }} |
|
||||
export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ template "helm-guestbook.fullname" . }}) |
|
||||
export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") |
|
||||
echo http://$NODE_IP:$NODE_PORT |
|
||||
{{- else if contains "LoadBalancer" .Values.service.type }} |
|
||||
NOTE: It may take a few minutes for the LoadBalancer IP to be available. |
|
||||
You can watch the status of by running 'kubectl get svc -w {{ template "helm-guestbook.fullname" . }}' |
|
||||
export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ template "helm-guestbook.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}') |
|
||||
echo http://$SERVICE_IP:{{ .Values.service.port }} |
|
||||
{{- else if contains "ClusterIP" .Values.service.type }} |
|
||||
export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ template "helm-guestbook.name" . }},release={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") |
|
||||
echo "Visit http://127.0.0.1:8080 to use your application" |
|
||||
kubectl port-forward $POD_NAME 8080:80 |
|
||||
{{- end }} |
|
@ -1,32 +0,0 @@ |
|||||
{{/* vim: set filetype=mustache: */}} |
|
||||
{{/* |
|
||||
Expand the name of the chart. |
|
||||
*/}} |
|
||||
{{- define "helm-guestbook.name" -}} |
|
||||
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} |
|
||||
{{- end -}} |
|
||||
|
|
||||
{{/* |
|
||||
Create a default fully qualified app name. |
|
||||
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). |
|
||||
If release name contains chart name it will be used as a full name. |
|
||||
*/}} |
|
||||
{{- define "helm-guestbook.fullname" -}} |
|
||||
{{- if .Values.fullnameOverride -}} |
|
||||
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} |
|
||||
{{- else -}} |
|
||||
{{- $name := default .Chart.Name .Values.nameOverride -}} |
|
||||
{{- if contains $name .Release.Name -}} |
|
||||
{{- .Release.Name | trunc 63 | trimSuffix "-" -}} |
|
||||
{{- else -}} |
|
||||
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} |
|
||||
{{- end -}} |
|
||||
{{- end -}} |
|
||||
{{- end -}} |
|
||||
|
|
||||
{{/* |
|
||||
Create chart name and version as used by the chart label. |
|
||||
*/}} |
|
||||
{{- define "helm-guestbook.chart" -}} |
|
||||
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} |
|
||||
{{- end -}} |
|
@ -1,52 +0,0 @@ |
|||||
apiVersion: apps/v1 |
|
||||
kind: Deployment |
|
||||
metadata: |
|
||||
name: {{ template "helm-guestbook.fullname" . }} |
|
||||
labels: |
|
||||
app: {{ template "helm-guestbook.name" . }} |
|
||||
chart: {{ template "helm-guestbook.chart" . }} |
|
||||
release: {{ .Release.Name }} |
|
||||
heritage: {{ .Release.Service }} |
|
||||
spec: |
|
||||
replicas: {{ .Values.replicaCount }} |
|
||||
revisionHistoryLimit: 3 |
|
||||
selector: |
|
||||
matchLabels: |
|
||||
app: {{ template "helm-guestbook.name" . }} |
|
||||
release: {{ .Release.Name }} |
|
||||
template: |
|
||||
metadata: |
|
||||
labels: |
|
||||
app: {{ template "helm-guestbook.name" . }} |
|
||||
release: {{ .Release.Name }} |
|
||||
spec: |
|
||||
containers: |
|
||||
- name: {{ .Chart.Name }} |
|
||||
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" |
|
||||
imagePullPolicy: {{ .Values.image.pullPolicy }} |
|
||||
ports: |
|
||||
- name: http |
|
||||
containerPort: 80 |
|
||||
protocol: TCP |
|
||||
livenessProbe: |
|
||||
httpGet: |
|
||||
path: / |
|
||||
port: http |
|
||||
readinessProbe: |
|
||||
httpGet: |
|
||||
path: / |
|
||||
port: http |
|
||||
resources: |
|
||||
{{ toYaml .Values.resources | indent 12 }} |
|
||||
{{- with .Values.nodeSelector }} |
|
||||
nodeSelector: |
|
||||
{{ toYaml . | indent 8 }} |
|
||||
{{- end }} |
|
||||
{{- with .Values.affinity }} |
|
||||
affinity: |
|
||||
{{ toYaml . | indent 8 }} |
|
||||
{{- end }} |
|
||||
{{- with .Values.tolerations }} |
|
||||
tolerations: |
|
||||
{{ toYaml . | indent 8 }} |
|
||||
{{- end }} |
|
@ -1,19 +0,0 @@ |
|||||
apiVersion: v1 |
|
||||
kind: Service |
|
||||
metadata: |
|
||||
name: {{ template "helm-guestbook.fullname" . }} |
|
||||
labels: |
|
||||
app: {{ template "helm-guestbook.name" . }} |
|
||||
chart: {{ template "helm-guestbook.chart" . }} |
|
||||
release: {{ .Release.Name }} |
|
||||
heritage: {{ .Release.Service }} |
|
||||
spec: |
|
||||
type: {{ .Values.service.type }} |
|
||||
ports: |
|
||||
- port: {{ .Values.service.port }} |
|
||||
targetPort: http |
|
||||
protocol: TCP |
|
||||
name: http |
|
||||
selector: |
|
||||
app: {{ template "helm-guestbook.name" . }} |
|
||||
release: {{ .Release.Name }} |
|
@ -1,2 +0,0 @@ |
|||||
service: |
|
||||
type: LoadBalancer |
|
@ -1,45 +0,0 @@ |
|||||
# Default values for helm-guestbook. |
|
||||
# This is a YAML-formatted file. |
|
||||
# Declare variables to be passed into your templates. |
|
||||
|
|
||||
replicaCount: 1 |
|
||||
|
|
||||
image: |
|
||||
repository: gcr.io/heptio-images/ks-guestbook-demo |
|
||||
tag: 0.1 |
|
||||
pullPolicy: IfNotPresent |
|
||||
|
|
||||
service: |
|
||||
type: ClusterIP |
|
||||
port: 80 |
|
||||
|
|
||||
ingress: |
|
||||
enabled: false |
|
||||
annotations: {} |
|
||||
# kubernetes.io/ingress.class: nginx |
|
||||
# kubernetes.io/tls-acme: "true" |
|
||||
path: / |
|
||||
hosts: |
|
||||
- chart-example.local |
|
||||
tls: [] |
|
||||
# - secretName: chart-example-tls |
|
||||
# hosts: |
|
||||
# - chart-example.local |
|
||||
|
|
||||
resources: {} |
|
||||
# We usually recommend not to specify default resources and to leave this as a conscious |
|
||||
# choice for the user. This also increases chances charts run on environments with little |
|
||||
# resources, such as Minikube. If you do want to specify resources, uncomment the following |
|
||||
# lines, adjust them as necessary, and remove the curly braces after 'resources:'. |
|
||||
# limits: |
|
||||
# cpu: 100m |
|
||||
# memory: 128Mi |
|
||||
# requests: |
|
||||
# cpu: 100m |
|
||||
# memory: 128Mi |
|
||||
|
|
||||
nodeSelector: {} |
|
||||
|
|
||||
tolerations: [] |
|
||||
|
|
||||
affinity: {} |
|
@ -1,65 +0,0 @@ |
|||||
function ( |
|
||||
containerPort=80, |
|
||||
image="gcr.io/heptio-images/ks-guestbook-demo:0.2", |
|
||||
name="jsonnet-guestbook-ui", |
|
||||
replicas=1, |
|
||||
servicePort=80, |
|
||||
type="LoadBalancer" |
|
||||
) |
|
||||
[ |
|
||||
{ |
|
||||
"apiVersion": "v1", |
|
||||
"kind": "Service", |
|
||||
"metadata": { |
|
||||
"name": name |
|
||||
}, |
|
||||
"spec": { |
|
||||
"ports": [ |
|
||||
{ |
|
||||
"port": servicePort, |
|
||||
"targetPort": containerPort |
|
||||
} |
|
||||
], |
|
||||
"selector": { |
|
||||
"app": name |
|
||||
}, |
|
||||
"type": type |
|
||||
} |
|
||||
}, |
|
||||
{ |
|
||||
"apiVersion": "apps/v1", |
|
||||
"kind": "Deployment", |
|
||||
"metadata": { |
|
||||
"name": name |
|
||||
}, |
|
||||
"spec": { |
|
||||
"replicas": replicas, |
|
||||
"revisionHistoryLimit": 3, |
|
||||
"selector": { |
|
||||
"matchLabels": { |
|
||||
"app": name |
|
||||
}, |
|
||||
}, |
|
||||
"template": { |
|
||||
"metadata": { |
|
||||
"labels": { |
|
||||
"app": name |
|
||||
} |
|
||||
}, |
|
||||
"spec": { |
|
||||
"containers": [ |
|
||||
{ |
|
||||
"image": image, |
|
||||
"name": name, |
|
||||
"ports": [ |
|
||||
{ |
|
||||
"containerPort": containerPort |
|
||||
} |
|
||||
] |
|
||||
} |
|
||||
] |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
] |
|
@ -1,59 +0,0 @@ |
|||||
local params = import 'params.libsonnet'; |
|
||||
|
|
||||
[ |
|
||||
{ |
|
||||
"apiVersion": "v1", |
|
||||
"kind": "Service", |
|
||||
"metadata": { |
|
||||
"name": params.name |
|
||||
}, |
|
||||
"spec": { |
|
||||
"ports": [ |
|
||||
{ |
|
||||
"port": params.servicePort, |
|
||||
"targetPort": params.containerPort |
|
||||
} |
|
||||
], |
|
||||
"selector": { |
|
||||
"app": params.name |
|
||||
}, |
|
||||
"type": params.type |
|
||||
} |
|
||||
}, |
|
||||
{ |
|
||||
"apiVersion": "apps/v1", |
|
||||
"kind": "Deployment", |
|
||||
"metadata": { |
|
||||
"name": params.name |
|
||||
}, |
|
||||
"spec": { |
|
||||
"replicas": params.replicas, |
|
||||
"revisionHistoryLimit": 3, |
|
||||
"selector": { |
|
||||
"matchLabels": { |
|
||||
"app": params.name |
|
||||
}, |
|
||||
}, |
|
||||
"template": { |
|
||||
"metadata": { |
|
||||
"labels": { |
|
||||
"app": params.name |
|
||||
} |
|
||||
}, |
|
||||
"spec": { |
|
||||
"containers": [ |
|
||||
{ |
|
||||
"image": params.image, |
|
||||
"name": params.name, |
|
||||
"ports": [ |
|
||||
{ |
|
||||
"containerPort": params.containerPort |
|
||||
} |
|
||||
] |
|
||||
} |
|
||||
] |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
] |
|
@ -1,8 +0,0 @@ |
|||||
{ |
|
||||
containerPort: 80, |
|
||||
image: "gcr.io/heptio-images/ks-guestbook-demo:0.2", |
|
||||
name: "jsonnet-guestbook-ui", |
|
||||
replicas: 1, |
|
||||
servicePort: 80, |
|
||||
type: "LoadBalancer", |
|
||||
} |
|
@ -0,0 +1,11 @@ |
|||||
|
apiVersion: rbac.authorization.k8s.io/v1 |
||||
|
kind: ClusterRoleBinding |
||||
|
metadata: |
||||
|
name: cluster-role-binding |
||||
|
roleRef: |
||||
|
apiGroup: rbac.authorization.k8s.io |
||||
|
kind: ClusterRole |
||||
|
name: cluster-role |
||||
|
subjects: |
||||
|
- kind: ServiceAccount |
||||
|
name: service-account |
@ -0,0 +1,54 @@ |
|||||
|
apiVersion: rbac.authorization.k8s.io/v1 |
||||
|
kind: ClusterRole |
||||
|
metadata: |
||||
|
name: cluster-role |
||||
|
rules: |
||||
|
- apiGroups: |
||||
|
- "" |
||||
|
resources: |
||||
|
- namespaces |
||||
|
verbs: |
||||
|
- get |
||||
|
- list |
||||
|
- create |
||||
|
- delete |
||||
|
- apiGroups: |
||||
|
- authorization.k8s.io |
||||
|
resources: |
||||
|
- subjectaccessreviews |
||||
|
verbs: |
||||
|
- create |
||||
|
- apiGroups: |
||||
|
- kubeflow.org |
||||
|
resources: |
||||
|
- notebooks |
||||
|
- notebooks/finalizers |
||||
|
- poddefaults |
||||
|
verbs: |
||||
|
- get |
||||
|
- list |
||||
|
- create |
||||
|
- delete |
||||
|
- apiGroups: |
||||
|
- "" |
||||
|
resources: |
||||
|
- persistentvolumeclaims |
||||
|
verbs: |
||||
|
- create |
||||
|
- delete |
||||
|
- get |
||||
|
- list |
||||
|
- apiGroups: |
||||
|
- "" |
||||
|
resources: |
||||
|
- events |
||||
|
verbs: |
||||
|
- list |
||||
|
- apiGroups: |
||||
|
- storage.k8s.io |
||||
|
resources: |
||||
|
- storageclasses |
||||
|
verbs: |
||||
|
- get |
||||
|
- list |
||||
|
- watch |
@ -0,0 +1,127 @@ |
|||||
|
apiVersion: v1 |
||||
|
data: |
||||
|
spawner_ui_config.yaml: | |
||||
|
# Configuration file for the Jupyter UI. |
||||
|
# |
||||
|
# Each Jupyter UI option is configured by two keys: 'value' and 'readOnly' |
||||
|
# - The 'value' key contains the default value |
||||
|
# - The 'readOnly' key determines if the option will be available to users |
||||
|
# |
||||
|
# If the 'readOnly' key is present and set to 'true', the respective option |
||||
|
# will be disabled for users and only set by the admin. Also when a |
||||
|
# Notebook is POSTED to the API if a necessary field is not present then |
||||
|
# the value from the config will be used. |
||||
|
# |
||||
|
# If the 'readOnly' key is missing (defaults to 'false'), the respective option |
||||
|
# will be available for users to edit. |
||||
|
# |
||||
|
# Note that some values can be templated. Such values are the names of the |
||||
|
# Volumes as well as their StorageClass |
||||
|
spawnerFormDefaults: |
||||
|
image: |
||||
|
# The container Image for the user's Jupyter Notebook |
||||
|
# If readonly, this value must be a member of the list below |
||||
|
value: gcr.io/kubeflow-images-public/tensorflow-1.14.0-notebook-cpu:v-base-ef41372-1177829795472347138 |
||||
|
# The list of available standard container Images |
||||
|
options: |
||||
|
- gcr.io/kubeflow-images-public/tensorflow-1.14.0-notebook-cpu:v0.7.0 |
||||
|
- gcr.io/kubeflow-images-public/tensorflow-1.14.0-notebook-gpu:v0.7.0 |
||||
|
- gcr.io/kubeflow-images-public/tensorflow-2.0.0a0-notebook-cpu:v0.7.0 |
||||
|
- gcr.io/kubeflow-images-public/tensorflow-2.0.0a0-notebook-gpu:v0.7.0 |
||||
|
# By default, custom container Images are allowed |
||||
|
# Uncomment the following line to only enable standard container Images |
||||
|
readOnly: false |
||||
|
cpu: |
||||
|
# CPU for user's Notebook |
||||
|
value: '0.5' |
||||
|
readOnly: false |
||||
|
memory: |
||||
|
# Memory for user's Notebook |
||||
|
value: 1.0Gi |
||||
|
readOnly: false |
||||
|
workspaceVolume: |
||||
|
# Workspace Volume to be attached to user's Notebook |
||||
|
# Each Workspace Volume is declared with the following attributes: |
||||
|
# Type, Name, Size, MountPath and Access Mode |
||||
|
value: |
||||
|
type: |
||||
|
# The Type of the Workspace Volume |
||||
|
# Supported values: 'New', 'Existing' |
||||
|
value: New |
||||
|
name: |
||||
|
# The Name of the Workspace Volume |
||||
|
# Note that this is a templated value. Special values: |
||||
|
# {notebook-name}: Replaced with the name of the Notebook. The frontend |
||||
|
# will replace this value as the user types the name |
||||
|
value: 'workspace-{notebook-name}' |
||||
|
size: |
||||
|
# The Size of the Workspace Volume (in Gi) |
||||
|
value: '10Gi' |
||||
|
mountPath: |
||||
|
# The Path that the Workspace Volume will be mounted |
||||
|
value: /home/jovyan |
||||
|
accessModes: |
||||
|
# The Access Mode of the Workspace Volume |
||||
|
# Supported values: 'ReadWriteOnce', 'ReadWriteMany', 'ReadOnlyMany' |
||||
|
value: ReadWriteOnce |
||||
|
class: |
||||
|
# The StrageClass the PVC will use if type is New. Special values are: |
||||
|
# {none}: default StorageClass |
||||
|
# {empty}: empty string "" |
||||
|
value: '{none}' |
||||
|
readOnly: false |
||||
|
dataVolumes: |
||||
|
# List of additional Data Volumes to be attached to the user's Notebook |
||||
|
value: [] |
||||
|
# Each Data Volume is declared with the following attributes: |
||||
|
# Type, Name, Size, MountPath and Access Mode |
||||
|
# |
||||
|
# For example, a list with 2 Data Volumes: |
||||
|
# value: |
||||
|
# - value: |
||||
|
# type: |
||||
|
# value: New |
||||
|
# name: |
||||
|
# value: '{notebook-name}-vol-1' |
||||
|
# size: |
||||
|
# value: '10Gi' |
||||
|
# class: |
||||
|
# value: standard |
||||
|
# mountPath: |
||||
|
# value: /home/jovyan/vol-1 |
||||
|
# accessModes: |
||||
|
# value: ReadWriteOnce |
||||
|
# class: |
||||
|
# value: {none} |
||||
|
# - value: |
||||
|
# type: |
||||
|
# value: New |
||||
|
# name: |
||||
|
# value: '{notebook-name}-vol-2' |
||||
|
# size: |
||||
|
# value: '10Gi' |
||||
|
# mountPath: |
||||
|
# value: /home/jovyan/vol-2 |
||||
|
# accessModes: |
||||
|
# value: ReadWriteMany |
||||
|
# class: |
||||
|
# value: {none} |
||||
|
readOnly: false |
||||
|
extraResources: |
||||
|
# Extra Resource Limits for user's Notebook |
||||
|
# e.x. "{'nvidia.com/gpu': 2}" |
||||
|
value: "{}" |
||||
|
readOnly: false |
||||
|
shm: |
||||
|
value: true |
||||
|
readOnly: false |
||||
|
configurations: |
||||
|
# List of labels to be selected, these are the labels from PodDefaults |
||||
|
# value: |
||||
|
# - add-gcp-secret |
||||
|
# - default-editor |
||||
|
value: [] |
||||
|
readOnly: false |
||||
|
kind: ConfigMap |
||||
|
metadata: |
||||
|
name: config |
@ -0,0 +1,37 @@ |
|||||
|
apiVersion: apps/v1 |
||||
|
kind: Deployment |
||||
|
metadata: |
||||
|
name: deployment |
||||
|
spec: |
||||
|
replicas: 1 |
||||
|
template: |
||||
|
spec: |
||||
|
containers: |
||||
|
- env: |
||||
|
- name: ROK_SECRET_NAME |
||||
|
valueFrom: |
||||
|
configMapKeyRef: |
||||
|
name: parameters |
||||
|
key: ROK_SECRET_NAME |
||||
|
- name: UI |
||||
|
valueFrom: |
||||
|
configMapKeyRef: |
||||
|
name: parameters |
||||
|
key: UI |
||||
|
- name: USERID_HEADER |
||||
|
value: $(userid-header) |
||||
|
- name: USERID_PREFIX |
||||
|
value: $(userid-prefix) |
||||
|
image: gcr.io/kubeflow-images-public/jupyter-web-app:v0.5.0 |
||||
|
imagePullPolicy: $(policy) |
||||
|
name: jupyter-web-app |
||||
|
ports: |
||||
|
- containerPort: 5000 |
||||
|
volumeMounts: |
||||
|
- mountPath: /etc/config |
||||
|
name: config-volume |
||||
|
serviceAccountName: service-account |
||||
|
volumes: |
||||
|
- configMap: |
||||
|
name: config |
||||
|
name: config-volume |
@ -0,0 +1,70 @@ |
|||||
|
apiVersion: kustomize.config.k8s.io/v1beta1 |
||||
|
kind: Kustomization |
||||
|
resources: |
||||
|
- cluster-role-binding.yaml |
||||
|
- cluster-role.yaml |
||||
|
- config-map.yaml |
||||
|
- deployment.yaml |
||||
|
- role-binding.yaml |
||||
|
- role.yaml |
||||
|
- service-account.yaml |
||||
|
- service.yaml |
||||
|
namePrefix: jupyter-web-app- |
||||
|
namespace: kubeflow |
||||
|
commonLabels: |
||||
|
app: jupyter-web-app |
||||
|
kustomize.component: jupyter-web-app |
||||
|
images: |
||||
|
- name: gcr.io/kubeflow-images-public/jupyter-web-app |
||||
|
newName: gcr.io/kubeflow-images-public/jupyter-web-app |
||||
|
newTag: vmaster-ge8c85064 |
||||
|
configMapGenerator: |
||||
|
- env: params.env |
||||
|
name: parameters |
||||
|
generatorOptions: |
||||
|
disableNameSuffixHash: true |
||||
|
vars: |
||||
|
- fieldref: |
||||
|
fieldPath: data.policy |
||||
|
name: policy |
||||
|
objref: |
||||
|
apiVersion: v1 |
||||
|
kind: ConfigMap |
||||
|
name: parameters |
||||
|
- fieldref: |
||||
|
fieldPath: data.prefix |
||||
|
name: prefix |
||||
|
objref: |
||||
|
apiVersion: v1 |
||||
|
kind: ConfigMap |
||||
|
name: parameters |
||||
|
- fieldref: |
||||
|
fieldPath: data.clusterDomain |
||||
|
name: clusterDomain |
||||
|
objref: |
||||
|
apiVersion: v1 |
||||
|
kind: ConfigMap |
||||
|
name: parameters |
||||
|
- fieldref: |
||||
|
fieldPath: metadata.namespace |
||||
|
name: namespace |
||||
|
objref: |
||||
|
apiVersion: v1 |
||||
|
kind: Service |
||||
|
name: service |
||||
|
- fieldref: |
||||
|
fieldPath: data.userid-header |
||||
|
name: userid-header |
||||
|
objref: |
||||
|
apiVersion: v1 |
||||
|
kind: ConfigMap |
||||
|
name: parameters |
||||
|
- fieldref: |
||||
|
fieldPath: data.userid-prefix |
||||
|
name: userid-prefix |
||||
|
objref: |
||||
|
apiVersion: v1 |
||||
|
kind: ConfigMap |
||||
|
name: parameters |
||||
|
configurations: |
||||
|
- params.yaml |
@ -0,0 +1,7 @@ |
|||||
|
UI=default |
||||
|
ROK_SECRET_NAME=secret-rok-{username} |
||||
|
policy=Always |
||||
|
prefix=jupyter |
||||
|
clusterDomain=cluster.local |
||||
|
userid-header=kubeflow-userid |
||||
|
userid-prefix= |
@ -0,0 +1,9 @@ |
|||||
|
varReference: |
||||
|
- path: spec/template/spec/containers/imagePullPolicy |
||||
|
kind: Deployment |
||||
|
- path: metadata/annotations/getambassador.io\/config |
||||
|
kind: Service |
||||
|
- path: spec/template/spec/containers/0/env/2/value |
||||
|
kind: Deployment |
||||
|
- path: spec/template/spec/containers/0/env/3/value |
||||
|
kind: Deployment |
@ -0,0 +1,11 @@ |
|||||
|
apiVersion: rbac.authorization.k8s.io/v1beta1 |
||||
|
kind: RoleBinding |
||||
|
metadata: |
||||
|
name: jupyter-notebook-role-binding |
||||
|
roleRef: |
||||
|
apiGroup: rbac.authorization.k8s.io |
||||
|
kind: Role |
||||
|
name: jupyter-notebook-role |
||||
|
subjects: |
||||
|
- kind: ServiceAccount |
||||
|
name: jupyter-notebook |
@ -0,0 +1,35 @@ |
|||||
|
apiVersion: rbac.authorization.k8s.io/v1beta1 |
||||
|
kind: Role |
||||
|
metadata: |
||||
|
name: jupyter-notebook-role |
||||
|
rules: |
||||
|
- apiGroups: |
||||
|
- "" |
||||
|
resources: |
||||
|
- pods |
||||
|
- pods/log |
||||
|
- secrets |
||||
|
- services |
||||
|
verbs: |
||||
|
- '*' |
||||
|
- apiGroups: |
||||
|
- "" |
||||
|
- apps |
||||
|
- extensions |
||||
|
resources: |
||||
|
- deployments |
||||
|
- replicasets |
||||
|
verbs: |
||||
|
- '*' |
||||
|
- apiGroups: |
||||
|
- kubeflow.org |
||||
|
resources: |
||||
|
- '*' |
||||
|
verbs: |
||||
|
- '*' |
||||
|
- apiGroups: |
||||
|
- batch |
||||
|
resources: |
||||
|
- jobs |
||||
|
verbs: |
||||
|
- '*' |
@ -0,0 +1,4 @@ |
|||||
|
apiVersion: v1 |
||||
|
kind: ServiceAccount |
||||
|
metadata: |
||||
|
name: service-account |
@ -0,0 +1,23 @@ |
|||||
|
apiVersion: v1 |
||||
|
kind: Service |
||||
|
metadata: |
||||
|
annotations: |
||||
|
getambassador.io/config: |- |
||||
|
--- |
||||
|
apiVersion: ambassador/v0 |
||||
|
kind: Mapping |
||||
|
name: webapp_mapping |
||||
|
prefix: /$(prefix)/ |
||||
|
service: jupyter-web-app-service.$(namespace) |
||||
|
add_request_headers: |
||||
|
x-forwarded-prefix: /jupyter |
||||
|
labels: |
||||
|
run: jupyter-web-app |
||||
|
name: service |
||||
|
spec: |
||||
|
ports: |
||||
|
- name: http |
||||
|
port: 80 |
||||
|
protocol: TCP |
||||
|
targetPort: 5000 |
||||
|
type: ClusterIP |
@ -0,0 +1,15 @@ |
|||||
|
apiVersion: kustomize.config.k8s.io/v1beta1 |
||||
|
bases: |
||||
|
- base |
||||
|
- overlays/istio |
||||
|
commonLabels: |
||||
|
app.kubernetes.io/component: jupyter-web-app |
||||
|
app.kubernetes.io/instance: jupyter-web-app-v0.7.0 |
||||
|
app.kubernetes.io/managed-by: kfctl |
||||
|
app.kubernetes.io/name: jupyter-web-app |
||||
|
app.kubernetes.io/part-of: kubeflow |
||||
|
app.kubernetes.io/version: v0.7.0 |
||||
|
kind: Kustomization |
||||
|
namespace: kubeflow |
||||
|
resources: |
||||
|
- overlays/application/application.yaml |
@ -0,0 +1,49 @@ |
|||||
|
apiVersion: app.k8s.io/v1beta1 |
||||
|
kind: Application |
||||
|
metadata: |
||||
|
name: jupyter-web-app |
||||
|
spec: |
||||
|
selector: |
||||
|
matchLabels: |
||||
|
app.kubernetes.io/name: jupyter-web-app |
||||
|
app.kubernetes.io/instance: jupyter-web-app-v0.7.0 |
||||
|
app.kubernetes.io/managed-by: kfctl |
||||
|
app.kubernetes.io/component: jupyter-web-app |
||||
|
app.kubernetes.io/part-of: kubeflow |
||||
|
app.kubernetes.io/version: v0.7.0 |
||||
|
componentKinds: |
||||
|
- group: core |
||||
|
kind: ConfigMap |
||||
|
- group: apps |
||||
|
kind: Deployment |
||||
|
- group: rbac.authorization.k8s.io |
||||
|
kind: RoleBinding |
||||
|
- group: rbac.authorization.k8s.io |
||||
|
kind: Role |
||||
|
- group: core |
||||
|
kind: ServiceAccount |
||||
|
- group: core |
||||
|
kind: Service |
||||
|
- group: networking.istio.io |
||||
|
kind: VirtualService |
||||
|
descriptor: |
||||
|
type: jupyter-web-app |
||||
|
version: v1beta1 |
||||
|
description: Provides a UI which allows the user to create/conect/delete jupyter notebooks. |
||||
|
maintainers: |
||||
|
- name: Kimonas Sotirchos |
||||
|
email: kimwnasptd@arrikto.com |
||||
|
owners: |
||||
|
- name: Kimonas Sotirchos |
||||
|
email: kimwnasptd@arrikto.com |
||||
|
keywords: |
||||
|
- jupyterhub |
||||
|
- jupyter ui |
||||
|
- notebooks |
||||
|
links: |
||||
|
- description: About |
||||
|
url: https://github.com/kubeflow/kubeflow/tree/master/components/jupyter-web-app |
||||
|
- description: Docs |
||||
|
url: https://www.kubeflow.org/docs/notebooks |
||||
|
addOwnerRef: true |
||||
|
|
@ -0,0 +1,13 @@ |
|||||
|
apiVersion: kustomize.config.k8s.io/v1beta1 |
||||
|
kind: Kustomization |
||||
|
bases: |
||||
|
- ../../base |
||||
|
resources: |
||||
|
- application.yaml |
||||
|
commonLabels: |
||||
|
app.kubernetes.io/name: jupyter-web-app |
||||
|
app.kubernetes.io/instance: jupyter-web-app-v0.7.0 |
||||
|
app.kubernetes.io/managed-by: kfctl |
||||
|
app.kubernetes.io/component: jupyter-web-app |
||||
|
app.kubernetes.io/part-of: kubeflow |
||||
|
app.kubernetes.io/version: v0.7.0 |
@ -0,0 +1,6 @@ |
|||||
|
apiVersion: kustomize.config.k8s.io/v1beta1 |
||||
|
kind: Kustomization |
||||
|
resources: |
||||
|
- virtual-service.yaml |
||||
|
configurations: |
||||
|
- params.yaml |
@ -0,0 +1,3 @@ |
|||||
|
varReference: |
||||
|
- path: spec/http/route/destination/host |
||||
|
kind: VirtualService |
@ -0,0 +1,24 @@ |
|||||
|
apiVersion: networking.istio.io/v1alpha3 |
||||
|
kind: VirtualService |
||||
|
metadata: |
||||
|
name: jupyter-web-app |
||||
|
spec: |
||||
|
gateways: |
||||
|
- kubeflow-gateway |
||||
|
hosts: |
||||
|
- '*' |
||||
|
http: |
||||
|
- headers: |
||||
|
request: |
||||
|
add: |
||||
|
x-forwarded-prefix: /jupyter |
||||
|
match: |
||||
|
- uri: |
||||
|
prefix: /jupyter/ |
||||
|
rewrite: |
||||
|
uri: / |
||||
|
route: |
||||
|
- destination: |
||||
|
host: jupyter-web-app-service.$(namespace).svc.$(clusterDomain) |
||||
|
port: |
||||
|
number: 80 |
@ -1,4 +0,0 @@ |
|||||
/lib |
|
||||
/.ksonnet/registries |
|
||||
/app.override.yaml |
|
||||
/.ks_environment |
|
@ -1,23 +0,0 @@ |
|||||
apiVersion: 0.1.0 |
|
||||
environments: |
|
||||
default: |
|
||||
destination: |
|
||||
namespace: default |
|
||||
server: https://kubernetes.default.svc |
|
||||
k8sVersion: v1.10.0 |
|
||||
path: default |
|
||||
dev: |
|
||||
destination: |
|
||||
namespace: dev |
|
||||
server: https://kubernetes.default.svc |
|
||||
k8sVersion: v1.10.0 |
|
||||
path: dev |
|
||||
prod: |
|
||||
destination: |
|
||||
namespace: prod |
|
||||
server: https://kubernetes.default.svc |
|
||||
k8sVersion: v1.10.0 |
|
||||
path: prod |
|
||||
kind: ksonnet.io/app |
|
||||
name: guestbook |
|
||||
version: 0.0.1 |
|
@ -1,59 +0,0 @@ |
|||||
local env = std.extVar("__ksonnet/environments"); |
|
||||
local params = std.extVar("__ksonnet/params").components["guestbook-ui"]; |
|
||||
[ |
|
||||
{ |
|
||||
"apiVersion": "v1", |
|
||||
"kind": "Service", |
|
||||
"metadata": { |
|
||||
"name": params.name |
|
||||
}, |
|
||||
"spec": { |
|
||||
"ports": [ |
|
||||
{ |
|
||||
"port": params.servicePort, |
|
||||
"targetPort": params.containerPort |
|
||||
} |
|
||||
], |
|
||||
"selector": { |
|
||||
"app": params.name |
|
||||
}, |
|
||||
"type": params.type |
|
||||
} |
|
||||
}, |
|
||||
{ |
|
||||
"apiVersion": "apps/v1", |
|
||||
"kind": "Deployment", |
|
||||
"metadata": { |
|
||||
"name": params.name |
|
||||
}, |
|
||||
"spec": { |
|
||||
"replicas": params.replicas, |
|
||||
"revisionHistoryLimit": 3, |
|
||||
"selector": { |
|
||||
"matchLabels": { |
|
||||
"app": params.name |
|
||||
}, |
|
||||
}, |
|
||||
"template": { |
|
||||
"metadata": { |
|
||||
"labels": { |
|
||||
"app": params.name |
|
||||
} |
|
||||
}, |
|
||||
"spec": { |
|
||||
"containers": [ |
|
||||
{ |
|
||||
"image": params.image, |
|
||||
"name": params.name, |
|
||||
"ports": [ |
|
||||
{ |
|
||||
"containerPort": params.containerPort |
|
||||
} |
|
||||
] |
|
||||
} |
|
||||
] |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
] |
|
@ -1,18 +0,0 @@ |
|||||
{ |
|
||||
global: { |
|
||||
// User-defined global parameters; accessible to all component and environments, Ex: |
|
||||
// replicas: 4, |
|
||||
}, |
|
||||
components: { |
|
||||
// Component-level parameters, defined initially from 'ks prototype use ...' |
|
||||
// Each object below should correspond to a component in the components/ directory |
|
||||
"guestbook-ui": { |
|
||||
containerPort: 80, |
|
||||
image: "gcr.io/heptio-images/ks-guestbook-demo:0.2", |
|
||||
name: "ks-guestbook-ui", |
|
||||
replicas: 1, |
|
||||
servicePort: 80, |
|
||||
type: "LoadBalancer", |
|
||||
}, |
|
||||
}, |
|
||||
} |
|
@ -1,4 +0,0 @@ |
|||||
local components = std.extVar("__ksonnet/components"); |
|
||||
components + { |
|
||||
// Insert user-specified overrides here. |
|
||||
} |
|
@ -1,2 +0,0 @@ |
|||||
{ |
|
||||
} |
|
@ -1,8 +0,0 @@ |
|||||
local base = import "base.libsonnet"; |
|
||||
// uncomment if you reference ksonnet-lib |
|
||||
// local k = import "k.libsonnet"; |
|
||||
|
|
||||
base + { |
|
||||
// Insert user-specified overrides here. For example if a component is named \"nginx-deployment\", you might have something like:\n") |
|
||||
// "nginx-deployment"+: k.deployment.mixin.metadata.labels({foo: "bar"}) |
|
||||
} |
|
@ -1,17 +0,0 @@ |
|||||
local params = std.extVar("__ksonnet/params"); |
|
||||
local globals = import "globals.libsonnet"; |
|
||||
local envParams = params + { |
|
||||
components +: { |
|
||||
// Insert component parameter overrides here. Ex: |
|
||||
// guestbook +: { |
|
||||
// name: "guestbook-dev", |
|
||||
// replicas: params.global.replicas, |
|
||||
// }, |
|
||||
}, |
|
||||
}; |
|
||||
|
|
||||
{ |
|
||||
components: { |
|
||||
[x]: envParams.components[x] + globals, for x in std.objectFields(envParams.components) |
|
||||
}, |
|
||||
} |
|
@ -1,2 +0,0 @@ |
|||||
{ |
|
||||
} |
|
@ -1,8 +0,0 @@ |
|||||
local base = import "base.libsonnet"; |
|
||||
// uncomment if you reference ksonnet-lib |
|
||||
// local k = import "k.libsonnet"; |
|
||||
|
|
||||
base + { |
|
||||
// Insert user-specified overrides here. For example if a component is named \"nginx-deployment\", you might have something like:\n") |
|
||||
// "nginx-deployment"+: k.deployment.mixin.metadata.labels({foo: "bar"}) |
|
||||
} |
|
@ -1,17 +0,0 @@ |
|||||
local params = std.extVar("__ksonnet/params"); |
|
||||
local globals = import "globals.libsonnet"; |
|
||||
local envParams = params + { |
|
||||
components +: { |
|
||||
// Insert component parameter overrides here. Ex: |
|
||||
// guestbook +: { |
|
||||
// name: "guestbook-dev", |
|
||||
// replicas: params.global.replicas, |
|
||||
// }, |
|
||||
}, |
|
||||
}; |
|
||||
|
|
||||
{ |
|
||||
components: { |
|
||||
[x]: envParams.components[x] + globals, for x in std.objectFields(envParams.components) |
|
||||
}, |
|
||||
} |
|
@ -1,2 +0,0 @@ |
|||||
{ |
|
||||
} |
|
@ -1,8 +0,0 @@ |
|||||
local base = import "base.libsonnet"; |
|
||||
// uncomment if you reference ksonnet-lib |
|
||||
// local k = import "k.libsonnet"; |
|
||||
|
|
||||
base + { |
|
||||
// Insert user-specified overrides here. For example if a component is named \"nginx-deployment\", you might have something like:\n") |
|
||||
// "nginx-deployment"+: k.deployment.mixin.metadata.labels({foo: "bar"}) |
|
||||
} |
|
@ -1,17 +0,0 @@ |
|||||
local params = std.extVar("__ksonnet/params"); |
|
||||
local globals = import "globals.libsonnet"; |
|
||||
local envParams = params + { |
|
||||
components +: { |
|
||||
// Insert component parameter overrides here. Ex: |
|
||||
// guestbook +: { |
|
||||
// name: "guestbook-dev", |
|
||||
// replicas: params.global.replicas, |
|
||||
// }, |
|
||||
}, |
|
||||
}; |
|
||||
|
|
||||
{ |
|
||||
components: { |
|
||||
[x]: envParams.components[x] + globals, for x in std.objectFields(envParams.components) |
|
||||
}, |
|
||||
} |
|
@ -1,20 +0,0 @@ |
|||||
apiVersion: apps/v1 |
|
||||
kind: Deployment |
|
||||
metadata: |
|
||||
name: guestbook-ui |
|
||||
spec: |
|
||||
replicas: 1 |
|
||||
revisionHistoryLimit: 3 |
|
||||
selector: |
|
||||
matchLabels: |
|
||||
app: guestbook-ui |
|
||||
template: |
|
||||
metadata: |
|
||||
labels: |
|
||||
app: guestbook-ui |
|
||||
spec: |
|
||||
containers: |
|
||||
- image: gcr.io/heptio-images/ks-guestbook-demo:0.2 |
|
||||
name: guestbook-ui |
|
||||
ports: |
|
||||
- containerPort: 80 |
|
@ -1,10 +0,0 @@ |
|||||
apiVersion: v1 |
|
||||
kind: Service |
|
||||
metadata: |
|
||||
name: guestbook-ui |
|
||||
spec: |
|
||||
ports: |
|
||||
- port: 80 |
|
||||
targetPort: 80 |
|
||||
selector: |
|
||||
app: guestbook-ui |
|
@ -1,7 +0,0 @@ |
|||||
namePrefix: kustomize- |
|
||||
|
|
||||
resources: |
|
||||
- guestbook-ui-deployment.yaml |
|
||||
- guestbook-ui-svc.yaml |
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1 |
|
||||
kind: Kustomization |
|
Loading…
Reference in new issue