Go to primary content
Oracle® Communications OC-CNE Installation Guide
Release 1.0
F16979-01
Go To Table Of Contents
Contents

Previous
Previous
Next
Next

OCCNE Docker Image Registry Configuration

Introduction

Prerequisites

References

To perform an installation without the system needing access to the internet, a local Docker registry must be created, and provisioned with the necessary docker images. These docker images are used to populate the Kubernetes pods once Kubernetes is installed, as well as providing the services installed during Common Services installation.

  1. Docker is installed and docker commands can be run
  2. Creating a local docker registry accessible by the target of the installation
    $ docker run -d -p <port>:<port> --restart=always --name <registryname> registry:2

    (For more directions refer: https://docs.docker.com/registry/deploying/)

  3. Make sure docker registry is running by registry name provided
    $ docker ps

https://docs.docker.com/registry/deploying/

https://docs.docker.com/registry/configuration/

Procedure Steps

Table A-4 Steps to configure OCCNE Docker Image Registry

Steps Procedure Description
1.

Provision the registry with the necessary images

On a machine that can reach the internet AND reach the registry, populate the registry with the following images:

The images are listed in the text file deploy/docker_images.txt included here, get the file and put it in a docker_images.txt file

################################################################################
#                                                                              #
# Copyright (c) 2019 Oracle and/or its affiliates. All rights reserved.        #
#                                                                              #
################################################################################
 
#
# Kubespray Images
 
k8s.gcr.io/addon-resizer:1.8.3
coredns/coredns:1.2.6
gcr.io/google_containers/cluster-proportional-autoscaler-amd64:1.3.0
quay.io/calico/kube-controllers:v3.1.3
quay.io/calico/node:v3.1.3
quay.io/calico/cni:v3.1.3
quay.io/calico/ctl:v3.1.3
gcr.io/google-containers/kube-apiserver:v1.12.5
gcr.io/google-containers/kube-controller-manager:v1.12.5
gcr.io/google-containers/kube-proxy:v1.12.5
gcr.io/google-containers/kube-scheduler:v1.12.5
nginx:1.13
quay.io/external_storage/local-volume-provisioner:v2.2.0
gcr.io/kubernetes-helm/tiller:v2.11.0
lachlanevenson/k8s-helm:v2.11.0
quay.io/jetstack/cert-manager-controller:v0.5.2
gcr.io/google-containers/pause:3.1
gcr.io/google_containers/pause-amd64:3.1
quay.io/coreos/etcd:v3.2.24
 
#
# Common Services Helm Chart Images
 
quay.io/pires/docker-elasticsearch-curator:5.5.4
docker.elastic.co/elasticsearch/elasticsearch-oss:6.7.0
justwatch/elasticsearch_exporter:1.0.2
grafana/grafana:6.1.6
docker.elastic.co/kibana/kibana-oss:6.7.0
gcr.io/google-containers/fluentd-elasticsearch:v2.3.2
metallb/controller:v0.7.3
metallb/speaker:v0.7.3
jimmidyson/configmap-reload:v0.2.2
quay.io/coreos/kube-state-metrics:v1.5.0
quay.io/prometheus/node-exporter:v0.17.0
prom/pushgateway:v0.6.0
prom/alertmanager:v0.15.3
prom/prometheus:v2.7.1
jaegertracing/jaeger-agent:1.9.0
jaegertracing/jaeger-collector:1.9.0
jaegertracing/jaeger-query:1.9.0
gcr.io/google_containers/metrics-server-amd64:v0.3.1

2.

Create a script named below with name 'retrieve_docker.sh'
deploy/retrieve_docker.sh


#!/bin/bash
################################################################################
#                                                                              #
# Copyright (c) 2019 Oracle and/or its affiliates. All rights reserved.        #
#                                                                              #
################################################################################
 
usage() {
    echo "Pull, tag, and push images to a private image repo." 2>&1
    echo "Expected 1 argument: repo_name:port " 2>&1
    echo "run with image list piped in:  $0 repo_name:port < docker_images.txt" 2>&1
    exit 1
}
 
[[ "$#" -ne "1" ]] && usage
 
#
# Kubespray Images
 
while read line; do
    if [[ $line =~ ^'#'(.*) ]]; then
        echo "${BASH_REMATCH[1]}"
        # comment, ignore
    elif [[ $line =~ ^'`'(.*) ]]; then
        echo "markdown"
        # markdown code delimiter, ignore
    elif [[ ! -z "$line" ]]; then
        echo "Provisioning $line"
        docker pull $line
        docker tag $line $1/$line
        docker push $1/$line
    fi
done

This can be facilitated by using the above script, such as this example:

$ retrieve_docker.sh repositoryaddr:port < occne/deploy/docker_images.txt
3.

Verify the list of repositories in the docker registry

Access endpoint <dockerregistryhostip>:<dockerregistyport>/v2/_catalog using a browser

or

using curl

$ curl http://dockerregistryhostip:5000/v2/_catalog

Sample Result:

$ {"repositories":["coredns/coredns","docker.elastic.co/elasticsearch/elasticsearch-oss","docker.elastic.co/kibana/kibana-oss","gcr.io/google-containers/fluentd-elasticsearch","gcr.io/google-containers/kube-apiserver","gcr.io/google-containers/kube-controller-manager","gcr.io/google-containers/kube-proxy","gcr.io/google-containers/kube-scheduler","gcr.io/google-containers/pause","gcr.io/google_containers/cluster-proportional-autoscaler-amd64","gcr.io/google_containers/metrics-server-amd64","gcr.io/google_containers/pause-amd64","gcr.io/kubernetes-helm/tiller","grafana/grafana","jaegertracing/jaeger-agent","jaegertracing/jaeger-collector","jaegertracing/jaeger-query","jimmidyson/configmap-reload","justwatch/elasticsearch_exporter","k8s.gcr.io/addon-resizer","lachlanevenson/k8s-helm","metallb/controller","metallb/speaker","nginx","prom/alertmanager","prom/prometheus","prom/pushgateway","quay.io/calico/cni","quay.io/calico/ctl","quay.io/calico/kube-controllers","quay.io/calico/node","quay.io/coreos/etcd","quay.io/coreos/kube-state-metrics","quay.io/external_storage/local-volume-provisioner","quay.io/jetstack/cert-manager-controller","quay.io/pires/docker-elasticsearch-curator","quay.io/prometheus/node-exporter"]}
4.

Set hosts.ini variables

The hosts.ini inventory file for the cluster needs to have a few variables set in the [occne:vars] section to direct the installation logic to the registry, these variables need to be set to the your docker registry configuration:

hosts.ini

...

[occne:vars]

...

occne_private_registry=winterfell

occne_private_registry_address='10.75.216.114'

occne_private_registry_port=5002

occne_helm_images_repo='winterfell:5002'

... 
5.

If error is encountered during execution of retrieve_images.sh script

In case a 500 error is encountered with message that states: 'no space left' during run of bash script listed above, please use following commands and re run to see if error is fixed:

Docker clean up commands

$ docker ps --filter status=dead --filter status=exited -aq | xargs -r docker rm -v

$ docker images --no-trunc | grep '<none>' | awk '{ print $3 }' | xargs -r docker rmi