1. 程式人生 > >最新OpenShift 3.9 叢集(Ansible)安裝

最新OpenShift 3.9 叢集(Ansible)安裝

說明:本篇主要是基於最新的openshift3.9進行的叢集安裝,安裝環境是虛擬機器,在本地通過VirtualBox安裝centos7.5虛擬機器,準備了3臺虛擬機器,一臺作為master,另外兩臺slave。通過這種方式模擬實際伺服器的叢集搭建openshift

特別注意 搭建的前提是:虛擬機器和主機互通,虛擬機器之間互通,虛擬機器可上外網,主機可上外網;可參考我的博文:

    VirtualBox 虛擬機器和宿主機之間的網路連線,虛擬機器和主機都可以上網

安裝過程分為5部分:

  • 叢集主從機環境準備
  • 安裝依賴包,提前安裝使用Ansible安裝OpenShift叢集所依賴的第三方包
  • Ansible執行安裝:使用Ansible Playbook進行自動化安裝
  • OpenShift系統配置:在使用Ansible執行安裝完成之後的系統配置。
  • 測試問題處理

 

一、環境準備

   型別            IP地址        作業系統  記憶體      硬碟
  master 192.168.10.179 centos7.5  2G   20G
  node1 192.168.10.142 centos7.5 2G   20G
  node2 192.168.10.47 centos7.5 2G   20G

為了在安裝的時候方便修改所有主機host檔案:

vi /etc/hosts

 

儲存退出,並且重啟所有主機,這時會發現連線名稱已經變了,這樣方便了解當前的主機

  • 所有主機開啟SELINUX
 vi /etc/selinux/config

官方文件推薦開啟SELINUX,否則會導致安裝失敗

  • 配置所有主機ssh免密訪問

在所有節點上以root賬號登陸,並進入到/root的主目錄 在所有節點上生成金鑰對

 ssh-keygen -t rsa

一路按回車即可

 

所有主機執行以下命令

cd ~/.ssh

然後執行以下命令共享ssh免密登陸金鑰:注意逐條執行

ssh-copy-id master

ssh-copy-id node1

ssh-copy-id node2

驗證:

 

 

驗證結果:master不用密碼可以直接ssh到node1,根據以上例項驗證所有主機之間的ssh免密登陸,確保所有主機之間ssh不需要密碼再進行以下步驟

 

二、安裝依賴包

  • 所有主機執行更新操作

 

yum install -y update

若有更新,則等待更新完後重啟系統生效!

  • 所有的主機下執行以下命令安裝OpenShift依賴的軟體包。

 

yum install wget git net-tools bind-utils iptables-services bridge-utils bash-completion kexec-tools sos psacct bash-completion.noarch bash-completion-extras.noarch python-passlib NetworkManager -y

 

 

  • 所有主機安裝docker:
yum install docker-1.13.1 -y

  • 配置docker使用的儲存
echo DEVS=/dev/sdb > /etc/sysconfig/docker-storage-setup
echo VG=DOCKER >> /etc/sysconfig/docker-storage-setup
echo SETUP_LVM_THIN_POOL=yes >> /etc/sysconfig/docker-storage-setup
echo DATA_SIZE="100%FREE">> /etc/sysconfig/docker-storage-setup
rm -rf /var/lib/docker

wipefs --all /dev/sdb

docker-storage-setup
  • 新增阿里雲映象加速器

登陸阿里雲,沒有的自己可以註冊 ,進行加速器頁面https://cr.console.aliyun.com/#/accelerator,如下操作

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'

{ "registry-mirrors": ["https://03l3dkhb.mirror.aliyuncs.com"],
   "insecure-registries": ["172.30.0.0/16"]

} EOF

sudo systemctl daemon-reload 
sudo systemctl restart docker

 

 

啟動docker

systemctl enable docker
systemctl start docker


啟用EPEL倉庫以安裝AnsibleMaster主機上執行Ansible叢集安裝

    

yum -y install epel-release
  • 全域性禁用EPEL儲存庫,以便在以後的安裝步驟中不會意外使用它:
sed -i -e "s/^enabled=1/enabled=0/" /etc/yum.repos.d/epel.repo

 

下載ansible2.5版本,因為3.9對應的ansible版本必須是2.5

下載地址:https://releases.ansible.com/ansible

下載後解壓到 /home/ansible中

執行安裝

cd ansible-2.5.5
python setup.py install

執行:

yum -y --enablerepo=epel install ansible pyOpenSSL 

說明 #opshift3.9 必須匹配 ansible2.5版本

輸入:

ansible --version

cd /home/openshift 

獲取3.9版本的openshift-ansible:

wget https://github.com/openshift/openshift-ansible/archive/openshift-ansible-3.9.32-1.tar.gz

解壓:

tar -xvzf  openshift-ansible-3.9.32-1.tar.gz

重新命名:

