zoukankan      html  css  js  c++  java
  • openshift OKD v3.11安装

    安装前的准备

    最低系统要求

    1. master最低要求

    • 最小4 vCPU
    • 最小16 GB RAM
    • /var/最小40 GB硬盘空间
    • /usr/local/bin/最小1 GB硬盘空间
    • 临时目录最小1 GB硬盘空间

    2. node最低要求

    • 1 vCPU
    • 最小8 GB RAM
    • /var/最小15 GB硬盘空间
    • /usr/local/bin/最小1 GB硬盘空间
    • 临时目录最小1 GB硬盘空间

    3. 磁盘要求

    • /var/lib/etcd Less than 20 GB
    • /var/lib/docker 50GB
    • /var/lib/containers 50GB

    这是openshift官方给出的最小要求,也是openshift-ansible检测环境时的最小要求,实际上,我们的实验环境满足不了最小要求,但仍然可以安装。但是需要我们在做openshift-ansible的配置预检时忽略这些检查

    实验环境说明

    主机名 角色
    master1.example.com master, etcd
    node1.example.com node
    node2.example.com node

    软件环境说明:

    • RHEL/CentOS 7.x
    • Ansible 2.6.14
    • openshift: OKD 3.11
    • docker: 1.13
    • kubernetes: 1.11

    预配置

    1. 配置yum源

    # 包含CentOS 7和epel源
    
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    
    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    
    
    

    2. 安装基础环境依赖包

    yum install -y wget git net-tools bind-utils yum-utils iptables-services bridge-utils bash-completion kexec-tools sos psacct
    
    # 安装NetworkManager,openshift在配置dns时需要依赖NetworkManager
    yum install -y NetworkManager
    systemctl start NetworkManager
    
    

    3. 安装docker

    yum install -y docker
    
    vim /etc/docker/daemon.json
    
    {
        "registry-mirrors": ["https://o0o4czij.mirror.aliyuncs.com"]
    }
    
    systemctl start docker 
    systemctl enable docker
    
    

    当前官方宣称openshift v3.11只支持docker 1.13(事实上,在我的测试当中docker-ce也能用),为避免不必要的麻烦,这里直接使用docker 1.13版本

    安装openshift

    1. 安装openshift-ansible

    
    yum install -y centos-release-openshift-origin311
    
    yum install -y openshift-ansible*
    

    2. 关闭selinux检查

    openshift-ansible的代码中,强制开启了针对selinux的检查,要求其必须开启,否则安装报错。而事实上,在生产环境中,selinux基本都是关闭的,这里通过修改其源代码以忽略针对selinux的检查:

    # vim /usr/share/ansible/openshift-ansible/roles/openshift_node/tasks/selinux_container_cgroup.yml
    
    - name: Setting sebool container_manage_cgroup
      seboolean:
        name: container_manage_cgroup
        state: yes
        persistent: yes
      when:
        ansible_selinux.status == 'enabled'
    
    

    3. 修改openshift-ansible代码中使用的yum源为国内源

    cd /usr/share/ansible/openshift-ansible
    grep  -nr mirror.centos.org * | awk -F':' '{print $1}' | xargs sed -i 's/mirror.centos.org/mirrors.aliyun.com/g'
    

    4. 配置inventory

    vim /etc/ansible/hosts
    
    [OSEv3:children]
    masters
    nodes
    etcd
    new_nodes
    new_masters
    new_etcd
    nfs
    
    [OSEv3:vars]
    # if your target hosts are Fedora uncomment this
    #ansible_python_interpreter=/usr/bin/python3
    ansible_ssh_user=root
    openshift_deployment_type=origin
    openshift_image_tag=v3.11
    
    #openshift_portal_net=172.30.0.0/16
    # localhost likely doesn't meet the minimum requirements
    #openshift_disable_check=disk_availability,memory_availability,docker_image_availability
    
    #openshift_node_groups=[{'name': 'node-config-all-in-one', 'labels': ['node-role.kubernetes.io/master=true', 'node-role.kubernetes.io/infra=true', 'node-role.kubernetes.io/compute=true']}]
    openshift_master_identity_providers=[{'name': 'htpasswd_auth', 'login': 'true', 'challenge': 'true', 'kind': 'HTPasswdPasswordIdentityProvider'}]
    #openshift_master_htpasswd_file=/root/openshift-passwd
    
    openshift_disable_check=disk_availability,memory_availability,docker_image_availability,docker_storage
    
    openshift_master_api_port = 443
    openshift_master_console_port = 443
    
    #os_sdn_network_plugin_name=redhat/openshift-ovs-multitenant
    os_sd_network_plugin_name=redhat/openshift-ovs-subnet
    
    #deployment_subtype=registry
    #openshift_hosted_infra_selector=""
    
    openshift_hosted_router_replicas=1
    openshift_hosted_registry_replicas=1
    #
    openshift_master_cluster_hostname=master.lab.example.com
    openshift_master_cluster_public_hostname=master.lab.example.com
    openshift_master_default_subdomain=apps.lab.example.com
    
    openshift_enable_service_catalog=false
    
    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_hosted_etcd_storage_kind = nfs
    #openshift_hosted_etcd_storage_nfs_options = '*(rw,root_squash,sync,no_wdelay)'
    #openshift_hosted_etcd_storage_nfs_directory = /exports
    #openshift_hosted_etcd_storage_volume_name = etcd-vol2
    #openshift_hosted_etcd_storage_access_modes = ['ReadWriteOnce']
    #openshift_hosted_etcd_storage_volume_size = 1G
    #openshift_hosted_etcd_storage_labels={'storage': 'etcd'}
    
    #openshift_master_cluster_method=native
    #openshift_public_ip=10.1.61.157
    # false
    #ansible_service_broker_install=false
    #openshift_enable_service_catalog=false
    #template_service_broker_install=false
    #openshift_logging_install_logging=false
    
    #openshift_docker_options="--log-driver json-file --log-opt max-size=1M --log-opt max-file=3 --exec-opts native.cgroupdriver=systemd"
    
    
    
    [masters]
    10.1.61.43
    [etcd]
    10.1.61.43
    
    [nfs]
    10.1.61.43
    
    [nodes]
    # openshift_node_group_name should refer to a dictionary with matching key of name in list openshift_node_groups.
    10.1.61.43 openshift_node_group_name="node-config-all-in-one"
    10.1.61.157 openshift_node_group_name="node-config-all-in-one"
    10.1.61.187 openshift_node_group_name="node-config-master-infra"
    
    [new_nodes]
    
    [new_masters]
    
    [new_etcd]
    
    

    一些配置项说明:

    1. openshift_deployment_type: 指定openshift的版本,openshift同时有开源版和商业版,这里的origin即开源版
    2. openshift_image_tag:指定使用的openshift的版本
    3. openshift_master_identity_providers:指定openshift的认证方式
    4. openshift_disable_check:openshift-ansible在执行安装时会对系统做预检,这里可以指定预检时跳过的检查项:
      • disk_availability:推荐master磁盘空间剩余量大于40GB。测试环境无法满足,跳过检测。
      • memory_availability:推荐master内存为16GB,node内存为8GB,测试环境无法满足,跳过检测。
      • docker_image_availability:需要的几个镜像未找到,选择跳过,装完集群后,在使用的时候再自行下载。
      • docker_storage:推荐选择一块磁盘空间存储镜像,这里选择跳过。采用docker默认的方式存储镜像。

    事实上,部署前预检查配置还有专门的配置检查脚本:

    ansible-playbook /usr/share/ansible/openshift-ansible/playbooks/prerequisites.yml
    

    5. 执行部署

    ansible-playbook /usr/share/ansible/openshift-ansible/playbooks/deploy_cluster.yml
    

    至此,部署完成

    6. 卸载

    如果安装后需要卸载,可执行如下操作:

    ansible-playbook /usr/share/ansible/openshift-ansible/playbooks/adhoc/uninstall.yml
    

    7. 访问

    可通过两种方式访问openshift集群,一个是命令行,即oc命令集,如下:

    # 查看当前集群中的节点
    oc get nodes
    
    # 查看当前集群默认项目下的pod
    oc get pods 
    
    

    如果通过oc命令操作无权限,则需要将master节点上/etc/origin/master目录下的admin.kubeconfig文件拷贝至用户家目录下的一个隐藏目录.kube目录下,并命名为config:

    mkdir ~/.kube
    cp /etc/origin/master/admin.kubeconfig ~/.kube/config
    

    另一种则可通过openshift提供的强大的图形界面功能:

    curl https://master1.example.com:8443/console
    

    这个时候,需要通过帐号密码登录,但我们刚安装好的openshift默认没有帐号密码。所以如果需要登录图形界面,需要先添加相关帐号。

    openshift使用/etc/origin/master/htpasswd文件来保存帐号密码,下面我们创建一个超级管理员帐号:

    # 创建admin用户
    htpasswd -m /etc/origin/master/htpasswd admin
    # 为用户授予超级管理员权限
    oc adm policy add-cluster-role-to-user cluster-admin admin
    

    然后即可通过该帐号登入web界面

    注意事项及常见故障

    注意事项

    • 操作系统语言不能为中文
    • lb节点和router节点不能放一块(即infra节点不能同时部署router和lb,因为它们都会占据80端口),同理,lb不要和master放一块
    • 需要开启networkmanager,openshift基于此配置网络
    • openshift-ansible也要求开启selinux,但可通过修改其源代码关闭此项检查
    • 确保master节点和node节点能够联网(需要从互联网下载软件包及拉取镜像)
    • 生产环境中,建议etcd和master放同一节点,或者独立部署,不建议又放master节点又放node节点(从openshift 4.1开始,强制要求etcd和master部署在同一节点)

    其他安装说明

    在我们的实验环境中,使用了单master单etcd节点,事实上,在生产环境中,推荐使用至少三master三etcd的配置。那么针对不同的集群部署方案,/etc/ansible/hosts的配置也有相应区别。具体可参考红帽官方文档

    另外还需要说明的是,openshift的所有组件的部署其实都是基于容器的方式部署,而容器镜像都来自docker官方,所以需要确保网络的连通性和稳定性。好在当前国内有众多的加速器可用。

    常见错误

    在安装openshift-service-catalog时大概率失败,在失败后,打出的日志中显示etcd无法连接,在node节点上拿不到连接etcd的证书,错误忘记复制,在这里就不贴了。

    直接说原因,因为这个证书只在主节点上存在,这一点确实很奇怪,至于什么原因,暂时不明,一个简单的解决办法是从主节点上直接复制etcd证书至所有node节点:

    scp master:/etc/origin/master/master.etcd-c* node:/etc/origin/master/
    

    当然也可以直接选择不安装openshift-service-catalog组件,在inventory中添加如下配置项即可:

    openshift_enable_service_catalog=false
    

    附录

    参考:

  • 相关阅读:
    python 递归计算阶乘
    python引用
    python3 函数参数
    名片管理系统V0.0.2(函数实现)
    python 之socket语法及相关
    常见模块(一)
    常见模块(二)
    Python之迭代器、生成器、装饰器和递归
    python 之自定义函数
    python 之SET和collections
  • 原文地址:https://www.cnblogs.com/breezey/p/12923719.html
Copyright © 2011-2022 走看看