openshift 3.11多主节点安装

安装可以看这里
作者: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多主节点安装)