openshift 3.10多節點集羣安裝(基於Ansible和Centos7.4)

參考官方文檔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密鑰:

# ssh-keygen

一直按回車。
這裏寫圖片描述
分發SSH密鑰。

# for host in master1.example.com node1.example.com ; do ssh-copy-id -i ~/.ssh/id_rsa.pub $host;  done

這裏寫圖片描述

安裝基礎包

每臺主機上都執行:

# 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存儲庫:
# yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
  • 全局禁用EPEL存儲庫,以便在以後的安裝步驟中不會意外使用它:
# sed -i -e "s/^enabled=1/enabled=0/" /etc/yum.repos.d/epel.repo
  • 安裝Ansible包:
# yum -y --enablerepo=epel install ansible pyOpenSSL
  • 從GitHub 克隆openshift / openshift-ansible存儲庫,它提供所需的playbooks和配置文件
# cd ~
# git clone https://github.com/openshift/openshift-ansible
# cd openshift-ansible
# git checkout release-3.10

安裝Docker

手動安裝,可以在安裝OKD之前配置Docker存儲選項。
每臺主機上執行:

# 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

# systemctl enable docker
# systemctl start docker
# systemctl is-active docker

編寫Inventory文件

# mv -f /etc/ansible/hosts /etc/ansible/hosts.org
# vim /etc/ansible/hosts
[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

安裝集羣

注意調整以下命令中的文件路徑,以滿足自己的要求。

# ansible-playbook -i /etc/ansible/hosts ~/openshift-ansible/playbooks/prerequisites.yml

這裏寫圖片描述

# ansible-playbook -i /etc/ansible/hosts ~/openshift-ansible/playbooks/deploy_cluster.yml

這裏寫圖片描述
安裝完成之後可以查看pod的狀態。
這裏寫圖片描述
圖中運行失敗的幾個pod,一部分是監控的pod,因爲我沒有提前下載鏡像導致啓動失敗,還有一個是openshift鏡像庫的web界面,失敗原因大體相同,因爲電腦太卡,這部分坑就不填了。影響不大。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章