onap桂林版部署教程

声明:以下所有操作方式均为本人自己整理。但有些报错的解决方法来自众多论坛、博客,里面会涉及到众多网络大神,如有侵权,无意冒犯

一、部署环境

集群调度控制:192.168.0.192 master    Ubuntu 18.04.6

负载1:192.168.0.193 worker193    Ubuntu 18.04.6

负载2:192.168.0.194 worker194    Ubuntu 18.04.6

二、安装ssh(在windows上使用ssh进行远程,后续操作方便得多)

三台服务器上分别安装ssh

apt-get install openssh-server

重启ssh服务

systemctl restart ssh

三、系统设置(master和worker都要执行)

(1)禁用swap

swapoff -a

查看是否禁用成功

free -m

下面一行都是零表示禁用成功

这是一种临时禁用的方法,服务器重启后会自动解禁,导致k8s启动失败,需要再次禁用。如果想永久禁用,需要修改fstab文件

vim /etc/fstab

onap桂林版部署教程_第1张图片

 把最后一行“swapfile....”注释掉即可

(2)关闭防火墙

关闭防火墙:ufw disable

开启防火墙:ufw enable

(3)禁用Selinux

apt install selinux-utils

setenforce 0

(4)修改hosts

vim /etc/hosts

加入以下内容:IP+空格+主机名

四、安装docker(master和worker都要执行)

卸载旧版本(没有请忽略):

apt-get remove docker docker-engine docker-ce docker.io

更新包索引

apt-get update

安装以下包以使apt可以通过HTTPS使用存储库(repository)

apt-get install -y apt-transport-https ca-certificates curl software-properties-common

添加docker官方密钥

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

不能科学上网的找阿里

curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

使用下面的命令设置stable存储库

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

再更新一下apt包索引

apt-get update

查询可安装的docker版本

apt-cache madison docker-ce

onap桂林版部署教程_第2张图片

找你要的版本,onap桂林版官方要求18.09.x

例如我下载的是18.09.0

apt install docker-ce=5:18.09.0~3-0~ubuntu-bionic docker-ce-cli=5:18.09.0~3-0~ubuntu-bionic

安装完成后查询docker版本

docker version

得到以下输出表示安装成功

onap桂林版部署教程_第3张图片

 五、安装k8s,搭建集群(master和worker都要执行)

添加key

curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add

安装http工具

apt-get update && apt-get install -y apt-transport-https curl

打开 /etc/apt/sources.list,添加一行(随便找个位置塞进去就行了)

deb https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main

onap桂林版部署教程_第4张图片

更新apt包索引

apt-get update

安装k8s(onap桂林版要求1.15.11)

apt-get install -y kubelet=1.15.11-00 kubeadm=1.15.11-00 kubectl=1.15.11-00

查看所需镜像

kubeadm  config images list

onap桂林版部署教程_第5张图片

用 docker pull 将列出的镜像挨个拉下来

用 docker images 查看镜像是否下好

六、改 Cgroup Driver

是否需要改驱动要视你安装的k8s和docker的版本而定,只要保证docker和kubelet的驱动都是systemd就可以,否则下面的集群会搭建失败

查看docker cgroup驱动

docker info

onap桂林版部署教程_第6张图片

这是我改好的截图,Cgroup Driver:systemd,docker 18.09.0 默认的是cgroupfs

修改docker驱动

编辑/etc/docker/daemon.json文件(没有就创建一个)

重启docker

systemctl daemon-reload

systemctl restart docker

修改 kubelet cgroup驱动

打开/etc/systemd/system/kubelet.service.d/10-kubeadm.conf文件

在光标位置加入“--cgroup-driver=systemd”

onap桂林版部署教程_第7张图片

 重启kubelet

systemctl daemon-reload

systemctl restart kubelet

七、在master上执行初始化,worker加入集群

kubeadm init --kubernetes-version=v1.15.11 --pod-network-cidr 10.244.0.0/16

过程可能会很漫长,只要不报错就等着吧,最后应该会生成token,由于已经搭好集群就不截图了

初始化成功后执行

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

添加flannel

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

在 worker 上执行 master 初始化后生成的token命令,每台机器的token不一样我就不复制粘贴了

模板:kubeadm join --token : --discovery-token-ca-cert-hash sha256:

成功加入集群后查看pods是否running

kubectl get pods -n kube-system

onap桂林版部署教程_第8张图片

查看node是否全部Ready

kubectl get nodes

八、安装helm

查看所需要的版本(onap桂林版需要helm2.16.10)

Releases · helm/helm · GitHub

onap桂林版部署教程_第9张图片

选择“Linux amd64”,将压缩包保存到master的主目录下即可

解压(tar -zxvf helm-v2.16.10-linux-amd64.tar.gz)

