1. 程式人生 > >openshift/origin學習記錄——Ansible安裝多節點openshift叢集

openshift/origin學習記錄——Ansible安裝多節點openshift叢集

本節內容是基於Ansible Playbook自動部署openshift叢集,之後幾節內容會通過一個AllInOne的叢集手動新增元件,研究實現的流程。

本部分內容是適用3.6.1

本部分openshift叢集的部署分為以下幾個階段:

  1. 主機準備。準備openshift叢集需要的主機。
  2. 安裝前預配置。準備相應的系統配置與軟體依賴。
  3. 執行安裝。使用Ansible Playbook進行自動化安裝。
  4. 安裝後配置。新增相應的元件以及修改配置。如匯入模板等。

主機準備

型別主機名IP作業系統記憶體
Mastermaster.example.com192.168.121.149CentOS 7.32G
Nodenode1.example.com192.168.121.151CentOS 7.32G
Nodenode2.example.com192.168.121.152CentOS 7.32G


第一次節點記憶體分配1G,安裝失敗,報錯資訊大致是由於記憶體不足導致的。之後修改每個節點,分配2G記憶體。

安裝前預配置

配置主機名

確實主機名配置正確。如有需要,可採用hostnamectl命令設定主機名。例如:

# hostnamectl set-hostname master.example.com

此外需要保證主機名能夠正確的解析到主機IP。可以通過ping $(hostname)來驗證。

實際生產環境推薦配置相關的域名解析伺服器。

在此直接修改各個節點的/etc/hosts檔案,加上靜態的域名解析。

192.168.121.149 master.example.com
192.168.121.151 node1.example.com 
192.168.121.152 node2.example.com 
  • 開啟SELINUX

官方文件推薦開啟SELINUX,否則會導致安裝失敗。 
修改/etc/selinux/config

SELINUX=enforcing
SELINUXTYPE=targeted

啟用網路

我自己主機在安裝的時候就已經激活了網路。 
有些參考我部落格的朋友安裝失敗,我幫著解決的時候發現是他們的網路預設沒有啟用,這裡新增一下啟用網路的設定。所有主機都要執行。

# nmcli con show
ens32    77817
a17-07cf-4f32-b03b-791730dd248d 802-3-ethernet ens32 # nmcli con up ens32 # nmcli con mod ens32 connection.autoconnect yes # systemctl restart NetworkManager

安裝及配置軟體包

  • 所有的節點下執行以下命令安裝Openshift依賴的軟體包。
# yum install -y wget git net-tools bind-utils iptables-services bridge-utils bash-completion
  • 啟用EPEL倉庫以安裝Ansible

openshift安裝以Ansible為基礎,需要啟用EPEL倉庫以安裝Ansible。 
master節點上執行以下命令。

# yum -y install https://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-11.noarch.rpm

這裡寫圖片描述

# sed -i -e "s/^enabled=1/enabled=0/" /etc/yum.repos.d/epel.repo
# yum -y --enablerepo=epel install ansible pyOpenSSL
  • master節點上生成SSH金鑰。
# ssh-keygen -f /root/.ssh/id_rsa -N ''

Ansible是基於Agentless架構實現的,即不需要在遠端的目標主機上預先安裝Agent程式。Ansible對遠端主機命令的執行依賴SSH等遠端控制協議。因為將在Master上執行Ansible Playbook安裝openshift,所以需要配置Master到各個節點的互信,包括Master到Master的互信 
在Master節點上執行:

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

這裡寫圖片描述

# wget https://github.com/openshift/openshift-ansible/archive/openshift-ansible-3.6.173.0.81-1.tar.gz
# tar zxvf openshift-ansible-3.6.173.0.81-1.tar.gz

配置Ansible

配置Ansible的hosts配置檔案(記錄了Ansible需要操作的目標主機資訊)。

  • 備份原有的hosts檔案
# mv -f /etc/ansible/hosts /etc/ansible/hosts.org
  • 建立/etc/ansible/hosts檔案,新增下面的內容。
