Please enable Javascript for better experience...
 
Deploying Nextcloud On AWS Using Amazon EKS
By Keshav Khatore | Jul 9, 2020 | In Articles | Total Views [ 2359 ]
Taged In
(0 Like)
Rate

Amazon Elastic Kubernetes Service 

Amazon Elastic Kubernetes Service (Amazon EKS) is a fully managed Kubernetes service. Customers such as Intel, Snap, Intuit, GoDaddy, and Autodesk trust EKS to run their most sensitive and mission-critical applications because of its security, reliability, and scalability.

Nextcloud

Nextcloud is a suite of client-server software for creating and using file hosting services. Nextcloud is free and open-source, which means that anyone is allowed to install and operate it on their own private server devices.

Pre-requisite

  1. AWS account
  2. AWS CLI
  3. eksctl
  4. kubectl

This software has to be downloaded from the internet and the path has to be added to the system variables.

  1. First, we need to create a Kubernetes cluster on AWS using EKS. There a three ways to do that but, we’ll be using the CLI option. You’ll need an IAM user with Administrator Access or the root user.
  2. Open Command Prompt on Windows OS or any other equivalent program depending on which OS you are using.

aws configure

Use this code and enter the user details along with the region id to login to AWS using CLI.

3. Now we can create the Kubernetes cluster. Create a cluster.yml file that boasts the following code.

Cluster.yml

apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
name: mycluster
region: ap-south-1
nodeGroups:
— name: ng1
desiredCapacity: 2
instanceType: t2.micro
ssh:
publicKeyName: keycloud
— name: ng-mixed
minSize: 1
maxSize: 3
instancesDistribution:
maxPrice: 0.017
instanceTypes: [“t2.micro”] # At least one instance type should be specified
onDemandBaseCapacity: 0
onDemandPercentageAboveBaseCapacity: 50
spotInstancePools: 2 
ssh:
publicKeyName: keycloud

 

This cluster configuration file will create 2 node groups namely ng1 and ng-mixed. To start creating the cluster execute the cluster.yml file.

eksctl create cluster -f cluster.yml

The cluster building process will take some time to finish.

4. Once the cluster is created update the kubeconfig file

aws eks update-kubeconfig --name mycluster

View your Kubernetes config file using

kubectl config view

5. We shall now create the mariadb_deploy.yml file. The file consists of 3 parts- Service, PVC, and Deployment. The deployment consists of the replica set, container specifications, and image details. The PVC will create a request for a persistent volume of size 1GiB. This persistent volume uses EBS( Elastic Block Storage) to store the data. The volume is mounted to the “/var/lib/MySQL” folder since it stores all the data. The last part is the Service. Service

mariadb_deploy.yml

apiVersion: v1
kind: Service
metadata:
name: nextcloud-mariadb
labels:
app: nextcloud
spec:
ports:
- port: 3306
selector:
app: nextcloud
tier: mariadb
clusterIP: None
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mariadb-pv-claim
labels: 
app: nextcloud
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nextcloud-mariadb
labels:
app: nextcloud
spec:
selector:
matchLabels:
app: nextcloud
tier: mariadb
strategy:
type: Recreate
template:
metadata:
labels:
app: nextcloud
tier: mariadb
spec:
containers:
- image: mariadb:latest
name: mariadb
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mariadb-pass
key: password
- name: MYSQL_USER
value: chirag
- name: MYSQL_PASSWORD
valueFrom:
secretKeyRef:
name: mariadbuser-pass
key: password1
- name: MYSQL_DATABASE
value: mydb
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mariadb-ps
mountPath: /var/lib/mysql
volumes:
- name: mariadb-ps
persistentVolumeClaim:
claimName: mariadb-pv-claim

 

6. Since we have created the file for the database, we shall now create the nextcloud_deploy.yml file. Almost the basic structure of the 3 parts remains the same except for a few tweaks. The Service acts as a load balancer and exposes the setup to the outside world.

nextcloud_deploy.yml

apiVersion: v1
kind: Service
metadata:
name: nextcloud
labels:
app: nextcloud
spec:
ports:
- port: 80
nodePort: 30001
selector:
app: nextcloud
tier: frontend
type: LoadBalancer
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nextcloud-pv-claim
labels:
app: nextcloud
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nextcloud
labels:
app: nextcloud
spec:
selector:
matchLabels:
app: nextcloud
tier: frontend
strategy:
type: Recreate
template:
metadata:
labels:
app: nextcloud
tier: frontend
spec:
containers:
- image: nextcloud:latest
name: nextcloud
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mariadb-pass
key: password
- name: MYSQL_PASSWORD
valueFrom:
secretKeyRef:
name: mariadbuser-pass
key: password1
- name: MYSQL_USER
value: chirag
- name: MySQL_DATABASE
value: mydb
ports:
- containerPort: 80
name: nextcloud
volumeMounts:
- name: nextcloud-ps
mountPath: /var/www/html
volumes:
- name: nextcloud-ps
persistentVolumeClaim:
claimName: nextcloud-pv-claim

 

7. Now both the mariadb_deploy.yml and nextcloud_deploy.yml has been created. We shall now create the kustomization.yml file as it lets us deploy the whole setup with just one command and a few other functionalities.

kustomization.yml

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
secretGenerator:
- name: mariadb-pass
literals:
- password=redhat
- name: mariadbuser-pass
literals:
- password1=redhat
resources:
- mariadb_deploy.yml
- nextcloud_deploy.yml

 

8. Deploy the whole setup using this command.

kubectl create -k .

The sign Page login it with Credential

9. We have just launched Nextcloud on AWS using EKS.


Thanks for visiting here. Share this article if you found it useful.
Like Facebook Page https://www.facebook.com/VMwareInsight/
Connect to twitter https://twitter.com/imPranayK
Subscribe my Channel https://www.youtube.com/vmwareinsight
Connect over Linkedin https://in.linkedin.com/in/impranayk
Share this on Social Media

About the Author

Keshav Khatore
Keshav Khatore
Member VMwareInsight.com

Public profile: user/profile/99905478


Follow me

facebook linkedin twitter G+ VMTN youtube

I am Keshav Khatore student of Lovely Professional University, Phagwara, Punjab, India, currently pursuing Masters In Computer Application.I am a Member of Redhat Linux, the biggest network on the planet and it's a glad thing for me to be a piece of such extraordinary and lofty community. I expert in Linux and have certification Red-hat Certified System Administration . For Contact- keshavmah27@gmail.com || LinkedIn- https://www.linkedin.com/in/keshav-khatore/

 
Please SignUp/Login to comment...

Or comment as anonymous...
* Name
* Email ID
Comment
 
Sponsors
 
 
 
 
 
Facebook Likes