前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >openshift/origin学习记录(0)——Ansible安装多节点openshift集群

openshift/origin学习记录(0)——Ansible安装多节点openshift集群

作者头像
胡了了
发布2017-12-28 17:52:36
2.3K0
发布2017-12-28 17:52:36
举报

本节内容是基于Ansible Playbook自动部署openshift集群,之后几节内容会通过一个AllInOne的集群手动添加组件,研究实现的流程。

本部分内容是3.6.0,可能不适用3.6.1

本部分openshift集群的部署分为以下几个阶段:

  1. 主机准备。准备openshift集群需要的主机。
  2. 安装前预配置。准备相应的系统配置与软件依赖。
  3. 执行安装。使用Ansible Playbook进行自动化安装。
  4. 安装后配置。添加相应的组件以及修改配置。如导入模板等。

主机准备

类型

主机名

IP

操作系统

CPU

Master

master.example.com

192.168.121.149

CentOS 7.3

2G

Node

node1.example.com

192.168.121.151

CentOS 7.3

2G

Node

node2.example.com

192.168.121.152

CentOS 7.3

2G

第一次节点内存分配1G,安装失败,报错信息大致是由于内存不足导致的。之后修改每个节点,分配2G内存。

安装前预配置

配置主机名

确实主机名配置正确。如有需要,可采用hostnamectl命令设置主机名。例如:

# hostnamectl set-hostname master.example.com

此外需要保证主机名能够正确的解析到主机IP。可以通过ping $(hostname)来验证。

实际生产环境推荐配置相关的域名解析服务器。

在此直接修改各个节点的/etc/hosts文件,加上静态的域名解析。

192.168.121.149 master.example.com
192.168.121.151 node1.example.com 
192.168.121.152 node2.example.com 
  • 开启SELINUX

官方文档推荐开启SELINUX,否则会导致安装失败。 修改/etc/selinux/config

SELINUX=enforcing
SELINUXTYPE=targeted

激活网络

我自己主机在安装的时候就已经激活了网络。 有些参考我博客的朋友安装失败,我帮着解决的时候发现是他们的网络默认没有激活,这里添加一下激活网络的设置。所有主机都要执行。

# nmcli con show
ens32    77817a17-07cf-4f32-b03b-791730dd248d  802-3-ethernet  ens32   
# nmcli con up ens32
# nmcli con mod ens32 connection.autoconnect yes
# systemctl restart NetworkManager

安装及配置软件包

  • 所有的节点下执行以下命令安装Openshift依赖的软件包。
# yum install -y wget git net-tools bind-utils iptables-services bridge-utils bash-completion
  • 所有节点安装docker。
# yum install -y docker

默认情况下,Docker将使用一个文件作为后端的存储。生产环境中一般会预留一块未分配空间的分区或未分配空间的硬盘作为Docker的数据存储区域。这里先不处理。

  • 配置Docker镜像服务器。

选择中国科技大学的镜像服务器进行加速。修改/etc/sysconfig/docker文件,在OPTIONS变量中追加--registry-mirror=https://docker.mirrors.ustc.edu.cn --insecure-registry=172.30.0.0/16。 - 所有节点启动docker。

# systemctl enable docker
# systemctl start docker
  • 启用EPEL仓库以安装Ansible

openshift安装以Ansible为基础,需要启用EPEL仓库以安装Ansible。master节点上执行以下命令。

# yum -y install https://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-11.noarch.rpm
这里写图片描述
这里写图片描述
# sed -i -e "s/^enabled=1/enabled=0/" /etc/yum.repos.d/epel.repo
# yum -y --enablerepo=epel install ansible pyOpenSSL
  • 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 node1.example.com node2.example.com; do ssh-copy-id -i ~/.ssh/id_rsa.pub $host;  done
这里写图片描述
这里写图片描述
# wget https://github.com/openshift/openshift-ansible/archive/openshift-ansible-3.6.173.0.81-1.tar.gz
# tar zxvf openshift-ansible-3.6.173.0.81-1.tar.gz
  • 安装etcd。

安装单Master的Openshift集群可以不单独安装etcd。这里选择单独安装一个节点的etcd集群。 在实际的生产环境中,推荐配置含有3个或以上成员的etcd集群,保证高可用性。 在Master上执行。

# yum -y install etcd
# systemctl enable etcd
# systemctl start etcd

配置Ansible

配置Ansible的hosts配置文件(记录了Ansible需要操作的目标主机信息)。

  • 备份原有的hosts文件
