본문 바로가기
Infra System

mongodb install on kubernetes

by kellis 2020. 10. 13.

helm을 이용하여 설치했으므로, helm이 설치되어 있어야 합니다. 

 

1. 설치 방법

1. helm으로 mongodb 설치

helm install --name air-mongodb --namespace persistence -f ./mongodb/values.yaml stable/mongodb

이때, name과 namespace의 순서가 중요합니다. namespace가 먼저 나오면 적용되지 않고 default로 지정됩니다.

 

이때 사용한 values.yaml은 아래와 같습니다. 

더보기

## Global Docker image parameters

## Please, note that this will override the image parameters, including dependencies, configured to use the global value

## Current available global Docker image parameters: imageRegistry and imagePullSecrets

##

# global:

#   imageRegistry: myRegistryName

#   imagePullSecrets:

#     - myRegistryKeySecretName

#   storageClass: myStorageClass

 

image:

  ## Bitnami MongoDB registry

  ##

  registry: docker.io

  ## Bitnami MongoDB image name

  ##

  repository: bitnami/mongodb

  ## Bitnami MongoDB image tag

  ## ref: https://hub.docker.com/r/bitnami/mongodb/tags/

  ##

  tag: 4.0.13-debian-9-r22

  ## Specify a imagePullPolicy

  ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images

  ##

  pullPolicy: IfNotPresent

  ## Optionally specify an array of imagePullSecrets.

  ## Secrets must be manually created in the namespace.

  ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/

  ##

  # pullSecrets:

  #   - myRegistryKeySecretName

 

  ## Set to true if you would like to see extra information on logs

  ## It turns on Bitnami debugging in minideb-extras-base

  ## ref:  https://github.com/bitnami/minideb-extras-base

  debug: false

 

## String to partially override mongodb.fullname template (will maintain the release name)

##

# nameOverride:

 

## String to fully override mongodb.fullname template

##

# fullnameOverride:

 

## Init containers parameters:

## volumePermissions: Change the owner and group of the persistent volume mountpoint to runAsUser:fsGroup values from the securityContext section.

##

volumePermissions:

  enabled: false

  image:

    registry: docker.io

    repository: bitnami/minideb

    tag: stretch

    pullPolicy: Always

    ## Optionally specify an array of imagePullSecrets.

    ## Secrets must be manually created in the namespace.

    ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/

    ##

    # pullSecrets:

    #   - myRegistryKeySecretName

  resources: {}

 

## Enable authentication

## ref: https://docs.mongodb.com/manual/tutorial/enable-authentication/

#

usePassword: true

# existingSecret: name-of-existing-secret

 

## MongoDB admin password

## ref: https://github.com/bitnami/bitnami-docker-mongodb/blob/master/README.md#setting-the-root-password-on-first-run

##

mongodbRootPassword: root#

 

## MongoDB custom user and database

## ref: https://github.com/bitnami/bitnami-docker-mongodb/blob/master/README.md#creating-a-user-and-database-on-first-run

##

mongodbUsername: air

mongodbPassword: air#

mongodbDatabase: air-test

 

## Whether enable/disable IPv6 on MongoDB

## ref: https://github.com/bitnami/bitnami-docker-mongodb/blob/master/README.md#enabling/disabling-ipv6

##

mongodbEnableIPv6: false

 

## Whether enable/disable DirectoryPerDB on MongoDB

## ref: https://github.com/bitnami/bitnami-docker-mongodb/blob/master/README.md#enabling/disabling-directoryperdb

##

mongodbDirectoryPerDB: false

 

## MongoDB System Log configuration

## ref: https://github.com/bitnami/bitnami-docker-mongodb#configuring-system-log-verbosity-level

##

mongodbSystemLogVerbosity: 0

mongodbDisableSystemLog: false

 

## MongoDB additional command line flags

##

## Can be used to specify command line flags, for example:

##

## mongodbExtraFlags:

##  - "--wiredTigerCacheSizeGB=2"

mongodbExtraFlags: []

 

## Pod Security Context

## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/

##

securityContext:

  enabled: true

  fsGroup: 1001

  runAsUser: 1001

 

## Kubernetes Cluster Domain

clusterDomain: cluster.local

 

## Kubernetes service type

service:

  ## Specify an explicit service name.

  # name: svc-mongo

  ## Provide any additional annotations which may be required.

  ## The value is evaluated as a template, so, for example, the value can depend on .Release or .Chart

  annotations: {}

  type: NodePort

  # clusterIP: None

  port: 27017

 

  ## Specify the nodePort value for the LoadBalancer and NodePort service types.

  ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport

  ##

  nodePort: 30003

     

  ## Specify the externalIP value ClusterIP service type.

  ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#external-ips

  # externalIPs: []

 

  ## Specify the loadBalancerIP value for LoadBalancer service types.

  ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer

  ##

  # loadBalancerIP:

 

  ## Specify the loadBalancerSourceRanges value for LoadBalancer service types.

  ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service

  ##

  # loadBalancerSourceRanges: []

 

## Setting up replication

## ref: https://github.com/bitnami/bitnami-docker-mongodb#setting-up-a-replication

#

replicaSet:

  ## Whether to create a MongoDB replica set for high availability or not

  enabled: false

  useHostnames: true

 

  ## Name of the replica set

  ##

  name: rs0

 

  ## Key used for replica set authentication

  ##

  # key: key

 

  ## Number of replicas per each node type

  ##

  replicas:

    secondary: 1

    arbiter: 1

 

  ## Pod Disruption Budget

  ## ref: https://kubernetes.io/docs/concepts/workloads/pods/disruptions/

  pdb:

    enabled: true

    minAvailable:

      primary: 1

      secondary: 1

      arbiter: 1

    # maxUnavailable:

      # primary: 1

      # secondary: 1

      # arbiter: 1

 

# Annotations to be added to the deployment or statefulsets

annotations: {}

 

# Additional labels to apply to the deployment or statefulsets

labels: {}

 

# Annotations to be added to MongoDB pods

podAnnotations: {}

 

# Additional pod labels to apply

podLabels: {}

 

## Use an alternate scheduler, e.g. "stork".

## ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/

##

# schedulerName:

 

## Configure resource requests and limits

## ref: http://kubernetes.io/docs/user-guide/compute-resources/

##

resources: {}

# Define separate resources per arbiter, which are less then primary or secondary

# used only when replica set is enabled

resourcesArbiter: {}

# limits:

#   cpu: 500m

#   memory: 512Mi

# requests:

#   cpu: 100m

#   memory: 256Mi

 

## Pod priority

## https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/

# priorityClassName: ""

 

## Node selector

## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#nodeselector

nodeSelector: {}

 

## Affinity

## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity

affinity: {}

# Define separate affinity for arbiter pod

affinityArbiter: {}

 

## Tolerations

## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/

tolerations: []

 

## updateStrategy for MongoDB Primary, Secondary and Arbitrer statefulsets

## ref: https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#update-strategies

updateStrategy:

  type: RollingUpdate

 

## Enable persistence using Persistent Volume Claims

## ref: http://kubernetes.io/docs/user-guide/persistent-volumes/

##

persistence:

  enabled: true

  ## A manually managed Persistent Volume and Claim

  ## Requires persistence.enabled: true

  ## If defined, PVC must be created manually before volume will be bound

  ##

  # existingClaim:

 

  ## The path the volume will be mounted at, useful when using different

  ## MongoDB images.

  ##

  mountPath: /bitnami/mongodb

 

  ## The subdirectory of the volume to mount to, useful in dev environments

  ## and one PV for multiple services.

  ##

  subPath: ""

 

  ## mongodb 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: "-"

  accessModes:

    - ReadWriteOnce

  size: 8Gi

  annotations: {}

 

## Configure the ingress resource that allows you to access the

## MongoDB installation. Set up the URL

## ref: http://kubernetes.io/docs/user-guide/ingress/

##

