openshift/origin學習記錄——Ansible安裝多節點openshift叢集
本節內容是基於Ansible Playbook自動部署openshift叢集,之後幾節內容會通過一個AllInOne的叢集手動新增元件,研究實現的流程。
本部分內容是適用3.6.1
本部分openshift叢集的部署分為以下幾個階段:
- 主機準備。準備openshift叢集需要的主機。
- 安裝前預配置。準備相應的系統配置與軟體依賴。
- 執行安裝。使用Ansible Playbook進行自動化安裝。
- 安裝後配置。新增相應的元件以及修改配置。如匯入模板等。
主機準備
型別 | 主機名 | IP | 作業系統 | 記憶體 |
---|---|---|---|---|
Master | master.example.com | 192.168.121.149 | CentOS 7.3 | 2G |
Node | node1.example.com | 192.168.121.151 | CentOS 7.3 | 2G |
Node | node2.example.com | 192.168.121.152 | CentOS 7.3 | 2G |
第一次節點記憶體分配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*
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與叢集節點之