《OpenShift 4.x HOL教程汇总》

文章目录

  • 安装前说明
  • 准备主机环境
    • 创建虚拟主机并配置网络
    • 配置主机名和域名
      • 设置环境变量
      • 设置主机hosts
      • 配置免密登录
      • 设置节点主机名
      • 关闭防火墙并禁用SELinux
    • 配置离线Yum源
      • 下载安装用到的Repo到本地
      • 配置Yum
        • 配置Support节点的Yum
        • 配置RHCS集群节点的Yum
    • 准备离线Container Image Registry
      • 创建SSL证书和用户认证文件
      • 安装Docker Registry
      • 配置离线Docker Registry
    • 配置Chrony时间服务
  • 安装配置ceph-ansible
    • 安装ceph-ansible程序
    • 定制Ansible使用的文件
      • 创建Ansible Inventory文件
      • 创建Ansible Playbook文件
      • 配置Ansible Playbool使用的参数文件
      • 配置RHCS集群osd服务的参数文件
  • 执行安装RHCS集群的Ansible脚本
  • 访问RHCS集群
    • 安装Ceph客户端并访问RHCS集群
    • 通过Web控制台访问RHCS集群
  • 参考

安装前说明

  1. 本文安装的是基于 Red Hat Ceph Storage(RHCS)4.1 的集群环境。RHCS 4.1支持的操作系统为RHEL 7.8 和 RHEL 8.2,本文使用的是RHEL 7.8。
  2. 本文将使用离线方式安装RHCS集群。如果没有RHCS的离线安装包,则需要有该产品的试用或正式订阅,同时需要有一个节点能访问外网下载离线安装介质。
  3. 在安装过程中会使用到以下2类角色的节点:
    1)support节点:作为安装RHCS集群的控制节点,在上面可以使用ceph-ansible或Cockpit完成RHCS集群安装过程(本文使用是ceph-ansible)。另外,还利用这个节点下载离线安装介质和运行离线Image Registry。
    2)ceph-node节点:所有运行RHCS集群相关服务的节点,这些节点会运行mon、osd、mgr、rdsgw等服务。
  4. 根据本文说明准备4个节点部署RHCS集群,其中1个作为support节点用来提供离线YUM Repo和离线Image Registry服务、同时还用来执行Ansible Playbook;另外3个节点作为RHCS集群节点运行mon、osd、mgr等RHCS集群所需服务。
  5. 在使用ceph-ansible安装过程中,可以选择将mon、osd等RHCS核心服务运行在裸机上或是将它们运行在容器中,两者的配置差别主要体现在Ansible Playbook使用到的参数文件“ceph-ansible/group_vars/all.yml”。不过,无论是哪种运行RHCS核心服务的方式,运行RHCS监控用到的Prometheus/Grafana组件都是运行在容器中,因此本文将全部采用容器的方式运行RHCS的所有组件。
  6. 注意本文中如未明确说明,都是用root用户在support节点操作
  7. 本文参照了RHCS 4.1的官方安装文档,在部分地方对原有内容进行了简化处理,例如直接使用的是root用户执行Ansible安装脚本。

准备主机环境

创建虚拟主机并配置网络

本文使用基于VirtualBox VM虚机模拟物理服务。请准备4个虚机分别作为1个support节点和3个RHCS集群节点,其中需要为运行RHCS集群节点的虚机额外创建2个存储磁盘(如下图的sdb和sdc盘),可以为每个磁盘分配50GB存储空间。

为每个VM分配2个网卡,其中一个配置成Bridge类型、一个配置成Host-Only类型,分别配置负责RHCS集群外部通讯的public地址段(本文使用的是“192.168.1.0”)和集群内部通讯用的private地址段(本文使用的是“192.168.99.0”)。

在创建完VM后,请为以上4个节点最小化安装RHEL 7.8。在安装RHEL过程中按照以下列表为每个节点分配主机名和固定IP地址。

  • support:192.168.1.203/24、192.168.99.203/24
  • ceph-node1:192.168.1.201/24、192.168.99.201/24
  • ceph-node2:192.168.1.202/24、192.168.99.202/24
  • ceph-node3:192.168.1.203/24、192.168.99.203/24

由于在VirtualBox的VM中安装RHEL的2个网卡缺省名为“enp0s3”和“enp0s8”(如果用的是其他类型虚拟化软件,请用对应的网卡名替换以下的命令),因此也可以在安装完RHEL后使用以下命令设置每个VM的2个IP地址。

$ nmcli con modify enp0s3 ipv4.addresses 192.168.1.XXX/24
$ nmcli con modify enp0s8 ipv4.addresses 192.168.99.XXX/24
$ systemctl restart network

配置主机名和域名

设置环境变量

$ cat >> ~/.bashrc << EOF
SUPPORT_NODE=support
CEPH_NODE1=ceph-node1
CEPH_NODE2=ceph-node2
CEPH_NODE3=ceph-node3
CEPH_NODE_LIST="ceph-node1 ceph-node2 ceph-node3"
YUM_PATH=/data/yum
REGISTRY_PATH=/data/registry
EOF$ source ~/.bashrc

