Deploy OpenStack offline based on Kolla 系统：CentOS Linux release 7.9.2009 (Core) 规格：4C8G 存储 50G 系统盘 20G 数据盘（cinder） 网络规划 ens33 仅主机（管理网、ip：192.168.100.10/24） ens34 NAT（业务网、CICR：192.168.10.0/24 、gw：192.168.10.2） VIP 192.168.100.100 初始化环境 1、修改主机名 hosts [root@kolla ~]# hostnamectl set-hostname kolla rabbitmq 可能需要能够进行主机名解析 2、配置网络 [root@kolla ~]# cat > /etc/sysconfig/network-scripts/ifcfg-ens34 <<EOF NAME=ens34 DEVICE=ens34 TYPE=Ethernet ONBOOT="yes" BOOTPROTO="none" EOF [root@kolla ~]# nmcli con reload && nmcli con up ens34 准备两块网卡、ens34 为 业务网络 3、上传软件包 99cloud_skyline.tar.gz // skyline 容器镜像 kolla_centos_train_min.tar.gz // 容器镜像（最小化） kolla_centos_train_rpm.tar.gz // 依赖软件包 kolla_centos_train_whl.tar.gz // pip依赖包 4、创建 lvm [root@kolla ~]# pvcreate /dev/sdb [root@kolla ~]# vgcreate cinder-volumes /dev/sdb 注：卷组名为 cinder_volume_group 参数 5、配置 源 配置 yum [root@kolla ~]# mkdir /etc/yum.repos.d/bak [root@kolla ~]# mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak [root@kolla ~]# tar xf kolla_centos_train_rpm.tar.gz -C /opt/ [root@kolla ~]# cat > /etc/yum.repos.d/local.repo << EOF [kolla] name=kolla - acha baseurl=file:///opt/kolla_centos_train_rpm/ gpgcheck=0 enabled=1 EOF 安装 依赖 [root@kolla ~]# yum install -y python-devel libffi-devel gcc openssl-devel \ libselinux-python python2-pip python-pbr ansible 安装常用软件 [root@kolla ~]# yum install -y vim unzip net-tools lrzsz tree bash-completion 部署环境 1、安装 kolla-ansible [root@kolla ~]# tar xf kolla_centos_train_whl.tar.gz [root@kolla ~]# cd kolla_centos_train_whl [root@kolla kolla_centos_train_whl]# ./install.sh 2、配置 准备配置文件 [root@kolla kolla_centos_train_whl]# mkdir -p /etc/kolla [root@kolla kolla_centos_train_whl]# cd /etc/kolla [root@kolla kolla]# chown $USER:$USER /etc/kolla [root@kolla kolla]# cp -r /usr/share/kolla-ansible/etc_examples/kolla/* /etc/kolla [root@kolla kolla]# cp /usr/share/kolla-ansible/ansible/inventory/* /etc/kolla 修改ansible配置文件 [root@kolla kolla]# cat << EOF | sed -i '/^\[defaults\]$/ r /dev/stdin' /etc/ansible/ansible.cfg host_key_checking=False pipelining=True forks=100 EOF 忽略 DeprecationWarning 提示 cat -n /usr/lib/python2.7/site-packages/ansible/parsing/vault/__init__.py | tail -n +41 | head -n 5 41 try: 42 #with warnings.catch_warnings(): 43 # warnings.simplefilter("ignore", DeprecationWarning) 44 warnings.filterwarnings("ignore") 45 from cryptography.exceptions import InvalidSignature 检查inventory [root@kolla /etc/kolla]# ansible -i all-in-one all -m ping 生成密码 [root@kolla kolla]# kolla-genpwd 修改 keystone_admin_password [root@kolla kolla]# sed -i 's#keystone_admin_password:.*#keystone_admin_password: kolla#g' /etc/kolla/passwords.yml [root@kolla kolla]# cat /etc/kolla/passwords.yml | grep keystone_admin_password keystone_admin_password: kolla 修改全局配置文件globals.yml（控制安装、配置组件） [root@kolla kolla]# cp /etc/kolla/globals.yml{,.bak} [root@kolla kolla]# cat >> /etc/kolla/globals.yml <<EOF # Kolla options kolla_base_distro: "centos" kolla_install_type: "binary" openstack_release: "train" kolla_internal_vip_address: "192.168.100.100" # Neutron - Networking Options network_interface: "ens33" neutron_external_interface: "ens34" neutron_plugin_agent: "openvswitch" enable_neutron_provider_networks: "yes" # OpenStack services enable_cinder: "yes" enable_cinder_backend_lvm: "yes" EOF 参数 说明 kolla_base_distro 容器镜像的 linux 发行版（ubuntu、centos、debain） kolla_install_type 组件构建类型（binary、source） openstack_release openstack 版本（train） kolla_internal_vip_address 高可用VIP（管理网地址） docker_registry Docker 镜像仓库 docker_namespace 镜像仓库所在命名空间（dockerhub 为 kolla） network_interface 管理网卡 neutron_external_interface 业务网卡 neutron_plugin_agent 网络插件（openvswitch，linuxbridge） enable_neutron_provider_networks 启用业务网络 enable_cinder 启用 cinder enable_cinder_backend_lvm 指定 cinder 后端存储（lvm） 3、部署 # 不启用 docker 源 [root@kolla kolla]# sed -i.bak "s/enable_docker_repo: true/enable_docker_repo: false/g" \ /usr/share/kolla-ansible/ansible/roles/baremetal/defaults/main.yml 忽略 docker版本 sed -i "9a \ \ ignore_errors: yes" \ /usr/share/kolla-ansible/ansible/roles/prechecks/tasks/service_checks.yml # 预配置，安装docker、docker sdk、关闭防火墙、配置时间同步等 [root@kolla kolla]# kolla-ansible -i ./all-in-one bootstrap-servers # 部署前检查环境 [root@kolla kolla]# kolla-ansible -i ./all-in-one prechecks # 导入镜像 [root@kolla kolla]# docker load -i /root/kolla_centos_train_min.tar.gz # 执行实际部署，运行对应组件容器 [root@kolla kolla]# kolla-ansible -i ./all-in-one deploy # 生成openrc文件 [root@kolla kolla]# kolla-ansible post-deploy 4、检查 [root@kolla kolla]# docker ps -a | grep -v Up [root@kolla kolla]# docker ps -a | wc -l 38 个容器 [root@kolla kolla]# lvs | grep cinder 安装 OpenStack 客户端 安装openstack客户端 [root@kolla kolla]# yum install -y python-openstackclient 运行 cirros 实例 [root@kolla kolla]# mkdir -p /opt/cache/files/ [root@kolla kolla]# mv cirros-0.4.0-x86_64-disk.img /opt/cache/files/ # 定义init-runonce示例脚本外部网络配置 [root@kolla kolla]# vim /usr/share/kolla-ansible/init-runonce EXT_NET_CIDR=${EXT_NET_CIDR:-'192.168.10.0/24'} EXT_NET_RANGE=${EXT_NET_RANGE:-'start=192.168.10.50,end=192.168.10.200'} EXT_NET_GATEWAY=${EXT_NET_GATEWAY:-'192.168.10.2'} # 执行脚本，上传镜像到glance，创建内部网络、外部网络、flavor、ssh key，并运行一个实例 [root@kolla kolla]# source /etc/kolla/admin-openrc.sh [root@kolla kolla]# /usr/share/kolla-ansible/init-runonce [root@kolla kolla]# openstack server create \ --image cirros \ --flavor m1.tiny \ --key-name mykey \ --network demo-net \ demo1 部署 Skyline [root@kolla ~]# database_password=`awk '/^database_password/ {print $2}' /etc/kolla/passwords.yml` [root@kolla ~]# docker exec -it mariadb mysql -uroot -p$database_password \ -e "CREATE DATABASE skyline DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; GRANT ALL PRIVILEGES ON skyline.* TO 'skyline'@'%' IDENTIFIED BY '000000';" [root@kolla ~]# docker exec -it mariadb mysql -uroot -p$database_password -e "show databases" | grep skyline [root@kolla ~]# docker exec -it mariadb mysql -uroot -p$database_password -e "select user,host from mysql.user;" | grep skyline [root@kolla ~]# source /etc/kolla/admin-openrc.sh [root@kolla ~]# openstack user create --domain default --password 000000 skyline +---------------------+----------------------------------+ | Field | Value | +---------------------+----------------------------------+ | domain_id | default | | enabled | True | | id | f437975f5b3e424382e4ac939274a92b | | name | skyline | | options | {} | | password_expires_at | None | +---------------------+----------------------------------+ [root@kolla ~]# openstack role add --project service --user skyline admin [root@kolla ~]# mkdir -p /etc/skyline /var/log/skyline /var/lib/skyline [root@kolla ~]# cat > /etc/skyline/skyline.yaml <<EOF default: database_url: 'mysql://skyline:000000@192.168.100.100:3306/skyline' prometheus_endpoint: 'http://localhost:9091' openstack: keystone_url: 'http://192.168.100.100:5000/v3' default_region: RegionOne interface_type: public system_user_name: 'skyline' system_user_password: '000000' EOF [root@kolla ~]# docker load -i /root/99cloud_skyline.tar.gz [root@kolla ~]# docker run -d --name skyline_bootstrap -e KOLLA_BOOTSTRAP="" \ -v /etc/skyline/skyline.yaml:/etc/skyline/skyline.yaml \ --net=host 99cloud/skyline:latest [root@kolla ~]# docker logs skyline_bootstrap + echo '/usr/local/bin/gunicorn -c /etc/skyline/gunicorn.py skyline_apiserver.main:app' + mapfile -t CMD ++ tail /run_command ++ xargs -n 1 + [[ -n 0 ]] + cd /skyline/libs/skyline-apiserver/ + make db_sync poetry run alembic upgrade head Skipping virtualenv creation, as specified in config file. /usr/local/lib/python3.8/dist-packages/pymysql/cursors.py:170: Warning: (1280, "Name 'alembic_version_pkc' ignored for PRIMARY key.") result = self._query(query) + exit 0 [root@kolla ~]# docker rm -f skyline_bootstrap [root@kolla ~]# docker run -d --name skyline \ --restart=always \ -v /etc/skyline/skyline.yaml:/etc/skyline/skyline.yaml \ --net=host \ 99cloud/skyline:latest
Glance 创建镜像 glance image-create --name "cirros-0.3.2" --disk-format qcow2 \ --container-format bare --progress < cirros-0.3.2-x86_64-disk.img 查看镜像列表 glance image-list 查看镜像详细信息 glance image-show <ID> 删除镜像 glance image-delete <ID> 更新镜像 glance image-update [opt] <ID> Nova Nova 对镜像进行管理 通过快照创建镜像。 nova image-create [--show] [--poll] <server> <name> ：做快照的实例的 名字 / ID ：快照名字 查询镜像列表 nova image-list 查询镜像详细信息 nova image-show <image> ： ID / 镜像名字 Nova 管理安全组规则 创建安全组 nova secgroup-create <name> <description> ： 安全组名字 ： 安全组描述 安全组添加规则 nova secgroup-add-rule <secgroup> <ip-proto> <from-port> <to-port> <cidr> : 安全组名字戒者 ID : IP协议(icmp，tcp，udp) ：起始端口 ：结束端口 ：网络地址 Nova 管理虚拟机类型 创建一个虚拟机类型 nova flavor-create [--ephemeral <ephemeral>] 临时磁盘大小，单位为 GB [--swap <swap>] 交换分区大小 [--rxtx-factor <factor>] 传输因子，默认 1 [--is-public<is-public>] 是否共享 <name> <id> <ram> <disk> <vcpus> 固定参数说明: ：虚拟机类型名字 ：虚拟机类型 ID ：虚拟内存大小 ：磁盘大小 ：虚拟内核个数 Nova 实例管理 启动实例 nova boot [--flavor <flavor>] 虚拟机类型 [--image <image>] 选用的镜像 [--image-with <key=value>] 镜像的元数据属性 [--boot-volume <volume_id>] 启动逻辑卷的 ID [--snapshot <snapshot_id>] 快照 [--num-instances <number>] 实例数量 [--meta<key=value>] 元数据 [--file <dst-path=src-path>] 文件 [--key-name <key-name>] 密钥名称 [--user-data <user-data>] 注入的用户数据 [--availability-zone <availability-zone>] 可用域 [--security-groups <security-groups>] 安全组 [--block-device-mapping <dev-name=mapping>] 块存储格式化 [--block-device key1=value1[，key2=value2...]] 块设备参数 [--swap <swap_size>] 交换分区大小 [--ephemeral size=<size>[，format=<format>]] 连接块存储大小 [--hint <key=value>] 自定义数据 [--nic <net-id=net-uuid，v4-fixed-ip=ip-addr，port-id=port-uuid>] 配置 IP [--config-drive <value>] 驱动使能 [--poll] 显示创建进度 <name> ： 实例名称 查看实例列表 nova list 查看实例具体的配置信息 nova flavor-show m1.small 查看该实例在机器的具体位置的命令如下 nova show Cloud_test Nova 对逻辑卷的管理 通过 Nova 创建逻辑卷 nova volume-create [--snapshot-id <snapshot-id>] 通过快照创建逻辑卷的快照ID [--image-id <image-id>] 通过快照创建逻辑卷的镜像ID [--display-name <display-name>] 逻辑卷名称 [--display-description <display-description>] 逻辑卷描述 [--volume-type <volume-type>] 逻辑卷类型 [--availability-zone <availability-zone>] 逻辑卷可用域 <size> ：大小 Neutron 列出系统扩展命令 neutron ext-list -c alias -c name 创建网络 neutron net-create ext-net --shared --router:external=True 创建子网 neutron subnet-create ext-net \ --name ext-subnet \ --allocation-pool start=172.24.7.100,end=172.24.7.200 \ --disable-dhcp \ --gateway 172.24.7.254 \ 172.24.7.0/24 创建用户网络 neutron net-create demo-net 创建用户子网 neutron subnet-create demo-net --name demo-subnet \ --gateway 10.0.0.1 \ 10.0.0.0/24 创建路由 neutron router-create router1 创建路由网关接口 neutron router-interface-add router1 demo-subnet \ Added interface 70c3c2af-cc96-4e5c-80aa-d9797656e836 to router router1 neutron router-gateway-set router1 ext-net \ Set gateway for router router1 Cinder 创建卷类型 cinder type-create lvm 查询 type 标识的卷类型 cinder type-list 创建 cinder 存储卷 cinder create [--consisgroup-id <consistencygroup-id>] [--snapshot-id <snapshot-id>] 从特定的快照来创建 [--source-volid <source-volid>] 从已创建的Cinder卷来创建一张内容相同的卷 [--source-replica <source-replica>] [--image-id <image-id>] 从一个已创建的镜像来构建一个带镜像内容的Cinder卷 [--image <image>] [--name <name>] Cinder卷的名字 [--description <description>] 描述信息 [--volume-type <volume-type>] 指定卷类型 [--availability-zone <availability-zone>] 指定可用域 [--metadata [<key=value> [<key=value> ...]]] 指定属性信息 [--hint <key=value>] [--allow-multiattach] [<size>] 删除指定的 Cinder 卷 cinder delete <volume> [<volume> ...] 创建 Cinder 卷快照 cinder snapshot-create [--force [<True|False>]] 强制创建 [--name <name>] [--description <description>] [--metadata [<key=value> [<key=value> ...]]] <volume> 查看 Cinder 卷、快照信息 查看卷列表 cinder list 查看指定于硬盘的详细信息 cinder show 0643885c-1dc7-4f9f-9309-382c54cc6790 Swift 显示账户、对象或容器的信息 swift stat [container] [object] [container]：容器名称 [object] ：对象名称 列出该账户的容器戒容器的对象 Swift list [command-options] [container] [command-options]：选项 [container]：容器名称 创建 容器 swift post [command-options] [container] [object] [command-options]：选项 [container]：容器名称 [object]：对象名称 文件传到容器内 swift upload [command-options] container file_or_directory [file_or_directory] [...] [command-options]：选项 Container：容器名称，或者是容器内的目录 file_or_directory：本地文件系统内的目录或者文件 [file_or_directory] ：本地文件系统内的目录或者文件，可同时上传多个目录或文件。 下载容器中的对象 swift download [command-options] [container] [object] [object] [...] [command-options]：选项 [container]：容器名称 [object]：对象名称(可同时下载多个对象) 删除容器中的对象 swift delete [command-options] [container] [object] [object] [...] [command-options]：选项 [container]：容器名称 [object]：对象名称(可同时下载多个对象)
openstack (xiandian v2.4) 基础配置 双节点： controller （192.168.100.10) compute （192.168.100.20） CentOS版本： CentOS-7-x86_64-DVD-1804.iso openstack版本： xiandian v2.4 (Queens 二次开发） openstack文档： Queens 拓扑 环境变量 密码名称 描述 Database password 数据库的根密码 ADMIN_PASS ADMIN 用户密码 CINDER_DBPASS 块存储服务的数据库密码 CINDER_PASS 块存储服务用户密码 DASH_DBPASS 仪表板的数据库密码 DEMO_PASS DEMO 用户密码 GLANCE_DBPASS 影像服务的数据库密码 GLANCE_PASS 图片服务用户密码 KEYSTONE_DBPASS 身份服务的数据库密码 METADATA_SECRET 元数据代理的秘密 NEUTRON_DBPASS 网络服务的数据库密码 NEUTRON_PASS 网络服务用户密码 NOVA_DBPASS 计算服务的数据库密码 NOVA_PASS 计算服务用户密码 PLACEMENT_PASS 展示位置服务用户的密码 RABBIT_PASS RabbitMQ 用户密码 基础环境(平台初始化) 1.网络 网卡文件：/etc/sysconfig/network-scripts/ifcfg-eth* 【controller】 eth0 echo "DEVICE=eth0 TYPE=Ethernet ONBOOT=yes NM_CONTROLLED=no BOOTPROTO=static IPADDR=192.168.100.10 PREFIX=24 GATEWAY=192.168.100.1"\ > /etc/sysconfig/network-scripts/ifcfg-eth0 eth1 echo "DEVICE=eth1 TYPE=Ethernet ONBOOT=yes NM_CONTROLLED=no BOOTPROTO=static IPADDR=192.168.200.10 PREFIX=24 > /etc/sysconfig/network-scripts/ifcfg-eth1 修改控制节点 主机名 hostnamectl set-hostname controller bash 【compute】 eth0 echo "DEVICE=eth0 TYPE=Ethernet ONBOOT=yes NM_CONTROLLED=no BOOTPROTO=static IPADDR=192.168.100.20 PREFIX=24 GATEWAY=192.168.100.1"\ > /etc/sysconfig/network-scripts/ifcfg-eth0 eth1 echo "DEVICE=enp9s0 TYPE=Ethernet ONBOOT=yes NM_CONTROLLED=no BOOTPROTO=static IPADDR=192.168.200.20 PREFIX=24"\ > /etc/sysconfig/network-scripts/ifcfg-eth1 修改计算节点 主机名 hostnamectl set-hostname compute bash 注：eth0 为内部管理网络, eth1为外部网络(node节点使用) 2.yum源 使用本地yum 源，yum源仓库位于 controlle节点 yum源备份 mv /etc/yum.repos.d/* /opt 创建 repo 文件 【controller】 echo "[centos] name=centos baseurl=file:///opt/centos gpgcheck=0 enabled=1 [iaas] name=iaas baseurl=file:///opt/iaas-repo gpgcheck=0 enabled=1"\ > /etc/yum.repos.d/centos.repo 【compute 】 echo "[centos] name=centos baseurl=ftp://192.168.100.10/centos gpgcheck=0 enabled=1 [iaas] name=iaas baseurl=ftp://192.168.100.10/iaas-repo gpgcheck=0 enabled=1"\ > /etc/yum.repos.d/centos.repo 将镜像通过 xftp，上传到 controller 挂载 iso 文件 挂载 CentOS-7-x86_64-DVD-1804.iso mount -o loop CentOS-7-x86_64-DVD-1804.iso /mnt/ mkdir /opt/centos cp -rvf /mnt/* /opt/centos/ umount /mnt/ 挂载 chinaskills_cloud_iaas.iso mount -o loop chinaskills_cloud_iaas.iso /mnt/ cp -rvf /mnt/* /opt/ umount /mnt/ 搭建 ftp 服务器，开启并设置自启 yum install vsftpd -y echo 'anon_root=/opt/' >> /etc/vsftpd/vsftpd.conf systemctl start vsftpd systemctl enable vsftpd 清除缓存，验证 yum 源 yum clean all yum repolist 3.防火墙 & Selinux 【controller/compute】 编辑 selinux 文件 vi /etc/selinux/config SELINUX=permissive 关闭防火墙并设置开机不自启 systemctl stop firewalld.service systemctl disable firewalld.service yum remove -y NetworkManager firewalld yum -y install iptables-services systemctl enable iptables systemctl restart iptables iptables -F iptables -X iptables -Z service iptables save 4.环境变量 【controller/compute】 echo "HOST_IP=192.168.100.10 HOST_PASS=000000 HOST_NAME=controller HOST_IP_NODE=192.168.10.10 HOST_PASS_NODE=000000 HOST_NAME_NODE=compute network_segment_IP=192.168.100.0/24 RABBIT_USER=openstack RABBIT_PASS=000000 DB_PASS=000000 DOMAIN_NAME=demo ADMIN_PASS=000000 DEMO_PASS=000000 KEYSTONE_DBPASS=000000 GLANCE_DBPASS=000000 GLANCE_PASS=000000 NOVA_DBPASS=000000 NOVA_PASS=000000 NEUTRON_DBPASS=000000 NEUTRON_PASS=000000 METADATA_SECRET=000000 INTERFACE_IP=192.168.100.10/192.168.100.20 INTERFACE_NAME=eth1 Physical_NAME=provider minvlan=101 maxvlan=200 CINDER_DBPASS=000000 CINDER_PASS=000000 BLOCK_DISK=md126p4 SWIFT_PASS=000000 OBJECT_DISK=md126p5 STORAGE_LOCAL_NET_IP=192.168.10.10 HEAT_DBPASS=000000 HEAT_PASS=000000 ZUN_DBPASS=000000 ZUN_PASS=000000 KURYR_DBPASS=000000 KURYR_PASS=000000 CEILOMETER_DBPASS=000000 CEILOMETER_PASS=000000 AODH_DBPASS=000000 AODH_PASS=000000"\ > /etc/xiandian/openrc.sh 5.openstack包 安装 【controller/compute】 yum -y install openstack-utils openstack-selinux python-openstackclient yum upgrade 配置域名解析 echo "192.168.100.10 controller 192.168.100.20 compute"\ > /etc/hosts 6.时间同步 安装 chrony 【controller/compute】 yum install -y chrony 修改配置 【controller】 编辑/etc/chrony.conf 文件 添加以下内容（删除默认 sever 规则） server controller iburst allow 192.168.100.0/24 local stratum 10 【compute】 编辑/etc/chrony.conf 文件 添加以下内容（删除默认 sever 规则） server controller iburst 启动 ntp 服务器 systemctl restart chronyd systemctl enable chrony 7.数据库 (Mysql) 【controller】 安装 mysql 服务 yum install -y mariadb mariadb-server python2-PyMySQL 修改配置文件 vim /etc/my.cnf # 修改 /etc/my.cnf 文件[mysqld]中添加 max_connections=10000 default-storage-engine = innodb innodb_file_per_table collation-server = utf8_general_ci init-connect = 'SET NAMES utf8' character-set-server = utf8 启动服务 systemctl enable mariadb.service systemctl start mariadb.service 修改 mariadb.service 参数 vim /usr/lib/systemd/system/mariadb.service [Service] # 新添加两行如下参数 LimitNOFILE=10000 LimitNPROC=10000 修改 auth_gssapi.cnf 参数 vim /etc/my.cnf.d/auth_gssapi.cnf [mariadb] # 注释一行参数 #plugin-load-add=auth_gssapi.so 重新加载系统服务，并重启 mariadb 服务 systemctl daemon-reload service mariadb restart 配置 Mysql mysql_secure_installation 按 enter 确认后设置数据库 root 密码 Remove anonymous users? [Y/n] y Disallow root login remotely? [Y/n] n Remove test database and access to it? [Y/n] y Reload privilege tables now? [Y/n] y 【compute】 安装 MySQL-python yum -y install MySQL-python 8.消息队列 (RabbitMQ) 【controller】 安装 RabbitMQ 服务 yum install -y rabbitmq-server systemctl enable rabbitmq-server.service systemctl restart rabbitmq-server.service rabbitmqctl add_user openstack 000000 rabbitmqctl set_permissions openstack ".*" ".*" ".*" 9.令牌缓存 (memcahce) 【controller】 安装 memcahce 服务 yum install memcached python-memcached systemctl enable memcached.service systemctl restart memcached.service 10.etcd 服务 【controller】 安装 etcd 服务 yum install etcd –y 修改 etcd.conf 配置文件 vim /etc/etcd/etcd.conf ETCD_LISTEN_PEER_URLS="http://192.168.100.10:2380" ETCD_LISTEN_CLIENT_URLS="http://192.168.100.10:2379" ETCD_NAME="controller" ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.100.10:2380" ETCD_ADVERTISE_CLIENT_URLS="http://192.168.100.10:2379" ETCD_INITIAL_CLUSTER="controller=http://192.168.100.10:2380" ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01" ETCD_INITIAL_CLUSTER_STATE="new" 启动服务 systemctl start etcd systemctl enable etcd
Keystone 介绍 Keystone（OpenStack Identity Service） Keystone 的功能是负责验证身份、校验服务规则和发布服务令牌，实现OpenStack的Identity API Keystone 可分解为两个功能，即权限管理和服务目录。权限管理主要用于用户的管理授权 服务目录，类似一个服务总线，或者说是整个OpenStack框架的注册表 认证模块提供API服务、Token令牌机制、服务目录、规则和认证发布等功能 相关概念 认证 (Authentication) 认证是确认允许一个用户访问的进程。为了确认请求，OpenStack Identity 会为访问用 户提供证书，起刜这些证书是用户名和密码，戒用户名和 API key。当 OpenStack Identity 学习目标 项目 三 认证服务项目三 认证服务 37 认证体系接受了用户的请求乊后，它会发布一个认证令牌（Token），用户在随后的请求中 使用这个令牌去访问资源中其他的应用。 证书 (Credentials) 用于确认用户身份的数据。例如，用户名、密码戒者 API key，戒认证服务提供的认证 令牌。 令牌 (Token) 通常指的是一串比特值戒者字符串，用来作为访问资源的记号。Token（令牌统一用词） 中含有可访问资源的范围和有效时间，一个令牌是一个任意比特的文本，用于不其他 OpenStack 服务来共享信息，Keystone 以此来提供一个 central location，以验证访问 OpenStack 服务的用户。令牌的有效期是有限的，可以随时被撤回。 项目 (project） project 即项目，早期版本又称为 project，它是各个服务中的一些可以访问的资源集合。 例如，通过 nova 创建虚拟机时要指定到某个项目中，在 cinder 创建卷也要指定到某个项目 中，用户访问项目的资源前，必须不该项目关联，并且指定该用户在该项目下的角色。 平台构建完毕会产生 admin、service 和 demo 三个项目。在这些项目中，admin 项目代 表管理组，拥有平台的最高权限，可以更新、初除和修改系统的任何数据。service 代表平 台内所有服务的总集合，平台安装的所有服务默认会被加入到此项目中，为后期的统一管 理提供帮劣，此项目可以修改当前项目下所有服务的配置信息，提交项目的内容以及修改。 demo 则是一个演示测试项目，没有什么实际的用处。 用户 (User） 使用服务的用户，可以是人、服务戒系统使用 OpenStack 相关服务的一个组织。例如， 一个项目映射到一个 Nova 的“project-id”，在对象存储中，一个项目可以有多个容器。根 据丌同的安装方式，一个项目可以代表一个客户、账号、组织戒项目。用户通过 Keystone Identity 认证登录系统并调用资源。用户可以被分配到特定项目并执行项目相关操作。需要 特别指出的是，OpenStack 通过注册相关服务用户来管理服务，例如 Nova 服务注册 nova 用户来管理相应的服务。对于管理员来说，需要通过 Keystone 来注册管理用户。 角色 (Role) Role 即角色，Role 代表一组用户可以访问的资源权限，例如 Nova 中的虚拟机、Glance 中的镜像。Users 可以被添加到任意一个全局的 role 戒项目内的 role 中。在全局的 role 中， 用户的 role 权限作用于所有的项目，即可以对所有的项目执行 role 规定的权限。在项目内 的 role 中，用户仅能在当前项目内执行 role 规定的权限。 OpenStack 中项目（Project）、用户（User）和角色（Role）3 者的关系如下： 项目是用户的集合，项目又称为项目或 accounts 用户可以属于一个或多个工程 角色决定了用户的权限，可以分配角色给 user-project 组 实践 在openstack系统中进行操作需生效环境变量，执行命令如下 [root@xiandian ~]# source /etc/keystone/admin-openrc.sh 创建用户 创建个名称为“alice”账户，密码为“mypassword123”，邮箱为“alice @example.com”。执行命令如下 [root@xiandian ~]# openstack user create --password mypassword123 --email alice@example.com --domain xiandian alice 格式: # openstack user create [--domain <domain>] [--password <password>] [--email <email-address>] [--enable | --disable] <name> 参数 name 代表新建用户名 创建项目 创建一个名为“acme”项目 [root@xiandian ~]# openstack project create --domain xiandian acme 格式: # openstack project create [--domain <domain>] [--description <description >] [--enable | --disable] <project-name> 参数 project-name 代表新建项目名 参数 description 代表项目描述名 创建角色 创建一个角色“compute-user” [root@xiandian ~]# openstack role create compute-user 格式： # openstack role create <name> 参数 name 代表角色名称。 绑定用户和项目权限 给用户“alice”分配“acme”项目下的“compute-user”角色 [root@xiandian ~]# openstack role add --user alice --project acme compute-user 格式: # openstack role add –user <name> --project <project> <role> 参数 name 代表需要绑定的用户名称 参数 role 代表用户绑定的角色名称 参数 project 代表用户绑定的项目名称。 查询 用户 当前所有用户列表 [root@controller ~]# openstack user list 查询具体用户的详细信息 [root@controller ~]# openstack user show alice 项目 项目列表查询 [root@controller ~]# openstack project list 项目的详细信息 [root@controller ~]# openstack project show acme 角色 角色列表查询 [root@controller ~]# openstack role list 角色的详细信息 [root@controller ~]# openstack role show compute-user 端点 端点地址查询 [root@controller ~]# openstack endpoint list