ingress:

  ## Set to true to enable ingress record generation

  enabled: false

 

  ## Set this to true in order to add the corresponding annotations for cert-manager

  certManager: false

 

  ## Ingress annotations done as key:value pairs

  ## For a full list of possible ingress annotations, please see

  ## ref: https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/nginx-configuration/annotations.md

  ##

  ## If tls is set to true, annotation ingress.kubernetes.io/secure-backends: "true" will automatically be set

  ## If certManager is set to true, annotation kubernetes.io/tls-acme: "true" will automatically be set

  annotations:

  #  kubernetes.io/ingress.class: nginx

 

  ## The list of hostnames to be covered with this ingress record.

  ## Most likely this will be just one host, but in the event more hosts are needed, this is an array

  hosts:

  - name: mongodb.local

    path: /

 

  ## The tls configuration for the ingress

  ## see: https://kubernetes.io/docs/concepts/services-networking/ingress/#tls

  tls:

  - hosts:

      - mongodb.local

    secretName: mongodb.local-tls

 

  secrets:

  ## If you're providing your own certificates, please use this to add the certificates as secrets

  ## key and certificate should start with -----BEGIN CERTIFICATE----- or

  ## -----BEGIN RSA PRIVATE KEY-----

  ##

  ## name should line up with a tlsSecret set further up

  ## If you're using cert-manager, this is unneeded, as it will create the secret for you if it is not set

  ##

  ## It is also possible to create and manage the certificates outside of this helm chart

  ## Please see README.md for more information

  # - name: airflow.local-tls

  #   key:

  #   certificate:

 

## Configure the options for init containers to be run before the main app containers

## are started. All init containers are run sequentially and must exit without errors

## for the next one to be started.

## ref: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/

# extraInitContainers: |

#   - name: do-something

#     image: busybox

#     command: ['do', 'something']

 

## Configure extra options for liveness and readiness probes

## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/#configure-probes)

livenessProbe:

  enabled: true

  initialDelaySeconds: 30

  periodSeconds: 10

  timeoutSeconds: 5

  failureThreshold: 6

  successThreshold: 1

readinessProbe:

  enabled: true

  initialDelaySeconds: 5

  periodSeconds: 10

  timeoutSeconds: 5

  failureThreshold: 6

  successThreshold: 1

 

# Define custom config map with init scripts

initConfigMap: {}

#  name: "init-config-map"

 

## Entries for the MongoDB config file. For documentation of all options, see:

##   http://docs.mongodb.org/manual/reference/configuration-options/

##

configmap:

#  # where and how to store data.

#  storage:

#    dbPath: /bitnami/mongodb/data/db

#    journal:

#      enabled: true

#    directoryPerDB: false

#  # where to write logging data.

#  systemLog:

#    destination: file

#    quiet: false

#    logAppend: true

#    logRotate: reopen

#    path: /opt/bitnami/mongodb/logs/mongodb.log

#    verbosity: 0

#  # network interfaces

#  net:

#    port: 27017

#    unixDomainSocket:

#      enabled: true

#      pathPrefix: /opt/bitnami/mongodb/tmp

#    ipv6: false

#    bindIpAll: true

#  # replica set options

#  #replication:

#    #replSetName: replicaset

#    #enableMajorityReadConcern: true

#  # process management options

#  processManagement:

#     fork: false

#     pidFilePath: /opt/bitnami/mongodb/tmp/mongodb.pid

#  # set parameter options

#  setParameter:

#     enableLocalhostAuthBypass: true

#  # security options

#  security:

#    authorization: disabled

#    #keyFile: /opt/bitnami/mongodb/conf/keyfile

 

## Prometheus Exporter / Metrics

##