设置主机hosts

为了简化,本文使用hosts解析主机域名(建议在生产环境中使用DNS服务解析主机域名)。最后将设好的hosts文件同步到所有节点。

$ cat > /etc/hosts << EOF
192.168.99.200   $SUPPORT_NODE
192.168.99.201   $CEPH_NODE1
192.168.99.202   $CEPH_NODE2
192.168.99.203   $CEPH_NODE3
EOF$ for i in $CEPH_NODE_LIST; do scp /etc/hosts root@${i}:/etc/hosts; done

配置免密登录

执行命令生成密钥对,并将公钥复制到RHCS集群所有节点。

$ ssh-keygen -t rsa -b 2048 -P '' -f ~/.ssh/id_rsa
$ for i in $CEPH_NODE_LIST; do ssh-copy-id root@${i} -f; done

设置节点主机名

如果还没有设置主机域名,可执行以下命令设置4个节点的主机名。在执行完后需要退出所有节点,然后重新登录。

$ for i in $SUPPORT_NODE $CEPH_NODE_LIST; do ssh root@${i} hostnamectl set-hostname ${i}; ssh root@${i} hostname; done

关闭防火墙并禁用SELinux

为了省去网络访问限制麻烦(例如访问Apache HTTP服务提供Yum源),执行以下命令关闭所有节点的防火墙并禁用SELinux。

$ for i in $SUPPORT_NODE $CEPH_NODE_LIST; do ssh root@${i} systemctl stop firewalld; ssh root@${i} systemctl disable firewalld; done
$ for i in $SUPPORT_NODE $CEPH_NODE_LIST; do ssh root@${i} sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config; ssh root@${i} setenforce 0; done

配置离线Yum源

下载安装用到的Repo到本地

  1. 用RedHat正式或试用订阅用户登录订阅网站。
$ subscription-manager register --username=<USERNAME> --password=<PASSWORD>
Registering to: subscription.rhsm.redhat.com:443/subscription
The system has been registered with ID: 28625db9-ac30-4119-b5aa-355c37778dc5
The registered system name is: support
  1. 列出所有和RHCS的OSD服务相关的订阅。确认这个订阅中包含“Red Hat Ceph Storage”、“Red Hat Ceph Storage OSD”、“Red Hat Ceph Storage MON”核心服务组件。
$ subscription-manager list --available --all --matches="*OSD*"
  1. 指定使用一个包含 Red Hat Ceph Storage 的订阅POOL
$ subscription-manager attach --pool=<POOL_ID>
  1. 开启以下YUM Repo。
$ subscription-manager repos --disable=*
$ subscription-manager repos \--enable=rhel-7-server-rpms \--enable=rhel-7-server-extras-rpms \--enable=rhel-7-server-ansible-2.8-rpms \--enable=rhel-7-server-rhceph-4-tools-rpms  \--enable=rhel-7-server-rhceph-4-mon-rpms \--enable=rhel-7-server-rhceph-4-osd-rpms
  1. 然后确认有以下配置好的6个YUM Repo。
$ yum repolist
repo id                                                            repo name                                                                                            status
rhel-7-server-ansible-2.8-rpms/x86_64                              Red Hat Ansible Engine 2.8 RPMs for Red Hat Enterprise Linux 7 Server                                    19
rhel-7-server-extras-rpms/x86_64                                   Red Hat Enterprise Linux 7 Server - Extras (RPMs)                                                     1,329
rhel-7-server-rhceph-4-mon-rpms/x86_64                             Red Hat Ceph Storage MON 4 for Red Hat Enterprise Linux 7 Server (RPMs)                                 183
rhel-7-server-rhceph-4-osd-rpms/x86_64                             Red Hat Ceph Storage OSD 4 for Red Hat Enterprise Linux 7 Server (RPMs)                                 129
rhel-7-server-rhceph-4-tools-rpms/x86_64                           Red Hat Ceph Storage Tools 4 for Red Hat Enterprise Linux 7 Server (RPMs)                               196
rhel-7-server-rpms/7Server/x86_64                                  Red Hat Enterprise Linux 7 Server (RPMs)                                                             30,637
repolist: 32,493
  1. 执行命令,下载repo到本地
$ mkdir -p ${YUM_PATH}
$ yum -y install yum-utils createrepo
$ for repo in $(subscription-manager repos --list-enabled |grep "Repo ID" |awk '{print $3}'); do \reposync --gpgcheck -lmn --repoid=${repo} --download_path=${YUM_PATH}; createrepo -v ${YUM_PATH}/${repo} -o ${YUM_PATH}/${repo}; done
  1. 将当前节点退出订阅。
$ subscription-manager unregister

配置Yum

配置Support节点的Yum

由于上一步下载的Repo就在Support节点本地,因此我们把Support节点的Yum配到自己的本地目录。

  1. 执行命令,生成rhcs.repo文件。
