手记

27-使用Ansible部署OpenShift Origin集群(v3.11)

1.概述

研究使用Ansible来部署OpenShift Origin容器云集群(OKD)。以下以一个简单的测试集群(v3.11)为例,详细记录安装部署过程中遇到的问题及处理办法。

2.规划

可以从规模和高可用性来规划。
规模:打算跑多少个pod;
高可用性:生产环境还是测试环境;

主机名安装的基础组件
master.example.comMaster, etcd, and node
node-1.example.comNode

其它规模集群,可参考官网。

3.资源

根据集群规模,可确定需要的服务器资源,详细可参考官网。

4.安装

以CentOS7作为底层操作系统。

4.1.SELinux requirements

开启SELinux。
/etc/selinux/config文件如下:

# This file controls the state of SELinux on the system.# SELINUX= can take one of these three values:#     enforcing - SELinux security policy is enforced.#     permissive - SELinux prints warnings instead of enforcing.#     disabled - No SELinux policy is loaded.SELINUX=enforcing# SELINUXTYPE= can take one of these three values:#     targeted - Targeted processes are protected,#     minimum - Modification of targeted policy. Only selected processes are protected.#     mls - Multi Level Security protection.SELINUXTYPE=targeted

4.2.DNS Requirements

最好是在集群环境内搭建DNS服务器,如果仅仅测试用,可在/etc/hosts文件中配置。

4.3.防护墙

集群默认使用iptables防火墙,但在CentOS7中,建议使用firewalld。可在hosts文件中做如下配置。

[OSEv3:vars]
os_firewall_use_firewalld=True

开放端口。

端口协议
4789UDP
53/8053TCP/UDP
443/8443TCP
10250TCP
10010TCP
2049TCP/UDP
2379TCP
2380TCP
9000TCP
8444TCP
9200TCP
9300TCP
1936TCP

或者关闭防火墙。
如果是测试,建议关闭防火墙。

4.4.配置SSH

确保通过SSH免密码能登陆个节点,将公钥塞到各节点。

$ for host in master.example.com \
    master.example.com \  
    node-1.example.com; \ 
    do ssh-copy-id -i ~/.ssh/id_rsa.pub $host; \
    done

4.5.安装依赖

以下依赖,需要在各个节点安装。

$ yum install wget git net-tools bind-utils yum-utils bridge-utils bash-completion kexec-tools sos psacct

更新系统。

$ yum update -y
$ reboot

在master节点上安装ansible。

$ 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
$ yum -y --enablerepo=epel install ansible pyOpenSSL

在master上git openshift-ansible。

$ cd /opt
$ git clone https://github.com/openshift/openshift-ansible
$ cd openshift-ansible
$ git checkout release-3.11

openshift-ansible需要和docker版本对应。

4.6.安装docker

以1.13.1为例,需要在master和node节点上安装。

$ yum install docker-1.13.1 -y
$ rpm -V docker-1.13.1$ docker version

配置docker存储。

4.7.配置hosts文件

如下。

# Create an OSEv3 group that contains the masters, nodes, and etcd groups[OSEv3:children]
masters
nodes
etcd# Set variables common for all OSEv3 hosts[OSEv3:vars]
os_firewall_use_firewalld=True# SSH user, this user should allow ssh based auth without requiring a passwordansible_ssh_user=root# If ansible_ssh_user is not root, ansible_become must be set to true#ansible_become=trueopenshift_deployment_type=origin
openshift_release=3.11openshift_disable_check=disk_availability,docker_storage,memory_availability,docker_image_availability,package_version,package_availability# uncomment the following to enable htpasswd authentication; defaults to AllowAllPasswordIdentityProvideropenshift_master_identity_providers=[{'name': 'htpasswd_auth', 'login': 'true', 'challenge': 'true', 'kind': 'HTPasswdPasswordIdentityProvider'}]# host group for masters[masters]
master.example.com# host group for etcd[etcd]
master.example.com# host group for nodes, includes region info[nodes]
master.example.com openshift_node_group_name='node-config-master-infra'node-1.example.com openshift_node_group_name='node-config-compute'

4.8.安装

$ ansible-playbook openshift-ansible/playbooks/prerequisites.yml -v

等待安全,安装完后,如下。

PLAY RECAP **************************************************************************************
localhost                    : ok=11   changed=0    unreachable=0    failed=0   
master.example.com           : ok=88   changed=6    unreachable=0    failed=0   
node-1.example.com           : ok=59   changed=6    unreachable=0    failed=0   


INSTALLER STATUS ********************************************************************************
Initialization  : Complete (0:00:42)

如果报错,该命令可重复执行。

安装部署。

$ ansible-playbook openshift-ansible/playbooks/deploy_cluster.yml -v

等待安装,安装完后,如下。

......
PLAY RECAP ****************************************************************************************************
localhost                  : ok=11   changed=0    unreachable=0    failed=0   
master.example.com         : ok=690  changed=166  unreachable=0    failed=0   
node-1.example.com         : ok=114  changed=17   unreachable=0    failed=0   


INSTALLER STATUS **********************************************************************************************
Initialization               : Complete (0:00:42)
Health Check                 : Complete (0:00:01)
Node Bootstrap Preparation   : Complete (0:01:43)
etcd Install                 : Complete (0:00:44)
Master Install               : Complete (0:03:57)
Master Additional Install    : Complete (0:00:44)
Node Join                    : Complete (0:00:31)
Hosted Install               : Complete (0:00:58)
Cluster Monitoring Operator  : Complete (0:00:18)
Web Console Install          : Complete (0:00:55)
Console Install              : Complete (0:00:39)
metrics-server Install       : Complete (0:00:02)
Service Catalog Install      : Complete (0:03:40)

如果报错,该命令可重复执行。

5.验证

安装完后,检查成员列表及状态。

$ oc get nodes
NAME                 STATUS    ROLES           AGE       VERSION
master.example.com   Ready     infra,master    23h       v1.11.0+d4cacc0node-1.example.com   Ready     compute,infra   23h       v1.11.0+d4cacc0

使用https://master.example.comg:8443进入console界面。
注:需要确保master.example.com能正确解析到master节点。

6.遇到问题

1)报错-1

fatal: [rhel7-5-a]: FAILED! => {"msg": "last_checked_host: rhel7-5-a, last_checked_var: openshift_master_manage_htpasswd;openshift_master_identity_providers contains a provider of kind==HTPasswdPasswordIdentityProvider and filename is set.  Please migrate your htpasswd files to /etc/origin/master/htpasswd and update your existing master configs, and remove the filename keybefore proceeding."}

原因分析:新版本取消了openshift_master_identity_providers中“finename”关键字。
解决办法:删除“filename”键值对。

注:集群部署成功后,会在/etc/origin/master下创建htpasswd空文件,用户可进入该目录通过htpasswd -c htpasswd username password方式创建账户,用于集群登录。

2)报错-2

Failed : Retrying : Wait for ServiceMonitor CRD to be created

原因分析:ifcfg-eth0中为NM_CONTROLLED=no。
解决办法:更改为NM_CONTROLLED=yes,并重启系统。

3)报错-3

Console install failed

原因分析:v3.9以前console是以服务在宿主机上运行,v3.9及以后是以pod运行的,默认情况下会将pod调度到带有master=true标签的node上,如果没有这样的node,则console创建失败。
解决方案:在[nodes] entry中添加“openshift_node_group_name='node-config-master'”或“openshift_node_group_name='node-config-master-infra'”



作者:四冶
链接:https://www.jianshu.com/p/792899a49c8f


0人推荐
随时随地看视频
慕课网APP