最新OpenShift 3.9 集群(Ansible)安装,openshiftansible


说明:本篇主要是基于最新的openshift3.9进行的集群安装,安装环境是虚拟机,在本地通过VirtualBox安装centos7.5虚拟机,准备了3台虚拟机,一台作为master,另外两台slave。通过这种方式模拟实际服务器的集群搭建openshift

特别注意 搭建的前提是:虚拟机和主机互通,虚拟机之间互通,虚拟机可上外网,主机可上外网;可参考我的博文:

    VirtualBox 虚拟机和宿主机之间的网络连接,虚拟机和主机都可以上网

安装过程分为5部分:

  • 集群主从机环境准备
  • 安装依赖包,提前安装使用Ansible安装OpenShift集群所依赖的第三方包
  • Ansible执行安装:使用Ansible Playbook进行自动化安装
  • OpenShift系统配置:在使用Ansible执行安装完成之后的系统配置。
  • 测试问题处理

 

一、环境准备

   类型            IP地址        操作系统  内存      硬盘
  master 192.168.10.179 centos7.5  2G   20G
  node1 192.168.10.142 centos7.5 2G   20G
  node2 192.168.10.47 centos7.5 2G   20G

为了在安装的时候方便修改所有主机host文件:

vi /etc/hosts

 

保存退出,并且重启所有主机,这时会发现连接名称已经变了,这样方便了解当前的主机

  • 所有主机开启SELINUX
 vi /etc/selinux/config

官方文档推荐开启SELINUX,否则会导致安装失败

  • 配置所有主机ssh免密访问

在所有节点上以root账号登陆,并进入到/root的主目录 在所有节点上生成密钥对

 ssh-keygen -t rsa

一路按回车即可

 

所有主机执行以下命令

cd ~/.ssh

然后执行以下命令共享ssh免密登陆密钥:注意逐条执行

ssh-copy-id master

ssh-copy-id node1

ssh-copy-id node2

验证:

 

 

验证结果:master不用密码可以直接ssh到node1,根据以上实例验证所有主机之间的ssh免密登陆,确保所有主机之间ssh不需要密码再进行以下步骤

 

二、安装依赖包

  • 所有主机执行更新操作

 

yum install -y update

若有更新,则等待更新完后重启系统生效!

  • 所有的主机下执行以下命令安装OpenShift依赖的软件包。

 

yum install wget git net-tools bind-utils iptables-services bridge-utils bash-completion kexec-tools sos psacct bash-completion.noarch bash-completion-extras.noarch python-passlib NetworkManager -y

 

 

  • 所有主机安装docker:
yum install docker-1.13.1 -y

  • 配置docker使用的存储
echo DEVS=/dev/sdb > /etc/sysconfig/docker-storage-setup
echo VG=DOCKER >> /etc/sysconfig/docker-storage-setup
echo SETUP_LVM_THIN_POOL=yes >> /etc/sysconfig/docker-storage-setup
echo DATA_SIZE="100%FREE">> /etc/sysconfig/docker-storage-setup
rm -rf /var/lib/docker

wipefs --all /dev/sdb

docker-storage-setup
  • 添加阿里云镜像加速器

登陆阿里云,没有的自己可以注册 ,进行加速器页面https://cr.console.aliyun.com/#/accelerator,如下操作

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'

{ "registry-mirrors": ["https://03l3dkhb.mirror.aliyuncs.com"],
   "insecure-registries": ["172.30.0.0/16"]

} EOF

sudo systemctl daemon-reload 
sudo systemctl restart docker

 

 

启动docker

systemctl enable docker
systemctl start docker


启用EPEL仓库以安装AnsibleMaster主机上执行Ansible集群安装

    

yum -y install epel-release
  • 全局禁用EPEL存储库,以便在以后的安装步骤中不会意外使用它:
sed -i -e "s/^enabled=1/enabled=0/" /etc/yum.repos.d/epel.repo

 

下载ansible2.5版本,因为3.9对应的ansible版本必须是2.5

下载地址:https://releases.ansible.com/ansible

下载后解压到 /home/ansible中

执行安装

cd ansible-2.5.5
python setup.py install

执行:

yum -y --enablerepo=epel install ansible pyOpenSSL 

说明 #opshift3.9 必须匹配 ansible2.5版本

