前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >openshift 3.10多节点集群安装(基于Ansible和Centos7.4)

openshift 3.10多节点集群安装(基于Ansible和Centos7.4)

作者头像
胡了了
发布2019-05-28 17:59:24
1.6K0
发布2019-05-28 17:59:24
举报
文章被收录于专栏:从零学习云计算

参考官方文档https://docs.okd.io/3.10/install/index.html,基于Ansible安装3.10版openshift集群。openshift origin已改名为openshift OKD。

特注:本文仅供初学者参考!生产环境请结合实际并参照官方文档!

遇到的坑以及未完善的地方总结

由于我是在自己笔记本上建了两台虚机,资源有限,这里就拿双节点模拟一下集群,其中master节点也是计算节点、infra节点,运行etcd和nfs。node节点运行etcd和lb。

  • 官网推荐使用GlusterFS作为存储,我直接用的nfs。有关GlusterFS作为存储的做法,官网写的很清楚,想用GlusterFS可以参考官网https://docs.okd.io/3.10/install/configuring_inventory_file.html#advanced-install-glusterfs-persistent-storage
  • 如果lb和master在一个节点上,会有8443端口已被占用的问题,尝试在Inventory文件中修改API 8443端口为3443端口,安装还是有问题,故选择把lb不放在master节点上。建议安装时lb不要放在master节点上
  • 如果etcd放在master节点上,会以静态pod形式启动。如果放在node节点上,会以系统服务的形式启动。我在安装过程中,一个etcd放在了master上,另一个放在了node上,导致etcd启动失败。解决方案是在master节点上yum安装了一个etcd(这个etcd实际并没有使用,不确定是否是这个原因解决了),最终仍是以静态pod起的etcd。建议安装时etcd要么全放在master节点上,要么全放在node节点上。
  • 我在安装过程中,直接安装了带有nfs持久存储的监控,需要提前安装java-1.8.0-openjdk-headless python-passlib,这一点官网没有提及,不提前装安装会报错。

系统与环境要求

系统要求

以下部分确定了集群所有主机的硬件规格和系统级要求。

master系统要求

  • 最低操作系统版本:Fedora 21、CentOS 7.4、RHEL 7.4、RHEL Atomic Host 7.4.5。
  • 最低4 vCPU。
  • 最小16GB RAM。
  • 包含/var/的文件系统最小40GB硬盘空间。
  • 包含/usr/local/bin/的文件系统最小1GB硬盘空间。
  • 包含系统临时目录的文件系统最小1GB硬盘空间。

Etcd和Master在同一节点的,需要至少4核,2核系统将无法工作。

node系统要求

  • 最低操作系统版本:Fedora 21、CentOS 7.4、RHEL 7.4、RHEL Atomic Host 7.4.5。
  • NetworkManager 1.0或更新。
  • 最低1 vCPU。
  • 最小8GB RAM。
  • 包含/var/的文件系统最小15GB硬盘空间。
  • 包含/usr/local/bin/的文件系统最小1GB硬盘空间。
  • 包含系统临时目录的文件系统最小1GB硬盘空间。
  • 额外至少15GB未分配空间,用于Docker存储。

etcd系统要求

  • 最小20GB硬盘空间存储etcd数据。

SELinux要求

在安装OKD之前,必须在所有服务器上启用SELinux,否则安装程序将失败。 /etc/selinux/config配置如下:

环境要求

DNS要求

在每台主机的/etc/hosts文件中添加条目是不够的。此文件不会被复制到平台上运行的容器中。建议配置单独的DNS服务器。

  • 默认情况下,容器从其所在主机接收DNS配置文件(/etc/resolv.conf)。
  • 然后,OKD将pod的第一个nameserver设置为主机节点的IP地址。

从OKD 1.2开始,所有Master和node上会自动配置dnsmasq。pod使用所在主机节点作为DNS,主机节点转发请求。默认情况下, 在主机节点上配置dnsmasq(端口53),因此主机节点无法运行任何其他类型的DNS应用程序。

节点需要安装NetworkManager。 NM_CONTROLLED 默认设置为yes,如果设置为no,则NetworkManager调度脚本不会创建相关的origin-upstream-dns.conf文件,需要手动配置dnsmasq。

配置主机使用DNS

主机DNS解析的配置取决于是否启用了DHCP。

  • 如果禁用了DHCP,设置静态IP,并将DNS nameservers添加到NetworkManager。
  • 如果启用了DHCP,NetworkManager调度脚本会根据DHCP配置自动配置DNS。

我的主机都是静态IP。禁用了DHCP。 这里,我暂时选用的是在每台主机节点上修改/etc/hosts文件。

安装规划

个人电脑资源有限,这里采用双节点集群(基于Centos7.4的虚拟机),具体分配如下。

类型

主机名

IP

操作系统

内存

master,node,etcd,nfs

master1.example.com

192.168.121.195

CentOS 7.4

4G

node,etcd,lb

node1.example.com

192.168.121.196

CentOS 7.4

2G

我是因为笔记本资源不够,所以做了妥协,拿双节点做了模拟,官网的示例主机分配如下。

可以看出官网的示例中,etcd要么全部放在master节点上,要么全部没放在master节点上

主机准备

主机互信

在将调用安装过程的主机上生成SSH密钥:

代码语言:javascript
复制
# ssh-keygen

一直按回车。

分发SSH密钥。

