安裝可以看這里
作者:qq_dao
來源:CSDN
原文:https://blog.csdn.net/qq_16240085/article/details/86004707
我這里基本只寫坑和原文檔的錯誤
Openshift OKD v3.11 高級安裝
安裝注意事項
同事說紅帽的開發(fā)基本是一坨便便唱较,舉例說明就是foreman黄鳍,紅帽對應的就是紅帽衛(wèi)星這個產品介劫,本來foreman很簡潔采驻,紅帽在上面加了一堆包管理的東西傲武,于是弄的臃腫不堪峰尝,安裝的時候要加一堆變量開關第献,終于紅帽自己也覺得無法維護了钢坦,于是又搞出一個叫叉車的項目,把所有的安裝命令行參數(shù)用ansible包裝一下比搭,可維護性一下變的很差冠跷,,我從openshift的安裝看身诺,同樣如此蜜托,尤其是bug不少,下面會提到霉赡,橄务,據說openshift 4.0會用k8s on k8s的安裝方法,不知道怎么樣穴亏,看過演示蜂挪,類似回到最初幾個命令行搞定的方案了,不知道以后會不會再重新包裹一堆參數(shù)嗓化,變成一坨便便棠涮。
---------------引用分割線-------------
1.操作系統(tǒng)語言不能是中文
2.infra節(jié)點會自動部署router,lb不要放在infra節(jié)點上刺覆,所以80端口不能沖突
3.如果web console訪問端口改成443,lb不能放一起,端口沖突
4.centos 從7.4 開始正式支持overlay2严肪,最好安裝最新版,我是安裝的7.6
5.開啟selinux隅津,這個是必須的诬垂,開啟networkmanager。這個也是必須的
6.保證能聯(lián)網伦仍。结窘。。
7.如果lb和master在一個節(jié)點上充蓝,會有8443端口已被占用的問題隧枫,建議安裝時lb不要放在master節(jié)點上
8.如果etcd放在master節(jié)點上喉磁,會以靜態(tài)pod形式啟動。如果放在node節(jié)點上官脓,會以系統(tǒng)服務的形式啟動协怒。我在安裝過程中,一個etcd放在了master上卑笨,另一個放在了node上孕暇,導致etcd啟動失敗。建議安裝時etcd要么全放在master節(jié)點上,要么全放在node節(jié)點上。
9.我在安裝過程中盆昙,直接安裝了帶有nfs持久存儲的監(jiān)控,需要提前安裝java-1.8.0-openjdk-headless python-passlib座舍,這一點官網沒有提及,不提前裝安裝會報錯陨帆。
10.docker 啟用配置參數(shù)–selinux-enabled=false 曲秉,但是操作系統(tǒng)selinux必須開啟,否則安裝報錯
---------------以上引用分割線-------------
11.個人感覺lb 沒啥必要疲牵,如果有需求承二,自己弄個nginx或者haproxy吧,不過可以把nfs和lb放到一個機器上瑰步,這樣就不浪費了
12.我的環(huán)境是7個虛擬機矢洲,橋接了萬兆網卡對接真實環(huán)境的ceph存儲璧眠,雖然openshift 官方推薦glusterfs做持久化存儲
主要是多主機掛載的問題缩焦,我在后面也確實遇到不少持久化存儲在ceph上掛載的問題,不過cephfs 支持rmw责静,就好多了袁滥,
不過不在openshift的官方支持里面,沒太敢用灾螃,目前基本是nfs+ceph混合用题翻,nfs據說有性能問題,主要是做docker倉庫的時候
因此也沒怎么用腰鬼,主要還是根據需求嵌赠,切換ceph 和nfs,其實我的nfs也是跑在ceph上面的一個虛擬機熄赡,其實性能差別不大姜挺,尤其是用于開發(fā),因此也沒什么關系
13.openshift的ansible安裝有bug彼硫,主要是網絡組件炊豪,基本都是dns導致的各種問題
最好在安裝過程中 將origin-upstream-dns.conf 里面寫上外部dns的地址凌箕,用ansible 推幾遍,其實安裝是依賴外部dns的
但是這個ansible寫的規(guī)則有問題词渤,會自己在本機起dnsmasq牵舱,里面又不寫外部dns地址,還會修改本機使用本機自己的dns缺虐,結果就導致sdn出問題芜壁,外部dns無法解析,另外雙網卡的機器尤其愛出問題高氮,需要在安裝配置文件里寫死本機準備給openshift使用的ip沿盅。
---------------引用分割線-------------
官方建議集群所有主機的硬件規(guī)格和系統(tǒng)級要求。
master系統(tǒng)要求
最低操作系統(tǒng)版本:Fedora 21纫溃、CentOS 7.4腰涧、RHEL 7.4、RHEL Atomic Host 7.4.5紊浩。
最低4 vCPU窖铡。
最小16GB RAM。
包含/var/的文件系統(tǒng)最小40GB硬盤空間坊谁。
包含/usr/local/bin/的文件系統(tǒng)最小1GB硬盤空間费彼。
包含系統(tǒng)臨時目錄的文件系統(tǒng)最小1GB硬盤空間。
Etcd和Master在同一節(jié)點的口芍,需要至少4核箍铲,2核系統(tǒng)將無法工作。
node系統(tǒng)要求
最低操作系統(tǒng)版本:Fedora 21鬓椭、CentOS 7.4颠猴、RHEL 7.4、RHEL Atomic Host 7.4.5小染。
NetworkManager 1.0或更新翘瓮。
最低1 vCPU。
最小8GB RAM裤翩。
包含/var/的文件系統(tǒng)最小15GB硬盤空間资盅。
包含/usr/local/bin/的文件系統(tǒng)最小1GB硬盤空間。
包含系統(tǒng)臨時目錄的文件系統(tǒng)最小1GB硬盤空間踊赠。
額外至少15GB未分配空間呵扛,用于Docker存儲。
etcd系統(tǒng)要求
最小20GB硬盤空間存儲etcd數(shù)據筐带。
配置國內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 有助于節(jié)省時間
在上面的預部署通過后凤价,就可以跑下面的部署playbook了
ansible-playbook -i okd.hosts openshift-ansible/playbooks/deploy_cluster.yml
---------------引用分割線-------------
在centos7.2系統(tǒng)中網絡特殊配置
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 }}
配置宿主機節(jié)點的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”
---------------以上引用分割線-------------
上面這段我簡述一下把,灭红,這個也是我遇到最多的問題侣滩,有不少坑,
單節(jié)點基本一次通過变擒,多節(jié)點在這個上面有很多坑
基本故障
1.node 狀態(tài)noready君珠,基本是證書和網絡問題,嚴格檢查hostname 和 /etc/hosts 是否一致
網絡問題會導致N多問題娇斑,主要是dns策添,sdn等問題
首先是ansible 會調用NetworkManager,更改本地resolv.conf 為當前主機毫缆,同時使用dnsmasq來做dns指向
但問題是ansible的playbook寫的有bug唯竹,沒有內部,結果導致出現(xiàn)沒有內部dns解析苦丁,最后導致外網都無法訪問
自然很多docker鏡像都拉不下浸颓,結果導致安裝失敗
解決方法,
自己創(chuàng)建 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里面规丽,另外如果有l(wèi)b蒲牧,就順便也來個nfs把,直接加個nfs的字段赌莺,然后配置nfs的主機和lb為一個冰抢,
這樣不用弄glusterfs,紅帽是推薦使用glusterfs的艘狭,主要還是做pv的時候挎扰,ceph不能做rwm類型的pv翠订,容易導致切換鏡像的時候,pod起不來遵倦,我在后期使用中尽超,用的是ceph和nfs混合使用,雖然看k8s支持cephfs做rwm類型的存儲梧躺,但是畢竟還沒有出現(xiàn)在官方的文檔里正式支持似谁。看最近要出的openshift 4.0是不是能支持掠哥,另外證書這段巩踏,最好還是用企業(yè)自己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