输入:

ansible --version

cd /home/openshift 

获取3.9版本的openshift-ansible:

wget https://github.com/openshift/openshift-ansible/archive/openshift-ansible-3.9.32-1.tar.gz

解压:

tar -xvzf  openshift-ansible-3.9.32-1.tar.gz

重命名:

mv openshift-ansible-openshift-ansible-3.9.32-1 openshift-ansible

 

由于目前OpenShift-ansible还没有添加3.9的源,所以需要自行修改下,方法如下:

进行openshift-ansible/roles/openshift_repos/templates/ 复制一份 CentOS-OpenShift-Origin37.repo.j2 为 CentOS-OpenShift-Origin39.repo.j2。
修改CentOS-OpenShift-Origin39.repo.j2中的源修改为国内的,比如阿里云。
 

进入openshift-ansible/roles/openshift_repos/templates/   修改CentOS-OpenShift-Origin9.repo.j2 中的源修改为国内的,比如阿里云。

编写Inventory文件

  • 新建 ansible inventory 文件,保存到 /etc/ansible/inventory.ini文件中,内容如下:
# 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

#使用origin社区版

openshift_deployment_type=origin

#指定安装版本

openshift_release=3.9

#openshift_node_group_name= master


#指定默认域名,访问的时候需要使用该域名,没有dns服务器,需要手动添加本地hosts文件

openshift_master_default_subdomain=master



#禁止磁盘、内存和镜像检查

openshift_disable_check=disk_availability,docker_storage,memory_availability,docker_image_availability



#disk_availability:报错信息是推荐的master磁盘空间剩余量大于40GB。测试环境无法满足,跳过检测。

#memory_availability:报错信息是推荐的master内存为16GB,node内存为8GB,测试环境无法满足,跳过检测。

#docker_image_availability:报错信息是需要的几个镜像未找到,选择跳过,装完集群后,在使用的时候再自行下载。

#docker_storage:报错信息是推荐选择一块磁盘空间存储镜像,这里选择跳过。采用docker默认的方式存储镜像。

# 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'}]


#ntp时间同步

openshift_clock_enabled=true



#节点配额

openshift_node_kubelet_args={'pods-per-core': ['10']}



# host group for masters

[masters]

master openshift_schedulable=True


# host group for nodes, includes region info

[nodes]

master openshift_node_labels="{'region': 'infra'}"

node1 openshift_node_labels="{'region': 'infra', 'zone': 'default'}"

node2 openshift_node_labels="{'region': 'infra', 'zone': 'default'}"
master openshift_node_group_name='node-config-master'
node1 openshift_node_group_name='node-config-compute'
node2 openshift_node_group_name='node-config-compute'



[etcd]

master

标红的方需要特别注意

 

  • 修改脚本问题

openshift-ansible/roles/lib_utils/filter_plugins/openshift_master.py 的第487行

 

执行:

cd /home/openshift/
ansible-playbook -i /etc/ansible/inventory.ini openshift-ansible/playbooks/prerequisites.yml

执行以下命令:

ansible-playbook -i /etc/ansible/inventory.ini openshift-ansible/playbooks/deploy_cluster.yml

 

  • 安装结果检查
oc get nodes

其实在安装完成之后 第二个节点和第三个节点的roles类型为空,需要将其打上compute标签,命令如下:

oc label node node1 node-role.kubernetes.io/compute=true
oc label node node2 node-role.kubernetes.io/compute=true

 

 

  • OpenShift系统配置

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

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

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

htpasswd -b /etc/origin/master/htpasswd dev dev


 

  • 给dev添加集群管理员权限
oc adm policy add-cluster-role-to-user cluster-admin dev

  • 重启服务
systemctl restart origin-master-api

 

配置虚拟机的宿主机的hosts文件,

  • 访问页面,https://master:8443

 

安装过程出现以下问题:

则主要是因为python的字符串编码问题

解决办法:

进入python环境:

#python

然后执行以下代码:

import sys
default_encoding = 'utf-8'
if sys.getdefaultencoding() != default_encoding:
      reload(sys)
      sys.setdefaultencoding(default_encoding)
即可

 

cd   /home/openshift/openshift-ansible/roles/openshift_control_plane/tasks/

rm -rf htpasswd_provider.yml

 

相关内容

    暂无相关文章