$ cat > /etc/yum.repos.d/rhcs.repo << EOF
[rhel-7-server]
name=rhel-7-server
baseurl=file://${YUM_PATH}/rhel-7-server-rpms/
gpgcheck=0[rhel-7-server-extras]
name=rhel-7-server-extras
baseurl=file://${YUM_PATH}/rhel-7-server-extras-rpms/
gpgcheck=0[rhel-7-server-rhceph-4-mon]
name=rhel-7-server-rhceph-4-mon
baseurl=file://${YUM_PATH}/rhel-7-server-rhceph-4-mon-rpms/
gpgcheck=0 [rhel-7-server-rhceph-4-osd]
name=rhel-7-server-rhceph-4-osd
baseurl=file://${YUM_PATH}/rhel-7-server-rhceph-4-osd-rpms/
gpgcheck=0[rhel-7-server-rhceph-4-tools]
name=rhel-7-server-rhceph-4-tools
baseurl=file://${YUM_PATH}/rhel-7-server-rhceph-4-tools-rpms/
gpgcheck=0 [rhel-7-server-ansible-2.8]
name=rhel-7-server-ansible-2.8
baseurl=file://${YUM_PATH}/rhel-7-server-ansible-2.8-rpms/
gpgcheck=0
EOF
  1. 执行命令,确认包括以下repo。
$ yum repolist
repo id                                                                             repo name                                                                           status
rhel-7-server                                                                       rhel-7-server                                                                       5,476
rhel-7-server-ansible-2.8                                                           rhel-7-server-ansible-2.8                                                               4
rhel-7-server-extras                                                                rhel-7-server-extras                                                                  157
rhel-7-server-rhceph-4-mon                                                          rhel-7-server-rhceph-4-mon                                                             53
rhel-7-server-rhceph-4-osd                                                          rhel-7-server-rhceph-4-osd                                                             29
rhel-7-server-rhceph-4-tools                                                        rhel-7-server-rhceph-4-tools                                                           55
repolist: 5,774

配置RHCS集群节点的Yum

以下为RHCS集群节点配置指向Support节点的远程Yum。

  1. 首先在Support节点安装httpd服务。
$ yum -y install httpd
  1. 创建httpd服务的配置文件。
$ cat << EOF > /etc/httpd/conf.d/yum.conf
Alias /rhcs "${YUM_PATH}"
<Directory "${YUM_PATH}">Options +Indexes +FollowSymLinksRequire all granted
</Directory>
<Location /repo>SetHandler None
</Location>
EOF
  1. 先设置目录权限,然后重启httpd服务,最后确认可以从所有RHCS节点上访问到http的Repo。
$ chmod -R 705 ${YUM_PATH}/..
$ systemctl restart httpd
$ for i in $CEPH_NODE_LIST; do ssh root@${i} curl http://${SUPPORT_NODE}/rhcs/ | grep rhel-7-server; done
  1. 执行命令,生成RHCS节点节点使用的repo文件。
$ cat > ~/rhcs.repo << EOF
[rhel-7-server]
name=rhel-7-server
baseurl=http://${SUPPORT_NODE}/rhcs/rhel-7-server-rpms/
gpgcheck=0[rhel-7-server-extras]
name=rhel-7-server-extras
baseurl=http://${SUPPORT_NODE}/rhcs/rhel-7-server-extras-rpms/
gpgcheck=0[rhel-7-server-rhceph-4-mon]
name=rhel-7-server-rhceph-4-mon
baseurl=http://${SUPPORT_NODE}/rhcs/rhel-7-server-rhceph-4-mon-rpms/
gpgcheck=0 [rhel-7-server-rhceph-4-osd]
name=rhel-7-server-rhceph-4-osd
baseurl=http://${SUPPORT_NODE}/rhcs/rhel-7-server-rhceph-4-osd-rpms/
gpgcheck=0[rhel-7-server-rhceph-4-tools]
name=rhel-7-server-rhceph-4-tools
baseurl=http://${SUPPORT_NODE}/rhcs/rhel-7-server-rhceph-4-tools-rpms/
gpgcheck=0 [rhel-7-server-ansible-2.8]
name=rhel-7-server-ansible-2.8
baseurl=http://${SUPPORT_NODE}/rhcs/rhel-7-server-ansible-2.8-rpms/
gpgcheck=0
EOF
  1. 将rhcs.repo文件传到所有RHCS节点,然后检查可以从这些节点中访问到远程Yum源。
$ for i in $CEPH_NODE_LIST; do scp ~/rhcs.repo root@${i}:/etc/yum.repos.d/; done
$ for i in $CEPH_NODE_LIST; do ssh root@${i} yum repolist; done

准备离线Container Image Registry

在离线环境中,由于RHCS集群节点无法直接访问互联网,因此可以在support节点上搭建Container Image Registry并导入相关容器镜像,这样RHCS安装过程就可通过support节点获取到相关容器镜像了。

创建SSL证书和用户认证文件

  1. 设置环境变量(REGISTRY_PATH定义了Docker Registry软件使用的存储目录),然后创建对应的子目录(auth是用来存放校验用户名/密码的文件目录、certs是用来存放TLS所需证书/秘钥的目录、data是用来存放容器镜像的目录)。
$ REGISTRY_PATH=/data/registry
$ mkdir -p ${REGISTRY_PATH}/{auth,certs,data}
  1. 执行命令创建证书(包括公钥和私钥文件),以支持Registry运行在https上。远程的Docker客户端需要使用该公钥访问Registry。
$ openssl req -newkey rsa:4096 -nodes -sha256 -keyout ${REGISTRY_PATH}/certs/registry.key -x509 -days 365 \-out ${REGISTRY_PATH}/certs/registry.crt \-subj "/C=CN/ST=BEIJING/L=BJ/O=REDHAT/OU=IT/CN=${SUPPORT_NODE}/emailAddress=admin@${SUPPORT_NODE}"
  1. 查看生成的证书。
$ openssl x509 -in ${REGISTRY_PATH}/certs/registry.crt -text | head -n 14
Certificate:Data:Version: 3 (0x2)Serial Number:bd:8e:d7:1b:08:aa:10:49Signature Algorithm: sha256WithRSAEncryptionIssuer: C=CN, ST=BEIJING, L=BJ, O=REDHAT, OU=IT, CN=support/emailAddress=admin@supportValidityNot Before: Oct 30 03:40:25 2020 GMTNot After : Oct 30 03:40:25 2021 GMTSubject: C=CN, ST=BEIJING, L=BJ, O=REDHAT, OU=IT, CN=support/emailAddress=admin@supportSubject Public Key Info:Public Key Algorithm: rsaEncryptionPublic-Key: (4096 bit)
  1. 将上述公钥复制到RHCS集群节点上。
$ for i in $CEPH_NODE_LIST; do \scp ${REGISTRY_PATH}/certs/registry.crt root@${i}:/etc/pki/ca-trust/source/anchors/; \ssh root@${i} update-ca-trust; \done
  1. 创建基于httppasswd的用户认证文件,其中的user1/password1是登录用户和密码。Docker Registry将使用该文件对登录用户进行认证。
$ yum -y install httpd-tools
$ htpasswd -bBc ${REGISTRY_PATH}/auth/htpasswd user1 password1
$ cat ${REGISTRY_PATH}/auth/htpasswd
user1:$2y$05$fgURP9RJ1KFAKnC0obM5GugmAyOGGilE7nkFPZzh7nn5Yub.JZ36W

安装Docker Registry

  1. 先安装Docker。
$ yum -y install docker
  1. 修改“/etc/containers/registries.conf”文件的“[registries.search]”部分,确认“[registries.search]”部分必须有以下内容:
[registries.search]
registries = ['registry.redhat.io']
  1. 修改“/etc/containers/registries.conf”文件的“[registries.insecure]”部分,确认“[registries.insecure]”部分必须有在SUPPORT_NODE节点上运行的Docker Registry地址,例如下面试用了本文环境中的“support”节点名。
[registries.insecure]
registries = ['support:5000']
  1. 重启Docker,让配置生效。
$ systemctl restart docker
  1. 安装运行Docker Registry,然后查看其中的镜像。
$ docker run --name registry -p 5000:5000 \-v ${REGISTRY_PATH}/data:/var/lib/registry:z \-v ${REGISTRY_PATH}/auth:/auth:z \-v ${REGISTRY_PATH}/certs:/certs:z \-e "REGISTRY_AUTH=htpasswd" \-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/registry.crt \-e REGISTRY_HTTP_TLS_KEY=/certs/registry.key \-d docker.io/library/registry:2$ docker ps
CONTAINER ID        IMAGE                          COMMAND                  CREATED             STATUS              PORTS                    NAMES
64b6c0a1c5f6        docker.io/library/registry:2   "/entrypoint.sh /e..."   8 seconds ago       Up 7 seconds        0.0.0.0:5000->5000/tcp   registry$ curl -u user1:password1 https://${SUPPORT_NODE}:5000/v2/_catalog
{"repositories":[]}

配置离线Docker Registry

  1. 执行命令,使用试用或正式的RedHat订阅账号登录registry.redhat.io。
$ docker login registry.redhat.io --username=<USERNAME> --password=<PASSWORD>
Login Succeeded
  1. 下载RHCS所需容器镜像到本地缓存。
$ docker pull registry.redhat.io/rhceph/rhceph-4-rhel8
$ docker pull registry.redhat.io/openshift4/ose-prometheus-node-exporter:v4.1
$ docker pull registry.redhat.io/rhceph/rhceph-4-dashboard-rhel8
$ docker pull registry.redhat.io/openshift4/ose-prometheus:4.1
$ docker pull registry.redhat.io/openshift4/ose-prometheus-alertmanager:4.1
  1. 修改上述容器的地址和标签。(注意:此处RHCS 4.1官方安装文档有个错误,就是需要为rhceph-4-rhel8镜像打上名为latest-nautilus的标签,而不能用缺省标签)。
$ docker tag registry.redhat.io/rhceph/rhceph-4-rhel8 ${SUPPORT_NODE}:5000/rhceph/rhceph-4-rhel8:latest-nautilus
$ docker tag registry.redhat.io/openshift4/ose-prometheus-node-exporter:v4.1 ${SUPPORT_NODE}:5000/openshift4/ose-prometheus-node-exporter:v4.1
$ docker tag registry.redhat.io/rhceph/rhceph-4-dashboard-rhel8 ${SUPPORT_NODE}:5000/rhceph/rhceph-4-dashboard-rhel8
$ docker tag registry.redhat.io/openshift4/ose-prometheus-alertmanager:4.1 ${SUPPORT_NODE}:5000/openshift4/ose-prometheus-alertmanager:4.1
$ docker tag registry.redhat.io/openshift4/ose-prometheus:4.1 ${SUPPORT_NODE}:5000/openshift4/ose-prometheus:4.1
  1. 先登录本地Docker Registry,再将上述本地容器镜像推送到support节点的Docker Registry中。
$ docker login ${SUPPORT_NODE}:5000 -u user1 -p password1
Login Succeeded$ docker push ${SUPPORT_NODE}:5000/rhceph/rhceph-4-rhel8:latest-nautilus
The push refers to a repository [support:5000/rhceph/rhceph-4-rhel8:latest-nautilus]
d7280273a3d0: Layer already exists
b7b591e3443f: Layer already exists
ccf04fbd6e19: Layer already exists
latest: digest: sha256:375da5e6abc8871c26cdd0d35862a6b45cd56e1169a75f8acded4580952d8aaa size: 950$ docker push ${SUPPORT_NODE}:5000/openshift4/ose-prometheus-node-exporter:v4.1
The push refers to a repository [support:5000/openshift4/ose-prometheus-node-exporter]
9f69b4a665ad: Layer already exists
5cb0fa1ad156: Layer already exists
eddcd8d2986d: Layer already exists
35b7a5c4e1b4: Layer already exists
v4.1: digest: sha256:572476640cb0ef898278fded4bb47a789bc1ba98c5931b76d1c11a6a6da0a057 size: 1159$ docker push ${SUPPORT_NODE}:5000/rhceph/rhceph-4-dashboard-rhel8
The push refers to a repository [support:5000/rhceph/rhceph-4-dashboard-rhel8]
cfedec6e53bf: Layer already exists
b7b591e3443f: Layer already exists
ccf04fbd6e19: Layer already exists
latest: digest: sha256:fdc543b91c567c38a87b2a796b8394b285317c8112ed05d028b46734de8e9260 size: 949$ docker push ${SUPPORT_NODE}:5000/openshift4/ose-prometheus-alertmanager:4.1
The push refers to a repository [support:5000/openshift4/ose-prometheus-alertmanager]
4eac54049ec8: Layer already exists
8002d8fc84eb: Layer already exists
c7fbe90ae90e: Layer already exists
35817540a17b: Layer already exists
4.1: digest: sha256:0467c38142fc5df2836f3c0d9ff7be07c1c47f415d57cc6a092af8437e8c604a size: 1160$ docker push ${SUPPORT_NODE}:5000/openshift4/ose-prometheus:4.1
The push refers to a repository [support:5000/openshift4/ose-prometheus]
2391a9d71a96: Layer already exists
8002d8fc84eb: Layer already exists
c7fbe90ae90e: Layer already exists
35817540a17b: Layer already exists
4.1: digest: sha256:70158e447587bc13f4e9eee45f1056c6a6f79b4f097d9bcae02d5155845d2c4b size: 1160
  1. 查看Docker Registry中的镜像
$ curl -u user1:password1 https://${SUPPORT_NODE}:5000/v2/_catalog

配置Chrony时间服务

RHCS集群节点之间必须做时间同步,这样mon服务才能进行正常的仲裁。为此,我们可以将本文的4个节点的时间服务统一设置到support节点上。

  1. 在support节点上安装chrony服务,然后修改配置文件,最后重启chrony服务。
$ yum -y install chrony
$ cat > /etc/chrony.conf << EOF
server ${SUPPORT_NODE} iburst
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
allow all
local stratum 10
logdir /var/log/chrony
EOF
$ systemctl restart chronyd
$ chronyc tracking
  1. 在所有RHCS集群节点安装chrony服务,并和support节点进行时间同步。
$ for i in $CEPH_NODE_LIST; do \scp /etc/chrony.conf root@${i}:/etc/chrony.conf; \ssh root@${i} systemctl restart chronyd; \ssh root@${i} chronyc trackingdone

安装配置ceph-ansible

安装ceph-ansible程序

  1. 在support节点上执行命令,安装ceph-ansible程序。
$ yum install ceph-ansible -y
  1. 查看ansible版本,确认是2.8.x。说明:RHCS 4.1对应的是nautilus版的社区Ceph,因此需用anbile 2.8版本进行安装。
