Skip to content

Latest commit

 

History

History
496 lines (428 loc) · 18 KB

File metadata and controls

496 lines (428 loc) · 18 KB

硬件环境准备

  1. 最少节点个数3个
  2. 最低配置8C/16G/100G测试环境
  3. 最低网卡个数2个
  4. 磁盘个数,每台节点上3块空余的盘,用作ceph,大小无所谓(测试环境)
  5. centos操作系统,最好使用目前最新系统centos7.7
  6. 系统能够访问外部网络

安装 kolla-ansible 前的准备

  1. 关闭selinux和firewalld(所有节点)

  2. 修改对应的host和ip地址(control01)

    [root@control01 ~]# cat /etc/hosts
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    10.211.55.13  control01
    10.211.55.14  control02
    10.211.55.15  control03
  3. 在control01节点上安装 epel

    sudo yum install epel-release -y
  4. 安装python依赖(control01)

    sudo yum install -y python-devel libffi-devel gcc openssl-devel libselinux-python
  5. 安装ansible(2.5+版本)(control01节点上)

    • 目前 kolla 已经不再支持 2.5 以下的 ansible 的版本

      yum install -y python-pip    //安装pip
      pip install -U pip  //确保使用最新的pip
      pip install ansible  //安装ansible
    • 国内 pip 安装速度较慢的话,可以使用国内的 pip 源

      pip install ansible  -i https://pypi.tuna.tsinghua.edu.cn/simple
  6. 验证ansible版本

    [root@control01 ~]# ansible --version
    ansible 2.8.2
    config file = None
    configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
    ansible python module location = /usr/lib/python2.7/site-packages/ansible
    executable location = /usr/bin/ansible
    python version = 2.7.5 (default, Jun 20 2019, 20:27:34) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]
  7. 设置deploy节点(control01)免密登录其他的节点

    • 首先创建临时host文件,内容为所有的节点主机名

      [root@control01 ~]# cat host
      control01
      control02
      control03
    • 生成ssh公钥(control01)

      [root@control01 ~]# ssh-keygen //一直回车即可
    • 批量设置免密(control01)

      [root@control01 ~]# ssh-copy-id root@control01
      [root@control01 ~]# ssh-copy-id root@control02
      [root@control01 ~]# ssh-copy-id root@control03
    • 测试免密是否通过

      [root@control01 ~]# ansible all -i ~/host  -m ping
  8. 拷贝hosts文件到其他的节点上

    ansible all -i ~/host  -m copy -a "src=/etc/hosts dest=/etc/hosts"