在解压目中找到helm程序,移动到需要的目录中(mv linux-amd64/helm /usr/local/bin/helm)

查看helm版本

helm version

现在应该是没有server那一行的,tiller需要单独安装

九、安装tiller

创建并编辑文件:

vim rbac-config.yaml

apiVersion: v1
kind: ServiceAccount
metadata:
  name: tiller
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: tiller
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: tiller
    namespace: kube-system

执行:kubectl create -f rbac-config.yaml

初始化helm

helm init --service-account tiller --tiller-image gcr.io/kubernetes-helm/tiller:v2.16.10 --skip-refresh

此时查看pods应该多了个tiller开头的pod,但是后面会提示镜像拉取失败,因此要更换国内的镜像源

先下载国内镜像

docker pull sapcc/tiller:v2.16.10

编辑配置文件

kubectl edit deployment tiller-deploy -n kube-system

onap桂林版部署教程_第10张图片

光标所在那一行,改成sapcc/tiller:v2.16.10,保存退出,再查看pods应该就ok了,之前那个失败的pod会自动删除

onap桂林版部署教程_第11张图片

 再次查看helm版本,server会有版本号

 此时说明tiller安装成功,helm才能用

十、部署onap桂林版

(1)克隆oom

git clone -b 7.0.0 http://gerrit.onap.org/r/oom --recurse-submodules

cd oom/kubernetes

(2)安装helm插件

sudo cp -R ~/oom/kubernetes/helm/plugins/ ~/.helm

(3)将你需要的组件开关改成true

vim oom/kubernetes/onap/values.yaml

onap桂林版部署教程_第12张图片

(4)添加helm本地仓库

helm serve &

helm repo add local http://127.0.0.1:8879

helm repo remove stable

查看仓库

helm repo list

(5)构建一个本地 Helm 存储库

直接在oom/kubernetes目录下执行“ make all ”,整个过程要很久,尤其是最后onap的36个,我当时至少用了三四个小时,等着就行,make all 完成后查询可部署的图表 

helm search onap -l

onap桂林版部署教程_第13张图片

(6)要部署所有 ONAP 应用程序,请使用以下命令

helm deploy dev local/onap --namespace onap --set global.masterPassword=myAwesomePasswordThatINeedToChange -f onap/resources/overrides/onap-all.yaml -f onap/resources/overrides/environment.yaml -f onap/resources/overrides/openstack.yaml --timeout 900

整个deploy过程也很慢,千万不要中断操作,等着就好

(7)健康检查

使用如下命令进行健康检查

~/oom/kubernetes/robot/ete-k8s.sh onap health

陆陆续续搞个一个月,最终还是有六个组件报错,但实际上由于onap各组件之间可能存在某种依赖关系,真正有问题的只有oof和dcae中的几个pods,失败原因待查,由于国内外的网络环境不同,很多时候要科学上网,或者做镜像源的替换,虽然存在报错组件,但并不影响进入protal界面,希望在后面的应用中能更进一步掌握onap原理和结构,反过来再调整部署方式,争取全部pass!!!!

十一、登录onap

以windows为例,实际上用服务器的ubuntu系统也可以,操作方式类似

(1)改hosts

C:\Windows\System32\drivers\etc路径下有一个hosts文件,把他拖到桌面,用记事本编辑并保存,再copy回原路径进行覆盖。这样做最方便,不然就要修改权限并从cmd进行编辑,无语。。。

onap桂林版部署教程_第14张图片

在文件最后添加这么几行

onap桂林版部署教程_第15张图片

实际上就是将各组件的网址在本地做一个ip的映射,前面是你组件部署的ip地址,后面是各组件的首页地址,这样你就能在自己的终端访问onap了,组件不只这几个,具体还是看你装了哪些组件,查一下他的ip,按照这个格式编辑到hosts就ok

(2)火狐浏览器设置

在地址栏键入"about:config" 点击“我了解此风险”
输入首选项名称为
security.enterprise_roots.enabled设置为 true
network.proxy.socks_remote_dns 设置为 true
security.mixed_content.block_active_content设置为false

(3)登录onap

https://portal.api.simpledemo.onap.org:30225/ONAPPORTAL/login.htm

直接访问这个地址,首次访问会有风险提示,无视他继续进入。

onap桂林版部署教程_第16张图片

 官网给的几个用户id和密码,这里选用admin用户为例。

onap桂林版部署教程_第17张图片

onap桂林版部署教程_第18张图片

 (4)解决网页自签名证书问题

onap桂林版部署教程_第19张图片

 首先在Application Catalog中勾选相应组件,这样首页就有相应组件了,点击应用会发现网址打不看,有风险提示,说证书不安全。

onap桂林版部署教程_第20张图片

 点击“高级”--“错误代码”会出现首页地址,复制这个网址,打开浏览器设置,搜索证书----查看证书

