Commit 36cdff8c by rawmind0

Kubeflow release v0.6.2

parent 45407671
...@@ -2,9 +2,9 @@ apiVersion: v1 ...@@ -2,9 +2,9 @@ apiVersion: v1
appVersion: "1.0" appVersion: "1.0"
description: Machine Learning Toolkit for Kubernetes description: Machine Learning Toolkit for Kubernetes
name: kubeflow name: kubeflow
version: 0.1.0 version: 0.6.2
icon: file://../icon.jpg icon: file://../icon.jpg
maintainers: maintainers:
- name: guangbochen - name: Raul
email: support@rancher.com email: support@rancher.com
home: https://www.kubeflow.org/docs/about/kubeflow/ home: https://www.kubeflow.org/docs/about/kubeflow/
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "{}"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright 2018 Istio Authors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
\ No newline at end of file
...@@ -2,6 +2,13 @@ ...@@ -2,6 +2,13 @@
The Kubeflow project is dedicated to making deployments of machine learning (ML) workflows on Kubernetes simple, portable and scalable. Our goal is not to recreate other services, but to provide a straightforward way to deploy best-of-breed open-source systems for ML to diverse infrastructures. Anywhere you are running Kubernetes, you should be able to run Kubeflow The Kubeflow project is dedicated to making deployments of machine learning (ML) workflows on Kubernetes simple, portable and scalable. Our goal is not to recreate other services, but to provide a straightforward way to deploy best-of-breed open-source systems for ML to diverse infrastructures. Anywhere you are running Kubernetes, you should be able to run Kubeflow
## Requirements
Kubeflow need some requirements in order to work properly:
- Kubeflow 0.6 is just compatible with k8s 1.14 and 1.15. [Compatibility table](https://www.kubeflow.org/docs/started/k8s/overview/#minimum-system-requirements)
- Istio with ingress gateway should be deployed or enabled on k8s cluster.
- Storageclass should be configured on k8s cluster to enable persistence volumes.
## Who should consider using Kubeflow? ## Who should consider using Kubeflow?
Based on the current functionality you should consider using Kubeflow if: Based on the current functionality you should consider using Kubeflow if:
......
...@@ -2,6 +2,13 @@ ...@@ -2,6 +2,13 @@
The Kubeflow project is dedicated to making deployments of machine learning (ML) workflows on Kubernetes simple, portable and scalable. Our goal is not to recreate other services, but to provide a straightforward way to deploy best-of-breed open-source systems for ML to diverse infrastructures. Anywhere you are running Kubernetes, you should be able to run Kubeflow The Kubeflow project is dedicated to making deployments of machine learning (ML) workflows on Kubernetes simple, portable and scalable. Our goal is not to recreate other services, but to provide a straightforward way to deploy best-of-breed open-source systems for ML to diverse infrastructures. Anywhere you are running Kubernetes, you should be able to run Kubeflow
## Requirements
Kubeflow need some requirements in order to work properly:
- Kubeflow 0.6 is just compatible with k8s 1.14 and 1.15. [Compatibility table](https://www.kubeflow.org/docs/started/k8s/overview/#minimum-system-requirements)
- Istio with ingress gateway should be deployed or enabled on k8s cluster.
- Storageclass should be configured on k8s cluster to enable persistence volumes
## Who should consider using Kubeflow? ## Who should consider using Kubeflow?
Based on the current functionality you should consider using Kubeflow if: Based on the current functionality you should consider using Kubeflow if:
...@@ -11,3 +18,7 @@ Based on the current functionality you should consider using Kubeflow if: ...@@ -11,3 +18,7 @@ Based on the current functionality you should consider using Kubeflow if:
- You want to launch training jobs that use resources – such as additional CPUs or GPUs – that aren’t available on your personal computer - You want to launch training jobs that use resources – such as additional CPUs or GPUs – that aren’t available on your personal computer
- You want to combine TensorFlow with other processes - You want to combine TensorFlow with other processes
> For example, you may want to use [tensorflow/agents](https://github.com/google-research/batch-ppo) to run simulations to generate data for training reinforcement learning models. > For example, you may want to use [tensorflow/agents](https://github.com/google-research/batch-ppo) to run simulations to generate data for training reinforcement learning models.
## How it works?
For more details of how Kubeflow works please reference the [Kubeflow Doc](https://www.kubeflow.org/docs/about/kubeflow/).
categories: categories:
- machine learning - machine learning
rancher_max_version: 2.3.1 rancher_max_version: 2.3.3
labels: labels:
io.rancher.certified: experimental io.rancher.certified: experimental
namespace: kubeflow namespace: kubeflow
questions: questions:
- variable: ambassador.service.type - variable: profiles.admin
default: "NodePort" default: johnDoe@acme.com
description: "Define Kubeflow Ambassador UI service type" description: "Kubeflow admin"
type: enum
required: true
options:
- "ClusterIP"
- "NodePort"
- "Rancher-Proxy"
label: Kubeflow Ambassador UI Service
group: "Kubeflow Ambassador Settings"
show_subquestion_if: "NodePort"
subquestions:
- variable: ambassador.service.nodePort
default: ""
description: "NodePort port number(to set explicitly, choose port between 30000-32767)"
type: int
min: 30000
max: 32767
label: Ambassador UI Service NodePort number
- variable: katib.vizier.service.type
default: "ClusterIP"
description: "Define kubeflow katib vizier service type"
type: enum
required: true
options:
- "ClusterIP"
- "NodePort"
label: Kubeflow Katib Vizier Service
group: "Kubeflow Katib Settings"
show_subquestion_if: "NodePort"
subquestions:
- variable: katib.vizier.service.nodePort
default: ""
description: "NodePort port number(to set explicitly, choose port between 30000-32767)"
type: int
min: 30000
max: 32767
label: Katib Vizier Service NodePort number
- variable: katib.vizierdb.persistence.enabled
default: false
description: "Enable persistent volume for Katib Vizier"
type: boolean
required: true required: true
label: Katib Vizier Persistent Volume Enabled
show_subquestion_if: true
group: "Kubeflow Katib Settings"
subquestions:
- variable: katib.vizierdb.persistence.size
default: "10Gi"
description: "Katib Vizier Persistent Volume Size"
type: string type: string
label: Katib Vizier Volume Size label: Admin
- variable: katib.vizierdb.persistence.storageClass - variable: applicationController.project
default: "" default: "test"
description: "If undefined or null, uses the default StorageClass. Default to null" description: "Application controller project"
type: storageclass required: true
label: Default StorageClass for Katib Vizier
- variable: katib.vizierdb.persistence.existingClaim
default: ""
description: "If not empty, uses the specified existing PVC instead of creating new one"
type: string type: string
label: Existing Persistent Volume Claim for Katib Vizier label: Application controller project
- variable: jupyterhub.enabled - variable: argo.executorImage
default: true default: "argoproj/argoexec:v2.3.0"
description: "Enable jupyterhub of single-user Jupyter notebook server" description: "Argo executor image"
type: boolean required: true
type: string
label: Argo executor image
- variable: argo.artifactRepositoryBucket
default: "mlpipeline"
description: "Argo artifact repository bucket"
required: true required: true
label: Enable JupyterHub
group: "JupyterHub Settings"
show_subquestion_if: true
subquestions:
- variable: jupyterhub.image.repository
default: "gcr.io/kubeflow/jupyterhub-k8s"
description: "Docker image of the JupyterHub"
type: string type: string
label: JupyterHub Image Repository label: Argo artifact repository bucket
- variable: jupyterhub.image.tag - variable: argo.artifactRepositoryKeyPrefix
default: "v20180531-3bb991b1" default: "artifacts"
description: "The image tag of JupyterHub" description: "Argo artifact repository key prefix"
required: true
type: string type: string
label: JupyterHub Image Tag label: Argo artifact repository key prefix
- variable: tfJobOperator.enabled - variable: argo.artifactRepositoryAccessKeySecretName
default: true default: "mlpipeline-minio-artifact"
description: "Enable tensorflow job operator" description: "Argo artifact repository access key name"
type: boolean required: true
type: string
label: Argo artifact repository access key name
- variable: argo.artifactRepositoryAccessKeySecretKey
default: "accesskey"
description: "Argo artifact repository access key secret"
required: true
type: password
label: Argo artifact repository access key secret
- variable: argo.artifactRepositorySecretKeySecretName
default: "mlpipeline-minio-artifact"
description: "Argo artifact repository secret key name"
required: true required: true
label: Enable TensorFlow Job Operator
group: "TensorFlow Operator Settings"
show_subquestion_if: true
subquestions:
- variable: tfJobOperator.image.repository
default: "gcr.io/kubeflow-images-public/tf_operator"
description: "Docker image of the TensorFlow Job Operator"
type: string type: string
label: Tensorflow Job Operator Image Repository label: Argo artifact repository secret key name
- variable: tfJobOperator.image.tag - variable: argo.artifactRepositorySecretKeySecretKey
default: "v0.3.0" default: "secretkey"
description: "The image tag of Tensorflow Job Operator" description: "Argo artifact repository secret key secret"
required: true
type: password
label: Argo artifact repository secret key secret
- variable: clusterDomain
default: "cluster.local"
description: "K8s cluster domain"
required: true
type: string type: string
label: Tensorflow Job Operator Image Tag label: K8s cluster domain
- variable: pytorchOperator.enabled - variable: katib.db.password
default: test
description: "Katib db password"
required: true
type: password
label: Katib db password
- variable: katib.db.persistence.enabled
default: false default: false
description: "Enable PyTorch - a deep learning framework." description: "Enable persistent volume for katib db"
type: boolean type: boolean
required: true required: true
label: Enable PyTorch Operator label: Katib db Persistent Volume Enabled
group: "PyTorch Settings"
show_subquestion_if: true show_subquestion_if: true
group: "Katib db Settings"
subquestions: subquestions:
- variable: pytorchOperator.image.repository - variable: katib.db.persistence.size
default: "gcr.io/kubeflow-images-public/pytorch-operator" default: "10Gi"
description: "Docker image of the PyTorch operator" description: "Katib db Persistent Volume Size"
type: string
label: PyTorch Operator Image Repository
- variable: pytorchOperator.image.tag
default: "v0.3.0"
description: "The image tag of PyTorch operator"
type: string type: string
label: PyTorch Operator Image Tag label: Katib db Volume Size
- variable: chainer.enabled - variable: katib.db.persistence.storageClass
default: ""
description: "If undefined or null, uses the default StorageClass. Default to null"
type: storageclass
label: Default StorageClass for katib db
- variable: metadata.db.password
default: test
description: "Metadata db password"
type: password
label: Metadata db password
- variable: metadata.db.persistence.enabled
default: false default: false
description: "Enable Chainer operator - a flexible framework of neural networks" description: "Enable persistent volume for metadata db"
type: boolean type: boolean
required: true required: true
label: Enable Chainer Operator label: Metadata db Persistent Volume Enabled
group: "Chainer Settings"
show_subquestion_if: true show_subquestion_if: true
group: "Metadata db Settings"
subquestions: subquestions:
- variable: chainer.image.repository - variable: metadata.db.persistence.size
default: "gcr.io/kubeflow-images-public/chainer-operator" default: "10Gi"
description: "Docker image of the chainer operator" description: "Metadata db Persistent Volume Size"
type: string type: string
label: Chainer Operator Image Repository label: Metadata db Volume Size
- variable: chainer.image.tag - variable: metadata.db.persistence.storageClass
default: "v0.3.0" default: ""
description: "The image tag of chainer operator" description: "If undefined or null, uses the default StorageClass. Default to null"
type: storageclass
label: Default StorageClass for metadata db
- variable: minio.accessKey
default: minio
description: "Minio access key"
required: true
type: string type: string
label: Chainer Operator Image Tag label: Minio access key
- variable: mxnetOperator.enabled - variable: minio.secretKey
default: minio123
description: "Minio secret key"
required: true
type: password
label: Minio secret key
- variable: minio.persistence.enabled
default: false default: false
description: "Enable apache MXNet - a flexible and efficient library for deep learning." description: "Enable persistent volume for minio"
type: boolean type: boolean
required: true required: true
label: Enable Apache MXNet Operator label: Minio Persistent Volume Enabled
group: "Apache MXNet Settings"
show_subquestion_if: true show_subquestion_if: true
group: "Minio Settings"
subquestions: subquestions:
- variable: mxnetOperator.image.repository - variable: minio.persistence.size
default: "mxjob/mxnet-operator" default: "20Gi"
description: "Docker image of the MXNet operator" description: "Minio Persistent Volume Size"
type: string
label: MXNet Operator Image Repository
- variable: mxnetOperator.image.tag
default: "v1"
description: "The image tag of MXNet operator"
type: string type: string
label: MXNet Operator Image Tag label: Minio Volume Size
- variable: pytorchOperator.enabled - variable: minio.persistence.storageClass
default: ""
description: "If undefined or null, uses the default StorageClass. Default to null"
type: storageclass
label: Default StorageClass for minio
- variable: mysql.persistence.enabled
default: false default: false
description: "Enable PyTorch - a deep learning framework." description: "Enable persistent volume for mysql"
type: boolean type: boolean
required: true required: true
label: Enable PyTorch Operator label: Mysql Persistent Volume Enabled
group: "PyTorch Settings"
show_subquestion_if: true show_subquestion_if: true
group: "Mysql Settings"
subquestions: subquestions:
- variable: pytorchOperator.image.repository - variable: mysql.persistence.size
default: "gcr.io/kubeflow-images-public/pytorch-operator" default: "20Gi"
description: "Docker image of the PyTorch operator" description: "Mysql Persistent Volume Size"
type: string type: string
label: PyTorch Operator Image Repository label: Mysql Volume Size
- variable: pytorchOperator.image.tag - variable: mysql.persistence.storageClass
default: "v0.3.0" default: ""
description: "The image tag of PyTorch operator" description: "If undefined or null, uses the default StorageClass. Default to null"
type: storageclass
label: Default StorageClass for mysql
- variable: spartakus.usageId
default: test
description: "Spartakus Usage ID"
required: true
type: string type: string
label: PyTorch Operator Image Tag label: Usage ID
import json
import os
import string
import escapism
from kubespawner.spawner import KubeSpawner
from jhub_remote_user_authenticator.remote_user_auth import RemoteUserAuthenticator
from oauthenticator.github import GitHubOAuthenticator
SERVICE_ACCOUNT_SECRET_MOUNT = '/var/run/secrets/sa'
class KubeFormSpawner(KubeSpawner):
# relies on HTML5 for image datalist
def _options_form_default(self):
global registry, repoName
return '''
<table style="width: 100%;">
<tr>
<td style="width: 30%;"><label for='image'>Image</label></td>
<td style="width: 70%;"><input value="" list="image" name="image" placeholder='repo/image:tag' style="width: 100%;">
<datalist id="image">
<option value="{0}/{1}/tensorflow-1.4.1-notebook-cpu:v0.3.1">
<option value="{0}/{1}/tensorflow-1.4.1-notebook-gpu:v0.3.1">
<option value="{0}/{1}/tensorflow-1.5.1-notebook-cpu:v0.3.1">
<option value="{0}/{1}/tensorflow-1.5.1-notebook-gpu:v0.3.1">
<option value="{0}/{1}/tensorflow-1.6.0-notebook-cpu:v0.3.1">
<option value="{0}/{1}/tensorflow-1.6.0-notebook-gpu:v0.3.1">
<option value="{0}/{1}/tensorflow-1.7.0-notebook-cpu:v0.3.1">
<option value="{0}/{1}/tensorflow-1.7.0-notebook-gpu:v0.3.1">
<option value="{0}/{1}/tensorflow-1.8.0-notebook-cpu:v0.3.1">
<option value="{0}/{1}/tensorflow-1.8.0-notebook-gpu:v0.3.1">
<option value="{0}/{1}/tensorflow-1.9.0-notebook-cpu:v0.3.1">
<option value="{0}/{1}/tensorflow-1.9.0-notebook-gpu:v0.3.1">
<option value="{0}/{1}/tensorflow-1.10.1-notebook-cpu:v0.3.1">
<option value="{0}/{1}/tensorflow-1.10.1-notebook-gpu:v0.3.1">
</datalist>
</td>
</tr>
</table>
<div style="text-align: center; padding: 10px;">
<a id="toggle_advanced_options" style="margin: 20%; cursor: pointer; font-weight: bold;">Advanced</a>
</div>
<table id="advanced_fields" style="display: none; width: 100%; border-spacing: 0px 25px; border-collapse: separate;">
<tr>
<td><label for='cpu_guarantee'>CPU</label></td>
<td><input style="width: 100%;" name='cpu_guarantee' placeholder='200m, 1.0, 2.5, etc'></input></td>
</tr>
<tr>
<td><label for='mem_guarantee'>Memory</label></td>
<td><input style="width: 100%;" name='mem_guarantee' placeholder='100Mi, 1.5Gi'></input></td>
</tr>
<tr>
<td><label for='extra_resource_limits'>Extra Resource Limits</label></td>
<td><input style="width: 100%;" name='extra_resource_limits' placeholder='{{nvidia.com/gpu: 3}}'></input></td>
</tr>
</table>
<script type="text/javascript">
$('#toggle_advanced_options').on('click', function(e){{
$('#advanced_fields').toggle();
}});
</script>
'''.format(registry, repoName)
def options_from_form(self, formdata):
options = {}
options['image'] = formdata.get('image', [''])[0].strip()
options['cpu_guarantee'] = formdata.get(
'cpu_guarantee', [''])[0].strip()
options['mem_guarantee'] = formdata.get(
'mem_guarantee', [''])[0].strip()
options['extra_resource_limits'] = formdata.get(
'extra_resource_limits', [''])[0].strip()
return options
@property
def singleuser_image_spec(self):
global cloud
if cloud == 'ack':
image = 'registry.aliyuncs.com/kubeflow-images-public/tensorflow-notebook-cpu:v0.2.1'
else:
image = 'gcr.io/kubeflow-images-public/tensorflow-1.8.0-notebook-cpu:v0.3.1'
if self.user_options.get('image'):
image = self.user_options['image']
return image
image_spec = singleuser_image_spec
@property
def cpu_guarantee(self):
cpu = '500m'
if self.user_options.get('cpu_guarantee'):
cpu = self.user_options['cpu_guarantee']
return cpu
@property
def mem_guarantee(self):
mem = '1Gi'
if self.user_options.get('mem_guarantee'):
mem = self.user_options['mem_guarantee']
return mem
@property
def extra_resource_limits(self):
extra = ''
if self.user_options.get('extra_resource_limits'):
extra = json.loads(self.user_options['extra_resource_limits'])
return extra
def get_env(self):
env = super(KubeFormSpawner, self).get_env()
gcp_secret_name = os.environ.get('GCP_SECRET_NAME')
if gcp_secret_name:
env['GOOGLE_APPLICATION_CREDENTIALS'] = '{}/{}.json'.format(SERVICE_ACCOUNT_SECRET_MOUNT, gcp_secret_name)
return env
# TODO(kkasravi): add unit test
def _parse_user_name(self, username):
safe_chars = set(string.ascii_lowercase + string.digits)
name = username.split(':')[-1]
legacy = ''.join([s if s in safe_chars else '-' for s in name.lower()])
safe = escapism.escape(name, safe=safe_chars, escape_char='-').lower()
return legacy, safe, name
def _expand_user_properties(self, template):
# override KubeSpawner method to remove prefix accounts.google: for iap
# and truncate to 63 characters
# Set servername based on whether named-server initialised
if self.name:
servername = '-{}'.format(self.name)
else:
servername = ''
legacy, safe, name = self._parse_user_name(self.user.name)
rname = template.format(
userid=self.user.id,
username=safe,
unescaped_username=name,
legacy_escape_username=legacy,
servername=servername
)[:63]
return rname
###################################################
# JupyterHub Options
###################################################
c.JupyterHub.ip = '0.0.0.0'
c.JupyterHub.hub_ip = '0.0.0.0'
# Don't try to cleanup servers on exit - since in general for k8s, we want
# the hub to be able to restart without losing user containers
c.JupyterHub.cleanup_servers = False
###################################################
###################################################
# Spawner Options
###################################################
cloud = os.environ.get('CLOUD_NAME')
registry = os.environ.get('REGISTRY')
repoName = os.environ.get('REPO_NAME')
c.JupyterHub.spawner_class = KubeFormSpawner
# Set both singleuser_image_spec and image_spec because
# singleuser_image_spec has been deprecated in a future release
c.KubeSpawner.singleuser_image_spec = '{0}/{1}/tensorflow-notebook'.format(registry, repoName)
c.KubeSpawner.image_spec = '{0}/{1}/tensorflow-notebook'.format(registry, repoName)
c.KubeSpawner.cmd = 'start-singleuser.sh'
c.KubeSpawner.args = ['--allow-root']
# gpu images are very large ~15GB. need a large timeout.
c.KubeSpawner.start_timeout = 60 * 30
# Increase timeout to 5 minutes to avoid HTTP 500 errors on JupyterHub
c.KubeSpawner.http_timeout = 60 * 5
# Volume setup
c.KubeSpawner.singleuser_uid = 1000
c.KubeSpawner.singleuser_fs_gid = 100
c.KubeSpawner.singleuser_working_dir = '/home/jovyan'
volumes = []
volume_mounts = []
# Allow environment vars to override uid and gid.
# This allows local host path mounts to be read/writable
env_uid = os.environ.get('NOTEBOOK_UID')
if env_uid:
c.KubeSpawner.singleuser_uid = int(env_uid)
env_gid = os.environ.get('NOTEBOOK_GID')
if env_gid:
c.KubeSpawner.singleuser_fs_gid = int(env_gid)
access_local_fs = os.environ.get('ACCESS_LOCAL_FS')
if access_local_fs == 'true':
def modify_pod_hook(spawner, pod):
pod.spec.containers[0].lifecycle = {
'postStart' : {
'exec' : {
'command' : ['ln', '-s', '/mnt/local-notebooks', '/home/jovyan/local-notebooks' ]
}
}
}
return pod
c.KubeSpawner.modify_pod_hook = modify_pod_hook
###################################################
# Persistent volume options
###################################################
# Using persistent storage requires a default storage class.
# TODO(jlewi): Verify this works on minikube.
# see https://github.com/kubeflow/kubeflow/pull/22#issuecomment-350500944
pvc_mount = os.environ.get('NOTEBOOK_PVC_MOUNT')
if pvc_mount and pvc_mount != 'null':
c.KubeSpawner.user_storage_pvc_ensure = True
c.KubeSpawner.storage_pvc_ensure = True
# How much disk space do we want?
c.KubeSpawner.user_storage_capacity = '10Gi'
c.KubeSpawner.storage_capacity = '10Gi'
c.KubeSpawner.pvc_name_template = 'claim-{username}{servername}'
volumes.append(
{
'name': 'volume-{username}{servername}',
'persistentVolumeClaim': {
'claimName': 'claim-{username}{servername}'
}
}
)
volume_mounts.append(
{
'mountPath': pvc_mount,
'name': 'volume-{username}{servername}'
}
)
c.KubeSpawner.volumes = volumes
c.KubeSpawner.volume_mounts = volume_mounts
# Set both service_account and singleuser_service_account because
# singleuser_service_account has been deprecated in a future release
c.KubeSpawner.service_account = 'jupyter-notebook'
c.KubeSpawner.singleuser_service_account = 'jupyter-notebook'
# Authenticator
if os.environ.get('KF_AUTHENTICATOR') == 'iap':
c.JupyterHub.authenticator_class ='jhub_remote_user_authenticator.remote_user_auth.RemoteUserAuthenticator'
c.RemoteUserAuthenticator.header_name = 'x-goog-authenticated-user-email'
else:
c.JupyterHub.authenticator_class = 'dummyauthenticator.DummyAuthenticator'
if os.environ.get('DEFAULT_JUPYTERLAB').lower() == 'true':
c.KubeSpawner.default_url = '/lab'
# PVCs
pvcs = os.environ.get('KF_PVC_LIST')
if pvcs and pvcs != 'null':
for pvc in pvcs.split(','):
volumes.append({
'name': pvc,
'persistentVolumeClaim': {
'claimName': pvc
}
})
volume_mounts.append({
'name': pvc,
'mountPath': '/mnt/' + pvc
})
gcp_secret_name = os.environ.get('GCP_SECRET_NAME')
if gcp_secret_name:
volumes.append({
'name': gcp_secret_name,
'secret': {
'secretName': gcp_secret_name,
}
})
volume_mounts.append({
'name': gcp_secret_name,
'mountPath': SERVICE_ACCOUNT_SECRET_MOUNT
})
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
kustomize.component: admission-webhook-bootstrap
name: admission-webhook-bootstrap-service-account
namespace: kubeflow
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
labels:
kustomize.component: admission-webhook-bootstrap
name: admission-webhook-bootstrap-cluster-role
rules:
- apiGroups:
- admissionregistration.k8s.io
resources:
- mutatingwebhookconfigurations
verbs:
- '*'
- apiGroups:
- ""
resources:
- secrets
verbs:
- '*'
- apiGroups:
- ""
resources:
- pods
verbs:
- list
- delete
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
labels:
kustomize.component: admission-webhook-bootstrap
name: admission-webhook-bootstrap-cluster-role-binding
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: admission-webhook-bootstrap-cluster-role
subjects:
- kind: ServiceAccount
name: admission-webhook-bootstrap-service-account
namespace: kubeflow
---
apiVersion: v1
data:
create_ca.sh: "#!/bin/bash\n\nset -e\n\nusage() {\n cat <<EOF\nGenerate certificate
suitable for use with an sidecar-injector webhook service.\nThis script uses k8s'
CertificateSigningRequest API to a generate a\ncertificate signed by k8s CA suitable
for use with sidecar-injector webhook\nservices. This requires permissions to
create and approve CSR. See\nhttps://kubernetes.io/docs/tasks/tls/managing-tls-in-a-cluster
for\ndetailed explantion and additional instructions.\nThe server key/cert k8s
CA cert are stored in a k8s secret.\nusage: ${0} [OPTIONS]\nThe following flags
are required.\n --service Service name of webhook.\n --namespace
\ Namespace where webhook service and secret reside.\n --secret Secret
name for CA certificate and server certificate/key pair.\nEOF\n exit 1\n}\n\nwhile
[[ $# -gt 0 ]]; do\n case ${1} in\n --service)\n service=\"$2\"\n
\ shift\n ;;\n --secret)\n secret=\"$2\"\n
\ shift\n ;;\n --namespace)\n namespace=\"$2\"\n
\ shift\n ;;\n *)\n usage\n ;;\n
\ esac\n shift\ndone\n\n[ -z ${service} ] && service=admission-webhook-service\n[
-z ${secret} ] && secret=webhook-certs\n[ -z ${namespace} ] && namespace=kubeflow\n[
-z ${namespace} ] && namespace=default\n\nwebhookDeploymentName=admission-webhook-deployment\nmutatingWebhookConfigName=admission-webhook-mutating-webhook-configuration\necho
${service}\necho ${namespace}\necho ${secret}\necho ${webhookDeploymentName}\necho
${mutatingWebhookconfigName}\nif [ ! -x \"$(command -v openssl)\" ]; then\n echo
\"openssl not found\"\n exit 1\nfi\ncsrName=${service}.${namespace}\ntmpdir=$(mktemp
-d)\necho \"creating certs in tmpdir ${tmpdir} \"\n\n# x509 outputs a self signed
certificate instead of certificate request, later used as self signed root CA\nopenssl
req -x509 -newkey rsa:2048 -keyout ${tmpdir}/self_ca.key -out ${tmpdir}/self_ca.crt
-days 365 -nodes -subj /C=/ST=/L=/O=/OU=/CN=test-certificate-authority\n\ncat
<<EOF >> ${tmpdir}/csr.conf\n[req]\nreq_extensions = v3_req\ndistinguished_name
= req_distinguished_name\n[req_distinguished_name]\n[ v3_req ]\nbasicConstraints
= CA:FALSE\nkeyUsage = nonRepudiation, digitalSignature, keyEncipherment\nextendedKeyUsage
= serverAuth\nsubjectAltName = @alt_names\n[alt_names]\nDNS.1 = ${service}\nDNS.2
= ${service}.${namespace}\nDNS.3 = ${service}.${namespace}.svc\nEOF\n\nopenssl
genrsa -out ${tmpdir}/server-key.pem 2048\nopenssl req -new -key ${tmpdir}/server-key.pem
-subj \"/CN=${service}.${namespace}.svc\" -out ${tmpdir}/server.csr -config ${tmpdir}/csr.conf\n\n#
Self sign\nopenssl x509 -req -days 365 -in ${tmpdir}/server.csr -CA ${tmpdir}/self_ca.crt
-CAkey ${tmpdir}/self_ca.key -CAcreateserial -out ${tmpdir}/server-cert.pem\n\n#
create the secret with CA cert and server cert/key\nkubectl create secret generic
${secret} \\\n --from-file=key.pem=${tmpdir}/server-key.pem \\\n --from-file=cert.pem=${tmpdir}/server-cert.pem
\\\n --dry-run -o yaml |\n kubectl -n ${namespace} apply -f -\n\n# Webhook
pod needs to be restarted so that the service reload the secret\n# http://github.com/kueflow/kubeflow/issues/3227\t\nwebhookPod=$(kubectl
get pods -n ${namespace} |grep ${webhookDeploymentName} |awk '{print $1;}')\n#
ignore error if webhook pod does not exist\nkubectl delete pod ${webhookPod} 2>/dev/null
|| true\necho \"webhook ${webhookPod} is restarted to utilize the new secret\"\n\ncat
${tmpdir}/self_ca.crt\n\n# -a means base64 encode\ncaBundle=$(cat ${tmpdir}/self_ca.crt
| openssl enc -a -A)\necho ${caBundle}\n\npatchString='[{\"op\": \"replace\",
\"path\": \"/webhooks/0/clientConfig/caBundle\", \"value\":\"{{`{{CA_BUNDLE}}`}}\"}]'\npatchString=$(echo
${patchString} | sed \"s|{{`{{CA_BUNDLE}}`}}|${caBundle}|g\")\necho ${patchString}\n\ncheckWebhookConfig()
{\n currentBundle=$(kubectl get mutatingwebhookconfigurations -n ${namespace}
${mutatingWebhookConfigName} -o jsonpath='{.webhooks[0].clientConfig.caBundle}')\n
\ [[ \"$currentBundle\" == \"$caBundle\" ]]\n}\n\nwhile true; do\n if ! checkWebhookConfig;
then\n echo \"patching ca bundle for webhook configuration...\"\n kubectl
patch mutatingwebhookconfiguration ${mutatingWebhookConfigName} \\\n --type='json'
-p=\"${patchString}\"\n fi\n sleep 10\ndone\n"
namespace: kubeflow
webhookNamePrefix: admission-webhook-
kind: ConfigMap
metadata:
annotations: {}
labels:
kustomize.component: admission-webhook-bootstrap
name: admission-webhook-bootstrap-config-map
namespace: kubeflow
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
labels:
kustomize.component: admission-webhook-bootstrap
name: admission-webhook-bootstrap-stateful-set
namespace: kubeflow
spec:
replicas: 1
selector:
matchLabels:
kustomize.component: admission-webhook-bootstrap
serviceName: service
template:
metadata:
labels:
kustomize.component: admission-webhook-bootstrap
spec:
containers:
- command:
- sh
- /var/webhook-config/create_ca.sh
image: gcr.io/kubeflow-images-public/ingress-setup:latest
name: bootstrap
volumeMounts:
- mountPath: /var/webhook-config/
name: admission-webhook-config
restartPolicy: Always
serviceAccountName: admission-webhook-bootstrap-service-account
volumes:
- configMap:
name: admission-webhook-bootstrap-config-map
name: admission-webhook-config
volumeClaimTemplates: []
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
labels:
app: admission-webhook
kustomize.component: admission-webhook
name: poddefaults.kubeflow.org
spec:
group: kubeflow.org
names:
kind: PodDefault
plural: poddefaults
singular: poddefault
scope: Namespaced
validation:
openAPIV3Schema:
properties:
apiVersion:
type: string
kind:
type: string
metadata:
type: object
spec:
properties:
desc:
type: string
env:
items:
type: object
type: array
envFrom:
items:
type: object
type: array
selector:
type: object
serviceAccountName:
type: string
volumeMounts:
items:
type: object
type: array
volumes:
items:
type: object
type: array
required:
- selector
type: object
status:
type: object
type: object
version: v1alpha1
---
apiVersion: admissionregistration.k8s.io/v1beta1
kind: MutatingWebhookConfiguration
metadata:
labels:
app: admission-webhook
kustomize.component: admission-webhook
name: admission-webhook-mutating-webhook-configuration
webhooks:
- clientConfig:
caBundle: ""
service:
name: admission-webhook-service
namespace: kubeflow
path: /apply-poddefault
name: admission-webhook-deployment.kubeflow.org
rules:
- apiGroups:
- ""
apiVersions:
- v1
operations:
- CREATE
resources:
- pods
---
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
app: admission-webhook
kustomize.component: admission-webhook
name: admission-webhook-service-account
namespace: kubeflow
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
labels:
app: admission-webhook
kustomize.component: admission-webhook
name: admission-webhook-cluster-role
rules:
- apiGroups:
- kubeflow.org
resources:
- poddefaults
verbs:
- get
- watch
- list
- update
- create
- patch
- delete
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
labels:
app: admission-webhook
kustomize.component: admission-webhook
name: admission-webhook-cluster-role-binding
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: admission-webhook-cluster-role
subjects:
- kind: ServiceAccount
name: admission-webhook-service-account
namespace: kubeflow
---
apiVersion: v1
data:
namespace: kubeflow
kind: ConfigMap
metadata:
labels:
app: admission-webhook
kustomize.component: admission-webhook
name: admission-webhook-admission-webhook-parameters
namespace: kubeflow
---
apiVersion: v1
kind: Service
metadata:
labels:
app: admission-webhook
kustomize.component: admission-webhook
name: admission-webhook-service
namespace: kubeflow
spec:
ports:
- port: 443
targetPort: 443
selector:
app: admission-webhook
kustomize.component: admission-webhook
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: admission-webhook
kustomize.component: admission-webhook
name: admission-webhook-deployment
namespace: kubeflow
spec:
selector:
matchLabels:
app: admission-webhook
kustomize.component: admission-webhook
template:
metadata:
labels:
app: admission-webhook
kustomize.component: admission-webhook
spec:
containers:
- image: gcr.io/kubeflow-images-public/admission-webhook:v20190520-v0-139-gcee39dbc-dirty-0d8f4c
name: admission-webhook
volumeMounts:
- mountPath: /etc/webhook/certs
name: webhook-cert
readOnly: true
serviceAccountName: admission-webhook-service-account
volumes:
- name: webhook-cert
secret:
secretName: webhook-certs
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
labels:
ksonnet.io/component: ambassador
name: ambassador
namespace: kubeflow
spec:
replicas: {{ .Values.ambassador.replicas }}
template:
metadata:
labels:
service: ambassador
namespace: kubeflow
spec:
containers:
- name: ambassador
env:
- name: AMBASSADOR_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: AMBASSADOR_SINGLE_NAMESPACE
value: "true"
image: "{{ .Values.ambassador.image.repository }}:{{ .Values.ambassador.image.tag }}"
livenessProbe:
httpGet:
path: /ambassador/v0/check_alive
port: 8877
initialDelaySeconds: 30
periodSeconds: 30
readinessProbe:
httpGet:
path: /ambassador/v0/check_ready
port: 8877
initialDelaySeconds: 30
periodSeconds: 30
resources:
limits:
cpu: 1
memory: 400Mi
requests:
cpu: 200m
memory: 100Mi
- name: statsd
image: "{{ .Values.ambassador.statsdImage.repository }}:{{ .Values.ambassador.statsdImage.tag }}"
- name: statsd-sink
image: "{{ .Values.ambassador.exporterImage.repository }}:{{ .Values.ambassador.exporterImage.tag }}"
restartPolicy: Always
serviceAccountName: ambassador
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
ksonnet.io/component: ambassador
name: ambassador
namespace: kubeflow
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: Role
metadata:
labels:
ksonnet.io/component: ambassador
name: ambassador
namespace: kubeflow
rules:
- apiGroups:
- ""
resources:
- services
verbs:
- get
- list
- watch
- apiGroups:
- ""
resources:
- configmaps
verbs:
- create
- update
- patch
- get
- list
- watch
- apiGroups:
- ""
resources:
- secrets
verbs:
- get
- list
- watch
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: RoleBinding
metadata:
labels:
ksonnet.io/component: ambassador
name: ambassador
namespace: kubeflow
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: ambassador
subjects:
- kind: ServiceAccount
name: ambassador
namespace: kubeflow
apiVersion: v1
kind: Service
metadata:
labels:
ksonnet.io/component: ambassador
service: ambassador
{{- if eq .Values.ambassador.service.type "Rancher-Proxy" }}
kubernetes.io/cluster-service: "true"
{{- end }}
name: ambassador
namespace: kubeflow
spec:
ports:
- name: ambassador
port: 80
targetPort: 80
{{- if .Values.ambassador.service.nodePort }}
nodePort: {{ .Values.ambassador.service.nodePort }}
{{- end }}
selector:
service: ambassador
{{- if eq .Values.ambassador.service.type "Rancher-Proxy" }}
type: ClusterIP
{{- else }}
type: {{ .Values.ambassador.service.type }}
{{- end }}
---
apiVersion: v1
kind: Service
metadata:
labels:
ksonnet.io/component: ambassador
service: ambassador-admin
name: ambassador-admin
namespace: kubeflow
spec:
ports:
- name: ambassador-admin
port: 8877
targetPort: 8877
selector:
service: ambassador
type: ClusterIP
---
apiVersion: v1
kind: Service
metadata:
annotations:
getambassador.io/config: |-
---
apiVersion: ambassador/v0
kind: Mapping
name: k8s-dashboard-ui-mapping
prefix: /k8s/ui/
rewrite: /
tls: true
service: kubernetes-dashboard.kube-system
labels:
ksonnet.io/component: ambassador
name: k8s-dashboard
namespace: kubeflow
spec:
ports:
- port: 443
targetPort: 8443
selector:
k8s-app: kubernetes-dashboard
type: ClusterIP
---
apiVersion: v1
kind: Service
metadata:
annotations:
prometheus.io/port: "9102"
prometheus.io/scrape: "true"
labels:
ksonnet.io/component: ambassador
service: ambassador
name: statsd-sink
namespace: kubeflow
spec:
ports:
- name: statsd-sink
port: 9102
protocol: TCP
targetPort: 9102
selector:
service: ambassador
type: ClusterIP
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
app.kubernetes.io/component: kubeflow
app.kubernetes.io/instance: kubeflow
app.kubernetes.io/managed-by: kfctl
app.kubernetes.io/name: kubeflow
app.kubernetes.io/part-of: kubeflow
app.kubernetes.io/version: v0.6
name: application-controller-service-account
namespace: kubeflow
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
labels:
app.kubernetes.io/component: kubeflow
app.kubernetes.io/instance: kubeflow
app.kubernetes.io/managed-by: kfctl
app.kubernetes.io/name: kubeflow
app.kubernetes.io/part-of: kubeflow
app.kubernetes.io/version: v0.6
name: application-controller-cluster-role
rules:
- apiGroups:
- '*'
resources:
- '*'
verbs:
- get
- list
- update
- patch
- watch
- apiGroups:
- app.k8s.io
resources:
- '*'
verbs:
- '*'
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
labels:
app.kubernetes.io/component: kubeflow
app.kubernetes.io/instance: kubeflow
app.kubernetes.io/managed-by: kfctl
app.kubernetes.io/name: kubeflow
app.kubernetes.io/part-of: kubeflow
app.kubernetes.io/version: v0.6
name: application-controller-cluster-role-binding
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: application-controller-cluster-role
subjects:
- kind: ServiceAccount
name: application-controller-service-account
namespace: kubeflow
---
apiVersion: v1
data:
project: {{ .Values.applicationController.project }}
kind: ConfigMap
metadata:
labels:
app.kubernetes.io/component: kubeflow
app.kubernetes.io/instance: kubeflow
app.kubernetes.io/managed-by: kfctl
app.kubernetes.io/name: kubeflow
app.kubernetes.io/part-of: kubeflow
app.kubernetes.io/version: v0.6
name: application-controller-parameters
namespace: kubeflow
---
apiVersion: v1
kind: Service
metadata:
labels:
app.kubernetes.io/component: kubeflow
app.kubernetes.io/instance: kubeflow
app.kubernetes.io/managed-by: kfctl
app.kubernetes.io/name: kubeflow
app.kubernetes.io/part-of: kubeflow
app.kubernetes.io/version: v0.6
name: application-controller-service
namespace: kubeflow
spec:
ports:
- port: 443
selector:
app.kubernetes.io/component: kubeflow
app.kubernetes.io/instance: kubeflow
app.kubernetes.io/managed-by: kfctl
app.kubernetes.io/name: kubeflow
app.kubernetes.io/part-of: kubeflow
app.kubernetes.io/version: v0.6
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
labels:
app.kubernetes.io/component: kubeflow
app.kubernetes.io/instance: kubeflow
app.kubernetes.io/managed-by: kfctl
app.kubernetes.io/name: kubeflow
app.kubernetes.io/part-of: kubeflow
app.kubernetes.io/version: v0.6
name: application-controller-stateful-set
namespace: kubeflow
spec:
selector:
matchLabels:
app.kubernetes.io/component: kubeflow
app.kubernetes.io/instance: kubeflow
app.kubernetes.io/managed-by: kfctl
app.kubernetes.io/name: kubeflow
app.kubernetes.io/part-of: kubeflow
app.kubernetes.io/version: v0.6
serviceName: application-controller-service
template:
metadata:
labels:
app.kubernetes.io/component: kubeflow
app.kubernetes.io/instance: kubeflow
app.kubernetes.io/managed-by: kfctl
app.kubernetes.io/name: kubeflow
app.kubernetes.io/part-of: kubeflow
app.kubernetes.io/version: v0.6
spec:
containers:
- command:
- /root/manager
env:
- name: project
valueFrom:
configMapKeyRef:
name: application-controller-parameters
key: project
image: gcr.io/kubeflow-images-public/kubernetes-sigs/application:1.0-beta
imagePullPolicy: Always
name: manager
serviceAccountName: application-controller-service-account
volumeClaimTemplates: []
---
apiVersion: app.k8s.io/v1beta1
kind: Application
metadata:
labels:
app.kubernetes.io/component: kubeflow
app.kubernetes.io/instance: kubeflow
app.kubernetes.io/managed-by: kfctl
app.kubernetes.io/name: kubeflow
app.kubernetes.io/part-of: kubeflow
app.kubernetes.io/version: v0.6
name: kubeflow
namespace: kubeflow
spec:
addOwnerRef: true
componentKinds:
- group: app.k8s.io
kind: Application
descriptor:
description: application that aggregates all kubeflow applications
keywords:
- kubeflow
links:
- description: About
url: https://kubeflow.org
maintainers:
- email: jlewi@google.com
name: Jeremy Lewi
- email: kam.d.kasravi@intel.com
name: Kam Kasravi
owners:
- email: jlewi@google.com
name: Jeremy Lewi
type: kubeflow
version: v0.6.2
selector:
matchLabels:
app.kubernetes.io/managed-by: kfctl
app.kubernetes.io/part-of: kubeflow
app.kubernetes.io/version: v0.6
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
creationTimestamp: null
name: applications.app.k8s.io
annotations:
"helm.sh/hook": crd-install
"helm.sh/hook-weight": "-5"
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: []
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
labels:
kustomize.component: argo
name: workflows.argoproj.io
spec:
group: argoproj.io
names:
kind: Workflow
listKind: WorkflowList
plural: workflows
shortNames:
- wf
singular: workflow
scope: Namespaced
version: v1alpha1
---
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
kustomize.component: argo
name: argo
namespace: kubeflow
---
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
kustomize.component: argo
name: argo-ui
namespace: kubeflow
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
labels:
app: argo
kustomize.component: argo
name: argo
rules:
- apiGroups:
- ""
resources:
- pods
- pods/exec
verbs:
- create
- get
- list
- watch
- update
- patch
- apiGroups:
- ""
resources:
- configmaps
verbs:
- get
- watch
- list
- apiGroups:
- ""
resources:
- persistentvolumeclaims
verbs:
- create
- delete
- apiGroups:
- argoproj.io
resources:
- workflows
verbs:
- get
- list
- watch
- update
- patch
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
labels:
app: argo
kustomize.component: argo
name: argo-ui
rules:
- apiGroups:
- ""
resources:
- pods
- pods/exec
- pods/log
verbs:
- get
- list
- watch
- apiGroups:
- ""
resources:
- secrets
verbs:
- get
- apiGroups:
- argoproj.io
resources:
- workflows
verbs:
- get
- list
- watch
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
labels:
app: argo
kustomize.component: argo
name: argo
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: argo
subjects:
- kind: ServiceAccount
name: argo
namespace: kubeflow
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
labels:
app: argo-ui
kustomize.component: argo
name: argo-ui
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: argo-ui
subjects:
- kind: ServiceAccount
name: argo-ui
namespace: kubeflow
---
apiVersion: v1
data:
config: |
{
executorImage: {{ .Values.argo.executorImage | quote }},
artifactRepository:
{
s3: {
bucket: {{ .Values.argo.artifactRepositoryBucket | quote }},
keyPrefix: {{ .Values.argo.artifactRepositoryKeyPrefix | quote }},
endpoint: {{ .Values.argo.artifactRepositoryEndpoint | quote }},
insecure: {{ .Values.argo.artifactRepositoryInsecure }},
accessKeySecret: {
name: {{ .Values.argo.artifactRepositoryAccessKeySecretName | quote }},
key: {{ .Values.argo.artifactRepositoryAccessKeySecretKey | quote }}
},
secretKeySecret: {
name: {{ .Values.argo.artifactRepositorySecretKeySecretName | quote }},
key: {{ .Values.argo.artifactRepositorySecretKeySecretKey | quote }}
}
}
}
}
kind: ConfigMap
metadata:
labels:
kustomize.component: argo
name: workflow-controller-configmap
namespace: kubeflow
---
apiVersion: v1
data:
artifactRepositoryAccessKeySecretKey: {{ .Values.argo.artifactRepositoryAccessKeySecretKey | quote }}
artifactRepositoryAccessKeySecretName: {{ .Values.argo.artifactRepositoryAccessKeySecretName | quote }}
artifactRepositoryBucket: {{ .Values.argo.artifactRepositoryBucket | quote }}
artifactRepositoryEndpoint: {{ .Values.argo.artifactRepositoryEndpoint | quote }}
artifactRepositoryInsecure: {{ .Values.argo.artifactRepositoryInsecure | quote }}
artifactRepositoryKeyPrefix: {{ .Values.argo.artifactRepositoryKeyPrefix }}
artifactRepositorySecretKeySecretKey: {{ .Values.argo.artifactRepositorySecretKeySecretKey | quote }}
artifactRepositorySecretKeySecretName: {{ .Values.argo.artifactRepositorySecretKeySecretName | quote }}
clusterDomain: {{ .Values.clusterDomain | quote }}
executorImage: {{ .Values.argo.executorImage | quote }}
namespace: kubeflow
kind: ConfigMap
metadata:
labels:
kustomize.component: argo
name: workflow-controller-parameters
namespace: kubeflow
---
apiVersion: v1
kind: Service
metadata:
annotations:
getambassador.io/config: |-
---
apiVersion: ambassador/v0
kind: Mapping
name: argo-ui-mapping
prefix: /argo/
service: argo-ui.kubeflow
labels:
app: argo-ui
kustomize.component: argo
name: argo-ui
namespace: kubeflow
spec:
ports:
- port: 80
targetPort: 8001
selector:
app: argo-ui
kustomize.component: argo
sessionAffinity: None
type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: argo-ui
kustomize.component: argo
name: argo-ui
namespace: kubeflow
spec:
progressDeadlineSeconds: 600
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
app: argo-ui
kustomize.component: argo
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
creationTimestamp: null
labels:
app: argo-ui
kustomize.component: argo
spec:
containers:
- env:
- name: ARGO_NAMESPACE
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
- name: IN_CLUSTER
value: "true"
- name: BASE_HREF
value: /argo/
image: argoproj/argoui:v2.3.0
imagePullPolicy: IfNotPresent
name: argo-ui
readinessProbe:
httpGet:
path: /
port: 8001
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
serviceAccount: argo-ui
serviceAccountName: argo-ui
terminationGracePeriodSeconds: 30
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: workflow-controller
kustomize.component: argo
name: workflow-controller
namespace: kubeflow
spec:
progressDeadlineSeconds: 600
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
app: workflow-controller
kustomize.component: argo
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
creationTimestamp: null
labels:
app: workflow-controller
kustomize.component: argo
spec:
containers:
- args:
- --configmap
- workflow-controller-configmap
command:
- workflow-controller
env:
- name: ARGO_NAMESPACE
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
image: argoproj/workflow-controller:v2.3.0
imagePullPolicy: IfNotPresent
name: workflow-controller
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
serviceAccount: argo
serviceAccountName: argo
terminationGracePeriodSeconds: 30
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: argo-ui
namespace: kubeflow
spec:
gateways:
- kubeflow-gateway
hosts:
- '*'
http:
- match:
- uri:
prefix: /argo/
rewrite:
uri: /
route:
- destination:
host: argo-ui.kubeflow.svc.{{ .Values.clusterDomain }}
port:
number: 80
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
ksonnet.io/component: centraldashboard
name: centraldashboard
namespace: kubeflow
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
labels:
app: centraldashboard
ksonnet.io/component: centraldashboard
name: centraldashboard
namespace: kubeflow
rules:
- apiGroups:
- ""
resources:
- pods
- pods/exec
- pods/log
verbs:
- get
- list
- watch
- apiGroups:
- ""
resources:
- secrets
verbs:
- get
apiVersion: v1 apiVersion: v1
kind: ServiceAccount
metadata:
labels:
kustomize.component: centraldashboard
name: centraldashboard
namespace: kubeflow
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
labels:
app: centraldashboard
kustomize.component: centraldashboard
name: centraldashboard
namespace: kubeflow
rules:
- apiGroups:
- ""
- app.k8s.io
resources:
- applications
- pods
- pods/exec
- pods/log
verbs:
- get
- list
- watch
- apiGroups:
- ""
resources:
- secrets
verbs:
- get
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
labels:
app: centraldashboard
kustomize.component: centraldashboard
name: centraldashboard
rules:
- apiGroups:
- ""
resources:
- events
- namespaces
- nodes
verbs:
- get
- list
- watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
labels:
app: centraldashboard
kustomize.component: centraldashboard
name: centraldashboard
namespace: kubeflow
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: centraldashboard
subjects:
- kind: ServiceAccount
name: centraldashboard
namespace: kubeflow
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
labels:
app: centraldashboard
kustomize.component: centraldashboard
name: centraldashboard
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: centraldashboard
subjects:
- kind: ServiceAccount
name: centraldashboard
namespace: kubeflow
---
apiVersion: v1
data:
clusterDomain: {{ .Values.clusterDomain }}
userid-header: {{ .Values.centraldashboard.useridHeader }}
userid-prefix: {{ .Values.centraldashboard.useridPrefix }}
kind: ConfigMap
metadata:
labels:
kustomize.component: centraldashboard
name: centraldashboard-parameters
namespace: kubeflow
---
apiVersion: v1
kind: Service kind: Service
metadata: metadata:
annotations: annotations:
...@@ -12,35 +112,80 @@ metadata: ...@@ -12,35 +112,80 @@ metadata:
service: centraldashboard.kubeflow service: centraldashboard.kubeflow
labels: labels:
app: centraldashboard app: centraldashboard
ksonnet.io/component: centraldashboard kustomize.component: centraldashboard
name: centraldashboard name: centraldashboard
namespace: kubeflow namespace: kubeflow
spec: spec:
ports: ports:
- port: 80 - port: 80
protocol: TCP
targetPort: 8082 targetPort: 8082
selector: selector:
app: centraldashboard app: centraldashboard
kustomize.component: centraldashboard
sessionAffinity: None sessionAffinity: None
type: ClusterIP type: ClusterIP
--- ---
apiVersion: extensions/v1beta1 apiVersion: apps/v1
kind: Deployment kind: Deployment
metadata: metadata:
labels: labels:
app: centraldashboard app: centraldashboard
ksonnet.io/component: centraldashboard kustomize.component: centraldashboard
name: centraldashboard name: centraldashboard
namespace: kubeflow namespace: kubeflow
spec: spec:
replicas: 1
selector:
matchLabels:
app: centraldashboard
kustomize.component: centraldashboard
template: template:
metadata: metadata:
labels: labels:
app: centraldashboard app: centraldashboard
kustomize.component: centraldashboard
spec: spec:
containers: containers:
- image: "{{ .Values.centraldashboard.image.repository }}:{{ .Values.centraldashboard.image.tag }}" - env:
- name: USERID_HEADER
valueFrom:
configMapKeyRef:
name: centraldashboard-parameters
key: userid-header
- name: USERID_PREFIX
valueFrom:
configMapKeyRef:
name: centraldashboard-parameters
key: userid-prefix
- name: PROFILES_KFAM_SERVICE_HOST
value: profiles-kfam.kubeflow
image: gcr.io/kubeflow-images-public/centraldashboard:v20190823-v0.6.0-rc.0-69-gcb7dab59
imagePullPolicy: IfNotPresent
name: centraldashboard name: centraldashboard
ports: ports:
- containerPort: 8082 - containerPort: 8082
protocol: TCP
serviceAccountName: centraldashboard serviceAccountName: centraldashboard
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: centraldashboard
namespace: kubeflow
spec:
gateways:
- kubeflow-gateway
hosts:
- '*'
http:
- match:
- uri:
prefix: /
rewrite:
uri: /
route:
- destination:
host: centraldashboard.kubeflow.svc.{{ .Values.clusterDomain }}
port:
number: 80
{{- if .Values.chainerOperator.enabled }}
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
labels:
ksonnet.io/component: chainer-operator
annotations:
"helm.sh/hook": crd-install
"helm.sh/hook-delete-policy": before-hook-creation
name: chainerjobs.kubeflow.org
spec:
group: kubeflow.org
names:
categories:
- all
kind: ChainerJob
plural: chainerjobs
shortNames:
- chj
- chjs
- chjob
- chjobs
singular: chainerjob
scope: Namespaced
version: v1alpha1
{{- end }}
{{- if .Values.chainerOperator.enabled }}
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: chainer-operator
ksonnet.io/component: chainer-operator
name: chainer-operator
namespace: kubeflow
spec:
replicas: 1
selector:
matchLabels:
app: chainer-operator
template:
metadata:
labels:
app: chainer-operator
spec:
containers:
- args:
- -v
- "2"
- -stderrthreshold
- INFO
image: "{{ .Values.chainerOperator.image.repository }}:{{ .Values.chainerOperator.image.tag }}"
imagePullPolicy: Always
name: chainer-operator
serviceAccountName: chainer-operator
{{- end }}
apiVersion: v1
data:
clusterRbacConfig: {{ .Values.istio.clusterRbacConfig | quote }}
kind: ConfigMap
kind: ConfigMap
metadata:
name: istio-parameters-tt477f6588
namespace: kubeflow
---
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: kubeflow-gateway
namespace: kubeflow
spec:
selector:
istio: ingressgateway
servers:
- hosts:
- '*'
port:
name: http
number: 80
protocol: HTTP
---
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
name: google-api-entry
namespace: kubeflow
spec:
hosts:
- www.googleapis.com
location: MESH_EXTERNAL
ports:
- name: https
number: 443
protocol: HTTPS
resolution: DNS
---
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
name: google-storage-api-entry
namespace: kubeflow
spec:
hosts:
- storage.googleapis.com
location: MESH_EXTERNAL
ports:
- name: https
number: 443
protocol: HTTPS
resolution: DNS
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: google-api-vs
namespace: kubeflow
spec:
hosts:
- www.googleapis.com
tls:
- match:
- port: 443
sni_hosts:
- www.googleapis.com
route:
- destination:
host: www.googleapis.com
port:
number: 443
weight: 100
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: google-storage-api-vs
namespace: kubeflow
spec:
hosts:
- storage.googleapis.com
tls:
- match:
- port: 443
sni_hosts:
- storage.googleapis.com
route:
- destination:
host: storage.googleapis.com
port:
number: 443
weight: 100
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: grafana-vs
namespace: kubeflow
spec:
gateways:
- kubeflow-gateway
hosts:
- '*'
http:
- match:
- method:
exact: GET
uri:
prefix: /istio/grafana/
rewrite:
uri: /
route:
- destination:
host: grafana.istio-system.svc.cluster.local
port:
number: 3000
---
apiVersion: rbac.istio.io/v1alpha1
kind: ClusterRbacConfig
metadata:
name: default
namespace: kubeflow
spec:
mode: {{ .Values.istio.clusterRbacConfig | quote }}
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
app: jupyter-web-app
app.kubernetes.io/component: jupyter
app.kubernetes.io/instance: jupyter-web-app
app.kubernetes.io/managed-by: kfctl
app.kubernetes.io/name: jupyter-web-app
app.kubernetes.io/part-of: kubeflow
app.kubernetes.io/version: v0.6
kustomize.component: jupyter-web-app
name: jupyter-web-app-service-account
namespace: kubeflow
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: Role
metadata:
labels:
app: jupyter-web-app
app.kubernetes.io/component: jupyter
app.kubernetes.io/instance: jupyter-web-app
app.kubernetes.io/managed-by: kfctl
app.kubernetes.io/name: jupyter-web-app
app.kubernetes.io/part-of: kubeflow
app.kubernetes.io/version: v0.6
kustomize.component: jupyter-web-app
name: jupyter-web-app-jupyter-notebook-role
namespace: kubeflow
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:
- '*'
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
labels:
app: jupyter-web-app
app.kubernetes.io/component: jupyter
app.kubernetes.io/instance: jupyter-web-app
app.kubernetes.io/managed-by: kfctl
app.kubernetes.io/name: jupyter-web-app
app.kubernetes.io/part-of: kubeflow
app.kubernetes.io/version: v0.6
kustomize.component: jupyter-web-app
name: jupyter-web-app-cluster-role
rules:
- apiGroups:
- ""
resources:
- namespaces
verbs:
- get
- list
- create
- delete
- apiGroups:
- kubeflow.org
resources:
- notebooks
- poddefaults
verbs:
- get
- list
- create
- delete
- apiGroups:
- ""
resources:
- persistentvolumeclaims
verbs:
- create
- delete
- get
- list
- apiGroups:
- storage.k8s.io
resources:
- storageclasses
verbs:
- get
- list
- watch
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: RoleBinding
metadata:
labels:
app: jupyter-web-app
app.kubernetes.io/component: jupyter
app.kubernetes.io/instance: jupyter-web-app
app.kubernetes.io/managed-by: kfctl
app.kubernetes.io/name: jupyter-web-app
app.kubernetes.io/part-of: kubeflow
app.kubernetes.io/version: v0.6
kustomize.component: jupyter-web-app
name: jupyter-web-app-jupyter-notebook-role-binding
namespace: kubeflow
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: jupyter-web-app-jupyter-notebook-role
subjects:
- kind: ServiceAccount
name: jupyter-notebook
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
labels:
app: jupyter-web-app
app.kubernetes.io/component: jupyter
app.kubernetes.io/instance: jupyter-web-app
app.kubernetes.io/managed-by: kfctl
app.kubernetes.io/name: jupyter-web-app
app.kubernetes.io/part-of: kubeflow
app.kubernetes.io/version: v0.6
kustomize.component: jupyter-web-app
name: jupyter-web-app-cluster-role-binding
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: jupyter-web-app-cluster-role
subjects:
- kind: ServiceAccount
name: jupyter-web-app-service-account
namespace: kubeflow
---
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.13.1-notebook-cpu:v0.5.0
# The list of available standard container Images
options:
- gcr.io/kubeflow-images-public/tensorflow-1.5.1-notebook-cpu:v0.5.0
- gcr.io/kubeflow-images-public/tensorflow-1.5.1-notebook-gpu:v0.5.0
- gcr.io/kubeflow-images-public/tensorflow-1.6.0-notebook-cpu:v0.5.0
- gcr.io/kubeflow-images-public/tensorflow-1.6.0-notebook-gpu:v0.5.0
- gcr.io/kubeflow-images-public/tensorflow-1.7.0-notebook-cpu:v0.5.0
- gcr.io/kubeflow-images-public/tensorflow-1.7.0-notebook-gpu:v0.5.0
- gcr.io/kubeflow-images-public/tensorflow-1.8.0-notebook-cpu:v0.5.0
- gcr.io/kubeflow-images-public/tensorflow-1.8.0-notebook-gpu:v0.5.0
- gcr.io/kubeflow-images-public/tensorflow-1.9.0-notebook-cpu:v0.5.0
- gcr.io/kubeflow-images-public/tensorflow-1.9.0-notebook-gpu:v0.5.0
- gcr.io/kubeflow-images-public/tensorflow-1.10.1-notebook-cpu:v0.5.0
- gcr.io/kubeflow-images-public/tensorflow-1.10.1-notebook-gpu:v0.5.0
- gcr.io/kubeflow-images-public/tensorflow-1.11.0-notebook-cpu:v0.5.0
- gcr.io/kubeflow-images-public/tensorflow-1.11.0-notebook-gpu:v0.5.0
- gcr.io/kubeflow-images-public/tensorflow-1.12.0-notebook-cpu:v0.5.0
- gcr.io/kubeflow-images-public/tensorflow-1.12.0-notebook-gpu:v0.5.0
- gcr.io/kubeflow-images-public/tensorflow-1.13.1-notebook-cpu:v0.5.0
- gcr.io/kubeflow-images-public/tensorflow-1.13.1-notebook-gpu:v0.5.0
- gcr.io/kubeflow-images-public/tensorflow-2.0.0a-notebook-cpu:v0.5.0
- gcr.io/kubeflow-images-public/tensorflow-2.0.0a-notebook-gpu:v0.5.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:
labels:
app: jupyter-web-app
app.kubernetes.io/component: jupyter
app.kubernetes.io/instance: jupyter-web-app
app.kubernetes.io/managed-by: kfctl
app.kubernetes.io/name: jupyter-web-app
app.kubernetes.io/part-of: kubeflow
app.kubernetes.io/version: v0.6
kustomize.component: jupyter-web-app
name: jupyter-web-app-config
namespace: kubeflow
---
apiVersion: v1
data:
ROK_SECRET_NAME: {{ .Values.jupyterWebApp.rokSecretName | quote }}
UI: {{ .Values.jupyterWebApp.ui | quote }}
clusterDomain: {{ .Values.clusterDomain | quote }}
policy: {{ .Values.jupyterWebApp.policy | quote }}
prefix: {{ .Values.jupyterWebApp.prefix | quote }}
userid-header: {{ .Values.jupyterWebApp.useridHeader | quote }}
userid-prefix: {{ .Values.jupyterWebApp.useridPrefix | quote }}
kind: ConfigMap
metadata:
labels:
app: jupyter-web-app
app.kubernetes.io/component: jupyter
app.kubernetes.io/instance: jupyter-web-app
app.kubernetes.io/managed-by: kfctl
app.kubernetes.io/name: jupyter-web-app
app.kubernetes.io/part-of: kubeflow
app.kubernetes.io/version: v0.6
kustomize.component: jupyter-web-app
name: jupyter-web-app-parameters
namespace: kubeflow
---
apiVersion: v1
kind: Service
metadata:
annotations:
getambassador.io/config: |-
---
apiVersion: ambassador/v0
kind: Mapping
name: webapp_mapping
prefix: /jupyter/
service: jupyter-web-app-service.kubeflow
add_request_headers:
x-forwarded-prefix: /jupyter
labels:
app: jupyter-web-app
app.kubernetes.io/component: jupyter
app.kubernetes.io/instance: jupyter-web-app
app.kubernetes.io/managed-by: kfctl
app.kubernetes.io/name: jupyter-web-app
app.kubernetes.io/part-of: kubeflow
app.kubernetes.io/version: v0.6
kustomize.component: jupyter-web-app
run: jupyter-web-app
name: jupyter-web-app-service
namespace: kubeflow
spec:
ports:
- name: http
port: 80
protocol: TCP
targetPort: 5000
selector:
app: jupyter-web-app
app.kubernetes.io/component: jupyter
app.kubernetes.io/instance: jupyter-web-app
app.kubernetes.io/managed-by: kfctl
app.kubernetes.io/name: jupyter-web-app
app.kubernetes.io/part-of: kubeflow
app.kubernetes.io/version: v0.6
kustomize.component: jupyter-web-app
type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: jupyter-web-app
app.kubernetes.io/component: jupyter
app.kubernetes.io/instance: jupyter-web-app
app.kubernetes.io/managed-by: kfctl
app.kubernetes.io/name: jupyter-web-app
app.kubernetes.io/part-of: kubeflow
app.kubernetes.io/version: v0.6
kustomize.component: jupyter-web-app
name: jupyter-web-app-deployment
namespace: kubeflow
spec:
replicas: 1
selector:
matchLabels:
app: jupyter-web-app
app.kubernetes.io/component: jupyter
app.kubernetes.io/instance: jupyter-web-app
app.kubernetes.io/managed-by: kfctl
app.kubernetes.io/name: jupyter-web-app
app.kubernetes.io/part-of: kubeflow
app.kubernetes.io/version: v0.6
kustomize.component: jupyter-web-app
template:
metadata:
labels:
app: jupyter-web-app
app.kubernetes.io/component: jupyter
app.kubernetes.io/instance: jupyter-web-app
app.kubernetes.io/managed-by: kfctl
app.kubernetes.io/name: jupyter-web-app
app.kubernetes.io/part-of: kubeflow
app.kubernetes.io/version: v0.6
kustomize.component: jupyter-web-app
spec:
containers:
- env:
- name: ROK_SECRET_NAME
valueFrom:
configMapKeyRef:
key: ROK_SECRET_NAME
name: jupyter-web-app-parameters
- name: UI
valueFrom:
configMapKeyRef:
key: UI
name: jupyter-web-app-parameters
- name: USERID_HEADER
valueFrom:
configMapKeyRef:
key: userid-header
name: jupyter-web-app-parameters
- name: USERID_PREFIX
valueFrom:
configMapKeyRef:
key: userid-prefix
name: jupyter-web-app-parameters
image: gcr.io/kubeflow-images-public/jupyter-web-app:9419d4d
imagePullPolicy: Always
name: jupyter-web-app
ports:
- containerPort: 5000
volumeMounts:
- mountPath: /etc/config
name: config-volume
serviceAccountName: jupyter-web-app-service-account
volumes:
- configMap:
name: jupyter-web-app-config
name: config-volume
---
apiVersion: app.k8s.io/v1beta1
kind: Application
metadata:
labels:
app.kubernetes.io/component: jupyter
app.kubernetes.io/instance: jupyter-web-app
app.kubernetes.io/managed-by: kfctl
app.kubernetes.io/name: jupyter-web-app
app.kubernetes.io/part-of: kubeflow
app.kubernetes.io/version: v0.6
name: jupyter-web-app
namespace: kubeflow
spec:
addOwnerRef: true
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: networking.istio.io
kind: VirtualService
descriptor:
description: Provides a UI which allows the user to create/conect/delete jupyter
notebooks.
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
maintainers:
- email: kimwnasptd@arrikto.com
name: Kimonas Sotirchos
owners:
- email: kimwnasptd@arrikto.com
name: Kimonas Sotirchos
type: jupyter-web-app
version: v0.6.2
selector:
matchLabels:
app.kubernetes.io/component: jupyter
app.kubernetes.io/instance: jupyter-web-app
app.kubernetes.io/managed-by: kfctl
app.kubernetes.io/name: jupyter-web-app
app.kubernetes.io/part-of: kubeflow
app.kubernetes.io/version: v0.6
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
labels:
app.kubernetes.io/component: jupyter
app.kubernetes.io/instance: jupyter-web-app
app.kubernetes.io/managed-by: kfctl
app.kubernetes.io/name: jupyter-web-app
app.kubernetes.io/part-of: kubeflow
app.kubernetes.io/version: v0.6
name: jupyter-web-app
namespace: kubeflow
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.kubeflow.svc.{{ .Values.clusterDomain }}
port:
number: 80
{{- if .Values.jupyterhub.enabled }}
apiVersion: v1
kind: ConfigMap
metadata:
labels:
ksonnet.io/component: jupyterhub
name: jupyterhub-config
namespace: kubeflow
data:
{{ (.Files.Glob "scripts/jupyterhub_config.py").AsConfig | indent 2 }}
{{- end }}
{{- if .Values.jupyterhub.enabled }}
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
app: jupyter-hub
ksonnet.io/component: jupyterhub
name: jupyter-hub
namespace: kubeflow
---
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
ksonnet.io/component: jupyterhub
name: jupyter-notebook
namespace: kubeflow
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: Role
metadata:
labels:
ksonnet.io/component: jupyterhub
name: jupyter-notebook-role
namespace: kubeflow
rules:
- apiGroups:
- ""
resources:
- pods
- services
verbs:
- '*'
- apiGroups:
- ""
- apps
- extensions
resources:
- deployments
- replicasets
verbs:
- '*'
- apiGroups:
- kubeflow.org
resources:
- '*'
verbs:
- '*'
- apiGroups:
- batch
resources:
- jobs
verbs:
- '*'
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: Role
metadata:
labels:
ksonnet.io/component: jupyterhub
name: jupyter-role
namespace: kubeflow
rules:
- apiGroups:
- ""
resources:
- pods
- persistentvolumeclaims
verbs:
- get
- watch
- list
- create
- delete
- apiGroups:
- ""
resources:
- events
verbs:
- get
- watch
- list
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: RoleBinding
metadata:
labels:
ksonnet.io/component: jupyterhub
name: jupyter-notebook-role
namespace: kubeflow
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: jupyter-notebook-role
subjects:
- kind: ServiceAccount
name: jupyter-notebook
namespace: kubeflow
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: RoleBinding
metadata:
labels:
ksonnet.io/component: jupyterhub
name: jupyter-role
namespace: kubeflow
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: jupyter-role
subjects:
- kind: ServiceAccount
name: jupyter-hub
namespace: kubeflow
{{- end }}
{{- if .Values.jupyterhub.enabled }}
apiVersion: v1
kind: Service
metadata:
annotations:
prometheus.io/scrape: "true"
labels:
app: tf-hub
ksonnet.io/component: jupyterhub
name: tf-hub-0
namespace: kubeflow
spec:
clusterIP: None
ports:
- name: hub
port: 8000
selector:
app: tf-hub
---
apiVersion: v1
kind: Service
metadata:
annotations:
getambassador.io/config: |-
---
apiVersion: ambassador/v0
kind: Mapping
name: tf-hub-lb-hub-mapping
prefix: /hub/
rewrite: /hub/
timeout_ms: 300000
service: tf-hub-lb.kubeflow
use_websocket: true
---
apiVersion: ambassador/v0
kind: Mapping
name: tf-hub-lb-user-mapping
prefix: /user/
rewrite: /user/
timeout_ms: 300000
service: tf-hub-lb.kubeflow
use_websocket: true
labels:
app: tf-hub-lb
ksonnet.io/component: jupyterhub
name: tf-hub-lb
namespace: kubeflow
spec:
ports:
- name: hub
port: 80
targetPort: 8000
selector:
app: tf-hub
type: {{ .Values.jupyterhub.service.type }}
{{- end }}
{{- if .Values.jupyterhub.enabled }}
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
labels:
ksonnet.io/component: jupyterhub
name: tf-hub
namespace: kubeflow
spec:
replicas: 1
serviceName: ""
template:
metadata:
labels:
app: tf-hub
spec:
containers:
- command:
- jupyterhub
- -f
- /etc/config/jupyterhub_config.py
env:
- name: NOTEBOOK_PVC_MOUNT
value: /home/jovyan
- name: CLOUD_NAME
value: "null"
- name: REGISTRY
value: gcr.io
- name: REPO_NAME
value: kubeflow-images-public
- name: KF_AUTHENTICATOR
value: "null"
- name: DEFAULT_JUPYTERLAB
value: "false"
- name: KF_PVC_LIST
value: "null"
image: "{{ .Values.jupyterhub.image.repository }}:{{ .Values.jupyterhub.image.tag }}"
name: tf-hub
ports:
- containerPort: 8000
- containerPort: 8081
volumeMounts:
- mountPath: /etc/config
name: config-volume
serviceAccountName: jupyter-hub
volumes:
- configMap:
name: jupyterhub-config
name: config-volume
updateStrategy:
type: RollingUpdate
{{- end }}
apiVersion: v1
kind: ConfigMap
metadata:
labels:
ksonnet.io/component: katib
name: metricscollector-template
namespace: kubeflow
data:
defaultMetricsCollectorTemplate.yaml: "apiVersion: batch/v1beta1\nkind: CronJob\nmetadata:\n
\ name: {{.WorkerId}}\n namespace: {{.NameSpace}} \nspec:\n schedule: \"*/1
* * * *\"\n successfulJobsHistoryLimit: 1\n failedJobsHistoryLimit: 1\n jobTemplate:\n
\ spec:\n template:\n spec:\n serviceAccountName: metrics-collector\n
\ containers:\n - name: {{.WorkerId}}\n image: katib/metrics-collector\n
\ args:\n - \"./metricscollector\"\n - \"-s\"\n
\ - \"{{.StudyId}}\"\n - \"-t\"\n - \"{{.TrialId}}\"\n
\ - \"-w\"\n - \"{{.WorkerId}}\"\n - \"-n\"\n
\ - \"{{.NameSpace}}\"\n restartPolicy: Never\n"
---
apiVersion: v1
kind: ConfigMap
metadata:
labels:
ksonnet.io/component: katib
name: worker-template
namespace: kubeflow
data:
defaultWorkerTemplate.yaml: |
apiVersion: batch/v1
namespace: kubeflow
kind: Job
metadata:
name: {{.WorkerId}}
spec:
template:
spec:
containers:
- name: {{.WorkerId}}
image: alpine
restartPolicy: Never
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
name: experiments.kubeflow.org
spec:
additionalPrinterColumns:
- JSONPath: .status.conditions[-1:].type
name: Status
type: string
- JSONPath: .metadata.creationTimestamp
name: Age
type: date
group: kubeflow.org
names:
categories:
- all
- kubeflow
- katib
kind: Experiment
plural: experiments
singular: experiment
scope: Namespaced
subresources:
status: {}
version: v1alpha2
---
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
name: trials.kubeflow.org
spec:
additionalPrinterColumns:
- JSONPath: .status.conditions[-1:].type
name: Status
type: string
- JSONPath: .metadata.creationTimestamp
name: Age
type: date
group: kubeflow.org
names:
categories:
- all
- kubeflow
- katib
kind: Trial
plural: trials
singular: trial
scope: Namespaced
subresources:
status: {}
version: v1alpha2
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: katib-controller
namespace: kubeflow
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: katib-controller
rules:
- apiGroups:
- ""
resources:
- configmaps
- serviceaccounts
- services
- secrets
verbs:
- '*'
- apiGroups:
- ""
resources:
- pods
- pods/log
- pods/status
verbs:
- '*'
- apiGroups:
- batch
resources:
- jobs
- cronjobs
verbs:
- '*'
- apiGroups:
- apiextensions.k8s.io
resources:
- customresourcedefinitions
verbs:
- create
- get
- apiGroups:
- admissionregistration.k8s.io
resources:
- validatingwebhookconfigurations
- mutatingwebhookconfigurations
verbs:
- '*'
- apiGroups:
- kubeflow.org
resources:
- experiments
- experiments/status
- trials
- trials/status
verbs:
- '*'
- apiGroups:
- kubeflow.org
resources:
- tfjobs
- pytorchjobs
verbs:
- '*'
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: katib-controller
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: katib-controller
subjects:
- kind: ServiceAccount
name: katib-controller
namespace: kubeflow
---
apiVersion: v1
data:
defaultTrialTemplate.yaml: |-
apiVersion: batch/v1
kind: Job
metadata:
name: {{`{{.Trial}}`}}
namespace: {{`{{.NameSpace}}`}}
spec:
template:
spec:
containers:
- name: {{`{{.Trial}}`}}
image: alpine
restartPolicy: Never
kind: ConfigMap
metadata:
name: trial-template
namespace: kubeflow
---
apiVersion: v1
kind: Secret
metadata:
name: katib-controller
namespace: kubeflow
---
apiVersion: v1
kind: Service
metadata:
name: katib-controller
namespace: kubeflow
spec:
ports:
- port: 443
protocol: TCP
targetPort: 443
selector:
app: katib-controller
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: katib-controller
name: katib-controller
namespace: kubeflow
spec:
replicas: 1
selector:
matchLabels:
app: katib-controller
template:
metadata:
labels:
app: katib-controller
spec:
containers:
- command:
- ./katib-controller
env:
- name: KATIB_CORE_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
image: gcr.io/kubeflow-images-public/katib/v1alpha2/katib-controller:v0.6.0-rc.0
imagePullPolicy: IfNotPresent
name: katib-controller
ports:
- containerPort: 443
name: webhook
protocol: TCP
volumeMounts:
- mountPath: /tmp/cert
name: cert
readOnly: true
serviceAccountName: katib-controller
volumes:
- name: cert
secret:
defaultMode: 420
secretName: katib-controller
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
labels:
ksonnet.io/component: katib
annotations:
"helm.sh/hook": crd-install
"helm.sh/hook-delete-policy": before-hook-creation
name: studyjobs.kubeflow.org
spec:
group: kubeflow.org
names:
kind: StudyJob
plural: studyjobs
singular: studyjob
version: v1alpha1
apiVersion: v1
data:
MYSQL_ROOT_PASSWORD: {{ .Values.katib.db.password | b64enc | quote }}
kind: Secret
metadata:
name: katib-db-secrets
namespace: kubeflow
type: Opaque
---
apiVersion: v1
kind: Service
metadata:
labels:
app: katib
component: db
name: katib-db
namespace: kubeflow
spec:
ports:
- name: dbapi
port: 3306
protocol: TCP
selector:
app: katib
component: db
type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: katib
component: db
name: katib-db
namespace: kubeflow
spec:
replicas: 1
selector:
matchLabels:
app: katib
component: db
template:
metadata:
labels:
app: katib
component: db
name: katib-db
spec:
containers:
- args:
- --datadir
- /var/lib/mysql/datadir
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
key: MYSQL_ROOT_PASSWORD
name: katib-db-secrets
- name: MYSQL_ALLOW_EMPTY_PASSWORD
value: "true"
- name: MYSQL_DATABASE
value: katib
image: mysql:8.0.3
name: katib-db
ports:
- containerPort: 3306
name: dbapi
readinessProbe:
exec:
command:
- /bin/bash
- -c
- mysql -D $$MYSQL_DATABASE -p$$MYSQL_ROOT_PASSWORD -e 'SELECT 1'
initialDelaySeconds: 5
periodSeconds: 2
timeoutSeconds: 1
volumeMounts:
- mountPath: /var/lib/mysql
name: katib-db-pvc
volumes:
- name: katib-db-pvc
{{- if .Values.katib.db.persistence.enabled }}
persistentVolumeClaim:
claimName: katib-db-pvc
{{- else }}
emptyDir: {}
{{ end }}
{{- if .Values.katib.db.persistence.enabled }}
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: katib-db-pvc
namespace: kubeflow
spec:
accessModes:
- {{ .Values.katib.db.persistence.accessMode | quote }}
resources:
requests:
storage: {{ .Values.katib.db.persistence.size | quote }}
storageClassName: {{ .Values.katib.db.persistence.storageClass | quote }}
{{- end -}}
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
labels:
app: studyjob-controller
ksonnet.io/component: katib
name: studyjob-controller
namespace: kubeflow
spec:
replicas: 1
selector:
matchLabels:
app: studyjob-controller
template:
metadata:
labels:
app: studyjob-controller
spec:
containers:
- image: "{{ .Values.katib.studyJobControllerImage.repository }}:{{ .Values.katib.studyJobControllerImage.tag }}"
imagePullPolicy: Always
name: studyjob-controller
volumeMounts:
- mountPath: /worker-template
name: worker-template
- mountPath: /metricscollector-template
name: metricscollector-template
serviceAccountName: studyjob-controller
volumes:
- configMap:
name: worker-template
name: worker-template
- configMap:
name: metricscollector-template
name: metricscollector-template
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
labels:
app: vizier
component: core
ksonnet.io/component: katib
name: vizier-core
namespace: kubeflow
spec:
replicas: 1
template:
metadata:
labels:
app: vizier
component: core
name: vizier-core
spec:
containers:
- args:
- ./vizier-manager
- -w
- kubernetes
- -i
- k-cluster.example.net
image: "{{ .Values.katib.vizierCoreImage.repository }}:{{ .Values.katib.vizierCoreImage.tag }}"
# image: gcr.io/kubeflow-images-public/katib/vizier-core:v0.1.2-alpha-45-g3dce496
name: vizier-core
ports:
- containerPort: 6789
name: api
serviceAccountName: vizier-core
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
labels:
app: vizier
component: db
ksonnet.io/component: katib
name: vizier-db
namespace: kubeflow
spec:
replicas: 1
template:
metadata:
labels:
app: vizier
component: db
name: vizier-db
spec:
containers:
- args:
- --datadir
- /var/lib/mysql/datadir
env:
- name: MYSQL_ROOT_PASSWORD
value: test
- name: MYSQL_ALLOW_EMPTY_PASSWORD
value: "true"
- name: MYSQL_DATABASE
value: vizier
image: "{{ .Values.katib.vizierDbImage.repository }}:{{ .Values.katib.vizierDbImage.tag }}"
name: vizier-db
ports:
- containerPort: 3306
name: dbapi
volumeMounts:
- mountPath: /var/lib/mysql
name: vizier-db
volumes:
- name: vizier-db
{{- if .Values.katib.vizierdb.persistence.enabled }}
persistentVolumeClaim:
claimName: {{ .Values.katib.vizierdb.persistence.existingClaim | default ("vizier-db") }}
{{- else }}
emptyDir: {}
{{- end }}
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
labels:
app: vizier
component: suggestion-bayesianoptimization
ksonnet.io/component: katib
name: vizier-suggestion-bayesianoptimization
namespace: kubeflow
spec:
replicas: 1
template:
metadata:
labels:
app: vizier
component: suggestion-bayesianoptimization
name: vizier-suggestion-bayesianoptimization
spec:
containers:
- image: "{{ .Values.katib.suggestionBayesianOptimizationImage.repository }}:{{ .Values.katib.suggestionBayesianOptimizationImage.tag }}"
name: vizier-suggestion-bayesianoptimization
ports:
- containerPort: 6789
name: api
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
labels:
app: vizier
component: suggestion-grid
ksonnet.io/component: katib
name: vizier-suggestion-grid
namespace: kubeflow
spec:
replicas: 1
template:
metadata:
labels:
app: vizier
component: suggestion-grid
name: vizier-suggestion-grid
spec:
containers:
- image: "{{ .Values.katib.suggestionGridImage.repository }}:{{ .Values.katib.suggestionGridImage.tag }}"
# - image: gcr.io/kubeflow-images-public/katib/suggestion-grid:v0.1.2-alpha-45-g3dce496
name: vizier-suggestion-grid
ports:
- containerPort: 6789
name: api
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
labels:
app: vizier
component: suggestion-hyperband
ksonnet.io/component: katib
name: vizier-suggestion-hyperband
namespace: kubeflow
spec:
replicas: 1
template:
metadata:
labels:
app: vizier
component: suggestion-hyperband
name: vizier-suggestion-hyperband
spec:
containers:
- image: "{{ .Values.katib.suggestionHyperbandImage.repository }}:{{ .Values.katib.suggestionHyperbandImage.tag }}"
# - image: gcr.io/kubeflow-images-public/katib/suggestion-hyperband:v0.1.2-alpha-45-g3dce496
name: vizier-suggestion-hyperband
ports:
- containerPort: 6789
name: api
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
labels:
app: vizier
component: suggestion-random
ksonnet.io/component: katib
name: vizier-suggestion-random
namespace: kubeflow
spec:
replicas: 1
template:
metadata:
labels:
app: vizier
component: suggestion-random
name: vizier-suggestion-random
spec:
containers:
- image: "{{ .Values.katib.suggestionRandomImage.repository }}:{{ .Values.katib.suggestionRandomImage.tag }}"
# - image: gcr.io/kubeflow-images-public/katib/suggestion-random:v0.1.2-alpha-45-g3dce496
name: vizier-suggestion-random
ports:
- containerPort: 6789
name: api
apiVersion: v1
kind: Service
metadata:
labels:
app: katib
component: manager
name: katib-manager
namespace: kubeflow
spec:
ports:
- name: api
port: 6789
protocol: TCP
selector:
app: katib
component: manager
type: ClusterIP
---
apiVersion: v1
kind: Service
metadata:
labels:
app: katib
component: manager-rest
name: katib-manager-rest
namespace: kubeflow
spec:
ports:
- name: api
port: 80
protocol: TCP
selector:
app: katib
component: manager-rest
type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: katib
component: manager
name: katib-manager
namespace: kubeflow
spec:
replicas: 1
selector:
matchLabels:
app: katib
component: manager
template:
metadata:
labels:
app: katib
component: manager
name: katib-manager
spec:
containers:
- command:
- ./katib-manager
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
key: MYSQL_ROOT_PASSWORD
name: katib-db-secrets
image: gcr.io/kubeflow-images-public/katib/v1alpha2/katib-manager:v0.6.0-rc.0
imagePullPolicy: IfNotPresent
livenessProbe:
exec:
command:
- /bin/grpc_health_probe
- -addr=:6789
initialDelaySeconds: 10
name: katib-manager
ports:
- containerPort: 6789
name: api
readinessProbe:
exec:
command:
- /bin/grpc_health_probe
- -addr=:6789
initialDelaySeconds: 5
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: katib
component: manager-rest
name: katib-manager-rest
namespace: kubeflow
spec:
replicas: 1
selector:
matchLabels:
app: katib
component: manager-rest
template:
metadata:
labels:
app: katib
component: manager-rest
name: katib-manager-rest
spec:
containers:
- command:
- ./katib-manager-rest
image: gcr.io/kubeflow-images-public/katib/v1alpha2/katib-manager-rest:v0.6.0-rc.0
imagePullPolicy: IfNotPresent
name: katib-manager-rest
ports:
- containerPort: 80
name: api
apiVersion: v1
kind: Service
metadata:
labels:
app: modeldb
component: backend
ksonnet.io/component: katib
name: modeldb-backend
namespace: kubeflow
spec:
ports:
- name: api
port: 6543
protocol: TCP
selector:
app: modeldb
component: backend
type: ClusterIP
---
apiVersion: v1
kind: Service
metadata:
labels:
app: modeldb
component: db
ksonnet.io/component: katib
name: modeldb-db
namespace: kubeflow
spec:
ports:
- name: dbapi
port: 27017
protocol: TCP
selector:
app: modeldb
component: db
type: ClusterIP
---
apiVersion: v1
kind: Service
metadata:
annotations:
getambassador.io/config: |-
---
apiVersion: ambassador/v0
kind: Mapping
name: modeldb-mapping
prefix: /katib/
rewrite: /katib/
method: GET
service: modeldb-frontend.kubeflow:3000
labels:
app: modeldb
component: frontend
ksonnet.io/component: katib
name: modeldb-frontend
namespace: kubeflow
spec:
ports:
- name: api
port: 3000
protocol: TCP
selector:
app: modeldb
component: frontend
type: ClusterIP
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
labels:
app: modeldb
component: backend
ksonnet.io/component: katib
name: modeldb-backend
namespace: kubeflow
spec:
replicas: 1
template:
metadata:
labels:
app: modeldb
component: backend
name: modeldb-backend
spec:
containers:
- args:
- modeldb-db
image: "{{ .Values.katib.modeldbImage.repository }}:{{ .Values.katib.modeldbImage.tag }}"
name: modeldb-backend
ports:
- containerPort: 6543
name: api
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
labels:
app: modeldb
component: db
ksonnet.io/component: katib
name: modeldb-db
namespace: kubeflow
spec:
replicas: 1
template:
metadata:
labels:
app: modeldb
component: db
name: modeldb-db
spec:
containers:
- image: "{{ .Values.katib.modeldbDatabaseImage.repository }}:{{ .Values.katib.modeldbDatabaseImage.tag }}"
name: modeldb-db
ports:
- containerPort: 27017
name: dbapi
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
labels:
app: modeldb
component: frontend
ksonnet.io/component: katib
name: modeldb-frontend
namespace: kubeflow
spec:
replicas: 1
template:
metadata:
labels:
app: modeldb
component: frontend
name: modeldb-frontend
spec:
containers:
- args:
- modeldb-backend
env:
- name: ROOT_PATH
value: /katib
# image: gcr.io/kubeflow-images-public/katib/katib-frontend:v0.1.2-alpha-45-g3dce496
image: "{{ .Values.katib.modeldbFrontendImage.repository }}:{{ .Values.katib.modeldbFrontendImage.tag }}"
imagePullPolicy: IfNotPresent
name: modeldb-frontend
ports:
- containerPort: 3000
name: webapi
{{- if and .Values.katib.vizierdb.persistence.enabled (not .Values.katib.vizierdb.persistence.existingClaim) }}
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
labels:
app: vizier
component: db
ksonnet.io/component: katib
name: vizier-db
namespace: kubeflow
spec:
accessModes:
- {{ .Values.katib.vizierdb.persistence.accessMode | quote }}
resources:
requests:
storage: {{ .Values.katib.vizierdb.persistence.size | quote }}
{{- if .Values.katib.vizierdb.persistence.storageClass }}
{{- if (eq "-" .Values.katib.vizierdb.persistence.storageClass) }}
storageClassName: ""
{{- else }}
storageClassName: "{{ .Values.katib.vizierdb.persistence.storageClass }}"
{{- end }}
{{- end }}
{{- end -}}
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
labels:
ksonnet.io/component: katib
name: metrics-collector
rules:
- apiGroups:
- ""
resources:
- pods
- pods/log
- pods/status
verbs:
- '*'
- apiGroups:
- batch
resources:
- jobs
verbs:
- '*'
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
labels:
ksonnet.io/component: katib
name: studyjob-controller
rules:
- apiGroups:
- ""
resources:
- configmaps
- serviceaccounts
verbs:
- create
- update
- list
- watch
- apiGroups:
- batch
resources:
- jobs
- cronjobs
verbs:
- '*'
- apiGroups:
- apiextensions.k8s.io
resources:
- customresourcedefinitions
verbs:
- create
- get
- apiGroups:
- kubeflow.org
resources:
- studyjobs
verbs:
- '*'
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
labels:
ksonnet.io/component: katib
name: vizier-core
rules:
- apiGroups:
- ""
resources:
- pods
- nodes
- nodes/*
- pods/log
- pods/status
- services
- persistentvolumes
- persistentvolumes/status
- persistentvolumeclaims
- persistentvolumeclaims/status
verbs:
- '*'
- apiGroups:
- batch
resources:
- jobs
- jobs/status
verbs:
- '*'
- apiGroups:
- extensions
resources:
- ingresses
- ingresses/status
- deployments
- deployments/status
verbs:
- '*'
- apiGroups:
- ""
resources:
- services
verbs:
- '*'
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
labels:
ksonnet.io/component: katib
name: vizier-core
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: vizier-core
subjects:
- kind: ServiceAccount
name: vizier-core
namespace: kubeflow
---
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
ksonnet.io/component: katib
name: metrics-collector
namespace: kubeflow
---
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
ksonnet.io/component: katib
name: studyjob-controller
namespace: kubeflow
---
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
ksonnet.io/component: katib
name: vizier-core
namespace: kubeflow
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
labels:
ksonnet.io/component: katib
name: metrics-collector
namespace: kubeflow
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: metrics-collector
subjects:
- kind: ServiceAccount
name: metrics-collector
namespace: kubeflow
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
labels:
ksonnet.io/component: katib
name: studyjob-controller
namespace: kubeflow
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: studyjob-controller
subjects:
- kind: ServiceAccount
name: studyjob-controller
namespace: kubeflow
apiVersion: v1
kind: Service
metadata:
labels:
app: katib
component: suggestion-bayesianoptimization
name: katib-suggestion-bayesianoptimization
namespace: kubeflow
spec:
ports:
- name: api
port: 6789
protocol: TCP
selector:
app: katib
component: suggestion-bayesianoptimization
type: ClusterIP
---
apiVersion: v1
kind: Service
metadata:
labels:
app: katib
component: suggestion-grid
name: katib-suggestion-grid
namespace: kubeflow
spec:
ports:
- name: api
port: 6789
protocol: TCP
selector:
app: katib
component: suggestion-grid
type: ClusterIP
---
apiVersion: v1
kind: Service
metadata:
labels:
app: katib
component: suggestion-hyperband
name: katib-suggestion-hyperband
namespace: kubeflow
spec:
ports:
- name: api
port: 6789
protocol: TCP
selector:
app: katib
component: suggestion-hyperband
type: ClusterIP
---
apiVersion: v1
kind: Service
metadata:
labels:
app: katib
component: suggestion-nasrl
name: katib-suggestion-nasrl
namespace: kubeflow
spec:
ports:
- name: api
port: 6789
protocol: TCP
selector:
app: katib
component: suggestion-nasrl
type: ClusterIP
---
apiVersion: v1
kind: Service
metadata:
labels:
app: katib
component: suggestion-random
name: katib-suggestion-random
namespace: kubeflow
spec:
ports:
- name: api
port: 6789
protocol: TCP
selector:
app: katib
component: suggestion-random
type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: katib
component: suggestion-bayesianoptimization
name: katib-suggestion-bayesianoptimization
namespace: kubeflow
spec:
replicas: 1
selector:
matchLabels:
app: katib
component: suggestion-bayesianoptimization
template:
metadata:
labels:
app: katib
component: suggestion-bayesianoptimization
name: katib-suggestion-bayesianoptimization
spec:
containers:
- image: gcr.io/kubeflow-images-public/katib/v1alpha2/suggestion-bayesianoptimization:v0.6.0-rc.0
imagePullPolicy: IfNotPresent
name: katib-suggestion-bayesianoptimization
ports:
- containerPort: 6789
name: api
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: katib
component: suggestion-grid
name: katib-suggestion-grid
namespace: kubeflow
spec:
replicas: 1
selector:
matchLabels:
app: katib
component: suggestion-grid
template:
metadata:
labels:
app: katib
component: suggestion-grid
name: katib-suggestion-grid
spec:
containers:
- image: gcr.io/kubeflow-images-public/katib/v1alpha2/suggestion-grid:v0.6.0-rc.0
imagePullPolicy: IfNotPresent
name: katib-suggestion-grid
ports:
- containerPort: 6789
name: api
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: katib
component: suggestion-hyperband
name: katib-suggestion-hyperband
namespace: kubeflow
spec:
replicas: 1
selector:
matchLabels:
app: katib
component: suggestion-hyperband
template:
metadata:
labels:
app: katib
component: suggestion-hyperband
name: katib-suggestion-hyperband
spec:
containers:
- image: gcr.io/kubeflow-images-public/katib/v1alpha2/suggestion-hyperband:v0.6.0-rc.0
imagePullPolicy: IfNotPresent
name: katib-suggestion-hyperband
ports:
- containerPort: 6789
name: api
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: katib
component: suggestion-nasrl
name: katib-suggestion-nasrl
namespace: kubeflow
spec:
replicas: 1
selector:
matchLabels:
app: katib
component: suggestion-nasrl
template:
metadata:
labels:
app: katib
component: suggestion-nasrl
name: katib-suggestion-nasrl
spec:
containers:
- image: gcr.io/kubeflow-images-public/katib/v1alpha2/suggestion-nasrl:v0.6.0-rc.0
name: katib-suggestion-nasrl
ports:
- containerPort: 6789
name: api
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: katib
component: suggestion-random
name: katib-suggestion-random
namespace: kubeflow
spec:
replicas: 1
selector:
matchLabels:
app: katib
component: suggestion-random
template:
metadata:
labels:
app: katib
component: suggestion-random
name: katib-suggestion-random
spec:
containers:
- image: gcr.io/kubeflow-images-public/katib/v1alpha2/suggestion-random:v0.6.0-rc.0
imagePullPolicy: IfNotPresent
name: katib-suggestion-random
ports:
- containerPort: 6789
name: api
apiVersion: v1
kind: Service
metadata:
labels:
app: vizier
component: core
ksonnet.io/component: katib
name: vizier-core
namespace: kubeflow
spec:
ports:
- name: api
{{- if .Values.katib.vizier.service.nodePort }}
nodePort: {{ .Values.katib.vizier.service.nodePort }}
{{- end }}
port: 6789
protocol: TCP
selector:
app: vizier
component: core
type: {{ .Values.katib.vizier.service.type }}
---
apiVersion: v1
kind: Service
metadata:
labels:
app: vizier
component: db
ksonnet.io/component: katib
name: vizier-db
namespace: kubeflow
spec:
ports:
- name: dbapi
port: 3306
protocol: TCP
selector:
app: vizier
component: db
type: ClusterIP
---
apiVersion: v1
kind: Service
metadata:
labels:
app: vizier
component: suggestion-bayesianoptimization
ksonnet.io/component: katib
name: vizier-suggestion-bayesianoptimization
namespace: kubeflow
spec:
ports:
- name: api
port: 6789
protocol: TCP
selector:
app: vizier
component: suggestion-bayesianoptimization
type: ClusterIP
---
apiVersion: v1
kind: Service
metadata:
labels:
app: vizier
component: suggestion-grid
ksonnet.io/component: katib
name: vizier-suggestion-grid
namespace: kubeflow
spec:
ports:
- name: api
port: 6789
protocol: TCP
selector:
app: vizier
component: suggestion-grid
type: ClusterIP
---
apiVersion: v1
kind: Service
metadata:
labels:
app: vizier
component: suggestion-hyperband
ksonnet.io/component: katib
name: vizier-suggestion-hyperband
namespace: kubeflow
spec:
ports:
- name: api
port: 6789
protocol: TCP
selector:
app: vizier
component: suggestion-hyperband
type: ClusterIP
---
apiVersion: v1
kind: Service
metadata:
labels:
app: vizier
component: suggestion-random
ksonnet.io/component: katib
name: vizier-suggestion-random
namespace: kubeflow
spec:
ports:
- name: api
port: 6789
protocol: TCP
selector:
app: vizier
component: suggestion-random
type: ClusterIP
apiVersion: v1
kind: ServiceAccount
metadata:
name: katib-ui
namespace: kubeflow
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: katib-ui
rules:
- apiGroups:
- ""
resources:
- configmaps
verbs:
- '*'
- apiGroups:
- kubeflow.org
resources:
- experiments
- trials
verbs:
- '*'
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: katib-ui
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: katib-ui
subjects:
- kind: ServiceAccount
name: katib-ui
namespace: kubeflow
---
apiVersion: v1
data:
clusterDomain: {{ .Values.clusterDomain | quote }}
kind: ConfigMap
metadata:
name: katib-parameters
namespace: kubeflow
---
apiVersion: v1
kind: Service
metadata:
labels:
app: katib
component: ui
name: katib-ui
namespace: kubeflow
spec:
ports:
- name: ui
port: 80
protocol: TCP
selector:
app: katib
component: ui
type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: katib
component: ui
name: katib-ui
namespace: kubeflow
spec:
replicas: 1
selector:
matchLabels:
app: katib
component: ui
template:
metadata:
labels:
app: katib
component: ui
name: katib-ui
spec:
containers:
- command:
- ./katib-ui
image: gcr.io/kubeflow-images-public/katib/v1alpha2/katib-ui:v0.6.0-rc.0
imagePullPolicy: IfNotPresent
name: katib-ui
ports:
- containerPort: 80
name: ui
serviceAccountName: katib-ui
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: katib-ui
namespace: kubeflow
spec:
gateways:
- kubeflow-gateway
hosts:
- '*'
http:
- match:
- uri:
prefix: /katib/
rewrite:
uri: /katib/
route:
- destination:
host: katib-ui.kubeflow.svc.{{ .Values.clusterDomain }}
port:
number: 80
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
labels:
kustomize.component: metacontroller
name: compositecontrollers.metacontroller.k8s.io
spec:
group: metacontroller.k8s.io
names:
kind: CompositeController
plural: compositecontrollers
shortNames:
- cc
- cctl
singular: compositecontroller
scope: Cluster
version: v1alpha1
---
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
labels:
kustomize.component: metacontroller
name: controllerrevisions.metacontroller.k8s.io
spec:
group: metacontroller.k8s.io
names:
kind: ControllerRevision
plural: controllerrevisions
singular: controllerrevision
scope: Namespaced
version: v1alpha1
---
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
labels:
kustomize.component: metacontroller
name: decoratorcontrollers.metacontroller.k8s.io
spec:
group: metacontroller.k8s.io
names:
kind: DecoratorController
plural: decoratorcontrollers
shortNames:
- dec
- decorators
singular: decoratorcontroller
scope: Cluster
version: v1alpha1
---
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
kustomize.component: metacontroller
name: meta-controller-service
namespace: kubeflow
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
labels:
kustomize.component: metacontroller
name: meta-controller-cluster-role-binding
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: meta-controller-service
namespace: kubeflow
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
labels:
app: metacontroller
kustomize.component: metacontroller
name: metacontroller
namespace: kubeflow
spec:
replicas: 1
selector:
matchLabels:
app: metacontroller
kustomize.component: metacontroller
serviceName: ""
template:
metadata:
labels:
app: metacontroller
kustomize.component: metacontroller
spec:
containers:
- command:
- /usr/bin/metacontroller
- --logtostderr
- -v=4
- --discovery-interval=20s
image: metacontroller/metacontroller:v0.3.0
imagePullPolicy: Always
name: metacontroller
ports:
- containerPort: 2345
resources:
limits:
cpu: "4"
memory: 4Gi
requests:
cpu: 500m
memory: 1Gi
securityContext:
allowPrivilegeEscalation: true
privileged: true
serviceAccountName: meta-controller-service
volumeClaimTemplates: []
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
kustomize.component: metadata
name: metadata-ui
namespace: kubeflow
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: Role
metadata:
labels:
app: metadata-ui
kustomize.component: metadata
name: metadata-ui
namespace: kubeflow
rules:
- apiGroups:
- ""
resources:
- pods
- pods/log
verbs:
- create
- get
- list
- apiGroups:
- kubeflow.org
resources:
- viewers
verbs:
- create
- get
- list
- watch
- delete
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: RoleBinding
metadata:
labels:
app: metadata-ui
kustomize.component: metadata
name: metadata-ui
namespace: kubeflow
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: metadata-ui
subjects:
- kind: ServiceAccount
name: ui
namespace: kubeflow
---
apiVersion: v1
data:
uiClusterDomain: {{ .Values.clusterDomain | quote }}
kind: ConfigMap
metadata:
labels:
kustomize.component: metadata
name: metadata-ui-parameters-b6c8ghff7c
namespace: kubeflow
---
apiVersion: v1
data:
MYSQL_ROOT_PASSWORD: {{ .Values.metadata.db.password | b64enc | quote }}
kind: Secret
metadata:
labels:
kustomize.component: metadata
name: metadata-db-secrets
namespace: kubeflow
type: Opaque
---
apiVersion: v1
kind: Service
metadata:
labels:
component: db
kustomize.component: metadata
name: metadata-db
namespace: kubeflow
spec:
ports:
- name: dbapi
port: 3306
protocol: TCP
selector:
component: db
kustomize.component: metadata
type: ClusterIP
---
apiVersion: v1
kind: Service
metadata:
labels:
app: metadata
kustomize.component: metadata
name: metadata-service
namespace: kubeflow
spec:
ports:
- name: backendapi
port: 8080
protocol: TCP
selector:
component: server
kustomize.component: metadata
type: ClusterIP
---
apiVersion: v1
kind: Service
metadata:
labels:
app: metadata-ui
kustomize.component: metadata
name: metadata-ui
namespace: kubeflow
spec:
ports:
- port: 80
targetPort: 3000
selector:
app: metadata-ui
kustomize.component: metadata
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: metadata-ui
kustomize.component: metadata
name: metadata-ui
namespace: kubeflow
spec:
selector:
matchLabels:
app: metadata-ui
kustomize.component: metadata
template:
metadata:
labels:
app: metadata-ui
kustomize.component: metadata
name: ui
spec:
containers:
- image: gcr.io/kubeflow-images-public/metadata-frontend:v0.1.8
imagePullPolicy: IfNotPresent
name: metadata-ui
ports:
- containerPort: 3000
serviceAccountName: metadata-ui
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
component: db
kustomize.component: metadata
name: metadata-db
namespace: kubeflow
spec:
replicas: 1
selector:
matchLabels:
kustomize.component: metadata
template:
metadata:
labels:
component: db
kustomize.component: metadata
name: db
spec:
containers:
- args:
- --datadir
- /var/lib/mysql/datadir
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
key: MYSQL_ROOT_PASSWORD
name: metadata-db-secrets
- name: MYSQL_ALLOW_EMPTY_PASSWORD
value: "true"
- name: MYSQL_DATABASE
value: metadb
image: mysql:8.0.3
name: db-container
ports:
- containerPort: 3306
name: dbapi
readinessProbe:
exec:
command:
- /bin/bash
- -c
- mysql -D $$MYSQL_DATABASE -p$$MYSQL_ROOT_PASSWORD -e 'SELECT 1'
initialDelaySeconds: 5
periodSeconds: 2
timeoutSeconds: 1
volumeMounts:
- mountPath: /var/lib/mysql
name: metadata-db-pvc
volumes:
- name: metadata-db-pvc
{{- if .Values.metadata.db.persistence.enabled }}
persistentVolumeClaim:
claimName: metadata-db-pvc
{{- else }}
emptyDir: {}
{{ end }}
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
component: server
kustomize.component: metadata
name: metadata-deployment
namespace: kubeflow
spec:
replicas: 3
selector:
matchLabels:
kustomize.component: metadata
template:
metadata:
labels:
component: server
kustomize.component: metadata
spec:
containers:
- command:
- ./server/server
- --http_port=8080
- --mysql_service_host=metadata-db.kubeflow
- --mysql_service_port=3306
- --mysql_service_user=root
- --mysql_service_password=$(MYSQL_ROOT_PASSWORD)
- --mlmd_db_name=metadb
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
key: MYSQL_ROOT_PASSWORD
name: metadata-db-secrets
image: gcr.io/kubeflow-images-public/metadata:v0.1.8
name: container
ports:
- containerPort: 8080
name: backendapi
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: metadata-ui
namespace: kubeflow
spec:
gateways:
- kubeflow-gateway
hosts:
- '*'
http:
- match:
- uri:
prefix: /metadata
rewrite:
uri: /metadata
route:
- destination:
host: metadata-ui.kubeflow.svc.{{ .Values.clusterDomain }}
port:
number: 80
timeout: 300s
{{- if .Values.metadata.db.persistence.enabled }}
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
labels:
kustomize.component: metadata
name: metadata-db-pvc
namespace: kubeflow
spec:
accessModes:
- {{ .Values.metadata.db.persistence.accessMode | quote }}
resources:
requests:
storage: {{ .Values.metadata.db.persistence.size | quote }}
storageClassName: {{ .Values.metadata.db.persistence.storageClass | quote }}
{{- end -}}
\ No newline at end of file
apiVersion: v1
kind: ServiceAccount
metadata:
name: metrics-collector
namespace: kubeflow
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: metrics-collector
rules:
- apiGroups:
- ""
resources:
- pods
- pods/log
- pods/status
verbs:
- '*'
- apiGroups:
- batch
resources:
- jobs
verbs:
- '*'
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: metrics-collector
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: metrics-collector
subjects:
- kind: ServiceAccount
name: metrics-collector
namespace: kubeflow
---
apiVersion: v1
data:
defaultMetricsCollectorTemplate.yaml: |-
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: {{`{{.Trial}}`}}
namespace: {{`{{.NameSpace}}`}}
spec:
schedule: "*/1 * * * *"
successfulJobsHistoryLimit: 0
failedJobsHistoryLimit: 1
jobTemplate:
spec:
backoffLimit: 0
template:
spec:
serviceAccountName: metrics-collector
containers:
- name: {{`{{.Trial}}`}}
image: gcr.io/kubeflow-images-public/katib/v1alpha2/metrics-collector:v0.1.2-alpha-289-g14dad8b
imagePullPolicy: IfNotPresent
command: ["./metricscollector"]
args:
- "-e"
- "{{`{{.Experiment}}`}}"
- "-t"
- "{{`{{.Trial}}`}}"
- "-k"
- "{{`{{.JobKind}}`}}"
- "-n"
- "{{`{{.NameSpace}}`}}"
- "-m"
- "{{`{{.ManagerService}}`}}"
- "-mn"
- "{{`{{.MetricNames}}`}}"
restartPolicy: Never
kind: ConfigMap
metadata:
name: metrics-collector-template
namespace: kubeflow
apiVersion: v1
data:
minioPvcName: {{ .Values.minio.persistence.pvcName | quote }}
kind: ConfigMap
metadata:
labels:
app: minio
name: pipeline-minio-parameters
namespace: kubeflow
---
apiVersion: v1
data:
accessKey: {{ .Values.minio.accessKey | b64enc | quote }}
secretKey: {{ .Values.minio.secretKey | b64enc | quote }}
kind: Secret
metadata:
labels:
app: minio
name: mlpipeline-minio-artifact
namespace: kubeflow
type: Opaque
---
apiVersion: v1
kind: Service
metadata:
labels:
app: minio
name: minio-service
namespace: kubeflow
spec:
ports:
- port: 9000
protocol: TCP
targetPort: 9000
selector:
app: minio
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: minio
name: minio
namespace: kubeflow
spec:
selector:
matchLabels:
app: minio
strategy:
type: Recreate
template:
metadata:
labels:
app: minio
spec:
containers:
- args:
- server
- /data
env:
- name: MINIO_ACCESS_KEY
valueFrom:
secretKeyRef:
key: accessKey
name: mlpipeline-minio-artifact
- name: MINIO_SECRET_KEY
valueFrom:
secretKeyRef:
key: secretKey
name: mlpipeline-minio-artifact
image: minio/minio:RELEASE.2018-02-09T22-40-05Z
name: minio
ports:
- containerPort: 9000
volumeMounts:
- mountPath: /data
name: data
subPath: minio
volumes:
- name: data
{{- if .Values.minio.persistence.enabled }}
persistentVolumeClaim:
claimName: {{ .Values.minio.persistence.pvcName }}
{{- else }}
emptyDir: {}
{{ end }}
{{- if .Values.minio.persistence.enabled }}
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
labels:
app: minio
name: {{ .Values.minio.persistence.pvcName | quote }}
namespace: kubeflow
spec:
accessModes:
- {{ .Values.minio.persistence.accessMode | quote }}
resources:
requests:
storage: {{ .Values.minio.persistence.size | quote }}
storageClassName: {{ .Values.minio.persistence.storageClass | quote }}
{{- end -}}
\ No newline at end of file
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
app: ml-pipeline-persistenceagent
name: ml-pipeline-persistenceagent
namespace: kubeflow
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
labels:
app: ml-pipeline-persistenceagent
name: ml-pipeline-persistenceagent
rules:
- apiGroups:
- argoproj.io
resources:
- workflows
verbs:
- get
- list
- watch
- apiGroups:
- kubeflow.org
resources:
- scheduledworkflows
verbs:
- get
- list
- watch
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
labels:
app: ml-pipeline-persistenceagent
name: ml-pipeline-persistenceagent
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: ml-pipeline-persistenceagent
namespace: kubeflow
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: ml-pipeline-persistenceagent
name: ml-pipeline-persistenceagent
namespace: kubeflow
spec:
selector:
matchLabels:
app: ml-pipeline-persistenceagent
template:
metadata:
labels:
app: ml-pipeline-persistenceagent
spec:
containers:
- env:
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
image: gcr.io/ml-pipeline/persistenceagent:0.1.23
imagePullPolicy: IfNotPresent
name: ml-pipeline-persistenceagent
serviceAccountName: ml-pipeline-persistenceagent
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
labels:
app: ml-pipeline-scheduledworkflow
name: scheduledworkflows.kubeflow.org
spec:
group: kubeflow.org
names:
kind: ScheduledWorkflow
listKind: ScheduledWorkflowList
plural: scheduledworkflows
shortNames:
- swf
singular: scheduledworkflow
scope: Namespaced
versions:
- name: v1beta1
served: true
storage: true
---
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
app: ml-pipeline-scheduledworkflow
name: ml-pipeline-scheduledworkflow
namespace: kubeflow
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: Role
metadata:
labels:
app: ml-pipeline-scheduledworkflow
name: ml-pipeline-scheduledworkflow
namespace: kubeflow
rules:
- apiGroups:
- argoproj.io
resources:
- workflows
verbs:
- create
- get
- list
- watch
- update
- patch
- delete
- apiGroups:
- kubeflow.org
resources:
- scheduledworkflows
verbs:
- create
- get
- list
- watch
- update
- patch
- delete
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
labels:
app: ml-pipeline-scheduledworkflow
name: ml-pipeline-scheduledworkflow
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: ml-pipeline-scheduledworkflow
namespace: kubeflow
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: ml-pipeline-scheduledworkflow
name: ml-pipeline-scheduledworkflow
namespace: kubeflow
spec:
selector:
matchLabels:
app: ml-pipeline-scheduledworkflow
template:
metadata:
labels:
app: ml-pipeline-scheduledworkflow
spec:
containers:
- env:
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
image: gcr.io/ml-pipeline/scheduledworkflow:0.1.23
imagePullPolicy: IfNotPresent
name: ml-pipeline-scheduledworkflow
serviceAccountName: ml-pipeline-scheduledworkflow
apiVersion: v1
kind: ServiceAccount
metadata:
name: ml-pipeline-ui
namespace: kubeflow
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: Role
metadata:
labels:
app: ml-pipeline-ui
name: ml-pipeline-ui
namespace: kubeflow
rules:
- apiGroups:
- ""
resources:
- pods
- pods/log
verbs:
- create
- get
- list
- apiGroups:
- kubeflow.org
resources:
- viewers
verbs:
- create
- get
- list
- watch
- delete
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: RoleBinding
metadata:
labels:
app: ml-pipeline-ui
name: ml-pipeline-ui
namespace: kubeflow
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: ml-pipeline-ui
subjects:
- kind: ServiceAccount
name: ml-pipeline-ui
namespace: kubeflow
---
apiVersion: v1
data:
uiClusterDomain: cluster.local
kind: ConfigMap
metadata:
name: ui-parameters-hb792fcf5d
namespace: kubeflow
---
apiVersion: v1
kind: Service
metadata:
annotations:
getambassador.io/config: |-
---
apiVersion: ambassador/v0
kind: Mapping
name: pipeline-tensorboard-ui-mapping
prefix: /data
rewrite: /data
timeout_ms: 300000
service: ml-pipeline-ui.kubeflow
use_websocket: true
labels:
app: ml-pipeline-tensorboard-ui
name: ml-pipeline-tensorboard-ui
namespace: kubeflow
spec:
ports:
- port: 80
targetPort: 3000
selector:
app: ml-pipeline-tensorboard-ui
---
apiVersion: v1
kind: Service
metadata:
annotations:
getambassador.io/config: |-
---
apiVersion: ambassador/v0
kind: Mapping
name: pipelineui-mapping
prefix: /pipeline
rewrite: /pipeline
timeout_ms: 300000
service: ml-pipeline-ui.kubeflow
use_websocket: true
labels:
app: ml-pipeline-ui
name: ml-pipeline-ui
namespace: kubeflow
spec:
ports:
- port: 80
targetPort: 3000
selector:
app: ml-pipeline-ui
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: ml-pipeline-ui
name: ml-pipeline-ui
namespace: kubeflow
spec:
selector:
matchLabels:
app: ml-pipeline-ui
template:
metadata:
labels:
app: ml-pipeline-ui
spec:
containers:
- image: gcr.io/ml-pipeline/frontend:0.1.23
imagePullPolicy: IfNotPresent
name: ml-pipeline-ui
ports:
- containerPort: 3000
serviceAccountName: ml-pipeline-ui
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: ml-pipeline-tensorboard-ui
namespace: kubeflow
spec:
gateways:
- kubeflow-gateway
hosts:
- '*'
http:
- match:
- uri:
prefix: /data
rewrite:
uri: /data
route:
- destination:
host: ml-pipeline-tensorboard-ui.kubeflow.svc.{{ .Values.clusterDomain }}
port:
number: 80
timeout: 300s
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: ml-pipeline-ui
namespace: kubeflow
spec:
gateways:
- kubeflow-gateway
hosts:
- '*'
http:
- match:
- uri:
prefix: /pipeline
rewrite:
uri: /pipeline
route:
- destination:
host: ml-pipeline-ui.kubeflow.svc.{{ .Values.clusterDomain }}
port:
number: 80
timeout: 300s
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
labels:
app: ml-pipeline-viewer-crd
name: viewers.kubeflow.org
spec:
group: kubeflow.org
names:
kind: Viewer
listKind: ViewerList
plural: viewers
shortNames:
- vi
singular: viewer
scope: Namespaced
versions:
- name: v1beta1
served: true
storage: true
---
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
app: ml-pipeline-viewer-crd
name: ml-pipeline-viewer-crd-service-account
namespace: kubeflow
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
labels:
app: ml-pipeline-viewer-crd
name: ml-pipeline-viewer-controller-role
rules:
- apiGroups:
- '*'
resources:
- deployments
- services
verbs:
- create
- get
- list
- watch
- update
- patch
- delete
- apiGroups:
- kubeflow.org
resources:
- viewers
verbs:
- create
- get
- list
- watch
- update
- patch
- delete
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
labels:
app: ml-pipeline-viewer-crd
name: ml-pipeline-viewer-crd-role-binding
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: ml-pipeline-viewer-controller-role
subjects:
- kind: ServiceAccount
name: ml-pipeline-viewer-crd-service-account
namespace: kubeflow
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: ml-pipeline-viewer-crd
name: ml-pipeline-viewer-controller-deployment
namespace: kubeflow
spec:
selector:
matchLabels:
app: ml-pipeline-viewer-crd
template:
metadata:
labels:
app: ml-pipeline-viewer-crd
spec:
containers:
- env:
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
image: gcr.io/ml-pipeline/viewer-crd-controller:0.1.23
imagePullPolicy: Always
name: ml-pipeline-viewer-controller
serviceAccountName: ml-pipeline-viewer-crd-service-account
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
app: ml-pipeline
name: ml-pipeline
namespace: kubeflow
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: Role
metadata:
labels:
app: ml-pipeline
name: ml-pipeline
namespace: kubeflow
rules:
- apiGroups:
- argoproj.io
resources:
- workflows
verbs:
- create
- get
- list
- watch
- update
- patch
- delete
- apiGroups:
- kubeflow.org
resources:
- scheduledworkflows
verbs:
- create
- get
- list
- update
- patch
- delete
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: RoleBinding
metadata:
labels:
app: ml-pipeline
name: ml-pipeline
namespace: kubeflow
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: ml-pipeline
subjects:
- kind: ServiceAccount
name: ml-pipeline
namespace: kubeflow
---
apiVersion: v1
kind: Service
metadata:
labels:
app: ml-pipeline
name: ml-pipeline
namespace: kubeflow
spec:
ports:
- name: http
port: 8888
protocol: TCP
targetPort: 8888
- name: grpc
port: 8887
protocol: TCP
targetPort: 8887
selector:
app: ml-pipeline
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: ml-pipeline
name: ml-pipeline
namespace: kubeflow
spec:
selector:
matchLabels:
app: ml-pipeline
template:
metadata:
labels:
app: ml-pipeline
spec:
containers:
- env:
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
image: gcr.io/ml-pipeline/api-server:0.1.23
imagePullPolicy: IfNotPresent
name: ml-pipeline-api-server
ports:
- containerPort: 8888
- containerPort: 8887
serviceAccountName: ml-pipeline
{{- if .Values.mxnetOperator.enabled }}
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
labels:
ksonnet.io/component: mxnet-operator
annotations:
"helm.sh/hook": crd-install
"helm.sh/hook-delete-policy": before-hook-creation
name: mxjobs.kubeflow.org
spec:
group: kubeflow.org
names:
kind: MXJob
plural: mxjobs
singular: mxjob
version: v1alpha1
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
labels:
app: mxnet-operator
ksonnet.io/component: mxnet-operator
name: mxnet-operator
rules:
- apiGroups:
- kubeflow.org
resources: - mxjobs
verbs:
- '*'
- apiGroups:
- apiextensions.k8s.io
resources:
- customresourcedefinitions
verbs:
- '*'
- apiGroups:
- storage.k8s.io
resources:
- storageclasses
verbs:
- '*'
- apiGroups:
- batch
resources:
- jobs
verbs:
- '*'
- apiGroups:
- ""
resources:
- configmaps
- pods
- services
- endpoints
- persistentvolumeclaims
- events
verbs:
- '*'
- apiGroups:
- apps
- extensions
resources:
- deployments
verbs:
- '*'
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
labels:
app: mxnet-operator
ksonnet.io/component: mxnet-operator
name: mxnet-operator
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: mxnet-operator
subjects:
- kind: ServiceAccount
name: mxnet-operator
namespace: kubeflow
---
apiVersion: v1
data:
controller_config_file.yaml: |-
{
}
kind: ConfigMap
metadata:
labels:
ksonnet.io/component: mxnet-operator
name: mxnet-operator-config
namespace: kubeflow
---
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
app: mxnet-operator
ksonnet.io/component: mxnet-operator
name: mxnet-operator
namespace: kubeflow
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
labels:
ksonnet.io/component: mxnet-operator
name: mxnet-operator
namespace: kubeflow
spec:
replicas: 1
template:
metadata:
labels:
name: mxnet-operator
spec:
containers:
- command:
- /opt/mlkube/mxnet-operator
- --alsologtostderr
- -v=1
env:
- name: MY_POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: MY_POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
image: "{{ .Values.mxnetOperator.image.repository }}:{{ .Values.mxnetOperator.image.tag }}"
imagePullPolicy: Always
name: mxnet-operator
volumeMounts:
- mountPath: /etc/config
name: config-volume
serviceAccountName: mxnet-operator
volumes:
- configMap:
name: mxnet-operator-config
name: config-volume
{{- end }}
apiVersion: v1
data:
mysqlPvcName: {{ .Values.mysql.persistence.pvcName | quote }}
kind: ConfigMap
metadata:
labels:
app: mysql
name: pipeline-mysql-parameters
namespace: kubeflow
---
apiVersion: v1
kind: Service
metadata:
labels:
app: mysql
name: mysql
namespace: kubeflow
spec:
ports:
- port: 3306
selector:
app: mysql
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: mysql
name: mysql
namespace: kubeflow
spec:
selector:
matchLabels:
app: mysql
strategy:
type: Recreate
template:
metadata:
labels:
app: mysql
spec:
containers:
- env:
- name: MYSQL_ALLOW_EMPTY_PASSWORD
value: "true"
image: mysql:5.6
name: mysql
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- mountPath: /var/lib/mysql
name: mysql-persistent-storage
volumes:
- name: mysql-persistent-storage
{{- if .Values.mysql.persistence.enabled }}
persistentVolumeClaim:
claimName: {{ .Values.mysql.persistence.pvcName | quote }}
{{- else }}
emptyDir: {}
{{ end }}
{{- if .Values.mysql.persistence.enabled }}
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
labels:
app: mysql
name: {{ .Values.mysql.persistence.pvcName | quote }}
namespace: kubeflow
spec:
accessModes:
- {{ .Values.mysql.persistence.accessMode | quote }}
resources:
requests:
storage: {{ .Values.mysql.persistence.size | quote }}
storageClassName: {{ .Values.mysql.persistence.storageClass | quote }}
{{- end -}}
\ No newline at end of file
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
labels:
app: notebook-controller
app.kubernetes.io/component: notebook
app.kubernetes.io/instance: notebook-controller
app.kubernetes.io/managed-by: kfctl
app.kubernetes.io/name: notebook-controller
app.kubernetes.io/part-of: kubeflow
app.kubernetes.io/version: v0.6
kustomize.component: notebook-controller
name: notebooks.kubeflow.org
spec:
group: kubeflow.org
names:
kind: Notebook
plural: notebooks
singular: notebook
scope: Namespaced
subresources:
status: {}
validation:
openAPIV3Schema:
properties:
apiVersion:
description: 'APIVersion defines the versioned schema of this representation
of an object. Servers should convert recognized schemas to the latest
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources'
type: string
kind:
description: 'Kind is a string value representing the REST resource this
object represents. Servers may infer this from the endpoint the client
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds'
type: string
metadata:
type: object
spec:
properties:
template:
description: 'INSERT ADDITIONAL SPEC FIELDS - desired state of cluster
Important: Run "make" to regenerate code after modifying this file'
properties:
spec:
type: object
type: object
type: object
status:
properties:
conditions:
description: Conditions is an array of current conditions
items:
properties:
type:
description: Type of the confition/
type: string
required:
- type
type: object
type: array
required:
- conditions
type: object
version: v1alpha1
status:
acceptedNames:
kind: ""
plural: ""
conditions: []
storedVersions: []
---
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
app: notebook-controller
app.kubernetes.io/component: notebook
app.kubernetes.io/instance: notebook-controller
app.kubernetes.io/managed-by: kfctl
app.kubernetes.io/name: notebook-controller
app.kubernetes.io/part-of: kubeflow
app.kubernetes.io/version: v0.6
kustomize.component: notebook-controller
name: notebook-controller-service-account
namespace: kubeflow
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
labels:
app: notebook-controller
app.kubernetes.io/component: notebook
app.kubernetes.io/instance: notebook-controller
app.kubernetes.io/managed-by: kfctl
app.kubernetes.io/name: notebook-controller
app.kubernetes.io/part-of: kubeflow
app.kubernetes.io/version: v0.6
kustomize.component: notebook-controller
name: notebook-controller-role
rules:
- apiGroups:
- apps
resources:
- statefulsets
- deployments
verbs:
- '*'
- apiGroups:
- ""
resources:
- pods
verbs:
- get
- list
- watch
- apiGroups:
- ""
resources:
- services
verbs:
- '*'
- apiGroups:
- kubeflow.org
resources:
- notebooks
- notebooks/status
verbs:
- '*'
- apiGroups:
- networking.istio.io
resources:
- virtualservices
verbs:
- '*'
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
labels:
app: notebook-controller
app.kubernetes.io/component: notebook
app.kubernetes.io/instance: notebook-controller
app.kubernetes.io/managed-by: kfctl
app.kubernetes.io/name: notebook-controller
app.kubernetes.io/part-of: kubeflow
app.kubernetes.io/version: v0.6
kustomize.component: notebook-controller
name: notebook-controller-role-binding
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: notebook-controller-role
subjects:
- kind: ServiceAccount
name: notebook-controller-service-account
namespace: kubeflow
---
apiVersion: v1
data:
POD_LABELS: {{ .Values.notebookController.podLabels | quote }}
USE_ISTIO: {{ .Values.notebookController.useIstio | quote }}
kind: ConfigMap
metadata:
annotations: {}
labels:
app: notebook-controller
app.kubernetes.io/component: notebook
app.kubernetes.io/instance: notebook-controller
app.kubernetes.io/managed-by: kfctl
app.kubernetes.io/name: notebook-controller
app.kubernetes.io/part-of: kubeflow
app.kubernetes.io/version: v0.6
kustomize.component: notebook-controller
name: notebook-controller-parameters
namespace: kubeflow
---
apiVersion: v1
kind: Service
metadata:
labels:
app: notebook-controller
app.kubernetes.io/component: notebook
app.kubernetes.io/instance: notebook-controller
app.kubernetes.io/managed-by: kfctl
app.kubernetes.io/name: notebook-controller
app.kubernetes.io/part-of: kubeflow
app.kubernetes.io/version: v0.6
kustomize.component: notebook-controller
name: notebook-controller-service
namespace: kubeflow
spec:
ports:
- port: 443
selector:
app: notebook-controller
app.kubernetes.io/component: notebook
app.kubernetes.io/instance: notebook-controller
app.kubernetes.io/managed-by: kfctl
app.kubernetes.io/name: notebook-controller
app.kubernetes.io/part-of: kubeflow
app.kubernetes.io/version: v0.6
kustomize.component: notebook-controller
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: notebook-controller
app.kubernetes.io/component: notebook
app.kubernetes.io/instance: notebook-controller
app.kubernetes.io/managed-by: kfctl
app.kubernetes.io/name: notebook-controller
app.kubernetes.io/part-of: kubeflow
app.kubernetes.io/version: v0.6
kustomize.component: notebook-controller
name: notebook-controller-deployment
namespace: kubeflow
spec:
selector:
matchLabels:
app: notebook-controller
app.kubernetes.io/component: notebook
app.kubernetes.io/instance: notebook-controller
app.kubernetes.io/managed-by: kfctl
app.kubernetes.io/name: notebook-controller
app.kubernetes.io/part-of: kubeflow
app.kubernetes.io/version: v0.6
kustomize.component: notebook-controller
template:
metadata:
labels:
app: notebook-controller
app.kubernetes.io/component: notebook
app.kubernetes.io/instance: notebook-controller
app.kubernetes.io/managed-by: kfctl
app.kubernetes.io/name: notebook-controller
app.kubernetes.io/part-of: kubeflow
app.kubernetes.io/version: v0.6
kustomize.component: notebook-controller
spec:
containers:
- command:
- /manager
env:
- name: USE_ISTIO
valueFrom:
configMapKeyRef:
name: notebook-controller-parameters
key: USE_ISTIO
- name: POD_LABELS
valueFrom:
configMapKeyRef:
name: notebook-controller-parameters
key: POD_LABELS
image: gcr.io/kubeflow-images-public/notebook-controller:v20190603-v0-175-geeca4530-e3b0c4
imagePullPolicy: Always
name: manager
serviceAccountName: notebook-controller-service-account
---
apiVersion: app.k8s.io/v1beta1
kind: Application
metadata:
labels:
app.kubernetes.io/component: notebook
app.kubernetes.io/instance: notebook-controller
app.kubernetes.io/managed-by: kfctl
app.kubernetes.io/name: notebook-controller
app.kubernetes.io/part-of: kubeflow
app.kubernetes.io/version: v0.6
name: notebook-controller
namespace: kubeflow
spec:
addOwnerRef: true
componentKinds:
- group: core
kind: Service
- group: apps
kind: Deployment
- group: core
kind: ServiceAccount
descriptor:
description: Notebooks controller allows users to create a custom resource \"Notebook\"
(jupyter notebook).
keywords:
- jupyter
- notebook
- notebook-controller
- jupyterhub
links:
- description: About
url: https://github.com/kubeflow/kubeflow/tree/master/components/notebook-controller
maintainers:
- email: lunkai@google.com
name: Lun-kai Hsu
owners:
- email: lunkai@gogle.com
name: Lun-kai Hsu
type: notebook-controller
version: v0.6.2
selector:
matchLabels:
app.kubernetes.io/component: notebook
app.kubernetes.io/instance: notebook-controller
app.kubernetes.io/managed-by: kfctl
app.kubernetes.io/name: notebook-controller
app.kubernetes.io/part-of: kubeflow
app.kubernetes.io/version: v0.6
{{- if .Values.chainerOperator.enabled }} apiVersion: v1
apiVersion: rbac.authorization.k8s.io/v1 kind: ServiceAccount
metadata:
labels:
app: pipeline-runner
name: pipeline-runner
namespace: kubeflow
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole kind: ClusterRole
metadata: metadata:
labels: labels:
ksonnet.io/component: chainer-operator app: pipeline-runner
name: chainer-operator name: pipeline-runner
rules: rules:
- apiGroups: - apiGroups:
- "" - ""
resources: resources:
- configmaps - secrets
- serviceaccounts
verbs: verbs:
- create - get
- update
- list
- watch
- apiGroups: - apiGroups:
- "" - ""
resources: resources:
- pods - configmaps
verbs: verbs:
- get - get
- watch
- list - list
- apiGroups: - apiGroups:
- "" - ""
resources: resources:
- pods/exec - persistentvolumeclaims
verbs: verbs:
- create - create
- delete
- get
- apiGroups: - apiGroups:
- "" - snapshot.storage.k8s.io
resources: resources:
- events - volumesnapshots
verbs: verbs:
- create - create
- patch - delete
- get
- apiGroups: - apiGroups:
- rbac.authorization.k8s.io - argoproj.io
resources: resources:
- roles - workflows
- rolebindings
verbs: verbs:
- create - get
- update
- list - list
- watch - watch
- update
- patch
- apiGroups: - apiGroups:
- apps - ""
resources: resources:
- statefulsets - pods
- pods/exec
- pods/log
- services
verbs: verbs:
- get - '*'
- create
- list
- update
- watch
- apiGroups: - apiGroups:
- batch - ""
- apps
- extensions
resources: resources:
- jobs - deployments
- replicasets
verbs: verbs:
- create - '*'
- list
- watch
- apiGroups: - apiGroups:
- apiextensions.k8s.io - kubeflow.org
resources: resources:
- customresourcedefinitions - '*'
verbs: verbs:
- create - '*'
- get
- apiGroups: - apiGroups:
- kubeflow.org - batch
resources: resources:
- chainerjobs - jobs
verbs: verbs:
- '*' - '*'
--- ---
apiVersion: v1 apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ServiceAccount
metadata:
labels:
ksonnet.io/component: chainer-operator
name: chainer-operator
namespace: kubeflow
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding kind: ClusterRoleBinding
metadata: metadata:
labels: labels:
ksonnet.io/component: chainer-operator app: pipeline-runner
name: chainer-operator name: pipeline-runner
namespace: kubeflow
roleRef: roleRef:
apiGroup: rbac.authorization.k8s.io apiGroup: rbac.authorization.k8s.io
kind: ClusterRole kind: ClusterRole
name: chainer-operator name: pipeline-runner
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: chainer-operator name: pipeline-runner
namespace: kubeflow namespace: kubeflow
{{- end }}
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
creationTimestamp: null
labels:
controller-tools.k8s.io: "1.0"
kustomize.component: profiles
name: profiles.kubeflow.org
spec:
group: kubeflow.org
names:
kind: Profile
plural: profiles
scope: Cluster
validation:
openAPIV3Schema:
properties:
apiVersion:
description: 'APIVersion defines the versioned schema of this representation
of an object. Servers should convert recognized schemas to the latest
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources'
type: string
kind:
description: 'Kind is a string value representing the REST resource this
object represents. Servers may infer this from the endpoint the client
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds'
type: string
metadata:
type: object
spec:
properties:
owner:
description: The profile owner
type: object
type: object
status:
properties:
message:
type: string
status:
description: 'INSERT ADDITIONAL STATUS FIELD - define observed state
of cluster Important: Run "make" to regenerate code after modifying
this file'
type: string
type: object
version: v1alpha1
status:
acceptedNames:
kind: ""
plural: ""
conditions: []
storedVersions: []
---
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
kustomize.component: profiles
name: profiles-controller-service-account
namespace: kubeflow
---
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
kustomize.component: profiles
name: profiles-default-service-account
namespace: kubeflow
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
labels:
kustomize.component: profiles
name: profiles-default-role
namespace: kubeflow
rules:
- apiGroups:
- kubeflow.org
resources:
- profiles
verbs:
- create
- watch
- list
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
labels:
kustomize.component: profiles
name: profiles-default-role-binding
namespace: kubeflow
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: profiles-default-role
subjects:
- kind: ServiceAccount
name: profiles-default-service-account
namespace: kubeflow
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
labels:
kustomize.component: profiles
name: profiles-cluster-role-binding
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: profiles-controller-service-account
namespace: kubeflow
---
apiVersion: v1
data:
admin: {{ .Values.profiles.admin | quote }}
userid-header: {{ .Values.profiles.useridHeader | quote }}
userid-prefix: {{ .Values.profiles.useridPrefix | quote }}
kind: ConfigMap
metadata:
labels:
kustomize.component: profiles
name: profiles-profiles-parameters-m59gt2c45h
namespace: kubeflow
---
apiVersion: v1
kind: Service
metadata:
labels:
kustomize.component: profiles
name: profiles-kfam
namespace: kubeflow
spec:
ports:
- port: 8081
selector:
kustomize.component: profiles
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
kustomize.component: profiles
name: profiles-deployment
namespace: kubeflow
spec:
selector:
matchLabels:
kustomize.component: profiles
template:
metadata:
labels:
kustomize.component: profiles
spec:
containers:
- args:
- -userid-header
- {{ .Values.profiles.useridHeader | quote }}
- -userid-prefix
- {{ .Values.profiles.useridPrefix | quote }}
command:
- /manager
image: gcr.io/kubeflow-images-public/profile-controller:v20190619-v0-219-gbd3daa8c-dirty-1ced0e
imagePullPolicy: Always
name: manager
- args:
- -cluster-admin
- {{ .Values.profiles.admin | quote }}
- -userid-header
- {{ .Values.profiles.useridHeader | quote }}
- -userid-prefix
- {{ .Values.profiles.useridPrefix | quote }}
command:
- /opt/kubeflow/access-management
image: gcr.io/kubeflow-images-public/kfam:v20190612-v0-170-ga06cdb79-dirty-a33ee4
imagePullPolicy: Always
name: kfam
serviceAccountName: profiles-controller-service-account
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: kfam
namespace: kubeflow
spec:
gateways:
- kubeflow-gateway
hosts:
- '*'
http:
- headers:
request:
add:
x-forwarded-prefix: /kfam
match:
- uri:
prefix: /kfam/
rewrite:
uri: /kfam/
route:
- destination:
host: profiles-kfam.kubeflow.svc.cluster.local
port:
number: 8081
{{- if .Values.tfJobOperator.enabled }}
apiVersion: apiextensions.k8s.io/v1beta1 apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition kind: CustomResourceDefinition
metadata: metadata:
labels: name: pytorchjobs.kubeflow.org
ksonnet.io/component: tf-job-operator
annotations:
"helm.sh/hook": crd-install
"helm.sh/hook-delete-policy": before-hook-creation
name: tfjobs.kubeflow.org
spec: spec:
version: v1alpha2 additionalPrinterColumns:
- JSONPath: .status.conditions[-1:].type
name: State
type: string
- JSONPath: .metadata.creationTimestamp
name: Age
type: date
group: kubeflow.org group: kubeflow.org
names: names:
kind: TFJob kind: PyTorchJob
plural: tfjobs plural: pytorchjobs
singular: tfjob singular: pytorchjob
scope: Namespaced
subresources:
status: {}
validation: validation:
openAPIV3Schema: openAPIV3Schema:
properties: properties:
spec: spec:
properties: properties:
tfReplicaSpecs: pytorchReplicaSpecs:
properties: properties:
Chief: Master:
properties: properties:
replicas: replicas:
maximum: 1 maximum: 1
minimum: 1 minimum: 1
type: integer type: integer
PS:
properties:
replicas:
minimum: 1
type: integer
Worker: Worker:
properties: properties:
replicas: replicas:
minimum: 1 minimum: 1
type: integer type: integer
{{- end }} versions:
- name: v1beta2
served: true
storage: false
- name: v1
served: true
storage: true
{{- if .Values.pytorchOperator.enabled }} apiVersion: v1
apiVersion: apiextensions.k8s.io/v1beta1 kind: ServiceAccount
kind: CustomResourceDefinition
metadata: metadata:
labels: labels:
ksonnet.io/component: pytorch-operator app: pytorch-operator
annotations: kustomize.component: pytorch-operator
"helm.sh/hook": crd-install name: pytorch-operator
"helm.sh/hook-delete-policy": before-hook-creation namespace: kubeflow
name: pytorchjobs.kubeflow.org
spec:
group: kubeflow.org
names:
kind: PyTorchJob
plural: pytorchjobs
singular: pytorchjob
validation:
openAPIV3Schema:
properties:
spec:
properties:
pytorchReplicaSpecs:
properties:
Master:
properties:
replicas:
maximum: 1
minimum: 1
type: integer
Worker:
properties:
replicas:
minimum: 1
type: integer
version: v1alpha2
--- ---
apiVersion: rbac.authorization.k8s.io/v1beta1 apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole kind: ClusterRole
metadata: metadata:
labels: labels:
app: pytorch-operator app: pytorch-operator
ksonnet.io/component: pytorch-operator kustomize.component: pytorch-operator
name: pytorch-operator name: pytorch-operator
rules: rules:
- apiGroups: - apiGroups:
- kubeflow.org - kubeflow.org
resources: resources:
- pytorchjobs - pytorchjobs
- pytorchjobs/status
verbs: verbs:
- '*' - '*'
- apiGroups: - apiGroups:
...@@ -90,7 +64,7 @@ kind: ClusterRoleBinding ...@@ -90,7 +64,7 @@ kind: ClusterRoleBinding
metadata: metadata:
labels: labels:
app: pytorch-operator app: pytorch-operator
ksonnet.io/component: pytorch-operator kustomize.component: pytorch-operator
name: pytorch-operator name: pytorch-operator
roleRef: roleRef:
apiGroup: rbac.authorization.k8s.io apiGroup: rbac.authorization.k8s.io
...@@ -110,38 +84,57 @@ data: ...@@ -110,38 +84,57 @@ data:
kind: ConfigMap kind: ConfigMap
metadata: metadata:
labels: labels:
ksonnet.io/component: pytorch-operator kustomize.component: pytorch-operator
name: pytorch-operator-config name: pytorch-operator-config
namespace: kubeflow namespace: kubeflow
--- ---
apiVersion: v1 apiVersion: v1
kind: ServiceAccount kind: Service
metadata: metadata:
annotations:
prometheus.io/path: /metrics
prometheus.io/port: "8443"
prometheus.io/scrape: "true"
labels: labels:
app: pytorch-operator app: pytorch-operator
ksonnet.io/component: pytorch-operator kustomize.component: pytorch-operator
name: pytorch-operator name: pytorch-operator
namespace: kubeflow namespace: kubeflow
spec:
ports:
- name: monitoring-port
port: 8443
targetPort: 8443
selector:
kustomize.component: pytorch-operator
name: pytorch-operator
type: ClusterIP
--- ---
apiVersion: extensions/v1beta1 apiVersion: apps/v1
kind: Deployment kind: Deployment
metadata: metadata:
labels: labels:
ksonnet.io/component: pytorch-operator kustomize.component: pytorch-operator
name: pytorch-operator name: pytorch-operator
namespace: kubeflow namespace: kubeflow
spec: spec:
replicas: 1 replicas: 1
selector:
matchLabels:
kustomize.component: pytorch-operator
name: pytorch-operator
template: template:
metadata: metadata:
labels: labels:
kustomize.component: pytorch-operator
name: pytorch-operator name: pytorch-operator
spec: spec:
containers: containers:
- command: - command:
- /pytorch-operator.v2 - /pytorch-operator.v1
- --alsologtostderr - --alsologtostderr
- -v=1 - -v=1
- --monitoring-port=8443
env: env:
- name: MY_POD_NAMESPACE - name: MY_POD_NAMESPACE
valueFrom: valueFrom:
...@@ -151,7 +144,7 @@ spec: ...@@ -151,7 +144,7 @@ spec:
valueFrom: valueFrom:
fieldRef: fieldRef:
fieldPath: metadata.name fieldPath: metadata.name
image: "{{ .Values.pytorchOperator.image.repository }}:{{ .Values.pytorchOperator.image.tag }}" image: gcr.io/kubeflow-images-public/pytorch-operator:v1.0.0-rc.0
name: pytorch-operator name: pytorch-operator
volumeMounts: volumeMounts:
- mountPath: /etc/config - mountPath: /etc/config
...@@ -161,4 +154,3 @@ spec: ...@@ -161,4 +154,3 @@ spec:
- configMap: - configMap:
name: pytorch-operator-config name: pytorch-operator-config
name: config-volume name: config-volume
{{- end }}
This source diff could not be displayed because it is too large. You can view the blob instead.
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
app: spartakus
kustomize.component: spartakus
name: spartakus
namespace: kubeflow
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
labels:
app: spartakus
kustomize.component: spartakus
name: spartakus
rules:
- apiGroups:
- ""
resources:
- nodes
verbs:
- get
- list
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
labels:
app: spartakus
kustomize.component: spartakus
name: spartakus
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: spartakus
subjects:
- kind: ServiceAccount
name: spartakus
namespace: kubeflow
---
apiVersion: v1
data:
usageId: {{ .Values.spartakus.usageId | quote }}
kind: ConfigMap
metadata:
labels:
kustomize.component: spartakus
name: spartakus-parameters
namespace: kubeflow
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: spartakus
kustomize.component: spartakus
name: spartakus-volunteer
namespace: kubeflow
spec:
replicas: 1
selector:
matchLabels:
kustomize.component: spartakus
template:
metadata:
labels:
app: spartakus-volunteer
kustomize.component: spartakus
spec:
containers:
- args:
- volunteer
- --cluster-id={{ .Values.spartakus.usageId | quote }}
- --database=https://stats-collector.kubeflow.org
image: gcr.io/google_containers/spartakus-amd64:v1.1.0
name: volunteer
serviceAccountName: spartakus
apiVersion: v1
data:
clusterDomain: {{ .Values.clusterDomain | quote }}
namespace: kubeflow
kind: ConfigMap
metadata:
labels:
kustomize.component: tensorboard
name: parameters-dgd4h256h5
namespace: kubeflow
---
apiVersion: v1
kind: Service
metadata:
annotations:
getambassador.io/config: |-
---
apiVersion: ambassador/v0
kind: Mapping
name: tb-mapping-tensorboard-get
prefix: /tensorboard/ tensorboard/
rewrite: /
method: GET
service: tensorboard.kubeflow:9000
labels:
app: tensorboard
kustomize.component: tensorboard
name: tensorboard
namespace: kubeflow
spec:
ports:
- name: tb
port: 9000
targetPort: 6006
selector:
app: tensorboard
kustomize.component: tensorboard
type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: tensorboard
kustomize.component: tensorboard
name: tensorboard
namespace: kubeflow
spec:
replicas: 1
selector:
matchLabels:
kustomize.component: tensorboard
template:
metadata:
labels:
app: tensorboard
kustomize.component: tensorboard
spec:
containers:
- args:
- --logdir=logs
- --port=6006
command:
- /usr/local/bin/tensorboard
image: tensorflow/tensorflow:1.8.0
imagePullPolicy: IfNotPresent
name: tensorboard
ports:
- containerPort: 6006
resources:
limits:
cpu: "4"
memory: 4Gi
requests:
cpu: "1"
memory: 1Gi
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: tensorboard
namespace: kubeflow
spec:
gateways:
- kubeflow-gateway
hosts:
- '*'
http:
- match:
- uri:
prefix: /tensorboard/tensorboard/
rewrite:
uri: /
route:
- destination:
host: tensorboard.kubeflow.svc.{{ .Values.clusterDomain }}
port:
number: 9000
{{- if .Values.tfJobOperator.enabled }}
apiVersion: v1
kind: ConfigMap
metadata:
labels:
ksonnet.io/component: tf-job-operator
name: tf-job-operator-config
namespace: kubeflow
data:
controller_config_file.yaml: |-
{
"grpcServerFilePath": "/opt/mlkube/grpc_tensorflow_server/grpc_tensorflow_server.py"
}
{{- end }}
{{- if .Values.tfJobOperator.enabled }} apiVersion: apiextensions.k8s.io/v1beta1
apiVersion: extensions/v1beta1 kind: CustomResourceDefinition
metadata:
labels:
kustomize.component: tf-job-operator
name: tfjobs.kubeflow.org
spec:
additionalPrinterColumns:
- JSONPath: .status.conditions[-1:].type
name: State
type: string
- JSONPath: .metadata.creationTimestamp
name: Age
type: date
group: kubeflow.org
names:
kind: TFJob
plural: tfjobs
singular: tfjob
scope: Namespaced
subresources:
status: {}
validation:
openAPIV3Schema:
properties:
spec:
properties:
tfReplicaSpecs:
properties:
Chief:
properties:
replicas:
maximum: 1
minimum: 1
type: integer
PS:
properties:
replicas:
minimum: 1
type: integer
Worker:
properties:
replicas:
minimum: 1
type: integer
version: v1
versions:
- name: v1
served: true
storage: true
- name: v1beta2
served: true
storage: false
---
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
app: tf-job-dashboard
kustomize.component: tf-job-operator
name: tf-job-dashboard
namespace: kubeflow
---
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
app: tf-job-operator
kustomize.component: tf-job-operator
name: tf-job-operator
namespace: kubeflow
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
labels:
app: tf-job-dashboard
kustomize.component: tf-job-operator
name: tf-job-dashboard
rules:
- apiGroups:
- tensorflow.org
- kubeflow.org
resources:
- tfjobs
- tfjobs/status
verbs:
- '*'
- apiGroups:
- apiextensions.k8s.io
resources:
- customresourcedefinitions
verbs:
- '*'
- apiGroups:
- storage.k8s.io
resources:
- storageclasses
verbs:
- '*'
- apiGroups:
- batch
resources:
- jobs
verbs:
- '*'
- apiGroups:
- ""
resources:
- configmaps
- pods
- services
- endpoints
- persistentvolumeclaims
- events
- pods/log
- namespaces
verbs:
- '*'
- apiGroups:
- apps
- extensions
resources:
- deployments
verbs:
- '*'
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
labels:
app: tf-job-operator
kustomize.component: tf-job-operator
name: tf-job-operator
rules:
- apiGroups:
- tensorflow.org
- kubeflow.org
resources:
- tfjobs
- tfjobs/status
verbs:
- '*'
- apiGroups:
- apiextensions.k8s.io
resources:
- customresourcedefinitions
verbs:
- '*'
- apiGroups:
- storage.k8s.io
resources:
- storageclasses
verbs:
- '*'
- apiGroups:
- batch
resources:
- jobs
verbs:
- '*'
- apiGroups:
- ""
resources:
- configmaps
- pods
- services
- endpoints
- persistentvolumeclaims
- events
verbs:
- '*'
- apiGroups:
- apps
- extensions
resources:
- deployments
verbs:
- '*'
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
labels:
app: tf-job-dashboard
kustomize.component: tf-job-operator
name: tf-job-dashboard
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: tf-job-dashboard
subjects:
- kind: ServiceAccount
name: tf-job-dashboard
namespace: kubeflow
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
labels:
app: tf-job-operator
kustomize.component: tf-job-operator
name: tf-job-operator
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: tf-job-operator
subjects:
- kind: ServiceAccount
name: tf-job-operator
namespace: kubeflow
---
apiVersion: v1
data:
clusterDomain: {{ .Values.clusterDomain | quote }}
namespace: kubeflow
kind: ConfigMap
metadata:
labels:
kustomize.component: tf-job-operator
name: parameters-dgd4h256h5
namespace: kubeflow
---
apiVersion: v1
data:
controller_config_file.yaml: |-
{
"grpcServerFilePath": "/opt/mlkube/grpc_tensorflow_server/grpc_tensorflow_server.py"
}
kind: ConfigMap
metadata:
labels:
kustomize.component: tf-job-operator
name: tf-job-operator-config
namespace: kubeflow
---
apiVersion: v1
kind: Service
metadata:
annotations:
getambassador.io/config: |-
---
apiVersion: ambassador/v0
kind: Mapping
name: tfjobs-ui-mapping
prefix: /tfjobs/
rewrite: /tfjobs/
service: tf-job-dashboard.kubeflow
labels:
kustomize.component: tf-job-operator
name: tf-job-dashboard
namespace: kubeflow
spec:
ports:
- port: 80
targetPort: 8080
selector:
kustomize.component: tf-job-operator
name: tf-job-dashboard
type: ClusterIP
---
apiVersion: v1
kind: Service
metadata:
annotations:
prometheus.io/path: /metrics
prometheus.io/port: "8443"
prometheus.io/scrape: "true"
labels:
app: tf-job-operator
kustomize.component: tf-job-operator
name: tf-job-operator
namespace: kubeflow
spec:
ports:
- name: monitoring-port
port: 8443
targetPort: 8443
selector:
kustomize.component: tf-job-operator
name: tf-job-operator
type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment kind: Deployment
metadata: metadata:
labels: labels:
ksonnet.io/component: tf-job-operator kustomize.component: tf-job-operator
name: tf-job-dashboard name: tf-job-dashboard
namespace: kubeflow namespace: kubeflow
spec: spec:
selector:
matchLabels:
kustomize.component: tf-job-operator
template: template:
metadata: metadata:
labels: labels:
kustomize.component: tf-job-operator
name: tf-job-dashboard name: tf-job-dashboard
spec: spec:
containers: containers:
...@@ -20,31 +306,36 @@ spec: ...@@ -20,31 +306,36 @@ spec:
valueFrom: valueFrom:
fieldRef: fieldRef:
fieldPath: metadata.namespace fieldPath: metadata.namespace
image: "{{ .Values.tfJobOperator.image.repository }}:{{ .Values.tfJobOperator.image.tag }}" image: gcr.io/kubeflow-images-public/tf_operator:v0.6.0.rc0
name: tf-job-dashboard name: tf-job-dashboard
ports: ports:
- containerPort: 8080 - containerPort: 8080
serviceAccountName: tf-job-dashboard serviceAccountName: tf-job-dashboard
--- ---
apiVersion: extensions/v1beta1 apiVersion: apps/v1
kind: Deployment kind: Deployment
metadata: metadata:
labels: labels:
ksonnet.io/component: tf-job-operator kustomize.component: tf-job-operator
name: tf-job-operator-v1alpha2 name: tf-job-operator
namespace: kubeflow namespace: kubeflow
spec: spec:
replicas: 1 replicas: 1
selector:
matchLabels:
kustomize.component: tf-job-operator
template: template:
metadata: metadata:
labels: labels:
kustomize.component: tf-job-operator
name: tf-job-operator name: tf-job-operator
spec: spec:
containers: containers:
- command: - command:
- /opt/kubeflow/tf-operator.v2 - /opt/kubeflow/tf-operator.v1
- --alsologtostderr - --alsologtostderr
- -v=1 - -v=1
- --monitoring-port=8443
env: env:
- name: MY_POD_NAMESPACE - name: MY_POD_NAMESPACE
valueFrom: valueFrom:
...@@ -54,7 +345,7 @@ spec: ...@@ -54,7 +345,7 @@ spec:
valueFrom: valueFrom:
fieldRef: fieldRef:
fieldPath: metadata.name fieldPath: metadata.name
image: "{{ .Values.tfJobOperator.image.repository }}:{{ .Values.tfJobOperator.image.tag }}" image: gcr.io/kubeflow-images-public/tf_operator:v0.6.0.rc0
name: tf-job-operator name: tf-job-operator
volumeMounts: volumeMounts:
- mountPath: /etc/config - mountPath: /etc/config
...@@ -64,4 +355,25 @@ spec: ...@@ -64,4 +355,25 @@ spec:
- configMap: - configMap:
name: tf-job-operator-config name: tf-job-operator-config
name: config-volume name: config-volume
{{- end }} ---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: tf-job-dashboard
namespace: kubeflow
spec:
gateways:
- kubeflow-gateway
hosts:
- '*'
http:
- match:
- uri:
prefix: /tfjobs/
rewrite:
uri: /tfjobs/
route:
- destination:
host: tf-job-dashboard.kubeflow.svc.{{ .Values.clusterDomain }}
port:
number: 80
{{- if .Values.tfJobOperator.enabled }}
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
labels:
app: tf-job-dashboard
ksonnet.io/component: tf-job-operator
name: tf-job-dashboard
rules:
- apiGroups:
- tensorflow.org
- kubeflow.org
resources:
- tfjobs
verbs:
- '*'
- apiGroups:
- apiextensions.k8s.io
resources:
- customresourcedefinitions
verbs:
- '*'
- apiGroups:
- storage.k8s.io
resources:
- storageclasses
verbs:
- '*'
- apiGroups:
- batch
resources:
- jobs
verbs:
- '*'
- apiGroups:
- ""
resources:
- configmaps
- pods
- services
- endpoints
- persistentvolumeclaims
- events
- pods/log
- namespaces
verbs:
- '*'
- apiGroups:
- apps
- extensions
resources:
- deployments
verbs:
- '*'
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
labels:
app: tf-job-operator
ksonnet.io/component: tf-job-operator
name: tf-job-operator
rules:
- apiGroups:
- tensorflow.org
- kubeflow.org
resources:
- tfjobs
verbs:
- '*'
- apiGroups:
- apiextensions.k8s.io
resources:
- customresourcedefinitions
verbs:
- '*'
- apiGroups:
- storage.k8s.io
resources:
- storageclasses
verbs:
- '*'
- apiGroups:
- batch
resources:
- jobs
verbs:
- '*'
- apiGroups:
- ""
resources:
- configmaps
- pods
- services
- endpoints
- persistentvolumeclaims
- events
verbs:
- '*'
- apiGroups:
- apps
- extensions
resources:
- deployments
verbs:
- '*'
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
labels:
app: tf-job-dashboard
ksonnet.io/component: tf-job-operator
name: tf-job-dashboard
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: tf-job-dashboard
subjects:
- kind: ServiceAccount
name: tf-job-dashboard
namespace: kubeflow
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
labels:
app: tf-job-operator
ksonnet.io/component: tf-job-operator
name: tf-job-operator
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: tf-job-operator
subjects:
- kind: ServiceAccount
name: tf-job-operator
namespace: kubeflow
---
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
app: tf-job-dashboard
ksonnet.io/component: tf-job-operator
name: tf-job-dashboard
namespace: kubeflow
---
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
app: tf-job-operator
ksonnet.io/component: tf-job-operator
name: tf-job-operator
namespace: kubeflow
{{- end }}
{{- if .Values.tfJobOperator.enabled }}
apiVersion: v1
kind: Service
metadata:
annotations:
getambassador.io/config: |-
---
apiVersion: ambassador/v0
kind: Mapping
name: tfjobs-ui-mapping
prefix: /tfjobs/
rewrite: /tfjobs/
service: tf-job-dashboard.kubeflow
labels:
ksonnet.io/component: tf-job-operator
name: tf-job-dashboard
namespace: kubeflow
spec:
ports:
- port: 80
targetPort: 8080
selector:
name: tf-job-dashboard
type: ClusterIP
{{- end }}
# Default values for kubeflow. # Default values for kubeflow.
# This is a YAML-formatted file. # This is a YAML-formatted file.
# Declare variables to be passed into your templates. # Declare variables to be passed into your templates.
ambassador: applicationController:
replicas: 3 project: test
image:
repository: quay.io/datawire/ambassador
tag: 0.40.2
statsdImage:
repository: quay.io/datawire/statsd
tag: 0.38.0
exporterImage:
repository: prom/statsd-exporter
tag: v0.8.0
service: argo:
type: ClusterIP executorImage: argoproj/argoexec:v2.3.0
artifactRepositoryBucket: mlpipeline
artifactRepositoryKeyPrefix: artifacts
artifactRepositoryEndpoint: minio-service.kubeflow:9000
artifactRepositoryInsecure: true
artifactRepositoryAccessKeySecretName: mlpipeline-minio-artifact
artifactRepositoryAccessKeySecretKey: accesskey
artifactRepositorySecretKeySecretName: mlpipeline-minio-artifact
artifactRepositorySecretKeySecretKey: secretkey
centraldashboard: centraldashboard:
image: useridHeader: ""
repository: gcr.io/kubeflow-images-public/centraldashboard useridPrefix: ""
tag: v0.3.0
katib: clusterDomain: cluster.local
modeldbImage:
repository: gcr.io/kubeflow-images-public/modeldb-backend istio:
tag: v0.2.0 clusterRbacConfig: "OFF"
modeldbDatabaseImage:
repository: mongo jupyterWebApp:
tag: 3.4 ui: default
modeldbFrontendImage: rokSecretName: secret-rok-{username}
repository: katib/katib-frontend policy: Always
tag: latest prefix: jupyter
studyJobControllerImage: useridHeader: ""
repository: katib/studyjob-controller useridPrefix: ""
tag: v0.3
vizierCoreImage:
repository: katib/vizier-core
tag: v0.3
vizierDbImage:
repository: mysql
tag: 8.0.3
suggestionBayesianOptimizationImage:
repository: gcr.io/kubeflow-images-public/katib/suggestion-bayesianoptimization
tag: v0.1.2-alpha-45-g3dce496
suggestionGridImage:
repository: katib/suggestion-grid
tag: v0.3
suggestionHyperbandImage:
repository: katib/suggestion-hyperband
tag: v0.3
suggestionRandomImage:
repository: katib/suggestion-random
tag: v0.3
vizierdb: katib:
db:
password: test
persistence: persistence:
enabled: true enabled: true
## mariadb data Persistent Volume Storage Class
## If defined, storageClassName: <storageClass>
## If set to "-", storageClassName: "", which disables dynamic provisioning
## If undefined (the default) or set to null, no storageClassName spec is
## set, choosing the default provisioner. (gp2 on AWS, standard on
## GKE, AWS & OpenStack)
##
# storageClass: "-"
accessMode: ReadWriteOnce accessMode: ReadWriteOnce
size: 10Gi size: 10Gi
storageClass: ""
vizier: metadata:
service: db:
type: ClusterIP password: test
# nodePort: 30678 persistence:
enabled: true
accessMode: ReadWriteOnce
size: 10Gi
storageClass: ""
jupyterhub: minio:
accessKey: minio
secretKey: minio123
persistence:
enabled: true enabled: true
image: accessMode: ReadWriteOnce
repository: gcr.io/kubeflow/jupyterhub-k8s pvcName: minio-pvc
tag: v20180531-3bb991b1 size: 20Gi
service: storageClass: ""
type: ClusterIP
tfJobOperator: mysql:
persistence:
enabled: true enabled: true
image: accessMode: ReadWriteOnce
repository: gcr.io/kubeflow-images-public/tf_operator pvcName: mysql-pvc
tag: v0.3.0 size: 20Gi
storageClass: ""
chainerOperator: notebookController:
enabled: false podLabels: gcp-cred-secret=user-gcp-sa,gcp-cred-secret-filename=user-gcp-sa.json
image: useIstio: true
repository: gcr.io/kubeflow-images-public/chainer-operator
tag: v0.3.0
mxnetOperator: profiles:
enabled: false admin: johnDoe@acme.com
image: useridHeader: ""
repository: mxjob/mxnet-operator useridPrefix: ""
tag: v1
pytorchOperator: spartakus:
enabled: false usageId: test
image:
repository: gcr.io/kubeflow-images-public/pytorch-operator
tag: v0.3.0
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment