本节内容是Docker镜像以及Ansible实现多节点集群Containerized Installer。大体流程和基于RPM的安装过程类似。
新更新了一篇3.10.0的安装博客,链接https://blog.csdn.net/huqigang/article/details/82351972。
本部分openshift集群的部署分为以下几个阶段:
- 主机准备。准备openshift集群需要的主机。
- 安装前预配置。准备相应的系统配置与软件依赖。
- 执行安装。使用Ansible Playbook进行自动化安装。
主机准备
由于是在自己笔记本上尝试部署多节点集群,内存有限,这里采用两节点集群。
类型 | 主机名 | IP | 操作系统 | CPU |
---|---|---|---|---|
Master | master.example.com | 192.168.121.158 | CentOS 7.3 | 2G |
Node | node.example.com | 192.168.121.157 | CentOS 7.3 | 2G |
需要分配2G内存。生产环境官方推荐Master至少16G内存,Node至少8G内存。
在这里,我给每台虚机均挂载了两块硬盘,其中一块/dev/sdb之后会作为Docker的存储空间。使用fdisk -l
指令可以查看。
安装前预配置
配置主机名
确实主机名配置正确。如有需要,可采用hostnamectl命令设置主机名。例如:
# hostnamectl set-hostname master.example.com
此外需要保证主机名能够正确的解析到主机IP。可以通过ping $(hostname)来验证。
实际生产环境推荐配置相关的域名解析服务器。
在此直接修改各个节点的/etc/hosts文件,加上静态的域名解析。
192.168.121.158 master.example.com
192.168.121.157 node.example.com
- 开启SELINUX
官方文档推荐开启SELINUX,否则会导致安装失败。
修改/etc/selinux/config
SELINUX=enforcing
SELINUXTYPE=targeted
安装及配置软件包
- 所有的节点下执行以下命令安装Openshift依赖的软件包。
# yum -y install wget git net-tools bind-utils iptables-services bridge-utils bash-completion kexec-tools sos psacct vim lrzsz
- 所有节点安装atomic。
# yum install -y atomic
安装及配置docker
- 所有节点安装docker。
# yum install -y docker
- 所有节点配置Docker。
修改/etc/sysconfig/docker-storage-setup。修改Docker镜像存储空间。修改后内容如下。
DEVS=/dev/sdb
VG=dockervg
- 执行docker-storage-setup。
- 所有节点启动docker。
# systemctl enable docker
# systemctl start docker
配置SSH
- master节点上生成SSH密钥。
# ssh-keygen -f /root/.ssh/id_rsa -N ''
Ansible是基于Agentless架构实现的,即不需要在远程的目标主机上预先安装Agent程序。Ansible对远程主机命令的执行依赖SSH等远程控制协议。因为将在Master上执行Ansible Playbook安装openshift,所以需要配置Master到各个节点的互信,包括Master到Master的互信。
在Master节点上执行:
for host in master.example.com node.example.com ; do ssh-copy-id -i ~/.ssh/id_rsa.pub $host; done
镜像准备
因为是Containerized Installer,安装过程中需要下载镜像,这里选择提前准备好安装中必备的较大的镜像。
包括如下:
openshift/origin:v3.6.0
openshift/node:v3.6.0 (node + openshift-sdn + openvswitch RPM for client tools)
openshift/openvswitch:v3.6.0 (CentOS 7 + openvswitch RPM, runs ovsdb and ovsctl processes)
registry.access.redhat.com/rhel7/etcd:latest
openshift/origin-ansible:v3.6
这里的镜像列举不全,可以参考本文最后的一张截图查看集群所需的所有镜像。推荐提前在主机上pull好镜像,或者将镜像导入本地镜像仓库。
- 在Master节点上将openshift/origin-ansible镜像pull到atomic 里:
# atomic pull --storage ostree docker:docker.io/openshift/origin-ansible:v3.6
该步的官网解释如下。
The openshift/origin-ansible image is a containerized version of the OpenShift Origin installer that runs as a system container. System containers are stored and run outside of the traditional docker service. Functionally, using the containerized installer is the same as using the traditional RPM-based installer, except it is running in a containerized environment instead of directly on the host.
The installer system container must be stored in OSTree instead of defaulting to docker daemon storage.
大意是openshift/origin-ansible这个镜像是OpenShift Origin容器版安装程序,以系统容器的方式运行。系统容器在传统docker服务之外存储和运行。
系统容器必须存储在OSTree中,而不是默认的docker储存。
配置Ansible
配置Ansible的hosts配置文件(记录了Ansible需要操作的目标主机信息)。
- 创建hosts文件
# mkdir /etc/ansible
# touch /etc/ansible/hosts
- 创建/etc/ansible/hosts文件,添加下面的内容。
可参考https://docs.openshift.org/latest/install_config/install/advanced_install.html官网内容进行编写。
# Create an OSEv3 group that contains the masters and nodes groups
[OSEv3:children]
masters
nodes
etcd
# Set variables common for all OSEv3 hosts
[OSEv3:vars]
# SSH user, this user should allow ssh based auth without requiring a password
ansible_ssh_user=root
openshift_deployment_type=origin
openshift_release=3.6.0
openshift_disable_check=disk_availability,docker_storage,memory_availability,docker_image_availability
containerized=true
openshift_use_etcd_system_container=true
# uncomment the following to enable htpasswd authentication; defaults to DenyAllPasswordIdentityProvider
openshift_master_identity_providers=[{'name':'htpasswd_auth','login':'true','challenge':'true','kind':'HTPasswdPasswordIdentityProvider','filename':'/etc/origin/master/htpasswd'}]
# host group for masters
[masters]
master.example.com
# host group for nodes, includes region info
[nodes]
master.example.com openshift_schedulable=True openshift_node_labels="{'region': 'infra'}"
node.example.com openshift_node_labels="{'region': 'infra', 'zone': 'east'}"
[etcd]
master.example.com
在Master节点上安装系统容器,使其被设置为系统服务
# atomic install --system --storage=ostree --name=openshift-installer --set INVENTORY_FILE=/etc/ansible/hosts docker:docker.io/openshift/origin-ansible:v3.6
参数INVENTORY_FILE为上文配置的Ansible的hosts配置文件,docker为使用的镜像文件。
想要卸载openshift-installer的话可以执行:
# atomic uninstall openshift-installer
在Master节点上启动安装
# systemctl start openshift-installer
另起一个窗口,使用journalctl -f -u openshift-installer
可以查看实时日志。
验证安装结果
检查集群状态。
# oc get nodes
# oc get all
最终用到的镜像如下:
Containerized Installer安装多节点集群成功。