基于kolla部署openstack
基于kolla部署openstack
部署环境
使用多节点部署,一个控制节点,两个计算节点。基于CentOS8,采用docker-19.03.14、ansible-2.9.0以及python-3.6.8
部署文档
部署流程
按照文档将所有的依赖以及kolla-ansible安装好,一定要注意kolla-ansible版本不能高于2.10,不然会出错。
我的部署情况时一个控制节点,两个计算节点。
-
在控制节点上创建公钥,并将公钥传至计算节点的.ssh文件下,并写入authorized_keys中。以实现控制节点无密码ssh至计算节点。同时在ssh的目的机器上的
/etc/sudoers
文件中加入ALL ALL=(ALL) NOPASSWD:ALL
,解决出现的Missing sudo password
问题。 -
在经过上述设置之后,在multinode的配置中,compute节点只需要填上计算节点的地址,不用在添加
ansible_user
等,我的multinnode配置如下:[control] # These hostname must be resolvable from your deployment host #control node ip xxx.xxx.xxx.xxx # The above can also be specified as follows: #control[01:03] ansible_user=kolla # The network nodes are where your l3-agent and loadbalancers will run # This can be the same as a host in the control group [network:children] control [compute] #compute node ip xxx.xxx.xxx.xxx [monitoring] #control node ip xxx.xxx.xxx.xxx # When compute nodes and control nodes use different interfaces, # you need to comment out "api_interface" and other interfaces from the globals.yml # and specify like below: #compute01 neutron_external_interface=eth0 api_interface=em1 storage_interface=em1 tunnel_interface=em1 [storage:children] compute [deployment] localhost ansible_connection=local become=true
-
/etc/kolla/globals.yml
中的配置kolla_base_distro:"centos"
kolla_install_type:"source"
network_interface
设置成对外的网卡neutron_external_interface
设置为对内的网卡kolla_internal_vip_address
必须是为使用的地址openstack_release
设置为对应的版本号,在接下来才能pull到对应的镜像,否则默认pull到最新的镜像
-
使用all-in-one将需要的镜像pull到控制节点上:依次执行
kolla-ansible bootstrap -i all-in-one
和kolla-ansible pull -i all-in-one
,这一步会非常久,所以推荐先在/etc/docker/daemon.json
中添加上国内的镜像源地址("registry-mirrors":["xxxx"]
)。并执行systemctl daemon-reload
和systemctl restart docker
。 -
按照文档的 multinode deployment of kolla 中建立本地仓库,一定要注意地址ip要写正确,尤其是
docker_registroes: xxx.xxx.xxx.xxx:40000
,因为在/usr/local/share/kolla/tools/start-registry
中将端口4000映射到了5000,若按照完当那样添加会出错。 -
将控制节点的镜像push到本地仓库中,我是用的脚本如下:参考博客
#!/usr/bin/env bash registry_ip='xxx.xxx.xxx.xxx' registry_port='4000' openstack_version_tag='ussuri' images=$(docker images | grep -v registry | grep -v REPOSITORY | grep -v $registry_ip | awk '{print $1}') for image in $images; do docker image tag $image:$openstack_version_tag $registry_ip:$registry_port/$image:$openstack_version_tag done images=$(docker images | grep $registry_ip | awk '{print $1}') for image in $images; do docker push $image:$openstack_version_tag #docker rmi -f $image:$openstack_version_tag done
-
接下来在执行
kolla-ansible bootstrap-servers -i multinode
和kolla-ansible deploy -i multinode
即可。
问题记录
-
在 bootstrap-servers 的过程中,控制节点ssh到计算节点出现
Permission denied
:解决:通过创建公钥授权,实现无密码ssh可以解决此问题。
-
在解决上述问题后,会出现一个
Missing sudo password
问题:解决:在ssh目的机器的
/etc/sudoers
文件中加上如下语句ALL ALL=(ALL) NOPASSWD: ALL
-
resecure registry出现connection refused问题
- 因为常规情况下keystone和registry都会使用端口5000,所以在配置registry时需要将端口4000映射到端口5000,避免出现“Timeout when waiting for xxx:5000 to stop.”问题。
- 把daemon.json中的insecure registry改为xxx:4000。
-
在创建本地仓库的基础上,在kolla-ansible pull时出现镜像找不到的情况
- 因为此时本地仓库上没有所需的镜像,我们需要先从把所需的镜像pull下来,并push到本地仓库上。
- 使用all-in-one将镜像pull下来。注意,记得修改global里的openstack版本,最好配置一下daemon中的镜像地址,改为国内的地址。
- 将所有镜像打上tag并push至本地仓库中。