$ ansible --version
ansible 2.8.16config file = /usr/share/ceph-ansible/ansible.cfgconfigured module search path = ['/usr/share/ceph-ansible/library']ansible python module location = /usr/local/lib/python3.6/site-packages/ansibleexecutable location = /usr/local/bin/ansiblepython version = 3.6.8 (default, Apr  2 2020, 13:34:55) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]

定制Ansible使用的文件

创建Ansible Inventory文件

  1. 在support节点上创建hosts文件作为Ansible的Inventory。在hosts文件中定义了RHCS服务和4个节点的对应部署关系。
$ cat >> /usr/share/ceph-ansible/hosts << EOF
[grafana-server]
${CEPH_NODE1}[mons]
${CEPH_NODE1}
${CEPH_NODE2}
${CEPH_NODE3}[osds]
${CEPH_NODE1}
${CEPH_NODE2}
${CEPH_NODE3}[mgrs]
${CEPH_NODE2}
${CEPH_NODE3}
EOF
  1. 执行命令,测试节点连通性。
$ ansible all -m ping -i /usr/share/ceph-ansible/hosts
ceph-node2 | SUCCESS => {"changed": false,"ping": "pong"
}
ceph-node3 | SUCCESS => {"changed": false,"ping": "pong"
}
ceph-node1 | SUCCESS => {"changed": false,"ping": "pong"
}

创建Ansible Playbook文件

Ansible将使用Playbook来执行所有RHCS集群节点的安装部署操作。

  1. 由于本文选择了将RHCS集群所有组件运行在容器中,可以从site-container.yml.sample模板复制一份基于容器部署RHCS集群的Ansible Playbook文件。
$ cp /usr/share/ceph-ansible/site-container.yml.sample /usr/share/ceph-ansible/site-container.yml

配置Ansible Playbool使用的参数文件

该文件定义在RHCS集群上部署的各种服务的参数,Ansile会在运行Playbook的时候使用这些参数。

  1. 设置环境变量,包括mon服务使用的网卡名、public网段地址、登录support节点的docker registry的用户和密码、RHCS的Dashboard和Grafana管理员账号。
$ cat >> ~/.bashrc << EOF
MONITOR_INTERFACE=enp0s3
PUBLIC_NETWORK=192.168.1.0/24
REGISTRY_USERNAME=user1
REGISTRY_PASSWORD=password1
DASHBORAD_ADMIN_USERNAME=admin
DASHBORAD_ADMIN_PASSWORD=password
GRAFANA_ADMIN_USERNAME=admin
GRAFANA_ADMIN_PASSWORD=password
EOF[root@admin ~]$ source ~/.bashrc
  1. 根据以上变量创建名为all.yml的Playbook参数文件。说明:参照的官方安装文档应该在此步配置ceph_repository_type参数,该参数只有cdn和iso选项,分别适合在线安装(如果是在线安装,Ansible会连到红帽网站验证是否有足够的产品订阅)和离线安装。但是本安装过程使用的并非是基于ISO文件的离线安装方式,而采用了基于本地Yum Repo的离线安装方式。因此无论该参数设为哪种选项都和本文的安装场景有差异,会导致安装失败。不过在实际过程中发现如果不设置ceph_repository_type参数可以正常完成安装。
[ansible@admin ~]$ cat << EOF > /usr/share/ceph-ansible/group_vars/all.yml
fetch_directory: ~/ceph-ansible-keys
ceph_origin: repository
ceph_repository: rhcs
ceph_rhcs_version: 4
bootstrap_dirs_owner: "167"
bootstrap_dirs_group: "167"
monitor_interface: ${MONITOR_INTERFACE}
public_network: ${PUBLIC_NETWORK}
containerized_deployment: true
ceph_docker_image: rhceph/rhceph-4-rhel8
ceph_docker_registry: ${SUPPORT_NODE}:5000
ceph_docker_registry_auth: true
ceph_docker_registry_username: ${REGISTRY_USERNAME}
ceph_docker_registry_password: ${REGISTRY_PASSWORD}
dashboard_admin_user: ${DASHBORAD_ADMIN_USERNAME}
dashboard_admin_password: ${DASHBORAD_ADMIN_PASSWORD}
node_exporter_container_image: ${SUPPORT_NODE}:5000/openshift4/ose-prometheus-node-exporter:v4.1
grafana_admin_user: ${GRAFANA_ADMIN_USERNAME}
grafana_admin_password: ${GRAFANA_ADMIN_PASSWORD}
grafana_container_image: ${SUPPORT_NODE}:5000/rhceph/rhceph-4-dashboard-rhel8
prometheus_container_image: ${SUPPORT_NODE}:5000/openshift4/ose-prometheus:4.1
alertmanager_container_image: ${SUPPORT_NODE}:5000/openshift4/ose-prometheus-alertmanager:4.1
EOF

配置RHCS集群osd服务的参数文件

该文件指定了运行osd服务的节点使用的磁盘存储。

  1. 本文将RHCS集群的osd服运行在“CEPH_NODE_LIST”指定的3个节点上。执行以下命令查看分别查看3个节点的存储,确认它们都配置了sdb和sdc两个磁盘(由于返回结果都一样,所以以下只显示了其中一个节点的结果)。
