美文网首页
openshift 3.11多主节点安装

openshift 3.11多主节点安装

作者: bjmingyang | 来源:发表于2019-03-19 17:32 被阅读0次

    安装可以看这里
    作者:qq_dao
    来源:CSDN
    原文:https://blog.csdn.net/qq_16240085/article/details/86004707

    我这里基本只写坑和原文档的错误

    Openshift OKD v3.11 高级安装

    安装注意事项
    同事说红帽的开发基本是一坨便便,举例说明就是foreman,红帽对应的就是红帽卫星这个产品,本来foreman很简洁,红帽在上面加了一堆包管理的东西,于是弄的臃肿不堪,安装的时候要加一堆变量开关,终于红帽自己也觉得无法维护了,于是又搞出一个叫叉车的项目,把所有的安装命令行参数用ansible包装一下,可维护性一下变的很差,,我从openshift的安装看,同样如此,尤其是bug不少,下面会提到,,据说openshift 4.0会用k8s on k8s的安装方法,不知道怎么样,看过演示,类似回到最初几个命令行搞定的方案了,不知道以后会不会再重新包裹一堆参数,变成一坨便便。

    ---------------引用分割线-------------
    1.操作系统语言不能是中文
    2.infra节点会自动部署router,lb不要放在infra节点上,所以80端口不能冲突
    3.如果web console访问端口改成443,lb不能放一起,端口冲突
    4.centos 从7.4 开始正式支持overlay2,最好安装最新版,我是安装的7.6
    5.开启selinux,这个是必须的,开启networkmanager。这个也是必须的
    6.保证能联网。。。
    7.如果lb和master在一个节点上,会有8443端口已被占用的问题,建议安装时lb不要放在master节点上
    8.如果etcd放在master节点上,会以静态pod形式启动。如果放在node节点上,会以系统服务的形式启动。我在安装过程中,一个etcd放在了master上,另一个放在了node上,导致etcd启动失败。建议安装时etcd要么全放在master节点上,要么全放在node节点上。
    9.我在安装过程中,直接安装了带有nfs持久存储的监控,需要提前安装java-1.8.0-openjdk-headless python-passlib,这一点官网没有提及,不提前装安装会报错。
    10.docker 启用配置参数–selinux-enabled=false ,但是操作系统selinux必须开启,否则安装报错
    ---------------以上引用分割线-------------
    11.个人感觉lb 没啥必要,如果有需求,自己弄个nginx或者haproxy吧,不过可以把nfs和lb放到一个机器上,这样就不浪费了

    12.我的环境是7个虚拟机,桥接了万兆网卡对接真实环境的ceph存储,虽然openshift 官方推荐glusterfs做持久化存储
    主要是多主机挂载的问题,我在后面也确实遇到不少持久化存储在ceph上挂载的问题,不过cephfs 支持rmw,就好多了,
    不过不在openshift的官方支持里面,没太敢用,目前基本是nfs+ceph混合用,nfs据说有性能问题,主要是做docker仓库的时候
    因此也没怎么用,主要还是根据需求,切换ceph 和nfs,其实我的nfs也是跑在ceph上面的一个虚拟机,其实性能差别不大,尤其是用于开发,因此也没什么关系
    13.openshift的ansible安装有bug,主要是网络组件,基本都是dns导致的各种问题
    最好在安装过程中 将origin-upstream-dns.conf 里面写上外部dns的地址,用ansible 推几遍,其实安装是依赖外部dns的
    但是这个ansible写的规则有问题,会自己在本机起dnsmasq,里面又不写外部dns地址,还会修改本机使用本机自己的dns,结果就导致sdn出问题,外部dns无法解析,另外双网卡的机器尤其爱出问题,需要在安装配置文件里写死本机准备给openshift使用的ip。

    ---------------引用分割线-------------

    官方建议集群所有主机的硬件规格和系统级要求。

    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数据。

    配置国内yum源,安装指定版本ansible 并做基础配置

    yum install wget -y
    cd /etc/yum.repos.d/ && mkdir repo_bak && mv *.repo repo_bak/
    wget http://mirrors.aliyun.com/repo/Centos-7.repo
    wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
    yum clean all && yum makecache
    yum -y install epel-release

    yum install python-pip -y
    pip install --upgrade setuptools

    wget https://releases.ansible.com/ansible/ansible-2.6.5.tar.gz
    tar fxz ansible-2.6.5.tar.gz && cd ansible-2.6.5
    python setup.py install

    配置/etc/hosts
    10.10.11.10 openshift1
    10.10.11.11 openshift2
    10.10.11.12 openshift3
    10.10.11.13 openshift4
    10.10.11.14 openshift5

    ssh-keygen -t rsa
    ssh-copy-id -i .ssh/id_rsa.pub openshift{1,2,3,4,5}
    ---------------以上引用分割线-------------

     1  yum install wget git net-tools bind-utils yum-utils iptables-services bridge-utils bash-completion kexec-tools sos psacct
        2  ssh-keygen
        3  ssh-copy-id localhost
        4  yum -y install     https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
        5  sed -i -e "s/^enabled=1/enabled=0/" /etc/yum.repos.d/epel.repo
        6  yum -y --enablerepo=epel install ansible pyOpenSSL
        7  cd ~
        8  git clone https://github.com/openshift/openshift-ansible
        9  cd openshift-ansible
       10  git checkout release-3.11
       12  yum install docker-1.13.1
    
    cat okd.hosts
    git clone https://github.com/openshift/openshift-ansible && cd ~/openshift-ansible && git checkout release-3.11
    

    配置centos-openshift源并同步到所有主机

    准备 yum源、NetworkManager、prerequisites.yml
    所有机器上安装 centos 的openshift官方源,启用networkmanager

    ansible openshift -a "yum install NetworkManager centos-release-openshift-origin311.noarch -y && systemctl start NetworkManager && systemctl enable NetworkManager "
    sed -i ‘s/SELINUX=disabled/SELINUX=enforcing/’ /etc/selinux/config
    ansible-playbook -i okd.hosts openshift-ansible/playbooks/prerequisites.yml
    

    注意修改 /etc/yum/yum.conf keepcache=1,因为确实很少一次成功的,保存rpm cache 有助于节省时间
    在上面的预部署通过后,就可以跑下面的部署playbook了
    ansible-playbook -i okd.hosts openshift-ansible/playbooks/deploy_cluster.yml

    ---------------引用分割线-------------
    在centos7.2系统中网络特殊配置

    cni网络插件配置文件–在centos7.2中没有成功,导致node NotReady,手动拷贝该文件即可

    cat resolv.j2
    ##nameserver updated by /etc/NetworkManager/dispatcher.d/99-origin-dns.sh
    ##Generated by NetworkManager
    search cluster.local
    nameserver {{ inventory_hostname }}
    

    配置宿主机节点的nameserver为本机IP,使得宿主机可以使用本机的dnsmasq服务解析。且该文件在生成后会自动复制到/etc/origin/node/resolv.conf,该文件在pod启动时会被添加为pod中的/etc/resolv.conf

    80-openshift-network.conf 文件删除网络有问题,暂时注释
    编辑 roles/openshift_sdn/files/sdn.yaml
    注释: # rm -Rf /etc/cni/net.d/80-openshift-network.conf

    #cat /etc/cni/net.d/80-openshift-network.conf
    {
    “cniVersion”: “0.2.0”,
    “name”: “openshift-sdn”,
    “type”: “openshift-sdn”
    }
    
    cat origin-dns.conf
    no-resolv
    domain-needed
    no-negcache
    max-cache-ttl=1
    enable-dbus
    dns-forward-max=10000
    cache-size=10000
    bind-dynamic
    min-port=1024
    except-interface=lo
    #End of config
    
    cat origin-upstream-dns.conf
    #内网自建dns服务器
    server=10.10.100.100
    
    拷贝没有生成的文件
    ansible openshift -m template -a “src=resolv.j2 dest=/etc/resolv.conf”
    ansible openshift -a “/bin/cp /etc/resolv.conf /etc/origin/node/resolv.conf”
    ansible openshift -m copy -a “src=origin-upstream-dns.conf dest=/etc/dnsmasq.d/”
    ansible openshift -m copy -a “src=origin-dns.conf dest=/etc/dnsmasq.d/”
    ansible openshift -m copy -a “src=80-openshift-network.conf dest=/etc/cni/net.d/80-openshift-network.conf”
    

    ---------------以上引用分割线-------------
    上面这段我简述一下把,,这个也是我遇到最多的问题,有不少坑,
    单节点基本一次通过,多节点在这个上面有很多坑
    基本故障
    1.node 状态noready,基本是证书和网络问题,严格检查hostname 和 /etc/hosts 是否一致
    网络问题会导致N多问题,主要是dns,sdn等问题
    首先是ansible 会调用NetworkManager,更改本地resolv.conf 为当前主机,同时使用dnsmasq来做dns指向
    但问题是ansible的playbook写的有bug,没有内部,结果导致出现没有内部dns解析,最后导致外网都无法访问
    自然很多docker镜像都拉不下,结果导致安装失败
    解决方法,
    自己创建 origin-upstream-dns.conf ,里面写上自己的内部dns地址,或者运营商给的dns,让你的机器能出去拉镜像

    cat /etc/dnsmasq.d/origin-upstream-dns.conf
    server=192.168.1.1
    

    因为这个会被ansible更改,所以最好在安装的过程中多跑几次,防止被改写

    然后是如果使用了双网卡,必须在配置文件里指定用于openshift的网络,否则依然会出网络问题,
    这个可以看我贴的配置文件

    我的配置文件

    # Create an OSEv3 group that contains the masters, nodes, and etcd groups
    [OSEv3:children]
    masters
    nodes
    etcd
    #new_nodes
    
    lb
    
    # 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_image_tag=v3.11
    # If ansible_ssh_user is not root, ansible_become must be set to true
    ansible_become=true
    
    
    ## default selectors for router and registry services
    ## openshift_router_selector='node-role.kubernetes.io/infra=true'
    ## openshift_registry_selector='node-role.kubernetes.io/infra=true'
    
    ## uncomment the following to enable htpasswd authentication; defaults to DenyAllPasswordIdentityProvider
    openshift_master_identity_providers=[{'name': 'htpasswd_auth', 'login': 'true', 'challenge': 'true', 'kind': 'HTPasswdPasswordIdentityProvider'}]
    openshift_disable_check=memory_availability,disk_availability,docker_image_availability
    
    os_sdn_network_plugin_name=redhat/openshift-ovs-multitenant
    
    openshift_master_api_port=8443
    openshift_master_console_port=8443
    openshift_hosted_router_replicas=1
    openshift_hosted_registry_replicas=1
    openshift_master_cluster_hostname=openshift-cluster.example.com
    openshift_master_cluster_public_hostname=openshift-cluster.example.com
    openshift_master_default_subdomain=okd.example.com
    
    openshift_master_cluster_method=native
    ##openshift_public_ip=
    ## false
    ##ansible_service_broker_install=false
    ##openshift_enable_service_catalog=false
    ##template_service_broker_install=false
    ##openshift_logging_install_logging=false
    
    # cert
    openshift_hosted_registry_cert_expire_days=3650
    openshift_ca_cert_expire_days=3650
    openshift_node_cert_expire_days=3650
    openshift_master_cert_expire_days=3650
    etcd_ca_default_days=3650
    openshift_master_overwrite_named_certificates=true
    
    
    ## registry passwd
    ##oreg_url=172.16.37.12:5000/openshift3/ose-${component}:${version}
    ##openshift_examples_modify_imagestreams=true
    
    ## docker config
    ##openshift_docker_additional_registries=172.16.37.12:5000,172.30.0.0/16
    ##openshift_docker_insecure_registries=172.16.37.12:5000,172.30.0.0/16
    ##openshift_docker_blocked_registries
    openshift_docker_options="--log-driver json-file --log-opt max-size=1M --log-opt max-file=3"
    
    ## openshift_cluster_monitoring_operator_install=false
    openshift_metrics_install_metrics=true
    ## openshift_enable_unsupported_configurations=True
    ##openshift_logging_es_nodeselector='node-role.kubernetes.io/infra: "true"'
    ##openshift_logging_kibana_nodeselector='node-role.kubernetes.io/infra: "true"'
    ## host group for masters
    openshift_master_bootstrap_auto_approve=true
    openshift_set_node_ip=True
    
    [masters]
    openshift-master01.example.com
    openshift-master02.example.com
    openshift-master03.example.com
    [etcd]
    openshift-master01.example.com
    openshift-master02.example.com
    openshift-master03.example.com
    [nodes]
    
    openshift-master01.example.com openshift_ip=10.52.17.150 openshift_node_group_name='node-config-master'
    openshift-master02.example.com  openshift_ip=10.52.17.155 openshift_node_group_name='node-config-master'
    openshift-master03.example.com  openshift_ip=10.52.17.156 openshift_node_group_name='node-config-master'
    openshift-node01.example.com openshift_ip=10.52.17.151 openshift_node_group_name='node-config-infra'
    openshift-node02.example.com openshift_ip=10.52.17.152 openshift_node_group_name='node-config-infra'
    openshift-node03.example.com openshift_ip=10.52.17.153 openshift_node_group_name='node-config-infra'
    [lb]
    openshift-lb.example.com openshift_ip=10.52.17.154
    

    另外还有一个dns的配置
    将这些贴到每个机器的/etc/hosts里面,另外如果有lb,就顺便也来个nfs把,直接加个nfs的字段,然后配置nfs的主机和lb为一个,
    这样不用弄glusterfs,红帽是推荐使用glusterfs的,主要还是做pv的时候,ceph不能做rwm类型的pv,容易导致切换镜像的时候,pod起不来,我在后期使用中,用的是ceph和nfs混合使用,虽然看k8s支持cephfs做rwm类型的存储,但是毕竟还没有出现在官方的文档里正式支持。看最近要出的openshift 4.0是不是能支持,另外证书这段,最好还是用企业自己ca证书签署一下,当然最好能用可信的ca做认证,否则后期做各种ci/cd都有额外的步骤,不方便,不过熟了其实也没什么。

    10.52.17.150 openshift-master01.example.com
    10.52.17.155 openshift-master02.example.com
    10.52.17.156 openshift-master03.example.com
    10.52.17.151 openshift-node01.example.com
    10.52.17.152 openshift-node02.example.com
    10.52.17.153 openshift-node03.example.com
    10.52.17.154 openshift-lb.example.com
    10.52.17.154 openshift-cluster.example.com

    集群成功标志:所有容器STATUS 为 Running

    oc get pod --all-namespaces

    集群卸载(如有必要,默认不卸载docker,如果需要查看文件内容)

    ansible-playbook -i okd.hosts openshift-ansible/playbooks/adhoc/uninstall.yml

    验证

    首次新建用户密码
    htpasswd -cb /etc/origin/master/htpasswd admin admin
    添加用户密码
    htpasswd -b /etc/origin/master/htpasswd dev dev
    以集群管理员登录
    oc login -u system:admin
    给用户分配一个集群管理员角色
    oc adm policy add-cluster-role-to-user cluster-admin admin
    访问登录即可
    https://paas.xxxxxx.com:8443

    参考文献:
    https://docs.okd.io/3.11/install/configuring_inventory_file.html
    https://docs.okd.io/3.11/install/example_inventories.html


    相关文章

      网友评论

          本文标题:openshift 3.11多主节点安装

          本文链接:https://www.haomeiwen.com/subject/ypjnmqtx.html