代码语言:javascript
复制
# for host in master1.example.com node1.example.com ; do ssh-copy-id -i ~/.ssh/id_rsa.pub $host;  done

安装基础包

每台主机上都执行:

代码语言:javascript
复制
# yum install -y wget git net-tools bind-utils yum-utils iptables-services bridge-utils bash-completion kexec-tools sos psacct java-1.8.0-openjdk-headless python-passlib

安装Ansible

在将调用安装过程的主机上执行:

  • 安装EPEL存储库:
代码语言:javascript
复制
# yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
  • 全局禁用EPEL存储库,以便在以后的安装步骤中不会意外使用它:
代码语言:javascript
复制
# sed -i -e "s/^enabled=1/enabled=0/" /etc/yum.repos.d/epel.repo
  • 安装Ansible包:
代码语言:javascript
复制
# yum -y --enablerepo=epel install ansible pyOpenSSL
  • 从GitHub 克隆openshift / openshift-ansible存储库,它提供所需的playbooks和配置文件
代码语言:javascript
复制
# cd ~
# git clone https://github.com/openshift/openshift-ansible
# cd openshift-ansible
# git checkout release-3.10

安装Docker

手动安装,可以在安装OKD之前配置Docker存储选项。 每台主机上执行:

代码语言:javascript
复制
# yum install -y docker-1.13.1

验证:

此时docker还未启动,需要配置docker存储之后再启动docker。

docker存储配置

关于这一块可以参考官方文档https://docs.okd.io/3.10/install/host_preparation.html#configuring-docker-storage,选择适合自己的存储方式。 由于我是自己电脑创建的虚拟机,这里选用的是挂载一块新的硬盘作为docker存储。

  • 配置Docker镜像服务器。

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

启动docker

代码语言:javascript
复制
# systemctl enable docker
# systemctl start docker
# systemctl is-active docker

编写Inventory文件

代码语言:javascript
复制
# mv -f /etc/ansible/hosts /etc/ansible/hosts.org
# vim /etc/ansible/hosts
代码语言:javascript
复制
[OSEv3:children]
masters
nodes
etcd
lb
nfs

[OSEv3:vars]
openshift_deployment_type=origin
ansible_ssh_user=root
openshift_enable_unsupported_configurations=True
openshift_hosted_registry_storage_kind=nfs
openshift_hosted_registry_storage_access_modes=['ReadWriteMany']
openshift_hosted_registry_storage_nfs_directory=/exports
openshift_hosted_registry_storage_nfs_options='*(rw,root_squash)'
openshift_hosted_registry_storage_volume_name=registry
openshift_hosted_registry_storage_volume_size=10Gi

openshift_metrics_install_metrics=true
openshift_metrics_hawkular_hostname=hawkular-metrics.example.com
openshift_metrics_storage_kind=nfs
openshift_metrics_storage_access_modes=['ReadWriteOnce']
openshift_metrics_storage_nfs_directory=/exports
openshift_metrics_storage_nfs_options='*(rw,root_squash)'
openshift_metrics_storage_volume_name=metrics
openshift_metrics_storage_volume_size=10Gi

openshift_ca_cert_expire_days=3650
openshift_node_cert_expire_days=3650
openshift_master_cert_expire_days=3650
etcd_ca_default_days=3650

openshift_enable_service_catalog=false
template_service_broker_install=false
ansible_service_broker_install=false

debug_level=4
openshift_clock_enabled=true
openshift_master_cluster_method=native
openshift_master_cluster_hostname=node1.example.com
openshift_master_cluster_public_hostname=node1.example.com

openshift_pkg_version=-3.10.0
openshift_disable_check=disk_availability,docker_storage,memory_availability,docker_image_availability
os_sdn_network_plugin_name=redhat/openshift-ovs-multitenant
openshift_master_identity_providers=[{'name': 'htpasswd_auth','login': 'true', 'challenge': 'true','kind': 'HTPasswdPasswordIdentityProvider'}]

[nfs]
master1.example.com

[masters]
master1.example.com

[lb]
node1.example.com

[nodes]
master1.example.com openshift_schedulable=True openshift_node_group_name='node-config-all-in-one'
node1.example.com openshift_node_group_name='node-config-compute' 

[etcd]
master1.example.com
node1.example.com

安装集群

注意调整以下命令中的文件路径,以满足自己的要求。

代码语言:javascript
复制
# ansible-playbook -i /etc/ansible/hosts ~/openshift-ansible/playbooks/prerequisites.yml
代码语言:javascript
复制
# ansible-playbook -i /etc/ansible/hosts ~/openshift-ansible/playbooks/deploy_cluster.yml

安装完成之后可以查看pod的状态。

图中运行失败的几个pod,一部分是监控的pod,因为我没有提前下载镜像导致启动失败,还有一个是openshift镜像库的web界面,失败原因大体相同,因为电脑太卡,这部分坑就不填了。影响不大。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年09月06日,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 遇到的坑以及未完善的地方总结
  • 系统与环境要求
    • 系统要求
      • master系统要求
      • node系统要求
      • etcd系统要求
      • SELinux要求
    • 环境要求
      • DNS要求
  • 安装规划
  • 主机准备
    • 主机互信
      • 安装基础包
        • 安装Ansible
          • 安装Docker
            • docker存储配置
          • 启动docker
          • 编写Inventory文件
          • 安装集群
          相关产品与服务
          容器服务
          腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档