$ for i in $CEPH_NODE_LIST; do ssh root@${i} lsblk; doneNAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda             8:0    0  100G  0 disk
├─sda1          8:1    0    1G  0 part /boot
└─sda2          8:2    0   99G  0 part├─rhel-root 253:0    0   97G  0 lvm  /└─rhel-swap 253:1    0    2G  0 lvm  [SWAP]
sdb             8:16   0   50G  0 disk
sdc             8:32   0   50G  0 disk
sr0            11:0    1 1024M  0 rom
  1. 配置osds.yml文件,在其中指定RHCS的osd服务使用的sdb和sdc两个磁盘。
$ cat > /usr/share/ceph-ansible/group_vars/osds.yml << EOF
devices:- /dev/sdb- /dev/sdc
EOF

执行安装RHCS集群的Ansible脚本

  1. 进入ceph-ansible目录中,执行ansible的playbook部署RHCS集群。注意:一定要在ceph-ansible目录中运行playbook,否则执行中途会出错。
$ cd /usr/share/ceph-ansible
$ ansible-playbook site-container.yml -i hosts
  1. 如果RHCS集群安装成功,则会显示如下提示:
。。。
TASK [show ceph status for cluster ceph] *************************************************************************************************************************************
Friday 30 October 2020  00:55:17 -0400 (0:00:01.158)       0:06:21.492 ********
ok: [ceph-node1 -> ceph-node1] =>msg:- '  cluster:'- '    id:     80eed3c7-8a0a-4c77-b378-ebd9e456fca0'- '    health: HEALTH_OK'- ' '- '  services:'- '    mon: 3 daemons, quorum ceph-node1,ceph-node2,ceph-node3 (age 55m)'- '    mgr: ceph-node3(active, since 14s), standbys: ceph-node2'- '    osd: 6 osds: 6 up (since 52m), 6 in (since 52m)'- ' '- '  data:'- '    pools:   0 pools, 0 pgs'- '    objects: 0 objects, 0 B'- '    usage:   6.0 GiB used, 294 GiB / 300 GiB avail'- '    pgs:     '- ' 'PLAY RECAP *******************************************************************************************************************************************************************
ceph-node1                 : ok=347  changed=18   unreachable=0    failed=0    skipped=390  rescued=0    ignored=0
ceph-node2                 : ok=379  changed=14   unreachable=0    failed=0    skipped=436  rescued=0    ignored=0
ceph-node3                 : ok=352  changed=11   unreachable=0    failed=0    skipped=401  rescued=0    ignored=0INSTALLER STATUS *************************************************************************************************************************************************************
Install Ceph Monitor           : Complete (0:00:50)
Install Ceph Manager           : Complete (0:00:40)
Install Ceph OSD               : Complete (0:00:59)
Install Ceph Dashboard         : Complete (0:01:03)
Install Ceph Grafana           : Complete (0:00:35)
Install Ceph Node Exporter     : Complete (0:00:40)
。。。

访问RHCS集群

安装Ceph客户端并访问RHCS集群

  1. 安装Ceph客户端,并将RHCS集群的配置和访问秘钥复制到客户端本地。说明:由于任一mon节点都有RHCS集群的配置和访问秘钥,以下使用的是ceph-node1节点的文件。
$ yum -y install ceph-common
$ scp root@ceph-node1:/etc/ceph/ceph.conf /etc/ceph/
$ scp root@ceph-node1:/etc/ceph/ceph.client.admin.keyring /etc/ceph/
  1. 查看RHCS集群状态和各节点运行的服务情况。其中可以看到mon服务运行在3个节点上;mgr服务运行在2个节点上,并且ceph-node3为主节点;整个RHCS集群移动运行了6个osd个服务。
$ ceph -scluster:id:     80eed3c7-8a0a-4c77-b378-ebd9e456fca0health: HEALTH_OKservices:mon: 3 daemons, quorum ceph-node1,ceph-node2,ceph-node3 (age 84m)mgr: ceph-node3(active, since 29m), standbys: ceph-node2osd: 6 osds: 6 up (since 82m), 6 in (since 82m)data:pools:   0 pools, 0 pgsobjects: 0 objects, 0 Busage:   6.0 GiB used, 294 GiB / 300 GiB availpgs:

通过Web控制台访问RHCS集群

  1. 根据上一步查看RHCS集群的返回,可以看出当前运行mgr服务的主节点是ceph-node3上。用浏览器访问http://ceph-node3:8443,在以下界面中用安装中指定的admin/password登录RHCS管理控制台。
  2. 然后就可以在RHCS的管理控制台进行操作了。

参考

https://access.redhat.com/documentation/en-us/red_hat_ceph_storage/4/html-single/installation_guide/index#configuring-a-firewall-for-red-hat-ceph-storage-install
https://docs.ceph.com/projects/ceph-ansible/en/latest/