metrics:

  enabled: false

 

  image:

    registry: docker.io

    repository: bitnami/mongodb-exporter

    tag: 0.10.0-debian-9-r49

    pullPolicy: Always

    ## Optionally specify an array of imagePullSecrets.

    ## Secrets must be manually created in the namespace.

    ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/

    ##

    # pullSecrets:

    #   - myRegistryKeySecretName

 

  ## String with extra arguments to the metrics exporter

  ## ref: https://github.com/dcu/mongodb_exporter/blob/master/mongodb_exporter.go

  extraArgs: ""

 

  ## Metrics exporter resource requests and limits

  ## ref: http://kubernetes.io/docs/user-guide/compute-resources/

  ##

  # resources: {}

 

  ## Metrics exporter liveness and readiness probes

  ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/#configure-probes)

  livenessProbe:

    enabled: false

    initialDelaySeconds: 15

    periodSeconds: 5

    timeoutSeconds: 5

    failureThreshold: 3

    successThreshold: 1

  readinessProbe:

    enabled: false

    initialDelaySeconds: 5

    periodSeconds: 5

    timeoutSeconds: 1

    failureThreshold: 3

    successThreshold: 1

 

  ## Metrics exporter pod Annotation

  podAnnotations:

    prometheus.io/scrape: "true"

    prometheus.io/port: "9216"

 

  ## Prometheus Service Monitor

  ## ref: https://github.com/coreos/prometheus-operator

  ##      https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md

  serviceMonitor:

    ## If the operator is installed in your cluster, set to true to create a Service Monitor Entry

    enabled: false

 

    ## Specify a namespace if needed

    # namespace: monitoring

 

    ## Used to pass Labels that are used by the Prometheus installed in your cluster to select Service Monitors to work with

    ## ref: https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md#prometheusspec

    additionalLabels: {}

 

    ## Specify Metric Relabellings to add to the scrape endpoint

    ## ref: https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md#endpoint

    # relabellings:

 

    alerting:

      ## Define individual alerting rules as required

      ## ref: https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md#rulegroup

      ##      https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/

      rules: {}

 

      ## Used to pass Labels that are used by the Prometheus installed in your cluster to select Prometheus Rules to work with

      ## ref: https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md#prometheusspec

      additionalLabels: {}

 

2. 설치 시 제공되는 데이터

To get the root password run:
 
    export MONGODB_ROOT_PASSWORD=$(kubectl get secret --namespace persistence air-mongodb -o jsonpath="{.data.mongodb-root-password}" | base64 --decode)
 
To get the password for "air" run:
 
    export MONGODB_PASSWORD=$(kubectl get secret --namespace persistence air-mongodb -o jsonpath="{.data.mongodb-password}" | base64 --decode)
 
To connect to your database run the following command:
 
    kubectl run --namespace persistence air-mongodb-client --rm --tty -i --restart='Never' --image bitnami/mongodb --command -- mongo admin --host air-mongodb --authenticationDatabase admin -u root -p $MONGODB_ROOT_PASSWORD
 
To connect to your database from outside the cluster execute the following commands:
 
    export NODE_IP=$(kubectl get nodes --namespace persistence -o jsonpath="{.items[0].status.addresses[0].address}")
    export NODE_PORT=$(kubectl get --namespace persistence -o jsonpath="{.spec.ports[0].nodePort}" services air-mongodb)
    mongo --host $NODE_IP --port $NODE_PORT --authenticationDatabase admin -p $MONGODB_ROOT_PASSWORD

이를 참고하여 mongodb를 실행합니다. 

 


2. 설치 확인

1. 몽고디비 컨테이너 실행 및 mongo shell 접속

kubectl run --namespace persistence air-mongodb-client --rm --tty -i --restart='Never' --image bitnami/mongodb --command -- mongo admin --host air-mongodb --authenticationDatabase admin -u root -p $MONGODB_ROOT_PASSWORD

2. 외부에서 원격으로 mongoDB 접속

ROBO 3T를 이용하여 외부로 오픈된 30003으로 접속

 

'Infra System' 카테고리의 다른 글

nexus install on kubernetes  (0) 2020.10.13
nexus install on ec2  (0) 2020.10.13
mongodb install using docker(standalone)  (0) 2020.10.13
mongodb install on ec2  (0) 2020.10.13
mariadb cluster install on kubernetes  (0) 2020.10.13

댓글