You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 7 Next »

IEC Reference Foundation Overview

This document provides a general description about the reference foundation of IEC. The Integrated Edge Cloud (IEC) will enable new functionalities and business models on the network edge. The benefits of running applications on the network edge are - Better latencies for end users - Less load on network since more data can be processed locally - Fully utilize the computation power of the edge devices

Currently, the chosen operating system(OS) is Ubuntu 16.04 and/or 18.04. The infrastructure orchestration of IEC is based on Kubernetes, which is a production-grade container orchestration with rich running eco-system. The current container networking mechanism(CNI) chosen for Kubernetes is project Calico, which is a high performance, scalable, policy enabled and widely used container networking solution with rather easy installation and arm64 support. In the future, Contiv/VPP or OVN-Kubernetes would also be candidates for Kubernetes networking.

Kubernetes Install for Ubuntu

Install Docker as Prerequisite

Please following docker installation guide for Ubuntu arm64 to install Docker CE:https://docs.docker.com/install/linux/docker-ce/ubuntu/

Disable swap on your machine

  1. Identify configured swap devices and files with cat /proc/swaps.
  2. Turn off all swap devices and files with:: swapoff -a

Install Kubernetes with Kubeadm

kubeadm helps you bootstrap a minimum viable Kubernetes cluster that conforms to best practices which a preferred installation method for IEC currently. Now we choose v1.13.0 as a current stable version of Kubernetes for arm64. Usually the current host(edge server/gateway)'s management interface is chosen as the Kubeapi-server advertise address which is indicated here as $MGMT_IP.

The common installation steps for both Kubernetes master and slave node are given as Linux shell scripts:

   $ sudo bash
   $ apt-get update && apt-get install -y apt-transport-https curl
   $ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
   $ cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
   $ deb https://apt.kubernetes.io/ kubernetes-xenial main
   $ EOF
   $ apt-get update
   $ apt-get install -y kubelet=1.13.0-00 kubeadm=1.13.0-00 kubectl=1.13.0-00
   $ apt-mark hold kubelet kubeadm kubectl
   $ sysctl net.bridge.bridge-nf-call-iptables=1
For host setup as Kubernetes master:
   $ sudo kubeadm config images pull
   $ sudo kubeadm init --pod-network-cidr=192.168.0.0/16 --apiserver-advertise-address=$MGMT_IP \
   --service-cidr=172.16.1.0/24
 To start using your cluster, you need to run (as a regular user)::
   $ mkdir -p $HOME/.kube
   $ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
   $ sudo chown $(id -u):$(id -g) $HOME/.kube/config
or ::

   $ export KUBECONFIG=/etc/kubernetes/admin.conf
if you are the ``root`` user.
For hosts setup as Kubernetes slave:
   $ kubeadm join --token <token> <master-ip>:6443 --discovery-token-ca-cert-hash sha256:<hash>
which will skip ca-cert verification.
After the `slave` joining the Kubernetes cluster, in the master node, you could check the cluster
node with the command::

   $ kubectl get nodes

in which the token is given in the master's kubeadm init.or:which will skip ca-cert verification.

After the slave joining the Kubernetes cluster, in the master node, you could check the cluster node with the command:


Install the Calico CNI Plugin to Kubernetes Cluster

Now we install a Calico network add-on so that Kubernetes pods can communicate with each other. The network must be deployed before any applications. Kubeadm only supports Container Networking Interface(CNI) based networks for which Calico has supported.

Install the Etcd Database

::$ kubectl apply -f https://raw.githubusercontent.com/Jingzhao123/arm64TemporaryCalico/temporay_arm64/v3.3/getting-started/kubernetes/installation/hosted/etcd-arm64.yaml

Install the RBAC Roles required for Calico


Install Calico to system

Firstly, we should get the configuration file from web site and modify the corresponding image from amd64 to arm64 version. Then, by using kubectl, the calico pod will be created.


Since the "quay.io/calico" image repo does not support does not multi-arch, we have to replace the “quay.io/calico” image path to "calico" which supports multi-arch.


Deploy the Calico using following command:


Remove the taints on master node

::$ kubectl taint nodes --all node-role.kubernetes.io/master-

Verification for the Work of Kubernetes

Now we can verify the work of Kubernetes and Calico with Kubernets pod and service creation and accessing based on Nginx which is a widely used web server.

Firstly, create a file named nginx-app.yaml to describe a Pod and service by:


then test the Kubernetes working status with the script:


Helm Install on Arm64

Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured Kubernetes resources. The installation of Helm on arm64 is as followes:

::$ wget https://storage.googleapis.com/kubernetes-helm/helm-v2.12.3-linux-arm64.tar.gz $ xvf helm-v2.12.3-linux-arm64.tar.gz $ sudo cp linux-arm64/helm /usr/bin $ sudo cp linux-arm64/tiller /usr/bin

Further Information

We would like to provide a walk through shell script to automate the installation of Kubernetes and Calico in the future. But this README is still useful for IEC developers and users.

For issues or anything on the reference foundation stack of IEC, you could contact:

Trevor Tao: trevor.tao@arm.com Jingzhao Ni: jingzhao.ni@arm.com Jianlin Lv: jianlin.lv@arm.com


          
 
 
 



  • No labels