Ceph (3) - 安装Ceph集群方法3:使用 ceph-ansible 离线安装 Red Hat Ceph Storage 4.1 集群相关推荐

  1. 将谷歌浏览器 Chrome 已安装的插件打包成 crx 给其它电脑离线安装 +【怎么安装Chrome插件】安装Chrome第三方插件

    转载:将谷歌浏览器 Chrome 已安装的插件打包成 crx 给其它电脑离线安装 转载: [怎么安装Chrome插件]安装Chrome第三方插件 环境: OS - win7 64bit 旗舰版 Chr ...

  2. ansible离线安装

    生产环境中经常限制外网的权限,所以安装软件经常会遇到问题.如果有自己的yum服务器还好,如果没有就很麻烦. 目前ansible安装的时候用yum的比较多,但是不能连接外网是没办法安装的.这里介绍一种离 ...

  3. 离线linux下python安装pip包_Linux pip命令和在线、离线安装

    1. pip 介绍 pip 是 Python 包管理工具,该工具提供了对Python 包的查找.下载.安装.卸载的功能. 1.1 pip 常用命令 安装包 pip install SomePackag ...

  4. python使用pip安装本地包-python搭建本地pip源,离线安装python模块

    有些时候内网还是无法访问外网的PIP源,这样就需要搭建自己的PIP源 1.离线安装pip 需先安装setuptools 1.下载安装包 https://files.pythonhosted.org/p ...

  5. centos7 安装英伟达驱动;cuda;docker离线安装;docker gpu离线安装;制作自己的cuda镜像;安装 容器中ssh协议

    原创不易,谢谢! centos7 安装英伟达驱动,cuda,docker安装,docker gpu安装,制作自己的cuda镜像,docker ssh协议 无论是笔记本还是台式电脑,这一步关键 参考资料 ...

  6. 将谷歌浏览器 Chrome 已安装的插件打包成 crx 给其它电脑离线安装

    环境: OS - win7 64bit 旗舰版 Chrome - 37.0.2062.120 m 以 Smooth Gestures (一款鼠标手势插件)为例,在扩展程序面板 chrome://ext ...

  7. linux离线安装Nginx依耐环境,Linux Centos 7 - Nginx离线安装

    Linux Centos 7 - Nginx离线安装 dy.huang • 2020 年 03 月 31 日 一.参考文章 二.环境准备 可以以下网址下载rpm包,上传到# rpm包 gcc-4.8. ...

  8. 使用ansible离线安装rpm包

    首先利用copy模块将包分发至目标机器 命令方式 ansible cloud -m copy -a "src=telnet-0.17-66.el7.x86_64.rpm dest=/tmp/ ...

  9. 24届双非日常实习测开面经-腾讯、字节、英伟达、OPPO、深信服、Red Hat面经大合集

    目录 字节跳动 [凉] 腾讯运维开发 [凉] 腾讯测开KPI面经? 腾讯云智[等OC流程] 深信服 OPPO[OC] Anker 安克创新 [OC]有转正 深圳城安院(国企)研发岗[OC] 大疆[被鸽 ...

最新文章

  1. Nature:人工甜味剂改变小鼠肠道菌群组成及功能
  2. css改变背景透明度
  3. 动态规划备忘录方法Java_动态规划和备忘录法的区别
  4. Python3 函数笔记
  5. java 短链接实现方案_java利用百度短网址api实现URL长短互换工具类分享
  6. 像素/厘米与像素/英寸区别_像素/体素艺术入门指南
  7. Linux操作Oracle(2)——Oracle导出exp导出用户报错:EXP-00006: 出现内部不一致的错误 EXP-00000: 导出终止失败
  8. Python实现回溯指针
  9. 存储过程循环遍历一个月的每一天的函数_3.3 循环
  10. 演示:思科设备子接口类型帧中继的配置
  11. Android:如何打开工程模式
  12. canal同步mysql从库_canal.adapter 实现mysql数据库同步
  13. windows php进程数,win10的进程数应该多少?
  14. JAVA程序员笔试面试题汇总及答案 .
  15. 理财入门:思维转变和资产理解以及财务自由说明。
  16. linux dnf命令安装
  17. AprilTag: A robust and flflexible visual fifiducial system理解
  18. oss :Request has expired.
  19. (转)卷积网络中的通道(Channel)和特征图
  20. 技术总监灵魂一问:精通那么多技术,为何还是做不好一个项目?

热门文章

  1. 包括循环和分支的C语言程序,《C语言程序设计》分支和循环的C程序设计.ppt
  2. C语言课程设计学生籍贯信息,C语言课程设计 学生籍贯信息记录簿设计.doc
  3. android json.out,Android 之 json数据的解析(jsonReader)
  4. python测量镜头到目标距离_摄像头单目测距原理及实现
  5. 知识图谱java实现_知识图谱:neo4j(四)Java API
  6. diff算法_Virtual Dom和Diff算法
  7. mysql是bsd协议吗_freebsd下实现mysql的自动备份
  8. 设计灵感|C4D在海报中可以这样应用
  9. 圣诞节PNG免扣素材|轻松向现有项目中添加节日元素!
  10. UI实用素材|促销弹出设计