最新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倉庫以安裝Ansible、Master主機上執行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