[all]
node2    ansible_host=172.22.156.171 ip=172.22.156.171 ansible_user=root ansible_become=false
node5    ansible_host=172.22.156.172 ip=172.22.156.172 ansible_user=root ansible_become=false
node4    ansible_host=172.22.156.173 ip=172.22.156.173 ansible_user=root ansible_become=false
node3    ansible_host=172.22.156.174 ip=172.22.156.174 ansible_user=root ansible_become=false
node6    ansible_host=172.22.156.175 ip=172.22.156.175 ansible_user=root ansible_become=false


[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
openshift_deployment_type=origin
openshift_release=v3.6.1
openshift_image_tag=v3.6.1
openshift_public_hostname=console.demo.com
openshift_master_default_subdomain=apps.demo.com
openshift_hosted_metrics_deploy=true
enable_excluders=false
containerized=True
openshift_master_cluster_method=native
openshift_disable_check=disk_availability,docker_storage,memory_availability,docker_image_availability


# 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'}]


# host group for masters
[masters]
node2
node3


# host group for nodes, includes region info
[nodes]
node2 openshift_schedulable=True openshift_node_labels="{'region': 'infra'}"
node3 openshift_schedulable=True openshift_node_labels="{'region': 'infra'}"
node4 openshift_node_labels="{'region': 'infra', 'zone': 'east'}"
node5 openshift_node_labels="{'region': 'infra', 'zone': 'west'}"
node6 openshift_node_labels="{'region': 'infra', 'zone': 'west'}"


[etcd]
node2
node3
node4

執行安裝

# ansible-playbook ~/openshift-ansible-openshift-ansible-3.6.173.0.81-1/playbooks/byo/config.yml

安裝過程是完全自動化的,無需手動干預。在絕大多數情況下,Ansible的指令碼Playbook是可以反覆執行的。因為要下載不少內容,整體安裝時間還是比較長的。

如果安裝Openshift的過程中出錯了,修復問題後再次執行Playbook,可以在之前的基礎上繼續安裝 
(由於網路波動、記憶體不足等原因,可能需要多次重複執行上述指令)。

安裝過程中,我遇到了disk_availability,docker_storage,memory_availability,docker_image_availability這四個錯誤,修改hosts檔案,選擇了跳過檢查這四項。

disk_availability:報錯資訊是推薦的master磁碟空間剩餘量大於40GB。測試環境無法滿足,跳過檢測。 
memory_availability:報錯資訊是推薦的master記憶體為16GB,node記憶體為8GB,測試環境無法滿足,跳過檢測。 
docker_image_availability:報錯資訊是需要的幾個映象未找到,選擇跳過,裝完集群后,在使用的時候再自行下載。 
docker_storage:報錯資訊是推薦選擇一塊磁碟空間儲存映象,這裡選擇跳過。採用docker預設的方式儲存映象。

安裝完成後,Ansible會輸出一個結果彙總資訊,從彙總資訊可以判斷安裝的執行結果。 
這裡寫圖片描述

(前前後後大概裝了快倆小時,重複執行了指令多次。)網路狀況良好的情況下耗時半小時左右。

安裝完成後,執行oc get nodes檢查當前叢集的成員列表以及它們的狀態。

這裡寫圖片描述

當前叢集有三個節點,都處於Ready狀態。Master多一個SchedulingDisabled的狀態,意味著Master節點不承擔執行容器的任務。

執行oc whoami可以看到當前是以管理員的許可權登入的叢集。 
執行oc get all -o wide。檢視資源列表。

這裡寫圖片描述

可以看出registry、router都在部署中。但有報錯,使用oc describe指令檢視pod日誌。

這裡寫圖片描述

發現都是沒有節點匹配導致的錯誤。官網的hosts例子有給節點打標籤。之前不明打標籤的原因,刪掉了此部分,導致此服務部署出錯。

在多節點的叢集部署Router元件需要注意預先規劃好Router執行的目標節點。Router元件是以容器的形式執行在Openshift平臺上的。Openshift平臺上所有指向具體應用的域名最終都要指向Router所在Node的IP地址。如果無法確定Router所在的Node節點,就無法建立相關的域名解析。

這裡因為已經安裝完成,故選擇手動給node1打上標籤。

# oc label node node1.com region=infra

因為之前的安裝禁用了docker_image_availability,這裡會下載openshift需要的映象檔案,映象檔案較大,需要下載一段時間。已修改此部分上面的hosts內容。建議手動pull,不然因為網路原因,這裡容易出錯。

這裡寫圖片描述

等映象檔案下載完成之後。瀏覽器訪問https://192.168.121.149:8443即可檢視openshift的web console。

驗證etcd叢集

etcdctl --ca-file=/etc/etcd/ca.crt --cert-file=/etc/etcd/peer.crt --key-file=/etc/etcd/peer.key --endpoints=https://10.126.3.210:2379 cluster-health
etcdctl --ca-file=/etc/etcd/ca.crt --cert-file=/etc/etcd/peer.crt --key-file=/etc/etcd/peer.key --endpoints=https://10.126.3.210:2379 member list

安裝後的配置

對接使用者身份資訊庫

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

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

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

# [root@master ~]# htpasswd -b /etc/origin/master/htpasswd dev dev

檢視/etc/origin/master/htpasswd檔案內容。以加密的形式儲存了賬號密碼。

dev:$apr1$DH.7689R$g6azQwmLcSnK1MlrpEEnx0

給dev新增叢集管理員許可權

# oc login -u system:admin
# oc adm policy add-cluster-role-to-user cluster-admin dev

其他配置

Ansible安裝模式下,已自動的匯入了Image Stream、Template、Router和Registry,之後的內容會手動部署這些元件進行研究。

刪除openshift

ansible-playbook ~/openshift-ansible/playbooks/adoc/uninstall.yml

1. Hosts:    node2, node3, node4, node5, node6
     Play:     Configure nodes
     Task:     openshift_node_dnsmasq : fail

     Message:  Currently, NetworkManager must be installed and enabled prior to installation.

1. Hosts:    node2, node3, node4, node5, node6
     Play:     Configure nodes
     Task:     Install Ceph storage plugin dependencies

     Message:  Error unpacking rpm package python-urllib3-1.10.2-3.el7.noarch

STDOUT:
Trying to pull repository docker.io/openshift/origin ... 
STDERR:

manifest unknown: manifest unknown

 Currently, NetworkManager must be installed and enabled prior to installation.

yum install -y NetworkManager

systemctl enable NetworkManager

systemctl start NetworkManger

'htpasswd' is unavailable. Please install httpd-tools on the control node

Failure summary:
STDOUT:
Using default tag: latest
Trying to pull repository registry.access.redhat.com/rhel7/etcd ... 
STDERR:

open /etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt: no such file or directory

yum install *rhsm*

  1. Hosts:    node3, node4, node5, node6
     Play:     Initialize cluster facts
     Task:     Gather Cluster facts
     Message:  MODULE FAILURE


  2. Hosts:    node2
     Play:     Create etcd server certificates for etcd hosts
     Task:     Retrieve etcd cert tarball
     Message:  Unable to create local directories(/tmp/node2/etc/etcd/generated_certs): [Errno 20] Not a directory: '/tmp/node2/etc'
# Ansible和系統自帶的urllib3有衝突, 解除安裝之: Error unpacking rpm package python-urllib3-1.10.2-3.el7.noarch
pip uninstall urllib3   每個節點都要這麼做

FAILED - RETRYING: Wait for Node Registration (2 retries left).
FAILED - RETRYING: Wait for Node Registration (2 retries left).
FAILED - RETRYING: Wait for Node Registration (1 retries left).
FAILED - RETRYING: Wait for Node Registration (1 retries left).
FAILED - RETRYING: Wait for Node Registration (1 retries left).
FAILED - RETRYING: Wait for Node Registration (1 retries left).
FAILED - RETRYING: Wait for Node Registration (1 retries left).
fatal: [node5 -> 172.22.156.171]: FAILED! => {
    "attempts": 50, 
    "changed": false, 
    "results": {
        "cmd": "/usr/bin/oc get node node5 -o json -n default", 
        "results": [
            {}
        ], 
        "returncode": 0, 
        "stderr": "Error from server (NotFound): nodes \"node5\" not found\n", 
        "stdout": ""
    }, 
    "state": "list"
}

建立使用者

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

以叢集管理員登入

oc login -u system:admin

給DEV賬號新增叢集管理員角色

oc adm policy add-cluster-role-to-user cluster-admin dev

動態增加節點 :playbooks/byo/openshift-node/scaleup.yml

rm -f /etc/sysconfig/docker-storage

echo “DOCKER_STORAGE_OPTIONS= -s overlay” > /etc/sysconfig/docker-storage

[[email protected] ~]# vi /etc/docker/daemon.json 
{
"exec-opts": ["native.cgroupdriver=systemd"]

}

ln -s /usr/libexec/docker/docker-runc-current  /usr/local/bin/docker-runc

yum  install java-1.8.0-openjdk-headless

每個節點都要裝

安裝日誌分析工具:

 ansible-playbook -i ~/openshift-ansible-openshift-ansible-3.6.173.0.81-1/inventory/inventory.cfg -b -v  /root/openshift-ansible-openshift-ansible-3.6.173.0.81-1/playbooks/byo/openshift-cluster/openshift-logging.yml

相關推薦

openshift/origin學習記錄——Ansible安裝節點openshift叢集

本節內容是基於Ansible Playbook自動部署openshift叢集,之後幾節內容會通過一個AllInOne的叢集手動新增元件,研究實現的流程。本部分內容是適用3.6.1本部分openshift叢集的部署分為以下幾個階段:主機準備。準備openshift叢集需要的主機

openshift/origin學習記錄(0)——Ansible安裝節點openshift叢集

本節內容是基於Ansible Playbook自動部署openshift叢集,之後幾節內容會通過一個AllInOne的叢集手動新增元件,研究實現的流程。 本部分內容是3.6.0,可能不適用3.6.1,另外本文寫於2017年9月,最新版本安裝建議參考官方

openshift/origin學習記錄(6)——叢集節點管理

採用Cockpit實現叢集節點管理。Cockpit是一個開源的系統管理專案。支援Docker、Kubernetes、Openshift。 安裝Cockpit 在叢集所有的節點上安裝Co

openshift/origin學習記錄(1)——基於二進位制檔案的安裝(單機版)

先決條件 開啟SELINUX 官方文件推薦開啟SELINUX,否則會導致安裝失敗。 修改/etc/selinux/config SELINUX=enforcing SELINUXTYPE=targeted 安裝docker # y

openshift/origin學習記錄(2)——新增Router元件

學習資料來源於官方英文文件與《開源容器雲OpenShift》一書,因為剛開始學習,不確定部落格的正確性,以下內容僅供參考。 Router是openshift叢集中的一個重要元件,它是外部訪問叢

openshift/origin學習記錄(4)——新增Image Stream

學習資料來源於官方英文文件與《開源容器雲OpenShift》一書,因為剛開始學習,不確定部落格的正確性,以下內容僅供參考。 Image Stream是一組映象的集合,可以在一個Image Stre

openshift/origin學習記錄(5)——新增Template(模板)並基於模板部署應用

學習資料來源於官方英文文件與《開源容器雲OpenShift》一書,因為剛開始學習,不確定部落格的正確性,以下內容僅供參考。 新增模板 為了滿足使用者對複雜應用部署的需求,提供應用部署的效率,openshift引入了應用部署模板(Template)的概

學習記錄安裝配置自動化工具ansible

ansible學習記錄: 安裝配置ansible更新日期: 2016-11-30系統環境 :centos6.5本機ip :192.168.233.123被管理機ip :192.168.233.124—————————————————————————————————————py版本

linux學習記錄-------mysql安裝

adb mon .rpm 分享 密碼 tro post mysql x86_64 1、下載,打開 http://dev.mysql.com/downloads/mysql/ 選擇開發者版本,不需要註冊登陸的,點擊下載後左下角有一行小字:No thanks, just sta

openshift/origin工作記錄(11)——Openshift3.6向Openshift3.11升級以及CVE-2018-1002105漏洞修復

由於kubernetes的CVE-2018-1002105重大漏洞,需要對Openshift叢集進行版本升級。 當前執行的Openshift叢集版本為v3.6,目標為升級到版本v3.11。 這裡只記錄升級過程中碰到的坑,不記錄升級細節。 不能跨版本升級,升級路線為:

openshift/origin工作記錄(10)——openshift pod無法訪問外網的解決方案

編輯主機上的/etc/dnsmasq.d/origin-dns.conf檔案,新增相應的DNS伺服器,格式為: server=DNS伺服器 說明:可新增多個,如: server=218.85.

Linux學習記錄--軟體安裝RPM|SRPM|YUM

軟體安裝RPM|SRPM|YUM 前面說到了軟體安裝可以直接下載原始碼壓縮版編譯安裝。還有一種安裝形式是使用廠商提供給使用者的安裝檔案。廠商在他們的系統上編譯好使用者所需要的軟體,然後將編譯好的軟體釋出給使用者使用。 目前廠商釋出軟體機制主要分為2大類 Dpkg:由De

openshift/origin工作記錄(2)——RESTful程式設計介面使用

由於工作原因,需要對openshift進行二次開發,初步研究了一下RESTful程式設計介面使用。 程式碼如下: import io.fabric8.kubernetes.api.model.NamespaceList; import i

openshift/origin工作記錄(6)——本地DNS伺服器的建立與配置

之前在建立openshift叢集時,是直接修改各個節點的/etc/hosts檔案,加上靜態的域名解析。當節點數量很多或者後續執行叢集節點擴容時,都需要修改大量的/etc/hosts檔案,很麻煩。 這裡選擇在本地搭建一個DNS伺服器。我選擇將DNS伺服器

Hadoop學習記錄-01安裝Hadoop0.20.2

安裝jdk 如圖jdk路徑 配置環境變數 編輯/etc/profile檔案,在結尾加上如下程式碼 # jdk export JAVA_HOME=/usr/local/jdk1.8.0_151 export PATH=$PATH:$JAVA

Bootstrap學習記錄--環境安裝

我所理解的Bootstrap 本質就是封裝好的JavaScript與CSS, 可以直接呼叫使用 環境安裝 這部分內容百度一搜一大把 或使用CDN直接呼叫的方法,自行選擇 bootstrap

Linux之Ansible安裝實例mariadb

The exit ansible安裝 uid ansi UNC etc mas entos Ansible安裝多實例mariadb10.2.23 堡壘機配置 root家目錄下放置mariadb二進制包 [Mon Apr 29 19:52 [email prote

CentOS7 上搭建節點 Elasticsearch叢集

本文內容腦圖如下: 文章共 747字,閱讀大約需要 2分鐘 ! 概 述 最近學 Elasticsearch,既然學之,怎麼能沒有實際的叢集來把玩呢,因此自己必須動手搭一個! 注: 本文首發於 My Personal Blog:CodeSheep·程式羊,歡迎光臨 小站

在單機上使用Kubeadm-dind 部署節點k8s叢集

     近幾年Google的Kubernetes(簡稱k8s)已經成為分散式容器編排和管理領域事實上的標準,在基於容器的微服務架構下的分散式應用開發、部署和運維管理等領域,會有越來越多的使用者部署和使用k8s平臺。對於初學著來說,部署一個多機k8s叢集一來缺少環境、另

在單機上構建 secure 節點CockroachDB叢集

       本文將向大家介紹如何在一臺機器上(可以是物理機,也可以是一臺虛擬機器)建立secure多節點CockroachDB叢集(在示例中我們將建立一個具有3節點的CRDB資料庫叢集)。這裡所說的secure是指叢集的各節點之間以及client與叢集節點之