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

一、部署环境

集群调度控制: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

把最后一行“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桂林版官方要求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

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

五、安装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

更新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

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

用 docker images 查看镜像是否下好

六、改 Cgroup Driver

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

查看docker cgroup驱动

docker info

这是我改好的截图,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”

重启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 <token> <master-ip>:<master-port> --discovery-token-ca-cert-hash sha256:<hash>

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

kubectl get pods -n kube-system

查看node是否全部Ready

kubectl get nodes

八、安装helm

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

Releases · helm/helm · GitHub

选择“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

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

再次查看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

(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

(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进行编辑,无语。。。

在文件最后添加这么几行

实际上就是将各组件的网址在本地做一个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

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

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

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

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

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

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

十二、总结

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

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

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

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

感觉就是毫无责任心的复制粘贴来的,请问你都把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 <pods name> -n <namespace>

来查看一下,很有可能会出现一个关于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桂林版所需要的镜像列表,有需要可以联系我,或者去官网下一份,应该是有个离线部署,自己找找找吧。

onap桂林版部署教程相关推荐

  1. ONAP桂林版本部署

    ONAP桂林版本部署(从docker安装到k8s集群到Helm再到ONAP) 1 docker-k8s-Helm-ONAP 1.1 Kubernetes环境搭建方式 1.1.1 Kubeadm 1.1 ...

  2. 若依管理系统(分离版)云服务器部署教程

    若依管理系统(分离版)云服务器部署教程 本教程以阿里云服务器部署为例,腾讯云同理,不再赘述 本教程系统环境需求: MySQL >= 5.5 JDK >= 1.8 NGINX >= 1 ...

  3. 七丶青龙nvjdc部署教程+短信验证登录对接傻妞

    青龙nvjdc部署教程+短信验证登录对接傻妞Nolanjdc 没有服务器的先自行购买,这里推荐腾讯云2H4G8M首年70–点击购买 青龙面板安装教程 傻妞机器人安装教程 XDD安装教程 QQ交流:10 ...

  4. OneManager+CloudFlare Workers部署教程

    OneManager+CloudFlare Workers:CFW版OM·图文部署教程[支持世纪互联OD和世纪互联SP] 仓库地址 项目地址 部署方法 1.环境构建 进KV,添加命名空间,名字随便英文 ...

  5. 正版授权WiFi大师4.0.5 专业版流量主小程序源码部署教程

    新版WiFi小程序WiFi大师版流量主搭建独立源码WiFi分销源码  独立版 2022年最火的地推项目WiFi大师,扫码直连WiFi,给商家客户代理绝对的便利. WIFI地推,绝对是2022年最火爆的 ...

  6. Python基于OpenCV的人脸表情识别系统[源码&部署教程]

    1.项目背景 人脸表情识别是模式识别中一个非常重要却十分复杂的课题.首先对计算机人脸表情识别技术的研究背景及发展历程作了简单回顾.然后对近期人脸表情识别的方法进行了分类综述.通过对各种识别方法的分析与 ...

  7. Ubuntu云服务器搭建饥荒联机版服务器教程

    Ubuntu服务器搭建饥荒联机版服务器教程 为方便各位小伙伴开荒,弄了一个dst-admin的开源项目,方便小伙伴搭建服务器. 本教程主要介绍的是如何安装dst-admin饥荒管理平台,使用他来快速的 ...

  8. WSTMART电商开源版安装教程-徐新帅-专题视频课程

    WSTMART电商开源版安装教程-229人已学习 课程介绍         商淘软件WSTMart电子商务系统是一款基于THINKPHP 5.1框架打造的B2B2C电商平台,是目前领先完善的电商管理平 ...

  9. 2022版Maven教程 - 第六章 单一架构案例

    2022版Maven教程 - 第六章 单一架构案例 一.创建工程,引入依赖 1.架构 ①架构的概念 ②单一架构 2.创建工程 3.引入依赖 ①搜索依赖信息的网站 [1]到哪儿找? [2]怎么选择? ② ...

  10. Docker系列之RabbitMQ安装部署教程

    Docker系列之RabbitMQ安装部署教程 因为学习RabbitMQ需要,需要安装RabbitMQ,网上找资料,RabbitMQ官方提供了window版.Linux版.Docker版的管理页面,为 ...

最新文章

  1. 设置RGBColor
  2. 2019年首趟春运年货集装箱班列抵达北京
  3. 约束布局ConstraintLayout看这一篇就够了
  4. NSUserDefaults删除整个plist文件
  5. eclipse下新建py文件的辅助信息设置
  6. python向sqlite数据库中插入数据(变量)
  7. bean json转kotlin_Android kotlin插件神器Json直接生成javaBean
  8. [html] 如果列表元素li的兄弟元素为div,会产生什么情况?
  9. 内置函数补充 之 反射
  10. 基于Chrome浏览器的前端调试
  11. js中的instanceof运算符
  12. 用python打印心形_Python和Js打印心形
  13. 走进小作坊(十四)----web2.0策略指南
  14. Dbgview - 签名无效
  15. 男女逗段,瞅瞅有没有说到你
  16. FineReport中cjk编码转换
  17. 20145326蔡馨熤《信息安全系统设计基础》期末总结
  18. 固态硬盘和机械硬盘区别-表格对比
  19. python决策树算法代码_决策树算法的Python实例
  20. 基于 NCC/灰度信息 的模板匹配算法(QT + Opencv + C++),10ms内获取匹配结果,部分源码

热门文章

  1. 最好的聊天机器人平台,以建立一个聊天机器人
  2. 大年初一,给大家发红包了!
  3. hdoopHA的文件配置和安装hadoop和安装zookeeper
  4. 微信公众号,带参二维码/推广二维码的使用
  5. Cropper使用(图片裁切)
  6. cocoStudio工具的使用-----场景编辑器
  7. IBM AIX初级培训总结
  8. [JZOJ1320] 【Usaco2009 gold 】拯救奶牛
  9. Python文件读写模式与光标的移动
  10. 收到了两家公司的offer怎么选择?