diff --git a/.github/workflows/ping-bizaar-daemon-repo.yaml b/.github/workflows/ping-bizaar-daemon-repo.yaml
new file mode 100644
index 00000000..531f5d66
--- /dev/null
+++ b/.github/workflows/ping-bizaar-daemon-repo.yaml
@@ -0,0 +1,15 @@
+name: ping-kubemart-daemon-repo
+on: push
+
+jobs:
+ ping-kubemart-daemon-repo:
+ name: Dispatch to kubemart/kubemart-daemon
+ runs-on: ubuntu-20.04
+ steps:
+ - name: Emit repository_dispatch
+ uses: mvasigh/dispatch-action@main
+ with:
+ token: ${{ secrets.GH_PAT }}
+ owner: kubemart
+ repo: kubemart-daemon
+ event_type: ping-from-kubernetes-marketplace-repo
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 00000000..cb7eea1a
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,5 @@
+.DS_Store
+
+# Any kubeconfig within the repo - could potentially contain auth data
+kubeconfig*
+*kubeconfig
diff --git a/Gemfile.lock b/Gemfile.lock
index 31358f31..edfa3b03 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -10,4 +10,4 @@ DEPENDENCIES
image_size
BUNDLED WITH
- 1.17.3
+ 2.2.3
diff --git a/README.md b/README.md
index 1a978507..a42377d8 100644
--- a/README.md
+++ b/README.md
@@ -85,21 +85,21 @@ Applications support customization through a simple mechanism. This is a user de
The applications can't ask the user for these values, so they must be either a pre-configured value (to keep the `app.yaml` and Civo-specific configuration separate) or one of a range of special values that Civo will inject:
- - CIVO:ALPHANUMERIC(num)
+ - KUBEMART:ALPHANUMERIC(num)
- A random string of alphanumeric characters
num
long
- - CIVO:WORDS(num)
+ - KUBEMART:WORDS(num)
- A combination of
num
random words, separated by -
for use as a readable name
- - CIVO:CLUSTER_NAME
+ - KUBEMART:CLUSTER_NAME
- The name of your Kubernetes cluster
- - CIVO:CLUSTER_ID
+ - KUBEMART:DOMAIN_NAME
- The ID of your Kubernetes cluster (for injecting something.ID.k8s.civo.com as a domain)
- - CIVO:EMAIL_ADDRESS
+ - KUBEMART:EMAIL_ADDRESS
- The email address of your Civo account
- - CIVO:MASTER_IP
+ - KUBEMART:MASTER_IP
- The public IP address of your Kubernetes cluster's master
-**Note:** For `CIVO:ALPHANUMERIC(num)` and `CIVO:WORDS(num)` you can also suffix `:BASE64` (e.g. `CIVO:ALPHANUMERIC(10):BASE64`) to have Civo automatically encode the random values to Base 64 before inserting them in the templates (but the non-Base 64 version is kept to present to the user as a readable/copyable value).
+**Note:** For `KUBEMART:ALPHANUMERIC(num)` and `KUBEMART:WORDS(num)` you can also suffix `:BASE64` (e.g. `KUBEMART:ALPHANUMERIC(10):BASE64`) to have Civo automatically encode the random values to Base 64 before inserting them in the templates (but the non-Base 64 version is kept to present to the user as a readable/copyable value).
These are specified in the `manifest.yaml` like this:
@@ -107,7 +107,7 @@ These are specified in the `manifest.yaml` like this:
configuration:
ACCESS_KEY:
label: "Access key"
- value: "CIVO:ALPHANUMERIC(10)"
+ value: "KUBEMART:ALPHANUMERIC(10)"
```
Another way of customizing applications is to provide plans which will be injected in the same way as the values above, but the UI will provide a choice for which plan to install. These are specified in the `manifest.yaml` like this:
diff --git a/argocd/manifest.yaml b/argocd/manifest.yaml
index 93fed572..a46aaae2 100644
--- a/argocd/manifest.yaml
+++ b/argocd/manifest.yaml
@@ -1,5 +1,6 @@
---
name: argo-cd
+namespace: argocd
title: "Argo CD"
maintainer: "The Argo Project"
description: Declarative continuous deployment for Kubernetes
diff --git a/bitwardenrs/app.yaml b/bitwardenrs/app.yaml
index 4c236441..6a3f27ab 100644
--- a/bitwardenrs/app.yaml
+++ b/bitwardenrs/app.yaml
@@ -1,3 +1,8 @@
+apiVersion: v1
+kind: Namespace
+metadata:
+ name: bitwardenrs
+---
apiVersion: cert-manager.io/v1alpha2
kind: ClusterIssuer
metadata:
@@ -13,17 +18,18 @@ spec:
name: letsencrypt-prod-bw
# Enable the HTTP-01 challenge provider
solvers:
- - http01:
- ingress:
- class: traefik
+ - http01:
+ ingress:
+ class: traefik
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: bw-pv-claim
+ namespace: bitwardenrs
spec:
accessModes:
- - ReadWriteOnce
+ - ReadWriteOnce
resources:
requests:
storage: $VOLUME_SIZE
@@ -32,6 +38,7 @@ apiVersion: v1
kind: Service
metadata:
name: bw-service
+ namespace: bitwardenrs
spec:
selector:
app: bw
@@ -40,10 +47,19 @@ spec:
port: 80
targetPort: 80
---
+apiVersion: v1
+kind: Secret
+metadata:
+ name: bitwardenrs-database-url
+ namespace: bitwardenrs
+data:
+ DATABASE_URL: dXBkYXRlLXRoaXMtYWZ0ZXItaW5zdGFsbGF0aW9uCg==
+---
apiVersion: apps/v1
kind: Deployment
metadata:
name: bw
+ namespace: bitwardenrs
labels:
app: bw
spec:
@@ -60,40 +76,43 @@ spec:
spec:
containers:
- name: bw
- image: bitwardenrs/server-mysql:1.17.0
+ image: bitwardenrs/server-mysql:1.19.0
imagePullPolicy: IfNotPresent
ports:
- - containerPort: 80
- protocol: TCP
+ - containerPort: 80
+ protocol: TCP
+ env:
+ - name: DATABASE_URL
+ valueFrom:
+ secretKeyRef:
+ name: bitwardenrs-database-url
+ key: DATABASE_URL
volumeMounts:
- - name: bw-persistent-storage
- mountPath: /data
-
+ - name: bw-persistent-storage
+ mountPath: /data
volumes:
- - name: bw-persistent-storage
- persistentVolumeClaim:
- claimName: bw-pv-claim
+ - name: bw-persistent-storage
+ persistentVolumeClaim:
+ claimName: bw-pv-claim
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod-bw
- ingress.kubernetes.io/ssl-redirect: "true"
+ ingress.kubernetes.io/ssl-redirect: "true"
name: bw
+ namespace: bitwardenrs
spec:
tls:
- hosts:
- - bw.$CLUSTER_ID.k8s.civo.com
- secretName: letsencrypt-prod-bw
+ - bw.$DOMAIN_NAME
+ secretName: letsencrypt-prod-bw
rules:
- - host: bw.$CLUSTER_ID.k8s.civo.com
- http:
- paths:
- - backend:
- serviceName: bw-service
- servicePort: 80
-
-
-
+ - host: bw.$DOMAIN_NAME
+ http:
+ paths:
+ - backend:
+ serviceName: bw-service
+ servicePort: 80
diff --git a/bitwardenrs/manifest.yaml b/bitwardenrs/manifest.yaml
index 0fa1fbd8..6224d6fe 100644
--- a/bitwardenrs/manifest.yaml
+++ b/bitwardenrs/manifest.yaml
@@ -1,8 +1,9 @@
---
name: Bitwardenrs
-version: 1.17.0
+namespace: bitwardenrs
+version: 1.19.0
maintainer: keith@hubner.co.uk
-description: Open Source Password Manager (Bitwarden server API implementation written in Rust)
+description: Open Source Password Manager (Bitwarden server API implementation written in Rust)
url: https://github.com/dani-garcia/bitwarden_rs
category: management
dependencies:
@@ -21,9 +22,9 @@ plans:
VOLUME_SIZE:
value: 5Gi
configuration:
- CLUSTER_ID:
+ DOMAIN_NAME:
label: "Cluster ID"
- value: "CIVO:CLUSTER_ID"
+ value: "KUBEMART:DOMAIN_NAME"
EMAIL_ADDRESS:
label: "Email Address"
- value: "CIVO:EMAIL_ADDRESS"
+ value: "KUBEMART:EMAIL_ADDRESS"
diff --git a/bitwardenrs/post_install.md b/bitwardenrs/post_install.md
index 90b53df5..112419b4 100644
--- a/bitwardenrs/post_install.md
+++ b/bitwardenrs/post_install.md
@@ -2,7 +2,7 @@
### This project is not associated with the Bitwarden project nor 8bit Solutions LLC.
-This is a Bitwarden server API implementation written in Rust compatible with upstream Bitwarden clients*, perfect for self-hosted deployment where running the official resource-heavy service might not be ideal.
+This is a Bitwarden server API implementation written in Rust compatible with upstream Bitwarden clients\*, perfect for self-hosted deployment where running the official resource-heavy service might not be ideal.
### HTTPS
@@ -10,7 +10,4 @@ An ingress is automatically created during the application install. A certificat
### Post installation
-Once you have installed this app you will be able to connect to the web interface via https://rs.YOUR_CLUSTER_ID.k8s.civo.com
-
-
-
+Once you have installed this app you will be able to connect to the web interface via https://rs.DOMAIN_NAME
diff --git a/cert-manager/manifest.yaml b/cert-manager/manifest.yaml
index 5a2155a1..877c9ad5 100644
--- a/cert-manager/manifest.yaml
+++ b/cert-manager/manifest.yaml
@@ -1,5 +1,6 @@
---
name: cert-manager
+namespace: cert-manager
title: "Cert Manager"
version: v1.3.1
maintainer: alex@openfaas.com
diff --git a/cert-manager/uninstall.sh b/cert-manager/uninstall.sh
index 03bcbb33..8bbf5ec4 100755
--- a/cert-manager/uninstall.sh
+++ b/cert-manager/uninstall.sh
@@ -1,4 +1,3 @@
#!/bin/bash
-# Delete the app
-kubectl delete -f cert-manager.yaml
+kubectl delete -f https://github.com/jetstack/cert-manager/releases/download/v1.3.1/cert-manager.yaml
diff --git a/docker-registry/app.yaml b/docker-registry/app.yaml
index 6f2d16bf..cbec6ce9 100644
--- a/docker-registry/app.yaml
+++ b/docker-registry/app.yaml
@@ -2,7 +2,6 @@ apiVersion: cert-manager.io/v1alpha2
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
- namespace: default
spec:
acme:
# The ACME server URL
@@ -16,4 +15,4 @@ spec:
solvers:
- http01:
ingress:
- class: traefik
\ No newline at end of file
+ class: traefik
diff --git a/docker-registry/install.sh b/docker-registry/install.sh
index 35fb9c82..8107feb2 100755
--- a/docker-registry/install.sh
+++ b/docker-registry/install.sh
@@ -2,10 +2,15 @@
htpasswd -Bbn $REGISTRY_USERNAME $REGISTRY_PASSWD > /tmp/auth
-kubectl create secret generic auth-ingress --from-file /tmp/auth
+kubectl create ns docker-registry
+
+kubectl -n docker-registry create secret generic auth-ingress --from-file /tmp/auth
+
+helm repo add stable https://charts.helm.sh/stable
-# Update the helm repo
helm repo update
-helm install stable/docker-registry --name private-registry \
- --namespace default --set persistence.enabled=false
+helm upgrade --install \
+ private-registry stable/docker-registry \
+ --namespace docker-registry \
+ --set persistence.enabled=false
diff --git a/docker-registry/manifest.yaml b/docker-registry/manifest.yaml
index 85073640..17604784 100644
--- a/docker-registry/manifest.yaml
+++ b/docker-registry/manifest.yaml
@@ -1,19 +1,19 @@
---
name: docker-registry
+namespace: docker-registry
title: "Docker Registry"
version: ALPHA
maintainer: alejandro@civo.com
description: A registry is a storage and content delivery system, holding named Docker images, available in different tagged versions.
url:
dependencies:
- - Helm
- cert-manager
- Traefik
category: architecture
configuration:
REGISTRY_USERNAME:
label: "Registry username"
- value: "CIVO:EMAIL_ADDRESS"
+ value: "KUBEMART:EMAIL_ADDRESS"
REGISTRY_PASSWD:
label: "Registry password"
- value: "CIVO:ALPHANUMERIC(10)"
+ value: "KUBEMART:ALPHANUMERIC(10)"
diff --git a/docker-registry/post_install.md b/docker-registry/post_install.md
index 9b75efa0..2b5a598f 100644
--- a/docker-registry/post_install.md
+++ b/docker-registry/post_install.md
@@ -4,6 +4,7 @@
This will help you to create a valid certificate for your registry, you need apply this YAML file,
you only need replace only `registry.example.com` by your valid domain
+
```yaml
apiVersion: cert-manager.io/v1alpha2
kind: Certificate
@@ -57,5 +58,5 @@ spec:
serviceName: private-registry-docker-registry
servicePort: 5000
```
-You only need replace only `registry.example.com` by your valid domain.
-This will open up http://registry.example.com (assuming you pointed that non-real domain record to your cluster's IPs) to the whole world.
\ No newline at end of file
+
+You only need replace only `registry.example.com` by your valid domain. This will open up http://registry.example.com (assuming you pointed that non-real domain record to your cluster's IPs) to the whole world.
diff --git a/docker-registry/uninstall.sh b/docker-registry/uninstall.sh
new file mode 100755
index 00000000..4adda919
--- /dev/null
+++ b/docker-registry/uninstall.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+helm --namespace docker-registry delete private-registry
diff --git a/dynamic-pv-scaler/app.yaml b/dynamic-pv-scaler/app.yaml
index e64d7063..27ae5c0f 100644
--- a/dynamic-pv-scaler/app.yaml
+++ b/dynamic-pv-scaler/app.yaml
@@ -1,8 +1,13 @@
+apiVersion: v1
+kind: Namespace
+metadata:
+ name: dynamic-pv-scaler
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: dynamic-pv-scaler
+ namespace: dynamic-pv-scaler
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
@@ -30,6 +35,7 @@ apiVersion: apps/v1
kind: Deployment
metadata:
name: dynamic-pv-scaler
+ namespace: dynamic-pv-scaler
labels:
app: dynamic-pv-scaler
spec:
diff --git a/dynamic-pv-scaler/manifest.yaml b/dynamic-pv-scaler/manifest.yaml
index 82a1e7d1..2a1b3eff 100644
--- a/dynamic-pv-scaler/manifest.yaml
+++ b/dynamic-pv-scaler/manifest.yaml
@@ -1,5 +1,6 @@
---
name: dynamic-pv-scaler
+namespace: dynamic-pv-scaler
title: Dynamic PV Scaler
version: 0.1.0
dependencies:
diff --git a/dynamic-pv-scaler/post-install.md b/dynamic-pv-scaler/post-install.md
index c23184ea..dbaab615 100644
--- a/dynamic-pv-scaler/post-install.md
+++ b/dynamic-pv-scaler/post-install.md
@@ -11,6 +11,7 @@ apiVersion: v1
kind: ConfigMap
metadata:
name: dynamic-pv-scaler-config
+ namespace: dynamic-pv-scaler
labels:
name: dynamic-pv-scaler-config
app: dynamic-pv-scaler-config
diff --git a/ghost/app.yaml b/ghost/app.yaml
index eff01f71..5604c904 100644
--- a/ghost/app.yaml
+++ b/ghost/app.yaml
@@ -43,7 +43,7 @@ spec:
protocol: TCP
env:
- name: url
- value: http://ghost.$CLUSTER_ID.k8s.civo.com
+ value: http://ghost.$DOMAIN_NAME
livenessProbe:
httpGet:
port: ghost-blog
@@ -87,9 +87,9 @@ metadata:
namespace: ghost
spec:
rules:
- - host: ghost.$CLUSTER_ID.k8s.civo.com
- http:
- paths:
- - backend:
- serviceName: ghost-blog
- servicePort: 80
+ - host: ghost.$DOMAIN_NAME
+ http:
+ paths:
+ - backend:
+ serviceName: ghost-blog
+ servicePort: 80
diff --git a/ghost/manifest.yaml b/ghost/manifest.yaml
index 53e73112..d5db3e39 100644
--- a/ghost/manifest.yaml
+++ b/ghost/manifest.yaml
@@ -1,6 +1,7 @@
---
name: Ghost
version: 4.8.3
+namespace: ghost
maintainer: saka@lnxid.com
description: Ghost is a free and open source blogging platform designed to simplify the process of online publishing for individual bloggers as well as online publications.
url: https://ghost.org/
@@ -19,6 +20,6 @@ plans:
VOLUME_SIZE:
value: 15Gi
configuration:
- CLUSTER_ID:
+ DOMAIN_NAME:
label: "Cluster ID"
- value: "CIVO:CLUSTER_ID"
+ value: "KUBEMART:DOMAIN_NAME"
diff --git a/ghost/post_install.md b/ghost/post_install.md
index 4193edcc..aed30be9 100644
--- a/ghost/post_install.md
+++ b/ghost/post_install.md
@@ -4,23 +4,23 @@ This ghost blog using sqlite as the database backend.
## External Access
-An Ingress is created during the installation process. To access your ghost use `http://ghost.YOUR_CLUSTER_ID.k8s.civo.com`
+An Ingress is created during the installation process. To access your ghost use `http://ghost.DOMAIN_NAME`
## Create Admin User
By default Ghost does not create Admin user during the installation process. In order to access your Ghost Dashboard you will need to create your Ghost Admin user first. This can be done right after your installation process via your browser.
-To access your Ghost registration page simply access your Ghost installation via your browser using the following URL: `http://ghost.YOUR_CLUSTER_ID.k8s.civo.com`, after that follow step below :
+To access your Ghost registration page simply access your Ghost installation via your browser using the following URL: `http://ghost.DOMAIN_NAME`, after that follow step below :
-* Click `Create your account` button.
-* Input your site title, username, email address and desired password ( at least 10 characters ).
-* Invite your friend to Collaborate on your blog. This is optional, If you don't want to invite others just click text `I'll do this later, take me to my site!`.
+- Click `Create your account` button.
+- Input your site title, username, email address and desired password ( at least 10 characters ).
+- Invite your friend to Collaborate on your blog. This is optional, If you don't want to invite others just click text `I'll do this later, take me to my site!`.
## Delete default user created by ghost
By default ghost create user name `Ghost` and create example post in your blog. You can follow this step to delete it.
-* Login to your ghost admin url `http://ghost.YOUR_CLUSTER_ID.k8s.civo.com/ghost`.
+* Login to your ghost admin url `http://ghost.DOMAIN_NAME/ghost`.
* Click the `Staff` menu in the left column.
* In the right column, click the user name `Ghost`.
* Click the option button in the upper right ( in the left of save button ).
@@ -30,14 +30,14 @@ By default ghost create user name `Ghost` and create example post in your blog.
Follow this step to create your first blog post :
-* To begin your first blog post login to ghost admin url `http://ghost.YOUR_CLUSTER_ID.k8s.civo.com/ghost`.
-* Inside the ghost admin menu, click `Posts` menu at the left column. Click `New post` button in the upper right.
-* Write your blog.
-* If you want to publish your blog, click the `publish` button in the upper right. If you want to publish it later, Click the `< Posts` button in the upper left, your article should be automatically saved as draft.
+- To begin your first blog post login to ghost admin url `http://ghost.DOMAIN_NAME/ghost`.
+- Inside the ghost admin menu, click `Posts` menu at the left column. Click `New post` button in the upper right.
+- Write your blog.
+- If you want to publish your blog, click the `publish` button in the upper right. If you want to publish it later, Click the `< Posts` button in the upper left, your article should be automatically saved as draft.
## Modify URL
-If you want to change the url edit with
+If you want to change the url edit with
```
kubectl -n ghost edit ingress ghost-blog
@@ -52,10 +52,10 @@ spec:
template:
spec:
containers:
- - name: ghost-blog
- env:
- - name: url
- value: CHANGE_WITH_YOUR_NEW_URL
+ - name: ghost-blog
+ env:
+ - name: url
+ value: CHANGE_WITH_YOUR_NEW_URL
```
Run the patch command
diff --git a/gitea/app.yaml b/gitea/app.yaml
deleted file mode 100644
index ddbb0d85..00000000
--- a/gitea/app.yaml
+++ /dev/null
@@ -1,25 +0,0 @@
-apiVersion: v1
-kind: Namespace
-metadata:
- name: gitea
----
-apiVersion: helm.cattle.io/v1
-kind: HelmChart
-metadata:
- name: gitea
- namespace: kube-system
-spec:
- chart: gitea
- version: 2.1.6
- targetNamespace: gitea
- repo: https://dl.gitea.io/charts
- valuesContent: |-
- persistence:
- enabled: false
- gitea:
- admin:
- email: $ADMIN_EMAIL
- password: $ADMIN_PASS
- postgresql:
- persistence:
- enabled: false
diff --git a/gitea/install.sh b/gitea/install.sh
new file mode 100644
index 00000000..24ea7ab2
--- /dev/null
+++ b/gitea/install.sh
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+kubectl create ns gitea
+
+helm repo add gitea-charts https://dl.gitea.io/charts/
+
+helm upgrade --install \
+ gitea gitea-charts/gitea \
+ --namespace gitea \
+ --set persistence.enabled=false \
+ --set gitea.admin.email=$ADMIN_EMAIL \
+ --set gitea.admin.password=$ADMIN_PASS \
+ --set postgresql.persistence.enabled=false
diff --git a/gitea/manifest.yaml b/gitea/manifest.yaml
index cafdfff5..9598d904 100644
--- a/gitea/manifest.yaml
+++ b/gitea/manifest.yaml
@@ -1,5 +1,6 @@
---
name: gitea
+namespace: gitea
title: "Gitea"
version: 1.12.5
maintainer: "@giteaio"
@@ -9,7 +10,7 @@ category: management
configuration:
ADMIN_PASS:
label: "Admin Password"
- value: "CIVO:ALPHANUMERIC(30)"
+ value: "KUBEMART:ALPHANUMERIC(30)"
ADMIN_EMAIL:
label: "Admin Email"
- value: "CIVO:EMAIL_ADDRESS"
+ value: "KUBEMART:EMAIL_ADDRESS"
diff --git a/gitea/uninstall.sh b/gitea/uninstall.sh
index f5a87f4c..bcda0503 100755
--- a/gitea/uninstall.sh
+++ b/gitea/uninstall.sh
@@ -1,4 +1,3 @@
#!/bin/bash
-# Delete the custom CRDs
-kubectl delete -f app.yaml
+helm --namespace gitea uninstall gitea
diff --git a/haproxy/app.yaml b/haproxy/app.yaml
index aae7835c..8411d400 100644
--- a/haproxy/app.yaml
+++ b/haproxy/app.yaml
@@ -2,15 +2,13 @@
apiVersion: v1
kind: Namespace
metadata:
- name: haproxy-controller
-
+ name: haproxy
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: haproxy-ingress-service-account
- namespace: haproxy-controller
-
+ namespace: haproxy
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
@@ -61,13 +59,12 @@ rules:
- create
- patch
- update
-
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: haproxy-ingress-cluster-role-binding
- namespace: haproxy-controller
+ namespace: haproxy
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
@@ -75,8 +72,7 @@ roleRef:
subjects:
- kind: ServiceAccount
name: haproxy-ingress-service-account
- namespace: haproxy-controller
-
+ namespace: haproxy
---
apiVersion: v1
kind: ConfigMap
@@ -92,7 +88,7 @@ metadata:
labels:
run: ingress-default-backend
name: ingress-default-backend
- namespace: haproxy-controller
+ namespace: haproxy
spec:
replicas: 1
selector:
@@ -108,7 +104,6 @@ spec:
image: gcr.io/google_containers/defaultbackend:1.0
ports:
- containerPort: 8080
-
---
apiVersion: v1
kind: Service
@@ -116,7 +111,7 @@ metadata:
labels:
run: ingress-default-backend
name: ingress-default-backend
- namespace: haproxy-controller
+ namespace: haproxy
spec:
selector:
run: ingress-default-backend
@@ -125,7 +120,6 @@ spec:
port: 8080
protocol: TCP
targetPort: 8080
-
---
apiVersion: apps/v1
kind: Deployment
@@ -133,7 +127,7 @@ metadata:
labels:
run: haproxy-ingress
name: haproxy-ingress
- namespace: haproxy-controller
+ namespace: haproxy
spec:
replicas: 1
selector:
@@ -201,7 +195,7 @@ metadata:
labels:
run: haproxy-ingress
name: haproxy-ingress
- namespace: haproxy-controller
+ namespace: haproxy
spec:
selector:
run: haproxy-ingress
diff --git a/haproxy/manifest.yaml b/haproxy/manifest.yaml
index a1f84319..cdce116e 100644
--- a/haproxy/manifest.yaml
+++ b/haproxy/manifest.yaml
@@ -1,5 +1,6 @@
---
name: haproxy
+namespace: haproxy
title: "Haproxy"
version: "1.5"
maintainer: alejandro@civo.com, amit2cha@gmail.com
diff --git a/haproxy/post_install.md b/haproxy/post_install.md
index b04daa49..787a4345 100644
--- a/haproxy/post_install.md
+++ b/haproxy/post_install.md
@@ -2,13 +2,13 @@
### External access to your services
-HAProxy is free, open source software that provides a high availability load balancer and proxy server for TCP and HTTP-based applications.To use it for your applications all you have to do is apply a YAML file like the one below to handle ingress:
+HAProxy is free, open source software that provides a high availability load balancer and proxy server for TCP and HTTP-based applications. To use it for your applications all you have to do is apply a YAML file like the one below to handle ingress:
```yaml
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
- name: yourapp-ingress
+ name: your-app-ingress
namespace: default
spec:
rules:
@@ -21,4 +21,4 @@ spec:
servicePort: 8080
```
-This will open up http://www.example.com (assuming you pointed that non-real domain record to your cluster's IPs) to the whole world.
\ No newline at end of file
+This will open up http://www.example.com (assuming you pointed that non-real domain record to your cluster's IPs) to the whole world.
diff --git a/helm/app.yaml b/helm/app.yaml
deleted file mode 100644
index a942b530..00000000
--- a/helm/app.yaml
+++ /dev/null
@@ -1,95 +0,0 @@
-apiVersion: v1
-kind: ServiceAccount
-metadata:
- name: tiller
- namespace: kube-system
----
-apiVersion: apps/v1
-kind: Deployment
-metadata:
- creationTimestamp: null
- labels:
- app: helm
- name: tiller
- name: tiller-deploy
- namespace: kube-system
-spec:
- replicas: 1
- strategy: {}
- selector:
- matchLabels:
- app: helm
- name: tiller
- template:
- metadata:
- creationTimestamp: null
- labels:
- app: helm
- name: tiller
- spec:
- automountServiceAccountToken: true
- serviceAccount: tiller
- containers:
- - env:
- - name: TILLER_NAMESPACE
- value: kube-system
- - name: TILLER_HISTORY_MAX
- value: "0"
- image: gcr.io/kubernetes-helm/tiller:v2.16.5
- imagePullPolicy: IfNotPresent
- livenessProbe:
- httpGet:
- path: /liveness
- port: 44135
- initialDelaySeconds: 1
- timeoutSeconds: 1
- name: tiller
- ports:
- - containerPort: 44134
- name: tiller
- - containerPort: 44135
- name: http
- readinessProbe:
- httpGet:
- path: /readiness
- port: 44135
- initialDelaySeconds: 1
- timeoutSeconds: 1
- resources: {}
-status: {}
-
----
-apiVersion: v1
-kind: Service
-metadata:
- creationTimestamp: null
- labels:
- app: helm
- name: tiller
- name: tiller-deploy
- namespace: kube-system
-spec:
- ports:
- - name: tiller
- port: 44134
- targetPort: tiller
- selector:
- app: helm
- name: tiller
- type: ClusterIP
-status:
- loadBalancer: {}
-
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
- name: tiller
-roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: ClusterRole
- name: cluster-admin
-subjects:
- - kind: ServiceAccount
- name: tiller
- namespace: kube-system
diff --git a/helm/install.sh b/helm/install.sh
deleted file mode 100644
index 1ad25026..00000000
--- a/helm/install.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/bash
-
-for (( i=0; i<30; ++i)); do
- kubectl -n kube-system get pods -o=jsonpath='{.items[?(@.metadata.labels.name=="tiller")].status.conditions[*].status}' | grep -v "False" && break
- sleep 1
-done
diff --git a/helm/logo.png b/helm/logo.png
deleted file mode 100644
index d1e0de9f..00000000
Binary files a/helm/logo.png and /dev/null differ
diff --git a/helm/manifest.yaml b/helm/manifest.yaml
deleted file mode 100644
index 32c699c1..00000000
--- a/helm/manifest.yaml
+++ /dev/null
@@ -1,7 +0,0 @@
----
-name: Helm
-version: 2.16.5
-maintainer: hello@civo.com
-description: Helm (tiller) helps you define, install, and upgrade even the most complex Kubernetes application.
-url: https://helm.sh
-category: management
diff --git a/helm/post_install.md b/helm/post_install.md
deleted file mode 100644
index cd1a1ea4..00000000
--- a/helm/post_install.md
+++ /dev/null
@@ -1,9 +0,0 @@
-## Helm - The package manager for Kubernetes
-
-### External access
-
-Helm is available to anyone with the credentials to access your Kubernetes cluster.
-
-### Usage instructions
-
-Helm has [very comprehensive documentation](https://helm.sh/docs/) on all things from writing your own charts to installing, upgrading and deleting applications written as Helm charts.
diff --git a/jaeger/app.yaml b/jaeger/app.yaml
index 26775a0d..05a984fd 100644
--- a/jaeger/app.yaml
+++ b/jaeger/app.yaml
@@ -1,7 +1,7 @@
apiVersion: v1
kind: Namespace
metadata:
- name: observability
+ name: jaeger
---
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
@@ -9926,14 +9926,14 @@ apiVersion: v1
kind: ServiceAccount
metadata:
name: jaeger-operator
- namespace: observability
+ namespace: jaeger
---
## this is a set of basic permissions the Jaeger Operator needs when restricted to work in specific namespaces
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: jaeger-operator
- namespace: observability
+ namespace: jaeger
rules:
## our own custom resources
@@ -10116,11 +10116,11 @@ kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: jaeger-operator
- namespace: observability
+ namespace: jaeger
subjects:
- kind: ServiceAccount
name: jaeger-operator
- namespace: observability
+ namespace: jaeger
roleRef:
kind: Role
name: jaeger-operator
@@ -10130,7 +10130,7 @@ apiVersion: apps/v1
kind: Deployment
metadata:
name: jaeger-operator
- namespace: observability
+ namespace: jaeger
spec:
replicas: 1
selector:
diff --git a/jaeger/manifest.yaml b/jaeger/manifest.yaml
index 89e8738f..e02612e3 100644
--- a/jaeger/manifest.yaml
+++ b/jaeger/manifest.yaml
@@ -1,4 +1,5 @@
name: Jaeger-Operator
+namespace: jaeger
version: "1.2.0"
description: Jaeger-Operator is a Kubernetes Operator implementation of the Jaeger Distributed Tracing tool
dependencies:
diff --git a/jaeger/post_install.md b/jaeger/post_install.md
index 7635fcbc..b111cd51 100644
--- a/jaeger/post_install.md
+++ b/jaeger/post_install.md
@@ -1,19 +1,19 @@
# Running Jaeger
-Once the operator has been installed and deployed, you can start a Jaeger instance by modifying the below snippet for your needs, saving it as jaeger.yaml and running `kubectl apply -f jaeger.yaml`:
+Once the operator has been installed and deployed, you can start a Jaeger instance by modifying the below snippet for your needs, saving it as _jaeger.yaml_ and running `kubectl apply -f jaeger.yaml`:
```yaml
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: simplest
- namespace: observability
+ namespace: jaeger
```
-You will then be able to access the Jaeger UI using the IP address of your cluster. This should be displayed when you run `kubectl get -n observability ingress`:
+You will then be able to access the Jaeger UI using the IP address of your cluster. This should be displayed when you run `kubectl get -n jaeger ingress`:
```sh
-$ kubectl get -n observability ingress
+$ kubectl get -n jaeger ingress
NAME CLASS HOSTS ADDRESS PORTS AGE
simplest-query * 80 2m
```
diff --git a/jenkins/app.yaml b/jenkins/app.yaml
index 198d69e0..196a2371 100644
--- a/jenkins/app.yaml
+++ b/jenkins/app.yaml
@@ -1,7 +1,21 @@
+# ********
+# README
+# ********
+# When you are updating Jenkins image e.g. from 2.190.1 to 2.263.3,
+# please also update the version in the init container. There are
+# two (2) occurrence of version number in this file. Update them all.
+# Tip: use `Ctrl/Cmd + F` to search them.
+
+apiVersion: v1
+kind: Namespace
+metadata:
+ name: jenkins
+---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: jenkins-pv-claim
+ namespace: jenkins
labels:
type: longhorn
app: jenkins
@@ -16,14 +30,15 @@ apiVersion: v1
kind: Service
metadata:
name: jenkins-frontend
+ namespace: jenkins
spec:
ports:
- - name: jenkins
- port: 8080
- targetPort: 8080
- - name: jenkins-agent
- port: 50000
- targetPort: 50000
+ - name: jenkins
+ port: 8080
+ targetPort: 8080
+ - name: jenkins-agent
+ port: 50000
+ targetPort: 50000
selector:
app: jenkins
clusterIP: None
@@ -32,6 +47,7 @@ apiVersion: apps/v1
kind: Deployment
metadata:
name: jenkins
+ namespace: jenkins
labels:
app: jenkins
spec:
@@ -47,23 +63,37 @@ spec:
app: jenkins
tier: jenkins
spec:
+ initContainers:
+ - name: update-jenkins
+ image: alpine:latest
+ command: ["sh", "-c"]
+ args:
+ - if [ -d "/bitnami/jenkins" ]; then
+ apk add --update curl && rm -rf /var/cache/apk/*;
+ cd /bitnami/jenkins;
+ curl -L https://get.jenkins.io/war-stable/2.190.1/jenkins.war -o jenkins.war;
+ chown -R 1001:1001 .;
+ fi;
+ volumeMounts:
+ - name: jenkins-persistent-storage
+ mountPath: /bitnami
containers:
- - image: bitnami/jenkins:2.190.1-debian-9-r14
- name: jenkins
- env:
- - name: JENKINS_USERNAME
- value: $JENKINS_USERNAME
- - name: JENKINS_PASSWORD
- value: $JENKINS_PASSWORD
- ports:
- - containerPort: 8080
+ - image: bitnami/jenkins:2.190.1-debian-9-r14
name: jenkins
- - containerPort: 50000
- name: jenkins-agent
- volumeMounts:
- - name: jenkins-persistent-storage
- mountPath: /bitnami
+ env:
+ - name: JENKINS_USERNAME
+ value: $JENKINS_USERNAME
+ - name: JENKINS_PASSWORD
+ value: $JENKINS_PASSWORD
+ ports:
+ - containerPort: 8080
+ name: jenkins
+ - containerPort: 50000
+ name: jenkins-agent
+ volumeMounts:
+ - name: jenkins-persistent-storage
+ mountPath: /bitnami
volumes:
- - name: jenkins-persistent-storage
- persistentVolumeClaim:
- claimName: jenkins-pv-claim
+ - name: jenkins-persistent-storage
+ persistentVolumeClaim:
+ claimName: jenkins-pv-claim
diff --git a/jenkins/manifest.yaml b/jenkins/manifest.yaml
index 68b415da..363d5d71 100644
--- a/jenkins/manifest.yaml
+++ b/jenkins/manifest.yaml
@@ -1,5 +1,6 @@
---
name: Jenkins
+namespace: jenkins
version: 2.190.1
maintainer: "@ruanbekker"
description: Jenkins is a Continuous Integration and Delivery server
@@ -21,7 +22,7 @@ plans:
configuration:
JENKINS_USERNAME:
label: "Jenkins username"
- value: "CIVO:ALPHANUMERIC(8)"
+ value: "KUBEMART:ALPHANUMERIC(8)"
JENKINS_PASSWORD:
label: "Jenkins password"
- value: "CIVO:ALPHANUMERIC(30)"
+ value: "KUBEMART:ALPHANUMERIC(30)"
diff --git a/jenkins/post_install.md b/jenkins/post_install.md
index d28b150e..cacfdd7c 100644
--- a/jenkins/post_install.md
+++ b/jenkins/post_install.md
@@ -4,11 +4,12 @@
By default external access to the Jenkins UI port isn't available. This is easily changed by applying the following YAML to apply ingress via traefik to your cluster with `kubectl apply -f jenkins-ingress.yaml` (or whatever you call the file containing the contents below):
-```
+```yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: jenkins-ingress
+ namespace: jenkins
spec:
rules:
- host: jenkins.your-cluster-id.k8s.civo.com
@@ -19,7 +20,7 @@ spec:
servicePort: 8080
```
-This will open up http://jenkins.YOUR_CLUSTER_ID.k8s.civo.com to the whole world. You should lock this down in the [firewall](https://www.civo.com/account/firewalls) automatically created in Civo for your Kubernetes cluster. Locking down the firewall will only affect access from OUTSIDE of your Kubernetes cluster, access from your applications within Kubernetes will not be affected.
+This will open up http://jenkins.DOMAIN_NAME to the whole world. You should lock this down in the [firewall](https://www.civo.com/account/firewalls) automatically created in Civo for your Kubernetes cluster. Locking down the firewall will only affect access from OUTSIDE of your Kubernetes cluster, access from your applications within Kubernetes will not be affected.
### Usage instruction
diff --git a/joomla/app.yaml b/joomla/app.yaml
index b0d13cee..27ce400c 100644
--- a/joomla/app.yaml
+++ b/joomla/app.yaml
@@ -1,3 +1,13 @@
+# ********
+# README
+# ********
+# When you are updating Joomla image e.g. from 3.9.22 to 3.9.24,
+# please also update the version in the init container. There are
+# two (3) occurrence of version number in this file. Update them all.
+# Please also update the download link inside the init container
+# e.g. 3-9-24 for 3.9.24 version.
+# Tip: use `Ctrl/Cmd + F` to search them.
+
apiVersion: cert-manager.io/v1alpha2
kind: ClusterIssuer
metadata:
@@ -13,17 +23,18 @@ spec:
name: letsencrypt-prod-joomla
# Enable the HTTP-01 challenge provider
solvers:
- - http01:
- ingress:
- class: traefik
+ - http01:
+ ingress:
+ class: traefik
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: joomla-pv-claim
+ namespace: joomla
spec:
accessModes:
- - ReadWriteOnce
+ - ReadWriteOnce
resources:
requests:
storage: $VOLUME_SIZE
@@ -32,6 +43,7 @@ apiVersion: v1
kind: Service
metadata:
name: joomla-service
+ namespace: joomla
spec:
selector:
app: joomla
@@ -44,6 +56,7 @@ apiVersion: apps/v1
kind: Deployment
metadata:
name: joomla
+ namespace: joomla
labels:
app: joomla
spec:
@@ -58,49 +71,69 @@ spec:
labels:
app: joomla
spec:
+ initContainers:
+ - name: update-joomla-files
+ image: joomla:3.9.24
+ command: ["sh", "-c"]
+ args:
+ - if test -f "configuration.php"; then
+ echo "--- start ---";
+ echo "Date & time - $(date)";
+ echo "Current directory - $(pwd)";
+ echo "User - $(whoami)";
+ curl -L https://downloads.joomla.org/cms/joomla3/3-9-24/Joomla_3-9-24-Stable-Full_Package.zip?format=zip --output joomla.zip;
+ apt-get update -y && apt-get install -y unzip;
+ unzip -o joomla.zip;
+ rm -rf joomla.zip;
+ rm -rf installation;
+ chown -R www-data:www-data .;
+ head administrator/manifests/files/joomla.xml;
+ echo "--- end ---";
+ fi;
+ volumeMounts:
+ - name: joomla-persistent-storage
+ mountPath: /var/www/html
containers:
- name: joomla
image: joomla:3.9.24
imagePullPolicy: IfNotPresent
ports:
- - containerPort: 80
- protocol: TCP
+ - containerPort: 80
+ protocol: TCP
volumeMounts:
- - name: joomla-persistent-storage
- mountPath: /var/www/html
+ - name: joomla-persistent-storage
+ mountPath: /var/www/html
env:
- - name: JOOMLA_DB_HOST
- value: mariadb
- - name: JOOMLA_DB_PASSWORD
- valueFrom:
- secretKeyRef:
- name: mysql-pass
- key: MYSQL_ROOT_PASSWORD
+ - name: JOOMLA_DB_HOST
+ value: mariadb.mariadb
+ - name: JOOMLA_DB_PASSWORD
+ valueFrom:
+ secretKeyRef:
+ name: mysql-pass
+ key: MYSQL_ROOT_PASSWORD
volumes:
- - name: joomla-persistent-storage
- persistentVolumeClaim:
- claimName: joomla-pv-claim
+ - name: joomla-persistent-storage
+ persistentVolumeClaim:
+ claimName: joomla-pv-claim
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod-joomla
- ingress.kubernetes.io/ssl-redirect: "true"
+ ingress.kubernetes.io/ssl-redirect: "true"
name: joomla
+ namespace: joomla
spec:
tls:
- hosts:
- - joomla.$CLUSTER_ID.k8s.civo.com
- secretName: letsencrypt-prod-joomla
+ - joomla.$DOMAIN_NAME
+ secretName: letsencrypt-prod-joomla
rules:
- - host: joomla.$CLUSTER_ID.k8s.civo.com
- http:
- paths:
- - backend:
- serviceName: joomla-service
- servicePort: 80
-
-
-
+ - host: joomla.$DOMAIN_NAME
+ http:
+ paths:
+ - backend:
+ serviceName: joomla-service
+ servicePort: 80
diff --git a/joomla/manifest.yaml b/joomla/manifest.yaml
index 5711100c..ca2c9cde 100644
--- a/joomla/manifest.yaml
+++ b/joomla/manifest.yaml
@@ -1,5 +1,6 @@
---
name: Joomla
+namespace: joomla
version: 3.9.24
maintainer: keith@hubner.co.uk, amit2cha@gmail.com
description: Popular open source content management system (CMS)
@@ -22,9 +23,9 @@ plans:
VOLUME_SIZE:
value: 20Gi
configuration:
- CLUSTER_ID:
+ DOMAIN_NAME:
label: "Cluster ID"
- value: "CIVO:CLUSTER_ID"
+ value: "KUBEMART:DOMAIN_NAME"
EMAIL_ADDRESS:
label: "Email Address"
- value: "CIVO:EMAIL_ADDRESS"
+ value: "KUBEMART:EMAIL_ADDRESS"
diff --git a/joomla/post_install.md b/joomla/post_install.md
index a13dded7..7f563823 100644
--- a/joomla/post_install.md
+++ b/joomla/post_install.md
@@ -1,15 +1,24 @@
-## Joomla
+## Joomla
### Usage instructions
+### DB Root Password
+
+To retrieve MariaDB root password, run:
+
+```
+$ kubectl -n mariadb get secret mysql-pass -o=jsonpath='{.data.MYSQL_ROOT_PASSWORD}' | base64 -d
+```
+
### DB Setup
+
Before running the setup wizard you will need to create a database and user account in mariadb
```
-$ kubectl exec -it svc/mariadb -- /bin/sh
+$ kubectl -n mariadb exec -it svc/mariadb -- /bin/sh
# mysql -u root -p
-Enter password: YOUR_ROOT_PASSWORD_HERE
+Enter password: enter_db_root_password_here
MariaDB [(none)]> CREATE DATABASE joomla_db;
MariaDB [(none)]> CREATE USER joomla_user identified by 'strong-password';
@@ -20,12 +29,10 @@ MariaDB [(none)]> GRANT ALL ON joomla_db.* TO joomla_user;
An ingress is automatically created during the application install. A certificate using cert manager and lets-encrypt is also applied automatically and registered against your Civo email address and the generated domain name.
-You can access this (replacing the clusterID with your own) via: https://joomla.YOUR_CLUSTER_ID.k8s.civo.com
+You can access this via: https://joomla.DOMAIN_NAME
###
-You should now see the setup page where you can enter the database details created above.
-> Note the database server is called mariadb
-
-
+You should now see the setup page where you can enter the database details created above.
+> Note the database server is called `mariadb.mariadb`
diff --git a/joomla/pre_install.sh b/joomla/pre_install.sh
new file mode 100644
index 00000000..b7912df1
--- /dev/null
+++ b/joomla/pre_install.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+# Create namespace
+kubectl create ns joomla
+
+# Copy DB secret from mariadb namespace.
+# Note: the middle "grep" is to remove source "mariadb" namespace from the YAML.
+kubectl get secret mysql-pass -n mariadb -o yaml | grep -v '^\s*namespace:\s' | kubectl apply -n joomla -f -
diff --git a/keptn/install.sh b/keptn/install.sh
old mode 100644
new mode 100755
index 5daede97..f5afac8a
--- a/keptn/install.sh
+++ b/keptn/install.sh
@@ -4,4 +4,4 @@
curl -o keptn.tgz https://storage.googleapis.com/keptn-installer/keptn-0.8.3.tgz
# install the downloaded keptn helm chart
-helm upgrade keptn keptn.tgz --install -n keptn --create-namespace --wait --version=0.8.3 --set=control-plane.apiGatewayNginx.type=LoadBalancer --timeout 10m
\ No newline at end of file
+helm upgrade keptn keptn.tgz --install -n keptn --create-namespace --wait --version=0.8.3 --set=control-plane.apiGatewayNginx.type=LoadBalancer --timeout 10m
diff --git a/keptn/manifest.yaml b/keptn/manifest.yaml
index f42676fa..0f68f853 100644
--- a/keptn/manifest.yaml
+++ b/keptn/manifest.yaml
@@ -1,6 +1,7 @@
---
name: keptn
title: Keptn
+namespace: keptn
version: "0.8.3"
maintainer: gabriel.tanner@dynatrace.com, sangambiradar@hotmail.com
description: Keptn is a control plane for continuous delivery and automated operations. Traefik must not be installed since Keptn exposes itself via Nginx.
diff --git a/keptn/post_install.md b/keptn/post_install.md
index a26b31f1..b52a5f84 100644
--- a/keptn/post_install.md
+++ b/keptn/post_install.md
@@ -3,33 +3,36 @@
### Start using Keptn
1. Download the Keptn CLI:
- ```
- curl -sL https://get.keptn.sh | sudo -E bash
- ```
-1. Before you connect your CLI to your Keptn installation in Civo, make sure that Keptn is ready.
+ ```
+ curl -sL https://get.keptn.sh | sudo -E bash
+ ```
- ```
- kubectl get deploy -n keptn
- ```
+2. Before you connect your CLI to your Keptn installation in Civo, make sure that Keptn is ready.
- If all deployments are ready and available, please proceed to the next step.
+ ```
+ kubectl get deploy -n keptn
+ ```
+ If all deployments are ready and available, please proceed to the next step.
-1. Connect the CLI to the Keptn installation
- ```
- KEPTN_ENDPOINT=http://$(kubectl -n keptn get service api-gateway-nginx -o jsonpath='{$.status.loadBalancer.ingress[0].ip}')/api
- KEPTN_API_TOKEN=$(kubectl get secret keptn-api-token -n keptn -ojsonpath={.data.keptn-api-token} | base64 --decode)
- keptn auth --endpoint=$KEPTN_ENDPOINT --api-token=$KEPTN_API_TOKEN
- ```
+3. Connect the CLI to the Keptn installation
+
+ ```
+ KEPTN_ENDPOINT=http://$(kubectl -n keptn get service api-gateway-nginx -o jsonpath='{$.status.loadBalancer.ingress[0].ip}')/api
+ KEPTN_API_TOKEN=$(kubectl get secret keptn-api-token -n keptn -ojsonpath={.data.keptn-api-token} | base64 --decode)
-1. Access the bridge via:
- ```
- keptn configure bridge --output
- ```
+ keptn auth --endpoint=$KEPTN_ENDPOINT --api-token=$KEPTN_API_TOKEN
+ ```
-1. Follow the [tutorials](https://tutorials.keptn.sh/?cat=quality-gates) to get started! Please note that Keptn is already installed and these parts of the tutorials can be skipped :)
+4. Access the bridge via:
+
+ ```
+ keptn configure bridge --output
+ ```
+
+5. Follow the [tutorials](https://tutorials.keptn.sh/?cat=quality-gates) to get started! Please note that Keptn is already installed and these parts of the tutorials can be skipped :)
## Documentation and tutorials
diff --git a/keptn/uninstall.sh b/keptn/uninstall.sh
new file mode 100644
index 00000000..9e035613
--- /dev/null
+++ b/keptn/uninstall.sh
@@ -0,0 +1,18 @@
+#!/bin/bash
+
+# ============================================================================================
+# Create a kubeconfig file from daemon's service account
+# https://docs.oracle.com/en-us/iaas/Content/ContEng/Tasks/contengaddingserviceaccttoken.htm
+# ============================================================================================
+TOKENNAME=`kubectl -n kubemart-system get serviceaccount/kubemart-daemon-svc-acc -o jsonpath='{.secrets[0].name}'`
+TOKEN=`kubectl -n kubemart-system get secret $TOKENNAME -o jsonpath='{.data.token}'| base64 --decode`
+
+kubectl config set-credentials kubemart-daemon-svc-acc --token=$TOKEN
+kubectl config set-context ephemeral --user=kubemart-daemon-svc-acc
+kubectl config use-context ephemeral
+
+# ============================================================================================
+# Uninstall Keptn
+# ============================================================================================
+curl -sL https://get.keptn.sh | bash
+keptn uninstall --yes
diff --git a/kube-hunter/manifest.yaml b/kube-hunter/manifest.yaml
index b0bd4ba5..656b130a 100644
--- a/kube-hunter/manifest.yaml
+++ b/kube-hunter/manifest.yaml
@@ -1,5 +1,6 @@
---
name: kube-hunter
+namespace: kube-hunter
version: latest
maintainer: "@milindchawre"
description: kube-hunter is an open-source tool that hunts for security issues in your Kubernetes clusters.
diff --git a/kube-hunter/post_install.md b/kube-hunter/post_install.md
index 4338f14a..5f80f01b 100644
--- a/kube-hunter/post_install.md
+++ b/kube-hunter/post_install.md
@@ -5,9 +5,11 @@
Here we run kube-hunter in a pod within the cluster. This gives an indication of how exposed your cluster would be in the event that one of your application pods is compromised (through a software vulnerability, for example).
Check the logs of the kube-hunter pod to see the results.
+
```
# Get the pod name
$ kubectl -n kube-hunter describe job kube-hunter
+
# Check the logs
$ kubectl -n kube-hunter logs
```
diff --git a/kube-scan/manifest.yaml b/kube-scan/manifest.yaml
index d6577af5..f43ffc3b 100644
--- a/kube-scan/manifest.yaml
+++ b/kube-scan/manifest.yaml
@@ -1,5 +1,6 @@
---
name: kube-scan
+namespace: kube-scan
version: v20.5
maintainer: "@milindchawre"
description: Kube-scan is risk assessment tool for your kubernetes cluster.
diff --git a/kube-scan/post_install.md b/kube-scan/post_install.md
index 166515eb..b9d06457 100644
--- a/kube-scan/post_install.md
+++ b/kube-scan/post_install.md
@@ -3,9 +3,11 @@
### Usage instruction
We use `kubectl port-forward` to expose kube-scan UI.
+
```
-kubectl port-forward --namespace kube-scan svc/kube-scan-ui 8080:80
+$ kubectl port-forward --namespace kube-scan svc/kube-scan-ui 8080:80
```
+
Now access the kube-scan UI at `http://localhost:8080`
To know more, check the [official guide](https://github.com/octarinesec/kube-scan).
diff --git a/kubei/manifest.yaml b/kubei/manifest.yaml
index 7fb22964..76c9b412 100644
--- a/kubei/manifest.yaml
+++ b/kubei/manifest.yaml
@@ -1,5 +1,6 @@
---
name: Kubei
+namespace: kubei
version: 1.0.7
maintainer: "@milindchawre"
description: Kubei is a vulnerabilities scanning tool that allows users to get an accurate and immediate risk assessment of their kubernetes clusters.
diff --git a/kubeless/manifest.yaml b/kubeless/manifest.yaml
index 1e98cc14..a8572ac7 100644
--- a/kubeless/manifest.yaml
+++ b/kubeless/manifest.yaml
@@ -1,4 +1,5 @@
name: Kubeless
+namespace: kubeless
version: 1.0.5
maintainer: "@gilsdav"
description: "Kubeless is a Kubernetes-native serverless framework that lets you deploy small bits of code without having to worry about the underlying infrastructure."
diff --git a/kubeless/post_install.md b/kubeless/post_install.md
index 4943f8a1..0b2b22cb 100644
--- a/kubeless/post_install.md
+++ b/kubeless/post_install.md
@@ -5,7 +5,7 @@
By default external access to the Kubeless UI isn't available. This is easily changed by applying the following YAML to your cluster with `kubectl apply -f kubeless-ingress.yaml` (or whatever you call the file containing the contents below):
-```
+```yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
@@ -32,7 +32,7 @@ This will open up `http://ui.kubeless.` to the whole world.
By default external access to the functions isn't available. This is easily changed by applying the following YAML to your cluster with `kubectl apply -f kubeless-functions-ingress.yaml` (or whatever you call the file containing the contents below):
-```
+```yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
@@ -63,4 +63,5 @@ This will open up
to the whole world.
#### Update
+
The same creation `apply` command can be used to update ingress configuration after adding a new function path.
diff --git a/kubeless/uninstall.sh b/kubeless/uninstall.sh
new file mode 100644
index 00000000..644ab755
--- /dev/null
+++ b/kubeless/uninstall.sh
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+# Init version
+export RELEASE=v1.0.5
+
+# Install Kubeless
+kubectl delete -f https://github.com/kubeless/kubeless/releases/download/$RELEASE/kubeless-$RELEASE.yaml
+
+# Install Kubeless UI
+kubectl delete -f https://raw.githubusercontent.com/kubeless/kubeless-ui/master/k8s.yaml
+
+# Delete namespace
+kubectl delete ns kubeless
diff --git a/kubenav/app.yaml b/kubenav/app.yaml
deleted file mode 100644
index 61b38463..00000000
--- a/kubenav/app.yaml
+++ /dev/null
@@ -1,14 +0,0 @@
-apiVersion: v1
-kind: Namespace
-metadata:
- name: kubenav
----
-apiVersion: helm.cattle.io/v1
-kind: HelmChart
-metadata:
- name: kubenav
- namespace: kube-system
-spec:
- chart: kubenav
- targetNamespace: kubenav
- repo: https://kubenav.github.io/helm-repository
diff --git a/kubenav/install.sh b/kubenav/install.sh
new file mode 100644
index 00000000..d667aa2c
--- /dev/null
+++ b/kubenav/install.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+kubectl create ns kubenav
+
+helm repo add kubenav https://kubenav.github.io/helm-repository
+
+helm repo update
+
+helm upgrade --install \
+ kubenav kubenav/kubenav \
+ --namespace kubenav \
+ --version v1.1.0
diff --git a/kubenav/manifest.yaml b/kubenav/manifest.yaml
index ff2a834a..edf646e0 100644
--- a/kubenav/manifest.yaml
+++ b/kubenav/manifest.yaml
@@ -1,4 +1,5 @@
name: Kubenav
+namespace: kubenav
version: "3.1.0"
maintainer: "@si458"
description: "kubenav is the navigator for your Kubernetes clusters right in your browser"
diff --git a/kubenav/uninstall.sh b/kubenav/uninstall.sh
index 042ae3bb..dde40f59 100644
--- a/kubenav/uninstall.sh
+++ b/kubenav/uninstall.sh
@@ -1,7 +1,3 @@
#!/bin/bash
-# Delete the app
-helm delete -f app.yaml
-
-# Delete the namespace
-kubectl delete namespace kubenav
+helm --namespace kubenav delete kubenav
diff --git a/kubernetes-dashboard/manifest.yaml b/kubernetes-dashboard/manifest.yaml
index 91ae7f49..f403b12c 100644
--- a/kubernetes-dashboard/manifest.yaml
+++ b/kubernetes-dashboard/manifest.yaml
@@ -1,5 +1,6 @@
---
name: kubernetes-dashboard
+namespace: kubernetes-dashboard
title: "Kubernetes Dashboard"
version: v2.3.1
maintainer: morgan.lane@outlook.com
diff --git a/kubernetes-dashboard/post_install.md b/kubernetes-dashboard/post_install.md
index 74a85c86..a6411c44 100644
--- a/kubernetes-dashboard/post_install.md
+++ b/kubernetes-dashboard/post_install.md
@@ -5,14 +5,15 @@
In order to access the dashboard, you must obtain the bearer token for the admin service account. To do this, run the following command:
```
-kubectl -n kubernetes-dashboard describe secret admin-user-token | grep ^token
+$ SECRET_NAME=$(kubectl -n kubernetes-dashboard get secret | awk '/^admin-user-token-/{print $1}')
+$ TOKEN=$(kubectl -n kubernetes-dashboard get secret $SECRET_NAME -o jsonpath='{.data.token}' | base64 -d)
+$ echo $TOKEN
```
Once you have that token, you can do a port forward by running:
```
-kubectl -n kubernetes-dashboard port-forward svc/kubernetes-dashboard 8000:443
-
+$ kubectl -n kubernetes-dashboard port-forward svc/kubernetes-dashboard 8000:443
```
The dashboard will now be accessible at the following url:
diff --git a/linkerd/manifest.yaml b/linkerd/manifest.yaml
index b10aae32..0096ad84 100644
--- a/linkerd/manifest.yaml
+++ b/linkerd/manifest.yaml
@@ -1,5 +1,6 @@
---
name: Linkerd
+namespace: linkerd
version: Latest
maintainer: hello@buoyant.io
description: Linkerd is a service mesh, giving you runtime debugging, observability, reliability, and security.
@@ -21,4 +22,4 @@ plans:
- label: "Linkerd with Dashboard & Jaeger"
configuration:
LINKERD:
- value: theworks
\ No newline at end of file
+ value: theworks
diff --git a/linkerd/uninstall.sh b/linkerd/uninstall.sh
new file mode 100755
index 00000000..e9400747
--- /dev/null
+++ b/linkerd/uninstall.sh
@@ -0,0 +1,19 @@
+#!/bin/bash
+
+curl -sL https://run.linkerd.io/install | sh
+export PATH=$PATH:$HOME/.linkerd2/bin
+
+case $LINKERD in
+ linkerdjaeger)
+ linkerd jaeger uninstall | kubectl delete -f -
+ ;;
+ linkerdviz)
+ linkerd viz uninstall | kubectl delete -f -
+ ;;
+ theworks)
+ linkerd viz uninstall | kubectl delete -f -
+ linkerd jaeger uninstall | kubectl delete -f -
+ ;;
+esac
+
+linkerd uninstall | kubectl delete -f -
diff --git a/litmuschaos/manifest.yaml b/litmuschaos/manifest.yaml
index 200bc8af..aefe7aec 100644
--- a/litmuschaos/manifest.yaml
+++ b/litmuschaos/manifest.yaml
@@ -1,6 +1,7 @@
---
name: LitmusChaos
version: 2.0.15-Beta4
+namespace: litmuschaos
maintainer: gdsoumya@chaosnative.com, sayan@chaosnative.com
description: LitmusChaos is a cloud-native Chaos Engineering framework
url: https://github.com/litmuschaos/litmus
diff --git a/longhorn/install.sh b/longhorn/install.sh
index b66ece63..6146e066 100644
--- a/longhorn/install.sh
+++ b/longhorn/install.sh
@@ -1,4 +1,5 @@
#!/bin/sh
kubectl patch storageclass longhorn -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
+
kubectl patch storageclass local-path -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
diff --git a/longhorn/manifest.yaml b/longhorn/manifest.yaml
index e0ce92d0..acf782a2 100644
--- a/longhorn/manifest.yaml
+++ b/longhorn/manifest.yaml
@@ -1,6 +1,7 @@
---
name: Longhorn
version: 1.1.0
+namespace: longhorn-system
maintainer: hello@civo.com
description: Longhorn is a lightweight, reliable, and powerful distributed block storage system for Kubernetes.
url: https://github.com/longhorn/longhorn
diff --git a/longhorn/post_install.md b/longhorn/post_install.md
index acd10f95..8de25ea7 100644
--- a/longhorn/post_install.md
+++ b/longhorn/post_install.md
@@ -8,7 +8,6 @@ Longhorn requires a minimum of 3 nodes to function, if you attempt to install Lo
By default external access to the Longhorn dashboard isn't available. This is easily changed by applying the following YAML to your cluster with `kubectl apply -f longhorn-service.yaml` (or whatever you call the file containing the contents below):
-
```yaml
kind: Service
apiVersion: v1
@@ -21,16 +20,16 @@ spec:
selector:
app: longhorn-ui
ports:
- - port: 8000
- targetPort: 8000
+ - port: 8000
+ targetPort: 8000
type: LoadBalancer
```
-This will open up http://YOUR_CLUSTER_ID.k8s.civo.com:8000/dashboard to the whole world. You should lock this down in the [firewall](https://www.civo.com/account/firewalls) automatically created in Civo for your Kubernetes cluster. Locking down the firewall will only affect access from OUTSIDE of your Kubernetes cluster, access from your applications within Kubernetes will not be affected.
+This will open up http://DOMAIN_NAME:8000/dashboard to the whole world. You should lock this down in the [firewall](https://www.civo.com/account/firewalls) automatically created in Civo for your Kubernetes cluster. Locking down the firewall will only affect access from OUTSIDE of your Kubernetes cluster, access from your applications within Kubernetes will not be affected.
### Usage instructions
-Longhorn will be set as the default storage class. As such, and PersistentVolumeClaim (pvc) will automatically have storage provisioned with Longhorn's defaults. An example of such a request would be:
+Longhorn will be set as the default storage class. As such, and PersistentVolumeClaim (pvc) will automatically have storage provisioned with Longhorn's defaults. An example of such a request would be:
```yaml
apiVersion: v1
@@ -45,7 +44,7 @@ spec:
storage: 1Gi
```
-If you want to have more control over the longhorm volume properties (replica count, etc), create the PersistentVolume first. An example such as `pv.yaml` could be used:
+If you want to have more control over the longhorm volume properties (replica count, etc), create the PersistentVolume first. An example such as `pv.yaml` could be used:
```yaml
apiVersion: v1
@@ -66,8 +65,8 @@ spec:
driver: io.rancher.longhorn
fsType: ext4
volumeAttributes:
- numberOfReplicates: '2'
- staleReplicaTimeout: '20'
+ numberOfReplicates: "2"
+ staleReplicaTimeout: "20"
volumeHandle: mysql-data
```
diff --git a/longhorn/uninstall.sh b/longhorn/uninstall.sh
new file mode 100755
index 00000000..bf202365
--- /dev/null
+++ b/longhorn/uninstall.sh
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+kubectl patch storageclass longhorn -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
+
+kubectl patch storageclass local-path -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
+
+# https://longhorn.io/docs/1.1.0/deploy/uninstall/#uninstalling-longhorn-using-kubectl
+kubectl create -f https://raw.githubusercontent.com/longhorn/longhorn/v1.1.0/uninstall/uninstall.yaml
+
+kubectl wait --for=condition=complete --timeout=300s job/longhorn-uninstall
+
+kubectl get crds | grep longhorn | cut -d' ' -f1 | xargs -I % sh -c 'kubectl delete crd %'
+
+# https://longhorn.io/docs/1.1.0/deploy/uninstall/#uninstalling-longhorn-using-kubectl
+kubectl delete -f https://raw.githubusercontent.com/longhorn/longhorn/v1.1.0/uninstall/uninstall.yaml
diff --git a/maesh/install.sh b/maesh/install.sh
index 61372f8d..cce09d04 100644
--- a/maesh/install.sh
+++ b/maesh/install.sh
@@ -1,5 +1,12 @@
#!/bin/bash
+kubectl create ns maesh
+
helm repo add maesh https://containous.github.io/maesh/charts
+
helm repo update
-helm install --name=maesh --namespace=maesh maesh/maesh
+
+helm upgrade --install \
+ maesh maesh/maesh \
+ --namespace maesh \
+ --version v1.1.0
diff --git a/maesh/manifest.yaml b/maesh/manifest.yaml
index 34cc2aa1..fc951df4 100644
--- a/maesh/manifest.yaml
+++ b/maesh/manifest.yaml
@@ -1,9 +1,8 @@
---
name: Maesh
+namespace: maesh
version: Latest
maintainer: hello@civo.com
description: Maesh is an easy to configure and non-invasive service mesh that allows visibility and management of the traffic flows.
url: https://mae.sh
-dependencies:
- - Helm
category: architecture
diff --git a/maesh/uninstall.sh b/maesh/uninstall.sh
new file mode 100644
index 00000000..80954fe0
--- /dev/null
+++ b/maesh/uninstall.sh
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+# Uninstall
+helm --namespace maesh delete maesh
+
+# Delete CRDs
+helm repo add maesh https://containous.github.io/maesh/charts
+helm repo update
+helm pull https://containous.github.io/maesh/charts maesh/maesh
+TAR_FILE=$(ls | grep maesh*.tgz)
+echo "Chart file:" $TAR_FILE
+tar -xvf $TAR_FILE
+kubectl delete -f ./maesh/crds
diff --git a/mariadb/app.yaml b/mariadb/app.yaml
index 9441ec45..b406b62f 100644
--- a/mariadb/app.yaml
+++ b/mariadb/app.yaml
@@ -23,7 +23,7 @@ metadata:
namespace: mariadb
spec:
ports:
- - port: 3306
+ - port: 3306
selector:
app: mariadb
clusterIP: None
@@ -45,21 +45,21 @@ spec:
app: mariadb
spec:
containers:
- - image: mariadb:10.4.7
- name: mariadb
- env:
- - name: MYSQL_ROOT_PASSWORD
- valueFrom:
- secretKeyRef:
- name: mysql-pass
- key: MYSQL_ROOT_PASSWORD
- ports:
- - containerPort: 3306
+ - image: mariadb:10.5.8
name: mariadb
- volumeMounts:
- - name: mariadb-persistent-storage
- mountPath: /var/lib/mysql
+ env:
+ - name: MYSQL_ROOT_PASSWORD
+ valueFrom:
+ secretKeyRef:
+ name: mysql-pass
+ key: MYSQL_ROOT_PASSWORD
+ ports:
+ - containerPort: 3306
+ name: mariadb
+ volumeMounts:
+ - name: mariadb-persistent-storage
+ mountPath: /var/lib/mysql
volumes:
- - name: mariadb-persistent-storage
- persistentVolumeClaim:
- claimName: mariadb-pv-claim
+ - name: mariadb-persistent-storage
+ persistentVolumeClaim:
+ claimName: mariadb-pv-claim
diff --git a/mariadb/manifest.yaml b/mariadb/manifest.yaml
index 1eebe4ed..74285e9c 100644
--- a/mariadb/manifest.yaml
+++ b/mariadb/manifest.yaml
@@ -1,6 +1,7 @@
---
name: MariaDB
-version: 10.4.7
+namespace: mariadb
+version: 10.5.8
maintainer: hello@civo.com
description: MariaDB is a community-developed fork of MySQL intended to remain free under the GNU GPL.
url: https://mariadb.com
diff --git a/mariadb/post_install.md b/mariadb/post_install.md
index ac179d5d..e99f2d3e 100644
--- a/mariadb/post_install.md
+++ b/mariadb/post_install.md
@@ -35,6 +35,6 @@ $ kubectl run tmp-shell --generator=run-pod/v1 --rm -i \
/ # mysql -u root -pYOUR_ROOT_PASSWORD_HERE -h mariadb
mysql> CREATE DATABASE my_application;
-mysql> GRANT ALL ON my_application.* to my_user identified
+mysql> GRANT ALL ON my_application.* to my_user identified
by 'super-strong-password-here';
```
diff --git a/mariadb/pre_install.sh b/mariadb/pre_install.sh
old mode 100644
new mode 100755
index baa0adcc..1a61798e
--- a/mariadb/pre_install.sh
+++ b/mariadb/pre_install.sh
@@ -1,10 +1,8 @@
#!/bin/bash
-kubectl create ns mariadb
-cat < CREATE DATABASE nextcloud_db;
MariaDB [(none)]> CREATE USER nc_user identified by 'strong-password';
@@ -20,12 +29,10 @@ MariaDB [(none)]> GRANT ALL ON nextcloud_db.* TO nc_user;
An ingress is automatically created during the application install. A certificate using cert manager and lets-encrypt is also applied automatically and registered against your email address and the generated domain name.
-You can access this via: https://nextcloud.$DOMAIN_NAME
+You can access this via: https://nextcloud.DOMAIN_NAME
###
-You should now see the setup page where you can enter the database details created above.
-> Note the database server is called mariadb
-
-
+You should now see the setup page where you can enter the database details created above.
+> Note the database server is called mariadb
diff --git a/nodered/app.yaml b/nodered/app.yaml
index 403111a8..b0f10e29 100644
--- a/nodered/app.yaml
+++ b/nodered/app.yaml
@@ -10,7 +10,7 @@ metadata:
namespace: nodered
spec:
accessModes:
- - ReadWriteOnce
+ - ReadWriteOnce
resources:
requests:
storage: $VOLUME_SIZE
@@ -61,9 +61,9 @@ spec:
periodSeconds: 30
timeoutSeconds: 5
volumes:
- - name: data
- persistentVolumeClaim:
- claimName: nodered-pv-claim
+ - name: data
+ persistentVolumeClaim:
+ claimName: nodered-pv-claim
---
apiVersion: v1
kind: Service
@@ -72,9 +72,9 @@ metadata:
namespace: nodered
spec:
ports:
- - name: "http-1880"
- port: 1880
- targetPort: web
+ - name: "http-1880"
+ port: 1880
+ targetPort: web
selector:
app: nodered
---
diff --git a/nodered/post_install.md b/nodered/post_install.md
index 593a7959..ca76a0f6 100644
--- a/nodered/post_install.md
+++ b/nodered/post_install.md
@@ -2,7 +2,7 @@
## External Access
-An Ingress is created during the installation process. To access your Node-RED use http://nodered.$DOMAIN_NAME
+An Ingress is created during the installation process. To access your Node-RED use http://nodered.DOMAIN_NAME
If you want to change the hostname or modify the ingress, edit it with
diff --git a/okteto/install.sh b/okteto/install.sh
index 23f3432c..63b73186 100755
--- a/okteto/install.sh
+++ b/okteto/install.sh
@@ -22,7 +22,7 @@ helm repo update
kubectl create namespace okteto --dry-run=client -o yaml | kubectl apply -f -
kubectl apply -f https://charts.okteto.com/crds.yaml
-helm upgrade --install civo okteto/okteto-enterprise --namespace okteto -f https://raw.githubusercontent.com/civo/kubernetes-marketplace/master/okteto/config.yaml --set email="$email" --set adminToken="$adminToken" --set subdomain="$subdomain" --set ingress.ip=$ingress --version 0.9.2
+helm upgrade --install civo okteto/okteto-enterprise --namespace okteto -f https://raw.githubusercontent.com/civo/kubernetes-marketplace/master/okteto/config.yaml --set email="$email" --set adminToken="$adminToken" --set subdomain="$subdomain" --set ingress.ip=$ingress --version 0.9.6
if [ ! $? -eq 0 ]; then
echo 'failed to install okteto-enterprise'
exit 1
diff --git a/okteto/manifest.yaml b/okteto/manifest.yaml
index e9779cf9..8f11aeb0 100644
--- a/okteto/manifest.yaml
+++ b/okteto/manifest.yaml
@@ -1,9 +1,9 @@
---
name: okteto-enterprise
title: "Okteto Enterprise"
-version: 0.9.2
+version: 0.9.6
maintainer: "@rberrelleza"
-description: Development Platform for Microservices, powered by Kubernetes
+description: Development Environments for your Cloud Native Apps, powered by Kubernetes
url: https://okteto.com/enterprise
category: management
configuration:
diff --git a/okteto/post_install.md b/okteto/post_install.md
index d10429dc..c00de41d 100644
--- a/okteto/post_install.md
+++ b/okteto/post_install.md
@@ -1,8 +1,8 @@
## Okteto Enterprise
-Okteto Enterprise is a Developer Platform for Microservices powered by Kubernetes.
+Thank you for deploying [Okteto Enterprise](https://okteto.com/enterprise) to Civo's Kubernetes service.
-Thank you for deploying [Okteto Enterprise](https://okteto.com/enterprise) to Civo's k3s service.
+Okteto Enterprise gives you Development Environments for your Cloud Native Apps, powered by Kubernetes.
## Obtain access
diff --git a/openfaas/manifest.yaml b/openfaas/manifest.yaml
index c1b85e0d..3249bf6f 100644
--- a/openfaas/manifest.yaml
+++ b/openfaas/manifest.yaml
@@ -1,7 +1,5 @@
name: OpenFaaS
version: 0.18.0
-dependencies:
- - Helm
maintainer: "@openfaasltd"
namespace: openfaas
description: "OpenFaaS makes it easy for developers to deploy event-driven functions and microservices to Kubernetes without repetitive, boiler-plate coding."
diff --git a/portainer/post_install.md b/portainer/post_install.md
index 133454f7..fe38a7f0 100644
--- a/portainer/post_install.md
+++ b/portainer/post_install.md
@@ -4,7 +4,6 @@
By default external access to the Portainer isn't available. This is easily changed by applying the following YAML to your cluster with `kubectl apply -f portainer-ingress.yaml` (or whatever you call the file containing the contents below):
-
```
apiVersion: extensions/v1beta1
kind: Ingress
@@ -21,5 +20,4 @@ spec:
servicePort: 9000
```
-
-This will open up http://portainer.$DOMAIN_NAME to the whole world.
+This will open up http://portainer.DOMAIN_NAME to the whole world.
diff --git a/postgresql/post_install.md b/postgresql/post_install.md
index 6ec03bac..d82f2819 100644
--- a/postgresql/post_install.md
+++ b/postgresql/post_install.md
@@ -33,7 +33,7 @@ $ kubectl run tmp-shell --generator=run-pod/v1 --rm -i \
/ # apk update
/ # apk add postgresql-client
/ # psql -U ADMIN_USERNAME -h postgresql postgresdb
-Password for user 12CNT2Eq6i:
+Password for user 12CNT2Eq6i:
psql (11.5)
Type "help" for help.
diff --git a/rabbitmq/manifest.yaml b/rabbitmq/manifest.yaml
index e01ebcba..b10f2bfc 100644
--- a/rabbitmq/manifest.yaml
+++ b/rabbitmq/manifest.yaml
@@ -1,5 +1,6 @@
---
name: RabbitMQ
+namespace: rabbitmq
version: "3.8.8-management"
maintainer: habil@bozali.com
description: RabbitMQ is an open-source message-broker software that originally implemented the Advanced Message Queuing Protocol.
diff --git a/redis/post_install.md b/redis/post_install.md
index e332f3d1..9c67ea5f 100644
--- a/redis/post_install.md
+++ b/redis/post_install.md
@@ -31,7 +31,7 @@ $ kubectl run tmp-shell --generator=run-pod/v1 --rm -i --tty \
/ # apk update
/ # apk add redis
/ # redis-cli -h redis -a YOUR_PASSWORD_HERE
-redis:6379>
+redis:6379>
```
When you quit the shell the pod for this temporary Alpine container will be deleted.
diff --git a/tekton/post_install.md b/tekton/post_install.md
index 46427c76..06f8e3d0 100644
--- a/tekton/post_install.md
+++ b/tekton/post_install.md
@@ -1,6 +1,6 @@
## Tekton
-This marketplace application installs three components of the Tekton Suite. Those are the core Pipeline, along with Triggers and the Dashboard.
+This marketplace application installs three components of the Tekton Suite. Those are the core Pipeline, along with Triggers and the Dashboard.
### Usage Instructions
@@ -20,7 +20,7 @@ kubectl --namespace tekton-pipelines port-forward svc/tekton-dashboard 9097:9097
### Exposing Trigger EventListeners
-Incoming triggers can be exposed through an Ingress. [The core instructions](https://tekton.dev/docs/triggers/exposing-eventlisteners/) can be used with the following modifications:
+Incoming triggers can be exposed through an Ingress. [The core instructions](https://tekton.dev/docs/triggers/exposing-eventlisteners/) can be used with the following modifications:
1. Skip step one under "Using Nginx Ingress", as the Traefik ingress should work
2. Obtain the event-lister with a `kubectl get el -o=jsonpath='{.status.configuration.generatedName}'` command
@@ -42,4 +42,4 @@ Incoming triggers can be exposed through an Ingress. [The core instructions](ht
servicePort: 8080
```
-This will open up http://eventlistenername.YOUR-DOMAIN-NAME to trigger the service. Ensure your event-listener has the necessary interceptor configuration in place to prevent unauthorized triggering of the pipeline.
+This will open up http://eventlistenername.DOMAIN_NAME to trigger the service. Ensure your event-listener has the necessary interceptor configuration in place to prevent unauthorized triggering of the pipeline.
diff --git a/wordpress/app.yaml b/wordpress/app.yaml
index 23bbe2c0..482e806e 100644
--- a/wordpress/app.yaml
+++ b/wordpress/app.yaml
@@ -1,3 +1,11 @@
+# ********
+# README
+# ********
+# When you are updating WordPress image e.g. from 5.5.0 to 5.5.1,
+# please also update the version in the init container. There are
+# three (3) occurrence of version number in this file. Update them all.
+# Tip: use `Ctrl/Cmd + F` to search them.
+
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
@@ -5,7 +13,7 @@ metadata:
namespace: wordpress
spec:
accessModes:
- - ReadWriteOnce
+ - ReadWriteOnce
resources:
requests:
storage: $VOLUME_SIZE
@@ -16,6 +24,8 @@ metadata:
name: wordpress
namespace: wordpress
spec:
+ strategy:
+ type: Recreate
replicas: 1
selector:
matchLabels:
@@ -51,34 +61,55 @@ spec:
periodSeconds: 10
timeoutSeconds: 5
initContainers:
- - name: prepare-ssl-config
- image: busybox
- command: ["sh", "-c"]
- args:
- - if [ ! -e /var/www/html/civo-init.sh ]; then
- WP_CONFIG_FILE=/var/www/html/wp-config-sample.php;
-
- echo "LINES=\$(cat $WP_CONFIG_FILE | wc -l)" >> /var/www/html/civo-init.sh;
- echo "let LINES=\$LINES-2" >> /var/www/html/civo-init.sh;
- echo "head -\${LINES} wp-config-sample.php > /tmp/head_temp.txt" >> /var/www/html/civo-init.sh;
- echo "tail -3 wp-config-sample.php > /tmp/tail_temp.txt" >> /var/www/html/civo-init.sh;
- echo "echo 'if (isset(\$_SERVER[\"HTTP_X_FORWARDED_PROTO\"]) && \$_SERVER[\"HTTP_X_FORWARDED_PROTO\"] === \"https\") {' >> /tmp/head_temp.txt" >> /var/www/html/civo-init.sh;
- echo "echo ' \$_SERVER[\"HTTPS\"] = \"on\";' >> /tmp/head_temp.txt" >> /var/www/html/civo-init.sh;
- echo "echo '}' >> /tmp/head_temp.txt" >> /var/www/html/civo-init.sh;
- echo "cat /tmp/head_temp.txt > $WP_CONFIG_FILE" >> /var/www/html/civo-init.sh;
- echo "cat /tmp/tail_temp.txt >> $WP_CONFIG_FILE" >> /var/www/html/civo-init.sh;
- echo "rm -f /tmp/head_temp.txt /tmp/tail_temp.txt" >> /var/www/html/civo-init.sh;
+ - name: update-wordpress-files
+ image: wordpress:5.5.3
+ command: ["sh", "-c"]
+ args:
+ - if test -f "/var/www/html/wp-config.php"; then
+ echo "--- start ---";
+ echo "Date & time - $(date)";
+ echo "Current directory - $(pwd)";
+ echo "User - $(whoami)";
+ curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar;
+ php wp-cli.phar --info;
+ chmod +x wp-cli.phar;
+ mv wp-cli.phar /usr/local/bin/wp;
+ wp core download --force --allow-root --version=5.5.3;
+ chown -R www-data:www-data .;
+ echo "--- end ---";
+ fi;
+ volumeMounts:
+ - mountPath: /var/www/html
+ name: data
+ subPath: html
+ - name: prepare-ssl-config
+ image: busybox
+ command: ["sh", "-c"]
+ args:
+ - if [ ! -e /var/www/html/civo-init.sh ]; then
+ WP_CONFIG_FILE=/var/www/html/wp-config-sample.php;
- chmod +x /var/www/html/civo-init.sh;
- fi;
- volumeMounts:
- - mountPath: /var/www/html
- name: data
- subPath: html
+ echo "LINES=\$(cat $WP_CONFIG_FILE | wc -l)" >> /var/www/html/civo-init.sh;
+ echo "let LINES=\$LINES-2" >> /var/www/html/civo-init.sh;
+ echo "head -\${LINES} wp-config-sample.php > /tmp/head_temp.txt" >> /var/www/html/civo-init.sh;
+ echo "tail -3 wp-config-sample.php > /tmp/tail_temp.txt" >> /var/www/html/civo-init.sh;
+ echo "echo 'if (isset(\$_SERVER[\"HTTP_X_FORWARDED_PROTO\"]) && \$_SERVER[\"HTTP_X_FORWARDED_PROTO\"] === \"https\") {' >> /tmp/head_temp.txt" >> /var/www/html/civo-init.sh;
+ echo "echo ' \$_SERVER[\"HTTPS\"] = \"on\";' >> /tmp/head_temp.txt" >> /var/www/html/civo-init.sh;
+ echo "echo '}' >> /tmp/head_temp.txt" >> /var/www/html/civo-init.sh;
+ echo "cat /tmp/head_temp.txt > $WP_CONFIG_FILE" >> /var/www/html/civo-init.sh;
+ echo "cat /tmp/tail_temp.txt >> $WP_CONFIG_FILE" >> /var/www/html/civo-init.sh;
+ echo "rm -f /tmp/head_temp.txt /tmp/tail_temp.txt" >> /var/www/html/civo-init.sh;
+
+ chmod +x /var/www/html/civo-init.sh;
+ fi;
+ volumeMounts:
+ - mountPath: /var/www/html
+ name: data
+ subPath: html
volumes:
- - name: data
- persistentVolumeClaim:
- claimName: wordpress-pv-claim
+ - name: data
+ persistentVolumeClaim:
+ claimName: wordpress-pv-claim
---
apiVersion: v1
kind: Service
@@ -87,9 +118,9 @@ metadata:
namespace: wordpress
spec:
ports:
- - name: "http-80"
- port: 80
- targetPort: web
+ - name: "http-80"
+ port: 80
+ targetPort: web
selector:
app: wordpress
---
@@ -100,9 +131,9 @@ metadata:
namespace: wordpress
spec:
rules:
- - host: wordpress.$CLUSTER_ID.k8s.civo.com
- http:
- paths:
- - backend:
- serviceName: wordpress
- servicePort: 80
+ - host: wordpress.$DOMAIN_NAME
+ http:
+ paths:
+ - backend:
+ serviceName: wordpress
+ servicePort: 80
diff --git a/wordpress/post_install.md b/wordpress/post_install.md
index 131cea48..eafa0066 100644
--- a/wordpress/post_install.md
+++ b/wordpress/post_install.md
@@ -1,5 +1,13 @@
# WordPress
+## DB Root Password
+
+To retrieve MariaDB root password, run:
+
+```
+$ kubectl -n mariadb get secret mysql-pass -o=jsonpath='{.data.MYSQL_ROOT_PASSWORD}' | base64 -d
+```
+
## Database Creation
You'll need to create a user and a database in MariaDB before you can configure your Wordpress.
@@ -8,7 +16,7 @@ You'll need to create a user and a database in MariaDB before you can configure
$ kubectl exec -it svc/mariadb -- /bin/sh
# mysql -u root -p
-Enter password: YOUR_ROOT_PASSWORD_HERE
+Enter password: enter_db_root_password_here
MariaDB [(none)]> CREATE DATABASE wordpress_db;
MariaDB [(none)]> CREATE USER wordpress_user identified by 'strong-password';
@@ -19,7 +27,7 @@ MariaDB [(none)]> GRANT ALL ON wordpress_db.* TO wordpress_user;
Traefik works as a proxy server, so you need to alert WordPress of that fact. Without this configuration you'll see a **too many redirects** error when accessing the page.
-To simplify this configuration when the WordPress is installed an script is created to add the required lines to the *wp-config-sample.php*
+To simplify this configuration when the WordPress is installed an script is created to add the required lines to the _wp-config-sample.php_
Use the following command to execute it when your WordPress pod reach running state.
@@ -27,7 +35,7 @@ Use the following command to execute it when your WordPress pod reach running st
kubectl exec -it svc/wordpress -- bash -c /var/www/html/civo-init.sh
```
-After the script execution the following lines will be added to the *wp-config-sample.php* file, and they will be present in wp-config.php after wizard setup.
+After the script execution the following lines will be added to the _wp-config-sample.php_ file, and they will be present in wp-config.php after wizard setup.
```
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
@@ -41,17 +49,18 @@ The first time you access to your WordPress a wizard setup will be loaded. In th
Based on the database creation example above, the fields would be filled like this:
-* **Database Name:** *wordpress_db*
-* **Username:** *wordpress_user*
-* **Password:** *strong-password*
-* **Database Host:** *mariadb*
-* **Table Prefix:** *wp_*
+- **Database Name:** _wordpress_db_
+- **Username:** _wordpress_user_
+- **Password:** _strong-password_
+- **Database Host:** _mariadb_
+- **Table Prefix:** _wp\__
## External Access
-An Ingress is created during the installation process. To access your wordpress use http://wordpress.YOUR_DOMAIN_NAME
+An Ingress is created during the installation process. To access your wordpress use http://wordpress.DOMAIN_NAME
If you want to change the hostname or modify the ingress, edit it with
+
```
kubectl edit ingress wordpress
```
diff --git a/z-app-1/app.yaml b/z-app-1/app.yaml
new file mode 100644
index 00000000..0ee91f87
--- /dev/null
+++ b/z-app-1/app.yaml
@@ -0,0 +1,25 @@
+apiVersion: v1
+kind: Namespace
+metadata:
+ name: z-app-1
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: nginx
+ namespace: z-app-1
+spec:
+ selector:
+ matchLabels:
+ app: nginx
+ replicas: 1
+ template:
+ metadata:
+ labels:
+ app: nginx
+ spec:
+ containers:
+ - name: nginx
+ image: nginx:latest
+ ports:
+ - containerPort: 80
diff --git a/z-app-1/logo.png b/z-app-1/logo.png
new file mode 100644
index 00000000..a8809467
Binary files /dev/null and b/z-app-1/logo.png differ
diff --git a/z-app-1/manifest.yaml b/z-app-1/manifest.yaml
new file mode 100644
index 00000000..19361ae1
--- /dev/null
+++ b/z-app-1/manifest.yaml
@@ -0,0 +1,10 @@
+---
+name: z-app-1
+title: Test App 1
+version: "0.0.1"
+maintainer: user@example.com
+description: This is Test App 1 description...
+url: https://www.testapp1.com/
+category: management
+dependencies:
+ - z-app-2
diff --git a/z-app-1/post_install.md b/z-app-1/post_install.md
new file mode 100644
index 00000000..b0047fa4
--- /dev/null
+++ b/z-app-1/post_install.md
@@ -0,0 +1 @@
+None
diff --git a/z-app-2/app.yaml b/z-app-2/app.yaml
new file mode 100644
index 00000000..3d0f6260
--- /dev/null
+++ b/z-app-2/app.yaml
@@ -0,0 +1,25 @@
+apiVersion: v1
+kind: Namespace
+metadata:
+ name: z-app-2
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: nginx
+ namespace: z-app-2
+spec:
+ selector:
+ matchLabels:
+ app: nginx
+ replicas: 1
+ template:
+ metadata:
+ labels:
+ app: nginx
+ spec:
+ containers:
+ - name: nginx
+ image: nginx:latest
+ ports:
+ - containerPort: 80
diff --git a/z-app-2/logo.png b/z-app-2/logo.png
new file mode 100644
index 00000000..7ce2b9a1
Binary files /dev/null and b/z-app-2/logo.png differ
diff --git a/z-app-2/manifest.yaml b/z-app-2/manifest.yaml
new file mode 100644
index 00000000..05459ab4
--- /dev/null
+++ b/z-app-2/manifest.yaml
@@ -0,0 +1,10 @@
+---
+name: z-app-2
+title: Test App 2
+version: "0.0.2"
+maintainer: user@example.com
+description: This is Test App 2 description...
+url: https://www.testapp2.com/
+category: management
+dependencies:
+ - z-app-3
diff --git a/z-app-2/post_install.md b/z-app-2/post_install.md
new file mode 100644
index 00000000..b0047fa4
--- /dev/null
+++ b/z-app-2/post_install.md
@@ -0,0 +1 @@
+None
diff --git a/z-app-3/app.yaml b/z-app-3/app.yaml
new file mode 100644
index 00000000..3563e1ab
--- /dev/null
+++ b/z-app-3/app.yaml
@@ -0,0 +1,25 @@
+apiVersion: v1
+kind: Namespace
+metadata:
+ name: z-app-3
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: nginx
+ namespace: z-app-3
+spec:
+ selector:
+ matchLabels:
+ app: nginx
+ replicas: 1
+ template:
+ metadata:
+ labels:
+ app: nginx
+ spec:
+ containers:
+ - name: nginx
+ image: nginx:latest
+ ports:
+ - containerPort: 80
diff --git a/z-app-3/logo.png b/z-app-3/logo.png
new file mode 100644
index 00000000..8cb88d5e
Binary files /dev/null and b/z-app-3/logo.png differ
diff --git a/z-app-3/manifest.yaml b/z-app-3/manifest.yaml
new file mode 100644
index 00000000..fd17f9fe
--- /dev/null
+++ b/z-app-3/manifest.yaml
@@ -0,0 +1,10 @@
+---
+name: z-app-3
+title: Test App 3
+version: "0.0.3"
+maintainer: user@example.com
+description: This is Test App 3 description...
+url: https://www.testapp3.com/
+category: architecture
+dependencies:
+ - z-app-4
diff --git a/z-app-3/post_install.md b/z-app-3/post_install.md
new file mode 100644
index 00000000..b0047fa4
--- /dev/null
+++ b/z-app-3/post_install.md
@@ -0,0 +1 @@
+None
diff --git a/z-app-4/app.yaml b/z-app-4/app.yaml
new file mode 100644
index 00000000..8995e813
--- /dev/null
+++ b/z-app-4/app.yaml
@@ -0,0 +1,25 @@
+apiVersion: v1
+kind: Namespace
+metadata:
+ name: z-app-4
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: nginx
+ namespace: z-app-4
+spec:
+ selector:
+ matchLabels:
+ app: nginx
+ replicas: 1
+ template:
+ metadata:
+ labels:
+ app: nginx
+ spec:
+ containers:
+ - name: nginx
+ image: nginx:latest
+ ports:
+ - containerPort: 80
diff --git a/z-app-4/logo.png b/z-app-4/logo.png
new file mode 100644
index 00000000..01552702
Binary files /dev/null and b/z-app-4/logo.png differ
diff --git a/z-app-4/manifest.yaml b/z-app-4/manifest.yaml
new file mode 100644
index 00000000..a236ba73
--- /dev/null
+++ b/z-app-4/manifest.yaml
@@ -0,0 +1,8 @@
+---
+name: z-app-4
+title: Test App 4
+version: "0.0.4"
+maintainer: user@example.com
+description: This is Test App 4 description...
+url: https://www.testapp4.com/
+category: architecture
diff --git a/z-app-4/post_install.md b/z-app-4/post_install.md
new file mode 100644
index 00000000..b0047fa4
--- /dev/null
+++ b/z-app-4/post_install.md
@@ -0,0 +1 @@
+None
diff --git a/z-nginx/app.yaml b/z-nginx/app.yaml
new file mode 100644
index 00000000..6e1251d0
--- /dev/null
+++ b/z-nginx/app.yaml
@@ -0,0 +1,30 @@
+apiVersion: v1
+kind: Namespace
+metadata:
+ name: z-nginx
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: nginx
+ namespace: z-nginx
+spec:
+ selector:
+ matchLabels:
+ app: nginx
+ replicas: 3
+ template:
+ metadata:
+ labels:
+ app: nginx
+ spec:
+ containers:
+ - name: nginx
+ image: nginx:latest
+ ports:
+ - containerPort: 80
+ env:
+ - name: RANDOM_WORDS
+ value: $RANDOM_WORDS
+ - name: VERSION
+ value: 0.0.28
diff --git a/z-nginx/logo.png b/z-nginx/logo.png
new file mode 100644
index 00000000..5d542803
Binary files /dev/null and b/z-nginx/logo.png differ
diff --git a/z-nginx/manifest.yaml b/z-nginx/manifest.yaml
new file mode 100644
index 00000000..4d5b12e9
--- /dev/null
+++ b/z-nginx/manifest.yaml
@@ -0,0 +1,13 @@
+---
+name: z-nginx
+title: Nginx Test
+namespace: z-nginx
+version: "0.0.28"
+maintainer: user@example.com
+description: This is Nginx Test app description...
+url: https://www.nginxtestapp.com/
+category: architecture
+configuration:
+ RANDOM_WORDS:
+ label: "Random words"
+ value: "KUBEMART:WORDS(10)"
diff --git a/z-nginx/post_install.md b/z-nginx/post_install.md
new file mode 100644
index 00000000..b0047fa4
--- /dev/null
+++ b/z-nginx/post_install.md
@@ -0,0 +1 @@
+None