Windows机器虚拟化

如果实验环境为windows机器,首先需要虚拟化创建linux实验环境

#开启Hyper-V组件
#控制面板->程序和功能->Windows功能->勾选Hyper-V

#新建Linux虚拟机
#下载CentOS镜像,新建->按照提示进行虚拟机创建,网络可选择内部网络或者外部网络,一个是Host子网+Nat方案,一个是桥接外部局域网方案。默认使用内部网络方案。

域名方案

# 本次实验包括一个master节点和三个普通节点,配置四个域名
# 如果有自己的域名和公网IP,可实现多云,混合云部署
# 没有公网IP可通过VPN实现多云混合云部署,部署过程和内网部署一致
# 在内网部署时,可通过自建的域名服务器或/etc/hosts文件实现任意域名解析
#	注意最好不要和常用域名重复,避免无法访问外网实际域名指向的服务
192.168.4.1 master.os.${your_domain} node1.os.${your_domain}
192.168.4.2 node2.os.${your_domain}
192.168.4.3 node3.os.${your_domain}

网络环境准备

最后正式安装的时候ansible需要设置防火墙,必然需要root权限。如果使用非root用户执行命令,ssh默认连接用户和后面的sudo 安装命令又会冲突,尚未找到解决办法。为避免部署过程中的各种无权限bug,下面所有操作最好以root用户进行。

配置各机器,使得两两能够互相ping通,master可以直接ssh免密访问所有节点,可参考博文SSH免密访问配置。如果登陆用户非root,则需要配置对应用户的免密sudo.开启SELinux控制

#vim /etc/sudoers

#增加[]内部内容
${user_name_list} ${host_name_list}=${runas_user_list} [NOPASSWD:]${command_dir_list}
#vim /etc/selinux/config
SELINUX=1

Linux安装基础组件

在每台机器上执行

#更新系统
yum update
systemctl reboot

#安装基础工具包
yum -y install wget git net-tools bind-utils yum-utils \
	iptables-services bridge-utils bash-completion kexec-tools \
	sos psacct

#安装Docker,注意Docker版本,如果安装openshift-3.x最高只能安装docker-1.13
#如果不确定,可以先不安装docker,后面由ansible自动安装docker,速度会慢一些
yum -y install docker
#开机启动
systemctl enable docker
systemctl start docker

#安装Openshift部署管理工具ansible
#如果无epel仓库,先安装,并禁用旧仓库
yum -y install \
    https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
sed -i -e "s/^enabled=1/enabled=0/" /etc/yum.repos.d/epel.repo
#安装ansible包
yum -y --enablerepo=epel install ansible pyOpenSSL

部署Openshift

下载源代码,并签出要安装的稳定版本

cd /usr/src
git clone https://github.com/openshift/openshift-ansible
cd openshift-ansible
git checkout release-${your_version}

准备配置文件,在master上操作。请从下载下来的openshift-ansible下的example文件夹下找到hosts.example,并在此基础上修改获得自己的配置文件。不同版本的配置文件配置项可能不一致,因此不能从网上直接拷贝。

#首先新建一个目录存放配置文件
mkdir /etc/openshift/
cd /etc/openshift/
#复制样例文件并修改
copy /usr/src/open-ansible/example/hosts.example /etc/openshift/hosts
vim /etc/openshift/hosts
#要修改的主要为各处节点的域名及属性

运行部署程序

#运行prerequisites,按照错误提示修正错误
ansible-playbook -i hosts  ~/openshift-ansible/playbooks/prerequisites.yml
#运行deploy_cluster,按照错误提示修正错误
ansible-playbook -i hosts ~/openshift-ansible/playbooks/deploy_cluster.yml

按照这个过程,可能会产生一些错误,请按提示修正。如果运行完无报错,则部署成功

集群扩容

在原有hosts文件上增加新的组,可参照下面文件进行修改

#vim /etc/openshift/hosts
# Create an OSEv3 group that contains the masters and nodes groups
[OSEv3:children]
masters
nodes
etcd
# 扩容
new_masters
new_nodes
new_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
# 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

# 新增master节点
[new_masters]
node1.example.com

# host group for nodes, includes region info
[nodes]
master.example.com openshift_schedulable=True openshift_node_labels="{'region': 'infra'}"
node1.example.com openshift_node_labels="{'region': 'infra', 'zone': 'east'}"
node2.example.com openshift_node_labels="{'region': 'infra', 'zone': 'west'}"

# 新增node节点
[new_nodes]
node3.example.com openshift_node_labels="{'region': 'infra', 'zone': 'default'}"

[etcd]
master.example.com  

# 新增etcd节点
[new_etcd]  
node1.example.com

执行扩容

#master扩容
ansible-playbook -i /etc/openshift/hosts /usr/src/openshift-ansible/playbooks/byo/openshift-master/scaleup.yml
#node扩容
ansible-playbook -i /etc/openshift/hosts /usr/src/openshift-ansible/playbooks/byo/openshift-node/scaleup.yml
#etcd扩容
ansible-playbook -i /etc/openshift/hosts /usr/src/openshift-ansible/playbooks/byo/openshift-etcd/scaleup.yml

#为了保证hosts文件的整洁,扩容执行完成后需要将所有new标记的内容剪贴到对应的位置

常见错误及处理

1.文件访问被拒绝

通常发生在安装用户不是root的情形下,修改对应文件的访问权限即可

2. Ensure openshift-ansible installer package deps are installed

发生在安装python包出错时,可运行命令手工安装 ,参考

yum -y install python-docker pyOpenSSL python-requests python-urllib3 python-idna

3. 域名无法解析

检查hosts,host.conf,resolv.conf文件,确认配置正常。如果配有本地域名解析服务bind或dnsmasq,确认配置文件正常。

4. 在最后部署的时候,会自动修改resolv.conf, host.conf文件,可在本地配置dns服务或者手动修改/usr/src/roles/openshift-node/files/networkmanager/99-origin-dns.sh,添加

echo "nameserver 114.114.114.114" >> ${NEW_RESOLV_CONF}

5. SELinux is disabled

开启每台服务器上的Selinux

#vim /etc/selinux/config
SELINUX=1