安装 kolla-ansible 工具

  1. 本次安装最新的发布版本 stein 版本,所以我们使用 stein 版本的 kolla-ansible

  2. 如果操作系统没有安装 git 需要首先安装 git

    yum install -y git
  3. 之后克隆 kolla-ansible 的代码

    git clone https://github.com/openstack/kolla-ansible.git -b stable/stein
  4. 该步骤如果克隆较慢,可以自己下载压缩包,或者配置 git 代理

    [root@openstack-allinone kolla-ansible]# git branch //检查分支
    * stable/stein
    [root@openstack-allinone kolla-ansible]# pwd
    /root/kolla-ansible
    [root@openstack-allinone kolla-ansible]#
  5. 安装 kolla-ansible

    cd ~/kolla-ansible
    pip install . -i https://pypi.tuna.tsinghua.edu.cn/simple
  6. 创建配置文件目录

    sudo mkdir -p /etc/kolla
    sudo chown $USER:$USER /etc/kolla
  7. 拷贝 globals.yml 和 passwords.yml 文件到 /etc/kolla 目录下

    cp -r /usr/share/kolla-ansible/etc_examples/kolla/* /etc/kolla
  8. 拷贝 allinone 和 mutinode 文件到当前家目录下

    cp /usr/share/kolla-ansible/ansible/inventory/* ~/

部署 OpenStack 前的配置

  1. 修改multinode文件

    vi ~/multinode
    [control]
    # These hostname must be resolvable from your deployment host
    control01
    control02
    control03
    # 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]
    control01
    control02
    control03
    [compute]
    control01
    control02
    control03
    [monitoring]
    #monitoring01
    # 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=em1tunnel_interface=em1
    [storage]
    control01
    control02
    control03
  2. 修改globals.yml文件

    vi /etc/kolla/globals.yml
    修改如下选项
    kolla_install_type: "source"
    openstack_release: "stein"
    kolla_internal_vip_address: "10.211.55.200" //这个ip需要是管理网同一个网段的
    network_interface: "eth0"
    neutron_external_interface: "eth1"
    enable_cinder: "yes"
    enable_ceph: "yes"
    enable_ceph_dashboard: "no"
       ......其他的默认即可
    enable_neutron_provider_networks: "yes" //如果开启octavia,最好开启neutron的二层网络功能,否则octavia的boot_network不好处理。
    ceph_osd_store_type: "filestore" //在文件中添加该行,默认是bulesotre
  3. 准备ceph

    • 查看要被ceph使用的盘,本例是sdb sdc sdd

      [root@control01 kolla-ansible]# lsblk
      NAME                 MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
      sda                    8:0    0   100G  0 disk
      ├─sda1                 8:1    0   500M  0 part /boot
      └─sda2                 8:2    0  99.5G  0 part
        ├─VolGroup-lv_root 253:0    0    50G  0 lvm  /
        ├─VolGroup-lv_swap 253:1    0     2G  0 lvm  [SWAP]
        └─VolGroup-lv_home 253:2    0  47.6G  0 lvm  /home
      sdb                    8:16   0    10G  0 disk
      sdc                    8:32   0    10G  0 disk
      sdd                    8:48   0    10G  0 disk
      sr0                   11:0    1 119.3M  0 rom
      sr1                   11:1    1   918M  0 rom
    • 给磁盘打上标签(在所有的存储节点上)

      parted /dev/sdb -s -- mklabel gpt mkpart KOLLA_CEPH_OSD_BOOTSTRAP 1 -1
      parted /dev/sdc -s -- mklabel gpt mkpart KOLLA_CEPH_OSD_BOOTSTRAP 1 -1
      parted /dev/sdd -s -- mklabel gpt mkpart KOLLA_CEPH_OSD_BOOTSTRAP 1 -1
    • 检查磁盘是否打标记成功,检查是否多一个分区

      [root@control01 kolla-ansible]# lsblk
      NAME                 MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
      sda                    8:0    0   100G  0 disk
      ├─sda1                 8:1    0   500M  0 part /boot
      └─sda2                 8:2    0  99.5G  0 part
        ├─VolGroup-lv_root 253:0    0    50G  0 lvm  /
        ├─VolGroup-lv_swap 253:1    0     2G  0 lvm  [SWAP]
        └─VolGroup-lv_home 253:2    0  47.6G  0 lvm  /home
      sdb                    8:16   0    10G  0 disk
      └─sdb1                 8:17   0    10G  0 part
      sdc                    8:32   0    10G  0 disk
      └─sdc1                 8:33   0    10G  0 part
      sdd                    8:48   0    10G  0 disk
      └─sdd1                 8:49   0    10G  0 part
      sr0                   11:0    1 119.3M  0 rom
      sr1                   11:1    1   918M  0 rom

部署 openstack

  1. 执行 bootstrap,会安装 docker 一类所需要的工具(control01节点上)

    kolla-ansible  -i ~/multinode bootstrap-servers
  2. 确认cpu是否支持硬件虚拟化(control01)

    grep -E 'svm|vmx' /proc/cpuinfo
    #如果有回显,则下面的操作不需要,如果没有回显,说明cpu不支持硬件虚拟化,需要修改virt_type
    mkdir -p /etc/kolla/config/nova
    cat << EOF > /etc/kolla/config/nova/nova-compute.conf
    [libvirt]
    virt_type=qemu
    cpu_mode = none
    EOF
  3. docker 是从 docker hub 上面 pull openstack 镜像,国内的环境有点慢,所以这里配置了 docker 加速,当然也可以不配置这个步骤(所有节点)

    sudo mkdir -p /etc/docker
         sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://registry.docker-cn.com"]
    }
    EOF
    sudo systemctl daemon-reload
    sudo systemctl restart docker
  4. 生成 kolla 密码

    kolla-genpwd
  5. 执行 precheck

    kolla-ansible -i ~/multinode prechecks
  6. 执行 pull(可以不执行,deploy 的时候会自动 pull)

    kolla-ansible -i ~/multinode pull
  7. 执行deploy

    kolla-ansible -i ~/multinode deploy

调整 ceph

  1. 查看ceph状态

    [root@control01 ~]# docker exec ceph_mon ceph -s
      cluster:
        id:     8b0dd7b5-da1e-434c-bbc2-aa1963c3bdaf
        health: HEALTH_WARN
                too few PGs per OSD (10 < min 30)
      services:
        mon: 3 daemons, quorum 10.211.55.13,10.211.55.14,10.211.55.15    (age 44m)
        mgr: control01(active, since 44m), standbys: control02,control03
        osd: 9 osds: 9 up (since 43m), 9 in (since 43m)
      data:
        pools:   4 pools, 32 pgs
        objects: 0 objects, 0 B
        usage:   9.0 GiB used, 81 GiB / 90 GiB avail
        pgs:     32 active+clean
  2. 计算pg数

    [root@control01 ~]# docker exec -it -u root ceph_mon bash
    (ceph-mon)[root@control01 /]# ceph osd pool set images pg_num 128
    set pool 1 pg_num to 128
    (ceph-mon)[root@control01 /]# ceph osd pool set images pgp_num 128
    set pool 1 pgp_num to 128
    (ceph-mon)[root@control01 /]# ceph osd pool set volumes pg_num 128
    set pool 2 pg_num to 128
    (ceph-mon)[root@control01 /]# ceph osd pool set volumes pgp_num 128
    set pool 2 pgp_num to 128
    (ceph-mon)[root@control01 /]# ceph osd pool set backups pg_num 32
    set pool 3 pg_num to 32
    (ceph-mon)[root@control01 /]# ceph osd pool set backups pgp_num 32
    set pool 3 pgp_num to 32
    (ceph-mon)[root@control01 /]# ceph osd pool set vms pg_num 32
    set pool 4 pg_num to 32
    (ceph-mon)[root@control01 /]# ceph osd pool set vms pgp_num 32
    set pool 4 pgp_num to 32
    (ceph-mon)[root@control01 /]# ceph -s
    cluster:
        id:     8b0dd7b5-da1e-434c-bbc2-aa1963c3bdaf
       health: HEALTH_OK
    
    services:
       mon: 3 daemons, quorum 10.211.55.13,10.211.55.14,10.211.55.15     (age 52m)
       mgr: control01(active, since 52m), standbys: control02, control03
       osd: 9 osds: 9 up (since 51m), 9 in (since 51m)
    
    data:
        pools:   4 pools, 320 pgs
       objects: 0 objects, 0 B
       usage:   9.1 GiB used, 81 GiB / 90 GiB avail
       pgs:     320 active+clean
    
    (ceph-mon)[root@control01 /]#

使用 openstack

  1. 安装openstack client

    pip install python-openstackclient -i https://pypi.tuna.tsinghua.edu.cn/simple
  2. 生成admin-rc文件

    kolla-ansible -i ~/multinode post-deploy
    默认是生成的文件名是: /etc/kolla/admin-openrc.sh

配置 octavia

  1. 克隆octavia仓库

    git clone https://github.com/openstack/octavia.git -b stable/stein
  2. 创建证书

    [root@control01 ~]# cd octavia/
    [root@control01 ~]# grep octavia_ca /etc/kolla/passwords.yml
    octavia_ca_password: OgY7o4XSLqRIrEWkQOJPeuGeDZgMI8zpyYPIlxvE
    [root@control01 octavia]# sed -i 's/foobar/OgY7o4XSLqRIrEWkQOJPeuGeDZgMI8zpyYPIlxvE/g' bin/create_certificates.sh
    [root@control01 octavia]# ./bin/create_certificates.sh cert $(pwd)/etc/certificates/openssl.cnf
    • 之后会得到一个cert文件夹
    [root@control01 octavia]# ls -al cert/
    总用量 60
    drwxr-xr-x.  4 root root 4096 7月  22 02:45 .
    drwxr-xr-x. 19 root root 4096 7月  22 02:45 ..
    -rw-r--r--.  1 root root 1294 7月  22 02:45 ca_01.pem
    -rw-r--r--.  1 root root  989 7月  22 02:45 client.csr
    -rw-r--r--.  1 root root 1704 7月  22 02:45 client.key
    -rw-r--r--.  1 root root 4405 7月  22 02:45 client-.pem
    -rw-r--r--.  1 root root 6109 7月  22 02:45 client.pem
    -rw-r--r--.  1 root root   71 7月  22 02:45 index.txt
    -rw-r--r--.  1 root root   21 7月  22 02:45 index.txt.attr
    -rw-r--r--.  1 root root    0 7月  22 02:45 index.txt.old
    drwxr-xr-x.  2 root root 4096 7月  22 02:45 newcerts
    drwx------.  2 root root 4096 7月  22 02:45 private
    -rw-r--r--.  1 root root    3 7月  22 02:45 serial
    -rw-r--r--.  1 root root    3 7月  22 02:45 serial.old
    • 接下来将认证文件放到kolla部署节点上的/etc/kolla/octavia目录里
    [root@control01 octavia]# mkdir /etc/kolla/config/octavia
    [root@control01 octavia]# cp cert/{private/cakey.pem,ca_01.pem,client.pem} /etc/kolla/config/octavia/
    [root@control01 octavia]# ls -al /etc/kolla/config/octavia/
    总用量 24
    drwxr-xr-x. 2 root root 4096 7月  22 02:59 .
    drwxr-xr-x. 4 root root 4096 7月  22 02:57 ..
    -rw-r--r--. 1 root root 1294 7月  22 02:59 ca_01.pem
    -rw-r--r--. 1 root root 1743 7月  22 02:59 cakey.pem
    -rw-r--r--. 1 root root 6109 7月  22 02:59 client.pem
  3. 构建镜像

    [root@control01 ~]# cd ~
    [root@control01 ~]# git clone https://github.com/openstack/diskimage-builder
    #克隆disk-builder工具,目录在/root/diskimage-builder下
    [root@control01 ~]# pip install diskimage-builder/ -i https://pypi.tuna.tsinghua.edu.cn/simple
    [root@control01 ~]# pwd
    /root
    [root@control01 ~]# yum install qemu-img -y
    #构建镜像的时候需要改工具
    [root@control01 ~]# cd octavia/diskimage-create/
    [root@control01 diskimage-create]# ./diskimage-create.sh  -i centos -s 3
    • 构建完成后,当前目录下会生成amphora-x64-haproxy.qcow2文件。改步骤过程较慢,使用的是国外的源,而且可能会失败。实际上没必要每次去构建这个镜像,直接使用现有的镜像即可。镜像下载地址
  4. 上传镜像到openstack中

    source  /etc/kolla//admin-openrc.sh
    openstack image create --container-format bare --disk-format qcow2 --private --file amphora-x64-haproxy.qcow2 --tag amphora amphora
    [root@control01 ~]# openstack image list
    +--------------------------------------+--------- +--------+
    | ID                                   | Name    |  Status |
    +--------------------------------------+--------- +--------+
    | 16c35d86-9e05-4a24-94ec-0884ea69ccef | amphora |  active |
    +--------------------------------------+--------- +--------+
  5. 创建openstack网络,该网络必须要和network节点,双向通信。

    [root@control01 ~]# openstack network create --provider-physical-network physnet1 --provider-network-type flat --external --share lb-net
    [root@control01 ~]# openstack subnet create --allocation-pool start=10.211.55.150,end=10.211.55.200 --network lb-net --subnet-range 10.211.55.0/24 --gateway 10.211.55.1 lb-subnet
    • 根据回显,我们拿到该网络的id(而不是子网的id),后面会用到,本次的id:21f243d8-606d-4430-8bfd-16e9e0d3acab
  6. 创建octavia虚拟机flavor

    [root@control01 ~]# openstack flavor create --disk 40 --private --ram 1024 --vcpus 1 octavia_flavor
    • 拿到该flavor的id,后面会用到,本例为:2354f1c2-fc2d-487e-bef0-b12b7f095718
  7. 创建安全组并配置安全组规则

    [root@control01 ~]# openstack security group create --description 'used by Octavia amphora instance' octavia
    [root@control01 ~]# openstack security group rule create --protocol icmp ec40be6f-bad2-4c2c-b014-a95c362d24a1
    [root@control01 ~]# openstack security group rule create --protocol tcp --dst-port 5555 --egress ec40be6f-bad2-4c2c-b014-a95c362d24a1
    [root@control01 ~]# openstack security group rule create --protocol tcp --dst-port 9443 --ingress ec40be6f-bad2-4c2c-b014-a95c362d24a1
    • 其中ec40be6f-bad2-4c2c-b014-a95c362d24a1为安全组的id。
  8. 部署octavia(主要目的是为了创建octavia的用户)

    • 修改vim /etc/kolla/globals.yml

      enable_octavia: "yes"
    • 开始部署octaiva

      [root@control01 ~]# kolla-ansible deploy -i ~/multinode  --tags octavia,horizon,haproxy
  9. 创建octavia虚拟机的key,其中key的名字必须为octavia_ssh_key

    [root@control01 ~]# grep octavia_keystone_password /etc/kolla/passwords.yml
    octavia_keystone_password:       5RPTorrBeNeLt5a0WBG5OXAPGHTsnSv7jqpxnD0O
    [root@control01 ~]# openstack --os-username octavia --os-password 5RPTorrBeNeLt5a0WBG5OXAPGHTsnSv7jqpxnD0O  keypair create --public-key ~/.ssh/id_rsa.pub octavia_ssh_key
  10. 更新globas.yml文件并reconfigure

    • vim /etc/kolla/globals.yml在文件最后增加如下字段

      octavia_loadbalancer_topology: "ACTIVE_STANDBY"
      octavia_amp_boot_network_list: 21f243d8-606d-4430-8bfd-16e9e0d3acab
      octavia_amp_secgroup_list: ec40be6f-bad2-4c2c-b014-a95c362d24a1
      octavia_amp_flavor_id: 2354f1c2-fc2d-487e-bef0-b12b7f095718
    • reconfigure octavia

      [root@control01 ~]# kolla-ansible -i ~/multinode  reconfigure --tags octavia

octavia 的使用

  1. 登录到horizon创建router和子网,并把子网绑定到router上
    • 项目->网络->路由->创建
    • 项目->网络->网络->创建网络和子网
    • 项目->网络->路由->选中路由器->接口->添加接口
  2. 创建loadbalancer
    • 项目->网络->负载均衡器中根据提示创建即可。