乾貨來襲:OpenShift 3.11.16離線安裝手冊

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文件。

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