| #!/bin/bash |
| ############################################################################# |
| # Copyright © 2019 Bell. |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| # |
| ############################################################################# |
| # |
| # This installation is for an RKE install of kubernetes |
| # after this run the standard oom install |
| # this installation can be run on any ubuntu 16.04/18.04 VM, RHEL 7.6 (root only), physical or cloud azure/aws host |
| # https://wiki.onap.org/display/DW/OOM+RKE+Kubernetes+Deployment |
| # source from https://jira.onap.org/browse/OOM-1598 |
| # |
| # master/dublin |
| # RKE 0.1.16 Kubernetes 1.11.6, kubectl 1.11.6, Helm 2.9.1, Docker 18.06 |
| # 20190428 RKE 0.2.1, Kubernetes 1.13.5, kubectl 1.13.5, Helm 2.12.3, Docker 18.09.5 |
| # single node install, HA pending |
| |
| usage() { |
| cat <<EOF |
| Usage: $0 [PARAMs] |
| example |
| sudo ./rke_setup.sh -b master -s rke.onap.cloud -e onap -l amdocs -v true |
| -u : Display usage |
| -b [branch] : branch = master or dublin (required) |
| -s [server] : server = IP or DNS name (required) |
| -e [environment] : use the default (onap) |
| -k [key] : ssh key name |
| -l [username] : login username account (use ubuntu for example) |
| EOF |
| } |
| |
| install_onap() { |
| #constants |
| PORT=8880 |
| KUBERNETES_VERSION= |
| RKE_VERSION=0.2.1 |
| KUBECTL_VERSION=1.13.5 |
| HELM_VERSION=2.12.3 |
| DOCKER_VERSION=18.09 |
| |
| # copy your private ssh key and cluster.yml file to the vm |
| # on your dev machine |
| #sudo cp ~/.ssh/onap_rsa . |
| #sudo chmod 777 onap_rsa |
| #scp onap_rsa ubuntu@192.168.241.132:~/ |
| # on this vm |
| #sudo chmod 400 onap_rsa |
| #sudo cp onap_rsa ~/.ssh |
| # make sure public key is insetup correctly in |
| # sudo vi ~/.ssh/authorized_keys |
| |
| echo "please supply your ssh key as provided by the -k keyname - it must be be chmod 400 and chown user:user in ~/.ssh/" |
| echo "The RKE version specific cluster.yaml is already integrated in this script for 0.2.1 no need for below generation..." |
| echo "rke config --name cluster.yml" |
| echo "specifically" |
| echo "address: $SERVER" |
| echo "user: $USERNAME" |
| echo "ssh_key_path: $SSHPATH_PREFIX/$SSHKEY" |
| |
| RKETOOLS= |
| HYPERCUBE= |
| POD_INFRA_CONTAINER= |
| RKETOOLS=0.1.27 |
| HYPERCUBE=1.13.5-rancher1 |
| POD_INFRA_CONTAINER=rancher/pause:3.1 |
| |
| cat > cluster.yml <<EOF |
| # generated from rke_setup.sh |
| nodes: |
| - address: $SERVER |
| port: "22" |
| internal_address: "" |
| role: |
| - controlplane |
| - worker |
| - etcd |
| hostname_override: "" |
| user: $USERNAME |
| docker_socket: /var/run/docker.sock |
| ssh_key: "" |
| ssh_key_path: $SSHPATH_PREFIX/$SSHKEY |
| ssh_cert: "" |
| ssh_cert_path: "" |
| labels: {} |
| services: |
| etcd: |
| image: "" |
| extra_args: {} |
| extra_binds: [] |
| extra_env: [] |
| external_urls: [] |
| ca_cert: "" |
| cert: "" |
| key: "" |
| path: "" |
| snapshot: null |
| retention: "" |
| creation: "" |
| backup_config: null |
| kube-api: |
| image: "" |
| extra_args: {} |
| extra_binds: [] |
| extra_env: [] |
| service_cluster_ip_range: 10.43.0.0/16 |
| service_node_port_range: "" |
| pod_security_policy: false |
| always_pull_images: false |
| kube-controller: |
| image: "" |
| extra_args: {} |
| extra_binds: [] |
| extra_env: [] |
| cluster_cidr: 10.42.0.0/16 |
| service_cluster_ip_range: 10.43.0.0/16 |
| scheduler: |
| image: "" |
| extra_args: {} |
| extra_binds: [] |
| extra_env: [] |
| kubelet: |
| image: "" |
| extra_args: |
| max-pods: 900 |
| extra_binds: [] |
| extra_env: [] |
| cluster_domain: cluster.local |
| infra_container_image: "" |
| cluster_dns_server: 10.43.0.10 |
| fail_swap_on: false |
| kubeproxy: |
| image: "" |
| extra_args: {} |
| extra_binds: [] |
| extra_env: [] |
| network: |
| plugin: canal |
| options: {} |
| authentication: |
| strategy: x509 |
| sans: [] |
| webhook: null |
| system_images: |
| etcd: rancher/coreos-etcd:v3.2.24-rancher1 |
| alpine: rancher/rke-tools:v$RKETOOLS |
| nginx_proxy: rancher/rke-tools:v$RKETOOLS |
| cert_downloader: rancher/rke-tools:v$RKETOOLS |
| kubernetes_services_sidecar: rancher/rke-tools:v$RKETOOLS |
| kubedns: rancher/k8s-dns-kube-dns:1.15.0 |
| dnsmasq: rancher/k8s-dns-dnsmasq-nanny:1.15.0 |
| kubedns_sidecar: rancher/k8s-dns-sidecar:1.15.0 |
| kubedns_autoscaler: rancher/cluster-proportional-autoscaler:1.0.0 |
| kubernetes: rancher/hyperkube:v$HYPERCUBE |
| flannel: rancher/coreos-flannel:v0.10.0-rancher1 |
| flannel_cni: rancher/flannel-cni:v0.3.0-rancher1 |
| calico_node: rancher/calico-node:v3.4.0 |
| calico_cni: rancher/calico-cni:v3.4.0 |
| calico_controllers: "" |
| calico_ctl: rancher/calico-ctl:v2.0.0 |
| canal_node: rancher/calico-node:v3.4.0 |
| canal_cni: rancher/calico-cni:v3.4.0 |
| canal_flannel: rancher/coreos-flannel:v0.10.0 |
| wave_node: weaveworks/weave-kube:2.5.0 |
| weave_cni: weaveworks/weave-npc:2.5.0 |
| pod_infra_container: $POD_INFRA_CONTAINER |
| ingress: rancher/nginx-ingress-controller:0.21.0-rancher3 |
| ingress_backend: rancher/nginx-ingress-controller-defaultbackend:1.4-rancher1 |
| metrics_server: rancher/metrics-server:v0.3.1 |
| ssh_key_path: $SSHPATH |
| ssh_cert_path: "" |
| ssh_agent_auth: false |
| authorization: |
| mode: rbac |
| options: {} |
| ignore_docker_version: false |
| kubernetes_version: "$KUBERNETES_VERSION" |
| private_registries: [] |
| ingress: |
| provider: "" |
| options: {} |
| node_selector: {} |
| extra_args: {} |
| cluster_name: "" |
| cloud_provider: |
| name: "" |
| prefix_path: "" |
| addon_job_timeout: 0 |
| bastion_host: |
| address: "" |
| port: "" |
| user: "" |
| ssh_key: "" |
| ssh_key_path: "" |
| ssh_cert: "" |
| ssh_cert_path: "" |
| monitoring: |
| provider: "" |
| options: {} |
| restore: |
| restore: false |
| snapshot_name: "" |
| dns: null |
| EOF |
| |
| |
| |
| echo "Installing on ${SERVER} for ${BRANCH}: RKE: ${RKE_VERSION} Kubectl: ${KUBECTL_VERSION} Helm: ${HELM_VERSION} Docker: ${DOCKER_VERSION} username: ${USERNAME}" |
| sudo echo "127.0.0.1 ${SERVER}" >> /etc/hosts |
| echo "Install docker - If you must install as non-root - comment out the docker install below - run it separately, run the user mod, logout/login and continue this script" |
| curl https://releases.rancher.com/install-docker/$DOCKER_VERSION.sh | sh |
| sudo usermod -aG docker $USERNAME |
| |
| echo "Install RKE" |
| sudo wget https://github.com/rancher/rke/releases/download/v$RKE_VERSION/rke_linux-amd64 |
| mv rke_linux-amd64 rke |
| sudo chmod +x rke |
| sudo mv ./rke /usr/local/bin/rke |
| |
| echo "Install make - required for beijing+ - installed via yum groupinstall Development Tools in RHEL" |
| # ubuntu specific |
| sudo apt-get install make -y |
| |
| sudo curl -LO https://storage.googleapis.com/kubernetes-release/release/v$KUBECTL_VERSION/bin/linux/amd64/kubectl |
| sudo chmod +x ./kubectl |
| sudo mv ./kubectl /usr/local/bin/kubectl |
| sudo mkdir ~/.kube |
| wget http://storage.googleapis.com/kubernetes-helm/helm-v${HELM_VERSION}-linux-amd64.tar.gz |
| sudo tar -zxvf helm-v${HELM_VERSION}-linux-amd64.tar.gz |
| sudo mv linux-amd64/helm /usr/local/bin/helm |
| |
| echo "Bringing RKE up - using supplied cluster.yml" |
| sudo rke up |
| echo "wait 2 extra min for the cluster" |
| sleep 60 |
| echo "1 more min" |
| sleep 60 |
| echo "copy kube_config_cluter.yaml generated - to ~/.kube/config" |
| sudo cp kube_config_cluster.yml ~/.kube/config |
| # avoid using sudo for kubectl |
| sudo chmod 777 ~/.kube/config |
| echo "Verify all pods up on the kubernetes system - will return localhost:8080 until a host is added" |
| echo "kubectl get pods --all-namespaces" |
| kubectl get pods --all-namespaces |
| echo "install tiller/helm" |
| kubectl -n kube-system create serviceaccount tiller |
| kubectl create clusterrolebinding tiller --clusterrole=cluster-admin --serviceaccount=kube-system:tiller |
| helm init --service-account tiller |
| kubectl -n kube-system rollout status deploy/tiller-deploy |
| echo "upgrade server side of helm in kubernetes" |
| if [ "$USERNAME" == "root" ]; then |
| helm version |
| else |
| sudo helm version |
| fi |
| echo "sleep 30" |
| sleep 30 |
| if [ "$USERNAME" == "root" ]; then |
| helm init --upgrade |
| else |
| sudo helm init --upgrade |
| fi |
| echo "sleep 30" |
| sleep 30 |
| echo "verify both versions are the same below" |
| if [ "$USERNAME" == "root" ]; then |
| helm version |
| else |
| sudo helm version |
| fi |
| echo "start helm server" |
| if [ "$USERNAME" == "root" ]; then |
| helm serve & |
| else |
| sudo helm serve & |
| fi |
| echo "sleep 30" |
| sleep 30 |
| echo "add local helm repo" |
| if [ "$USERNAME" == "root" ]; then |
| helm repo add local http://127.0.0.1:8879 |
| helm repo list |
| else |
| sudo helm repo add local http://127.0.0.1:8879 |
| sudo helm repo list |
| fi |
| echo "To enable grafana dashboard - do this after running cd.sh which brings up onap - or you may get a 302xx port conflict" |
| echo "kubectl expose -n kube-system deployment monitoring-grafana --type=LoadBalancer --name monitoring-grafana-client" |
| echo "to get the nodeport for a specific VM running grafana" |
| echo "kubectl get services --all-namespaces | grep graf" |
| sudo docker version |
| helm version |
| kubectl version |
| kubectl get services --all-namespaces |
| kubectl get pods --all-namespaces |
| echo "finished!" |
| } |
| |
| BRANCH= |
| SERVER= |
| ENVIRON= |
| VALIDATE=false |
| USERNAME=ubuntu |
| SSHPATH_PREFIX=~/.ssh |
| |
| while getopts ":b:s:e:u:l:k:v" PARAM; do |
| case $PARAM in |
| u) |
| usage |
| exit 1 |
| ;; |
| b) |
| BRANCH=${OPTARG} |
| ;; |
| e) |
| ENVIRON=${OPTARG} |
| ;; |
| s) |
| SERVER=${OPTARG} |
| ;; |
| l) |
| USERNAME=${OPTARG} |
| ;; |
| k) |
| SSHKEY=${OPTARG} |
| ;; |
| v) |
| VALIDATE=${OPTARG} |
| ;; |
| ?) |
| usage |
| exit |
| ;; |
| esac |
| done |
| |
| if [[ -z $BRANCH ]]; then |
| usage |
| exit 1 |
| fi |
| |
| install_onap $BRANCH $SERVER $ENVIRON $USERNAME $SSHPATH_PREFIX $SSHKEY $VALIDATE |