1.概述
本文描述離線安裝OCP3.11.16的過程。有訂閱的讀者,可以自行去access.redhat.com下載。需要進行功能驗證的讀者,請聯繫對應的紅帽銷售進行洽談。
2 環境說明
2.1 虛擬機準備
本文檔使用三臺VMWare虛擬機完成部署,虛擬機配置如下:
IP地址 | 主機名 | CPU | 內存 | 硬盤 | OCP角色 |
---|---|---|---|---|---|
192.168.182.221 | shift-master | 2 | 4 | 40G | Master |
192.168.182.222 | shift-node1 | 4 | 8 | 40G | Infra node |
192.168.182.223 | shift-node2 | 4 | 8 | 40G | APP Node |
服務器配置根據需要配置。實驗環境選擇域名爲example.com。
3 操作系統配置
所有虛擬機使用RHEL 7.6 ISO最小化安裝操作系統,後文將直接使用RHEL7.6 ISO提供操作系統包,如果使用其他低版本操作系統可能會缺少依賴包,請自行在https://access.redhat.com/downloads/content/package-browser搜索下載。
3.1 網絡配置
修改網卡配置文件,將所有服務器的網絡配置爲靜態IP地址,並設定上游DNS服務器。
# vi /etc/sysconfig/network-scripts/ifcfg-ens33
BOOTPROTO=static
DEVICE=ens33
ONBOOT=yes
TYPE=Ethernet
USERCTL=no
IPADDR=192.168.182.221
NETMASK=255.255.255.0
GATEWAY=192.168.182.2
DNS1=192.168.182.2
IPADDR的值請根據實際環境修改。
注意:
1)所有外部DNS在網卡中使用DNS1,DNS2…..配置。
2)網卡配置中絕不要添加NM_CONTROL=no。
重啓網絡
# systemctl restart network
3.2 時區設置並配置時間同步
所有節點設置時區爲Asia/Shanghai
# timedatectl set-timezone Asia/Shanghai
離線環境下的時間同步請自行解決,可以使用本地NTP server或者VMware Tools時間同步。
3.3 主機名配置
按照2.1章節提供的命名設定各服務器的主機名,命令如下:
# hostnamectl set-hostname xxxxxxxx
例如:
# hostnamectl set-hostname shift-master
3.4 關閉firewalld
所有節點關閉firewalld。
K8s可以使用firewalld或者iptables實現NAT,建議禁用firewalld而使用iptables。
# systemctl stop firewalld
# systemctl disable firewalld
# systemctl mask firewalld
3.5 關閉selinux
所有節點將selinux設置爲permissive
# setenforce 0;
# sed -i 's/^SELINUX=.*/SELINUX=permissive/'/etc/selinux/config
注意:絕不要將selinux設置爲disable。
3.6 配置本地hosts
所有master和node節點修改配置文件/etc/hosts,文件內容如下:
# vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.182.221 shift-master.example.comshift-master
192.168.182.222 shift-node1.example.comshift-node1
192.168.182.223 shift-node2.example.comshift-node2
192.168.182.223 registry.example.com
如果有DNS服務器可以提供解析,則不需要配置本地hosts。
4 本地YUM源鏡像創建與配置
選擇master節點搭建本地yum源。
將預先下載好的RPM源解壓後拷貝至master節點的目錄/repo/下,目錄結構如下:
4.1 搭建本地YUM server
在master節點執行如下操作。
創建用於存放RPM包的目錄
# mkdir -p /repo/base
掛載RHEL 7.6的ISO到/repo/base下
# mount /dev/cdrom /repo/base
# ls /repo/base
寫入fstab,開啓自動掛載
# vi /etc/fstab
……
/dev/cdrom /repo/base/ iso9660 defaults 0 0
# mount -a
拷貝下載的OCP RPM包,拷貝到/repo目錄下。
RPM包下載後是ZIP壓縮包,請自行拷貝到master節點/repo目錄下,過程略。最終/repo下的目錄結構如下:
配置臨時本地yum源
# vi /etc/yum.repos.d/base.repo
[rhel7.6]
name=rhel7.6
baseurl=file:///repo/base/
enabled=1
gpgcheck=0
安裝Apache Httpd
# yum -y install httpd
# vi /etc/httpd/conf/httpd.conf
……
#Listen 12.34.56.78:80
Listen 8080
……
注:修改http服務端口爲8080。
# ln -s /repo/ /var/www/html/repo
啓動httpd服務。命令如下:
# systemctl start httpd
# systemctl enable httpd
額外說明:
createrepo生成索引的步驟如下:
# yum -y install createrepo
# cd /repo/rhel-7-server-ansible-2.6-rpms
# createrepo .
# cd /repo/rhel-7-server-extras-rpms/
# createrepo .
# cd /repo/rhel-7-server-ose-3.11-rpms/
# createrepo .
4.2 配置防火牆規則
在master節點操作。由於在安裝OCP過程中會安裝iptbales並啓動,如果不允許yum源的8080端口,則會導致YUMserver無法訪問。如果使用默認的80端口則不需要此步操作。
安裝iptables軟件包
# yum -y install iptables-services
# systemctl start iptables
# systemctl enable iptables
添加規則,允許其他節點訪問yum倉庫
# iptables -I INPUT -p tcp -m state --state NEW-m tcp --dport 8080 -j ACCEPT
保存規則
# service iptables save
刪除master上臨時配置的yum源
# rm -rf /etc/yum.repos.d/base.repo
4.3 配置客戶端YUM Repo
在所有節點上配置YUM Repo指向master YUM源。命令如下:
# vi /etc/yum.repos.d/ocp.repo
[base]
name=base
baseurl=http://192.168.182.221:8080/repo/base/
enabled=1
gpgcheck=0
[ansible]
name=ansible
baseurl=http://192.168.182.221:8080/repo/rhel-7-server-ansible-2.6-rpms/
enabled=1
gpgcheck=0
[extra]
name=extra
baseurl=http://192.168.182.221:8080/repo/rhel-7-server-extras-rpms/
enabled=1
gpgcheck=0
[ose]
name=ose
baseurl=http://192.168.182.221:8080/repo/rhel-7-server-ose-3.11-rpms/
enabled=1
gpgcheck=0
測試配置成功
# yum repolist
5 安裝外部Registry
5.1 安裝倉庫docker-distribution
本地測試直接使用docker-distribution。
在shift-node2上安裝DockerRegistry
# yum -y install docker-distribution
(可選配置)爲了省去倉庫的5000端口,修改docker-distribution監聽80端口。
# vi /etc/docker-distribution/registry/config.yml
……
http:
addr: :80
啓動服務並開機自啓
# systemctl start docker-distribution
# systemctl enable docker-distribution
5.2 上傳基礎鏡像到外部倉庫
下載鏡像壓縮包(使用zip分包壓縮),解壓後將鏡像上傳到shift-node2節點的/root/images。
在鏡像倉庫節點安裝docker
# yum -y install docker
修改docker配置文件添加倉庫
# vi /etc/sysconfig/docker
…..
OPTIONS='…. --insecure-registryregistry.example.com --add-registry registry.example.com'
……
啓動docker服務
# systemctl start docker
# systemctl enable docker
在shift-node2節點導入所有預先下載的Docker鏡像。命令如下:
# cd /root/images
# for i in `ls *.tar` ; do docker load -i $i;done;
# docker images(所有鏡像爲registry.redhat.io下載)
批量tag鏡像
# REDHAT_REG="registry.redhat.io"
# PRIVATE_REG="registry.example.com"
# for i in $(docker images|grep $REDHAT_REG|awk'{print $1":"$2}') ; do docker tag $i "$PRIVATE_REG$(echo $i|awk -F 'io' {'print $2'})" ; done;
推送鏡像至外部鏡像倉庫
# for i in `docker images|grep $PRIVATE_REG|awk'{print $1":"$2}'` ; do dockerpush $i; done;
批量刪除registry.redhat.iotag:
# for i in $(docker images|grep $REDHAT_REG|awk'{print $1":"$2}') ; do docker rmi $i ; done;
批量刪除本地鏡像(可選,爲了減少佔用的磁盤空間)
# for i in $(docker images|grep $PRIVATE_REG|awk'{print $1":"$2}') ; do docker rmi $i ; done;
6 安裝OpenShift預備
6.1 安裝軟件包並配置基礎環境
在所有節點上安裝OpenShift需要的軟件包。命令如下:
# yum -y install wget git net-tools bind-utilsiptables-services bridge-utils bash-completion kexec-tools sos psacct
6.2 配置ansible主控節點
選用master節點作爲ansible的主控節點。在master安裝ansible
# yum -y install openshift-ansible
6.3 配置免密登錄
使用Ansible需要通過SSH連接到被控節點,可以配置SSH免密登錄。
在master節點上生成SSH所需的祕鑰。命令如下,應答輸入請直接輸入回車。
# ssh-keygen
同步SSH key,建立master節點與所有節點的SSH主機互信。
# ssh-copy-id [email protected]
# ssh-copy-id [email protected]
# ssh-copy-id [email protected]
7 OpenShift 3安裝
該章節在master節點執行。
7.1 修改ansible inventory文件
配置ansible inventory文件,定義安裝OCP的參數。
# echo > /etc/ansible/hosts
# vi /etc/ansible/hosts
#Create an OSEv3 groupthat contains the masters, nodes, and etcd groups
[OSEv3:children]
masters
nodes
etcd
# Set variables commonfor all OSEv3 hosts
[OSEv3:vars]
# SSH user, this usershould allow ssh based auth without requiring a password
ansible_ssh_user=root
# If ansible_ssh_user isnot root, ansible_become must be set to true
#ansible_become=true
openshift_deployment_type=openshift-enterprise
openshift_image_tag=v3.11.16
openshift_pkg_version=-3.11.16
openshift_master_default_subdomain=apps.example.com
openshift_docker_options="--selinux-enabled--insecure-registry 172.30.0.0/16 --log-driver json-file --log-opt max-size=50M--log-opt max-file=3 --insecure-registry registry.example.com --add-registryregistry.example.com"
oreg_url=registry.example.com/openshift3/ose-${component}:${version}
openshift_examples_modify_imagestreams=true
openshift_metrics_install_metrics=true
openshift_logging_install_logging=true
openshift_logging_es_nodeselector={"node-role.kubernetes.io/infra":"true"}
openshift_enable_service_catalog=false
ansible_service_broker_install=false
# uncomment the followingto enable htpasswd authentication; defaults to DenyAllPasswordIdentityProvider
openshift_master_identity_providers=[{'name':'htpasswd_auth', 'login': 'true', 'challenge': 'true', 'kind':'HTPasswdPasswordIdentityProvider'}]
openshift_disable_check="disk_availability,docker_image_availability,memory_availability,docker_storage,package_version"
# host group for masters
[masters]
shift-master.example.com
# host group for etcd
[etcd]
shift-master.example.com
# host group for nodes,includes region info
[nodes]
shift-master.example.com openshift_node_group_name='node-config-master'
shift-node1.example.comopenshift_node_group_name='node-config-infra'
shift-node2.example.comopenshift_node_group_name='node-config-compute'
重要參數說明:
- openshift_image_tag=v3.11.16:設置使用鏡像的版本,如果不設置,則默認使用v3.11。
- openshift_pkg_version=-3.11.16:設置安裝RPM包的版本,如果不設置,則默認使用-3.11*。
- openshift_master_default_subdomain:如果安裝metrics(openshift_metrics_install_metrics=true),但是不設置openshift_metrics_hawkular_hostname參數,則該參數必須設置。
- 離線安裝不要設置oreg_auth_user 和oreg_auth_password。
- openshift_metrics_install_metrics:開啓安裝hawkular metrics,默認不安裝。目前版本中webconsole pod界面中的性能數據依然來自於hawkular metrics;基於CPU和MEM的自動彈性擴容仍依賴於hawkularmetrics。
- openshift_logging_install_logging:開啓安裝日誌系統,默認不安裝。如果開啓,則必須設置openshift_logging_es_nodeselector,否則安裝報錯。
- openshift_enable_service_catalog:開啓安裝service catelog,默認安裝。上傳鏡像不一定包含全部service catalog鏡像。
- ansible_service_broker_install:開啓安裝ansible service broker,默認安裝。上傳鏡像不一定包含全部ansible service broker鏡像。
- openshift_node_group_name:默認有node-config-master,node-config-infra,node-config-compute分別定義了節點的角色,更多自定義node group請參考官網。
另外默認安裝的還有prometheus+grafana。
需要其他特性的可以在安裝集羣后單獨安裝需要的組件,如service catelog,operator等。
7.2 執行安裝
運行如下命令完成安裝的準備工作
# cd /usr/share/ansible/openshift-ansible
# ansible-playbook -vvplaybooks/prerequisites.yml
注意:3.11版本中執行所有playbook都切換到/usr/share/ansible/openshift-ansible目錄下執行
運行如下命令執行安裝
# /usr/share/ansible/openshift-ansible
# ansible-playbook -vv/usr/share/ansible/openshift-ansible/playbooks/deploy_cluster.yml
如果安裝過程中遇到問題,查明原因之後,可重複執行安裝命令。
Ansible腳本運行完成之後會出現如下的彙總信息,表示所有組件都安裝完成。
7.3 安裝後驗證
安裝完成之後,可以執行一些簡單的命令驗證集羣狀態,在master節點執行如下操作。
在master節點登錄OCP
# oc login -u system:admin
執行oc get node可以查看集羣節點的狀態均爲Ready。
# oc get nodes
NAME STATUS ROLES AGE VERSION
shift-master Ready master 2h v1.11.0+d4cacc0
shift-node1 Ready infra 2h v1.11.0+d4cacc0
shift-node2 Ready compute 2h v1.11.0+d4cacc0
執行oc get pod --all-namespaces檢測集羣基礎組件容器是否均正常運行。
# oc get pod --all-namespaces
8 OpenShift安裝後配置
8.1 創建管理員用戶
在master節點同時執行創建admin用戶。
# htpasswd /etc/origin/master/htpasswd admin
在msater節點操作。賦予admin用戶管理員權限
# oc adm policy add-cluster-role-to-usercluster-admin admin
其他需要的自定義配置請自行配置。
瀏覽器訪問https://shift-mster.example.com:8443
注意:沒有DNS解析配置hosts文件。