美文网首页openstack
容器化部署openstack pike

容器化部署openstack pike

作者: 陈sir的知识图谱 | 来源:发表于2018-01-09 19:10 被阅读0次

    原创文章,转债请注明出处

    开源部署方案

    社区的部署方案,想要直接拿来用基本是不可能的,总有很多坑要填。记录一下容器化部署的坑。

    单机部署方式(all-in-one)

    注意:

    • 单机部署方式只能是调研使用,熟悉openstack,生产环境需要的规划和模型比单机复杂的多。不要把单机方式用于生产,最好连开发环境都不要上,只纯调研。

    linux 初始化准备

    参看我的文章 linux初始化

    机器网络介绍

    IP 网络类型 网卡 openstack 网络
    192.168.10.110 NAT ens33 管理网络 (managment nework)
    192.168.2.43 bridge ens37 外部网络 (external network)
    1. ens33,NAT网络里,设置的IP是:192.168.10.110,日后Horizon访问就是通过这个IP地址
    2. ens37,桥接模式,ip其实是dhcp分配,这个其实是让neutron的br-ex 绑定使用,虚拟机是通过这块网卡访问外网。

    在机器上连接虚拟机,是通过ens33的IP进行访问,如果你通过ens37 ssh,安装过程,会导致ssh中断。

    默认设置,其实两块网卡都是可以访问到互联网。也可以是其中一块网卡访问外网,对于测试来说,基本问题不大。

    如果在服务器直接安装,两块网卡的IP,就算是同一个网段,也是没啥问题的。

    安装步骤

    安装基础包

    yum install python-devel libffi-devel gcc openssl-devel git python-pip
    

    安装docker

    传送门

    设置docker

    设置 volume 挂载方式, 关于这个设置的意义,可以参看我的另一篇文章

    mkdir /etc/systemd/system/docker.service.d
    tee /etc/systemd/system/docker.service.d/kolla.conf << 'EOF'
    [Service]
    MountFlags=shared
    EOF
    

    设置 docker 镜像与加速器
    vim /etc/docker/daemon.json

    {
      "registry-mirrors": ["https://registry.docker-cn.com"],
      "insecure-registries": ["192.168.10.110:4000"]
    }
    

    重启相关服务

    systemctl daemon-reload
    systemctl enable docker
    systemctl restart docker
    

    安装 ansible

    yum install ansible
    

    下载kolla官方提供的镜像

    http://tarballs.openstack.org/kolla/images/

    wget http://tarballs.openstack.org/kolla/images/centos-binary-registry-pike.tar.gz
    tar zxvf centos-binary-registry-pike.tar.gz -C /opt/registry/
    

    安装 docker registry

    docker run -d -v /opt/registry:/var/lib/registry -p 4000:5000 \
    --restart=always --name registry registry:2
    

    默认docker的registry是使用5000端口,对于OpenStack来说,有端口冲突,所以改成4000

    kolla-ansible

    下载kolla-ansible的代码

    cd /home
    git clone http://git.trystack.cn/openstack/kolla-ansible –b stable/pike
    

    安装kolla-ansible

    cd kolla-ansible
    pip install .
    

    复制相关文件

    cp -r etc/kolla /etc/kolla/
    cp ansible/inventory/* /home/
    

    如果是在虚拟机里装kolla,希望可以启动再启动虚拟机,那么你需要把virt_type=qemu,默认是kvm

    mkdir -p /etc/kolla/config/nova
    cat << EOF > /etc/kolla/config/nova/nova-compute.conf
    [libvirt]
    virt_type=qemu
    cpu_mode = none
    EOF
    

    生成密码文件

    kolla-genpwd
    

    编辑 /etc/kolla/passwords.yml

    keystone_admin_password: openstack
    

    这是登录Dashboard,admin使用的密码,你可以根据自己需要进行修改。

    编辑 /etc/kolla/globals.yml 文件

    kolla_internal_vip_address: "192.168.10.110" # 如果配置了ha proxy 这里要使用一个没被占用的IP
    openstack_release: "5.0.1" #与镜像版本一致
    docker_registry: "192.168.10.110:4000"
    docker_namespace: "lokolla" #与镜像meta一致
    network_interface: "ens33"
    neutron_external_interface: "ens37"
    enable_haproxy: "no"
    

    安装OpenStack

    拉取镜像

    kolla-ansible pull
    

    预检查

    kolla-ansbile precheks -i /home/all-in-one
    

    部署

    kolla-ansible deploy -i /home/all-in-one 
    

    验证部署

    kolla-ansible post-deploy
    

    这样就创建 /etc/kolla/admin-openrc.sh 文件

    安装OpenStack client端

    pip install python-openstackclient
    

    编辑 /usr/share/kolla-ansible/init-runonce,

    网络需要根据实际情况修改

    EXT_NET_CIDR='192.168.2.0/24'
    EXT_NET_RANGE='start=192.168.2.30,end=192.168.2.40'
    EXT_NET_GATEWAY='192.168.2.1'
    

    这里解析一下,192.168.2.0的网络,就是我上面ens37接的网络,这个网络是通过路由器访问互联网。配置好这个,装完虚拟机就可以直接ping通。

    运行

    source /etc/kolla/admin-openrc.sh
    cd /usr/share/kolla-ansible
    ./init-runonce
    

    最后你可以创建一个虚拟机来玩玩,根据最后的命令提示

    openstack server create \
        --image cirros \
        --flavor m1.tiny \
        --key-name mykey \
        --nic net-id=2ba93782-71e2-44d6-ad64-796c5853dcce \
        demo1
    

    这个时候,你可以登录Dashboard,给虚拟机分配一个floating ip,如果顺利,你应该就可以直接ping 通 floating ip的地址。

    遇到的问题

    1 安装完成后 horizon 无法访问( 504 超时)

    解决方案
    进入horizon容器,修改配置

    docker exec -it horizon bash # 进入容器
    

    修改容器内的配置文件

    vi /etc/httpd/conf.d/openstack-dashboard.conf
    

    将 WSGIApplicationGroup %{GLOBAL} 添加到openstack-dashboard.conf 中
    修改后完整的openstack-dashboard.conf 内容如下

    WSGIDaemonProcess dashboard
    WSGIProcessGroup dashboard
    WSGISocketPrefix run/wsgi
    WSGIApplicationGroup %{GLOBAL} # 修改这里
    WSGIScriptAlias /dashboard /usr/share/openstack-dashboard/openstack_dashboard/wsgi/django.wsgi
    Alias /dashboard/static /usr/share/openstack-dashboard/static
    
    <Directory /usr/share/openstack-dashboard/openstack_dashboard/wsgi>
      Options All
      AllowOverride All
      Require all granted
    </Directory>
    
    <Directory /usr/share/openstack-dashboard/static>
      Options All
      AllowOverride All
      Require all granted
    </Directory>
    

    修改 horizon 容器内/etc/openldap/ldap.conf 文件
    添加 NETWORK_TIMEOUT 2

    修改后的文件内容如下

    
    # LDAP Defaults
    #
    
    # See ldap.conf(5) for details
    # This file should be world readable but not world writable.
    
    #BASE   dc=example,dc=com
    #URI    ldap://ldap.example.com ldap://ldap-master.example.com:666
    
    #SIZELIMIT      12
    #TIMELIMIT      15
    #DEREF          never
    
    TLS_CACERTDIR   /etc/openldap/certs
    NETWORK_TIMEOUT 2  #修改这里
    # Turning this off breaks GSSAPI used with krb5 when rdns = false
    SASL_NOCANON    on
    

    以上两个问题都是官方bug,而且存在很久了,都一直没有修复(社区东西的坑,简直不要太多,(╯‵□′)╯︵┻━┻)。
    参见 bug 描述 1
    参见 bug 描述 2

    参考文档

    相关文章

      网友评论

        本文标题:容器化部署openstack pike

        本文链接:https://www.haomeiwen.com/subject/uylgnxtx.html