# mv -f /etc/ansible/hosts /etc/ansible/hosts.org
  • 创建/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

# 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'}"
node1.example.com openshift_node_labels="{'region': 'infra', 'zone': 'east'}"
node2.example.com openshift_node_labels="{'region': 'infra', 'zone': 'west'}"

[etcd]
master.example.com    

执行安装

# ansible-playbook ~/openshift-ansible-openshift-ansible-3.6.173.0.81-1/playbooks/byo/config.yml

安装过程是完全自动化的,无需手动干预。在绝大多数情况下,Ansible的脚本Playbook是可以反复执行的。因为要下载不少内容,整体安装时间还是比较长的。

如果安装Openshift的过程中出错了,修复问题后再次执行Playbook,可以在之前的基础上继续安装 (由于网络波动、内存不足等原因,可能需要多次重复执行上述指令)。

安装过程中,我遇到了disk_availability,docker_storage,memory_availability,docker_image_availability这四个错误,修改hosts文件,选择了跳过检查这四项。

disk_availability:报错信息是推荐的master磁盘空间剩余量大于40GB。测试环境无法满足,跳过检测。 memory_availability:报错信息是推荐的master内存为16GB,node内存为8GB,测试环境无法满足,跳过检测。 docker_image_availability:报错信息是需要的几个镜像未找到,选择跳过,装完集群后,在使用的时候再自行下载。 docker_storage:报错信息是推荐选择一块磁盘空间存储镜像,这里选择跳过。采用docker默认的方式存储镜像。

安装完成后,Ansible会输出一个结果汇总信息,从汇总信息可以判断安装的执行结果。

这里写图片描述
这里写图片描述

(前前后后大概装了快俩小时,重复执行了指令多次。)网络状况良好的情况下耗时半小时左右。

安装完成后,执行oc get nodes检查当前集群的成员列表以及它们的状态。

这里写图片描述
这里写图片描述

当前集群有三个节点,都处于Ready状态。Master多一个SchedulingDisabled的状态,意味着Master节点不承担运行容器的任务。

执行oc whoami可以看到当前是以管理员的权限登录的集群。 执行oc get all -o wide。查看资源列表。

这里写图片描述
这里写图片描述

可以看出registry、router都在部署中。但有报错,使用oc describe指令查看pod日志。

这里写图片描述
这里写图片描述

发现都是没有节点匹配导致的错误。官网的hosts例子有给节点打标签。之前不明打标签的原因,删掉了此部分,导致此服务部署出错。

在多节点的集群部署Router组件需要注意预先规划好Router运行的目标节点。Router组件是以容器的形式运行在Openshift平台上的。Openshift平台上所有指向具体应用的域名最终都要指向Router所在Node的IP地址。如果无法确定Router所在的Node节点,就无法创建相关的域名解析。

这里因为已经安装完成,故选择手动给node1打上标签。

# oc label node node1.com region=infra

因为之前的安装禁用了docker_image_availability,这里会下载openshift需要的镜像文件,镜像文件较大,需要下载一段时间。已修改此部分上面的hosts内容。建议手动pull,不然因为网络原因,这里容易出错。

这里写图片描述
这里写图片描述

等镜像文件下载完成之后。浏览器访问https://192.168.121.149:8443即可查看openshift的web console。

安装后的配置

对接用户身份信息库

安装的时候,在Ansible的hosts文件中定义了HTPasswd文件作为后端的用户身份信息库。

安装程序自动生成了数据文件/etc/origin/master/htpasswd。但是此时该文件还是一个空文件,并没有任何用户信息。

需要通过htpasswd命令来创建用户。创建账号为dev密码为dev的用户。

# [root@master ~]# htpasswd -b /etc/origin/master/htpasswd dev dev

查看/etc/origin/master/htpasswd文件内容。以加密的形式存储了账号密码。

dev:$apr1$DH.7689R$g6azQwmLcSnK1MlrpEEnx0

给dev添加集群管理员权限

# oc login -u system:admin
# oc adm policy add-cluster-role-to-user cluster-admin dev

其他配置

Ansible安装模式下,已自动的导入了Image Stream、Template、Router和Registry,之后的内容会手动部署这些组件进行研究。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-09-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 主机准备
  • 安装前预配置
    • 配置主机名
      • 激活网络
        • 安装及配置软件包
          • 配置Ansible
          • 执行安装
          • 安装后的配置
            • 对接用户身份信息库
              • 其他配置
              相关产品与服务
              容器镜像服务
              容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档