onap桂林版部署教程_第21张图片

onap桂林版部署教程_第22张图片

 点击“添加例外”,把刚才复制的网址粘贴进去保存,这是再返回到主页面点击应用就能进去啦!!

onap桂林版部署教程_第23张图片

 十二、总结

       从docker是什么都不知道的小白到最后的进入protal,前后摸了一个月,虽说仍然有六个组件报错,但也算是有所收获。特意写个文档记录下来也供大家参考,现在的onap已经出到伊斯坦布尔版了,相应的docker和k8s版本也在更新,安装部署流程大同小异,但真正上手才会发现到处都是坑,网上的很多教程由于版本不同,大部分内容也仅供参考,不仅需要一次一次的试错踩雷,有时候还需要点耐心和运气。小问题会有很多就不一一举例了,下面记录几个比较典型的坑,有的甚至逼我重装系统、、、、、

(1)首先装这东西一定一定要有耐心,只要系统不报错你就等等他,上面催的再仅你也要适当劳逸结合,中断操作说不好就会有啥问题。

(2)有时候心如乱麻想要全部清空推倒重来的时候一定要慎重,有那么两次毫无头绪心里想着“不破不立”,就把k8s甚至docker卸了重装,后来你会发现很多东西你即便卸了他也依然在,甚至网上的一些“不靠谱”教程直接教你把底层的配置文件删了,后面在想找回来就不是一两句指令那么简单了,例如:

有的教程教你卸载k8s是这样

onap桂林版部署教程_第24张图片

      感觉就是毫无责任心的复制粘贴来的,请问你都把k8s remove了 ,怎么执行kubeadm reset???后面删除的那几个文件夹更离谱,有可能是我学艺不精,但如果你删了就会发现后面修改kubelet cgroup driver的时候累死你也找不到10-kubeadm.conf这个文件,master就不可能初始化成功,k8s集群都没有,果真是教你删的一干二净,想装都装不上那种、、、、、

所以想卸载重装你就直接apt remove -y kubelet kubeadm kubectl 就可以了,个人觉得没必要删除文件夹,如果你真想删,也奉劝各位先了解清楚文件夹中装的是什么在动手,否则就只能是重装治百病

(3)拆了集群重建可能会出现coredns那两个pods一直处于containercreating状态,可以用

kubectl describe pod  -n

       来查看一下,很有可能会出现一个关于cni0的报错,具体报错内容忘记了,这是由于cni0网桥配置了一个不同网段的IP地址所导致的,做法是删除cni0,让网络插件重新自动创建。

步骤一:在所有节点(master和slave节点)删除cni0,以及暂停k8s和docker。
kubeadm reset
systemctl stop kubelet
systemctl stop docker
rm -rf /var/lib/cni/
rm -rf /var/lib/kubelet/
rm -rf /etc/cni/
ifconfig cni0 down
ifconfig flannel.1 down
ifconfig docker0 down
ip link delete cni0
ip link delete flannel.1
步骤二:在所有节点重启kubelet和docker
systemctl start kubelet
systemctl start docker
步骤三:重新执行kubeadm init的操作

一句一句执行很麻烦,可以写个脚本一键执行爽歪歪!!!

(4)(非必须)我记得每台服务器pods的最大容限是110个,这个可以在kubeadm init的时候自己改,如果硬件条件有限,也可以让master参与部署,这样相当于省了一台服务器,但官方默认master不参与部署的,说是为了安全考虑,具体影响不清楚,仅供参考。

当你出现如下报错的时候,让master参与部署可能会有效。(这是我之前遇到的一个小问题,后来再部署的时候没出现过)

0/1 nodes are available: 1 node(s) had taints that the pod didn't tolerate.

解决方法(执行后忽略出现的error)

允许master节点部署pod
kubectl taint nodes --all node-role.kubernetes.io/master-
如果不允许调度
kubectl taint nodes master1 node-role.kubernetes.io/master=:NoSchedule
污点可选参数
      NoSchedule: 一定不能被调度
      PreferNoSchedule: 尽量不要调度
      NoExecute: 不仅不会调度, 还会驱逐Node上已有的Pod

(5)重启docker或者重启k8s时候可能会出现如下报错

Too much file open

解决方法

sysctl fs.inotify.max_user_instances=512

十三、备注

       我这里为了防止拉取镜像出现意外,是将onap桂林版所有镜像docker pull到一台机器上,然后打包出来做个备份,再分别导入到另外两台服务器上,这样做确实很麻烦,但可以确保部署时的镜像拉取是没问题的,不然可能由于网络原因,所有pods状态都是imagepullbackoff,我这里有onap桂林版所需要的镜像列表,有需要可以联系我,或者去官网下一份,应该是有个离线部署,自己找找找吧。
 

你可能感兴趣的:(k8s,docker)