mv openshift-ansible-openshift-ansible-3.9.32-1 openshift-ansible

 

由於目前OpenShift-ansible還沒有新增3.9的源,所以需要自行修改下,方法如下:

進行openshift-ansible/roles/openshift_repos/templates/ 複製一份 CentOS-OpenShift-Origin37.repo.j2 為 CentOS-OpenShift-Origin39.repo.j2。
修改CentOS-OpenShift-Origin39.repo.j2中的源修改為國內的,比如阿里雲。
 

進入openshift-ansible/roles/openshift_repos/templates/   修改CentOS-OpenShift-Origin9.repo.j2 中的源修改為國內的,比如阿里雲。

編寫Inventory檔案

  • 新建 ansible inventory 檔案,儲存到 /etc/ansible/inventory.ini檔案中,內容如下:
# Create an OSEv3 group that contains the masters and nodes groups

[OSEv3:children]

#目前配置標準的三個角色

masters

nodes

etcd



# 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

#使用origin社群版

openshift_deployment_type=origin

#指定安裝版本

openshift_release=3.9

#openshift_node_group_name= master


#指定預設域名,訪問的時候需要使用該域名,沒有dns伺服器,需要手動新增本地hosts檔案

openshift_master_default_subdomain=master



#禁止磁碟、記憶體和映象檢查

openshift_disable_check=disk_availability,docker_storage,memory_availability,docker_image_availability



#disk_availability:報錯資訊是推薦的master磁碟空間剩餘量大於40GB。測試環境無法滿足,跳過檢測。

#memory_availability:報錯資訊是推薦的master記憶體為16GB,node記憶體為8GB,測試環境無法滿足,跳過檢測。

#docker_image_availability:報錯資訊是需要的幾個映象未找到,選擇跳過,裝完集群后,在使用的時候再自行下載。

#docker_storage:報錯資訊是推薦選擇一塊磁碟空間儲存映象,這裡選擇跳過。採用docker預設的方式儲存映象。

# uncomment the following to enable htpasswd authentication; defaults to DenyAllPasswordIdentityProvider

openshift_master_identity_providers=[{'name':'htpasswd_auth','login':'true','challenge':'true','kind':'HTPasswdPasswordIdentityProvider','filename':'/etc/origin/master/htpasswd'}]


#ntp時間同步

openshift_clock_enabled=true



#節點配額

openshift_node_kubelet_args={'pods-per-core': ['10']}



# host group for masters

[masters]

master openshift_schedulable=True


# host group for nodes, includes region info

[nodes]

master openshift_node_labels="{'region': 'infra'}"

node1 openshift_node_labels="{'region': 'infra', 'zone': 'default'}"

node2 openshift_node_labels="{'region': 'infra', 'zone': 'default'}"
master openshift_node_group_name='node-config-master'
node1 openshift_node_group_name='node-config-compute'
node2 openshift_node_group_name='node-config-compute'



[etcd]

master

標紅的方需要特別注意

 

  • 修改指令碼問題

openshift-ansible/roles/lib_utils/filter_plugins/openshift_master.py 的第487行

 

執行:

cd /home/openshift/
ansible-playbook -i /etc/ansible/inventory.ini openshift-ansible/playbooks/prerequisites.yml

執行以下命令:

ansible-playbook -i /etc/ansible/inventory.ini openshift-ansible/playbooks/deploy_cluster.yml

 

  • 安裝結果檢查
oc get nodes

其實在安裝完成之後 第二個節點和第三個節點的roles型別為空,需要將其打上compute標籤,命令如下:

oc label node node1 node-role.kubernetes.io/compute=true
oc label node node2 node-role.kubernetes.io/compute=true

 

 

  • OpenShift系統配置

安裝的時候,在Ansible的hosts檔案中定義了HTPasswd檔案作為後端的使用者身份資訊庫。

安裝程式自動生成了資料檔案/etc/origin/master/htpasswd。但是此時該檔案還是一個空檔案,並沒有任何使用者資訊。

需要通過htpasswd命令來建立使用者。建立賬號為dev密碼為dev的使用者

htpasswd -b /etc/origin/master/htpasswd dev dev


 

  • 給dev新增叢集管理員許可權
oc adm policy add-cluster-role-to-user cluster-admin dev

  • 重啟服務
systemctl restart origin-master-api

 

配置虛擬機器的宿主機的hosts檔案,

  • 訪問頁面,https://master:8443

 

安裝過程出現以下問題:

則主要是因為python的字串編碼問題

解決辦法:

進入python環境:

#python

然後執行以下程式碼:

import sys
default_encoding = 'utf-8'
if sys.getdefaultencoding() != default_encoding:
      reload(sys)
      sys.setdefaultencoding(default_encoding)
即可

 

cd   /home/openshift/openshift-ansible/roles/openshift_control_plane/tasks/

rm -rf htpasswd_provider.yml