日期 | 版本 | 做者 | 備註 |
---|---|---|---|
2019-12-20 | V1 | Andy_F(老範) | |
查看本文檔須要具有容器及kubernetes相關知識html
衆所周知,kubernetes做爲容器編排系統的通用標準,它的出現促進了PaaS的飛速發展和企業PaaS的落地,OpenShift是紅帽基於kubernetes推出的企業級PaaS平臺,他提供了開箱即用的PaaS功能。node
OpenShift因kubernetes而生,kubernetes因OpenShift走向企業級PaaS平臺。在過去的時間裏,紅帽以及各大廠商爲kubernetes提供了大量的代碼,諸如google/redhat/華爲/中興/微軟/vmware等。python
kubernetes專一於容器的編排方面,而OpenShift基於kubernetes之上提供了整套的企業級PaaS所用到的功能,諸如管理員控制檯(web化)/日誌系統/入口流量(route)/鏡像倉庫/監控/持久存儲/應用模板/CI CD/等...linux
kubernetes每一年發佈4個版本,而OpenShift則會選擇當前最新版的上一個版本,以便報證企業級使用的穩定性ios
OpenShift還實現了對IaaS的管理能力,也就是說當OpenShift集羣資源不足的狀況下能夠自動從IaaS中的機器資源裏添加機器至OpenShift集羣中。目前只支持對AWS EC2的管理。nginx
不徹底統計,不包含kubernetes自己的一些組件概念git
RHELgithub
# Red Hat Enterprise Linux
RHCOSweb
# Red Hat Enterprise Linux CoreOS # 一種適用於容器運行環境的操做系統,通常簡稱CoreOS # RedHat官方也建議將OpenShift部署到CoreOS之上,咱們也可使用RHEL來部署OpenShift work節點 # https://access.redhat.com/documentation/zh-cn/openshift_container_platform/4.2/html/architecture/architecture-rhcos#rhcos-about_architecture-rhcos
OCPredis
# OpenShift Container Platform(OpenShift容器平臺) # 通常人們更多時候習慣於將OpenShift稱之爲OCP
OKD
# OpenShift的社區版
ImageStream
# ImageStream是一類鏡像的集合,鏡像的tag則指向的是實際的鏡像 # 假如說在OpenShift集羣以外有一個鏡像庫,而OpenShift又想使用則能夠將鏡像導入到ImageStream中,在導入的時候加上--scheduled=true,則表示ImageStream會按期去原始倉庫中檢查鏡像的更新 # 在deploy中使用ImageStream時,咱們設置一個觸發器,當鏡像的tag發生變化時,觸發器則會自動部署此鏡像,此功能能夠幫助咱們實如今沒有CI/CD的前提下自動部署。
Quay
# 企業級的鏡像倉庫,貌似須要受權
Operator
# OpenShift中管理有狀態應用的生命週期組件
Router
# 負責提供外部訪問OpenShift集羣中的內部應用的能力,相似於ingress # 實際是由一組HaProxy實現的,運行在OpenShift的Infra節點上的一組pod以hostnetwork的方式運行,能夠提供HTTP/HTTPS/WebSockets/TLS with SNI協議的訪問。
Infra節點
# 與Kubernetes的節點類型的不一樣之處即是OpenShift多了一種節點,就是Infra節點 # Infra節點主要是用於運行內部的鏡像倉庫/Router/EFK等 # Infra節點在OpenShift集羣中不是必須的 # 所謂Infra節點就是node節點打上不一樣的標籤後讓ocp集成的一些如log,監控等應用跑在對應的節點上而已,這樣的好處是在大規模使用時不會影響其餘node的性能等.
bootstrap
# bootstrap節點主要是用於安裝ocp的master節點,master節點安裝完成後可刪除此機器 # bootstrap必須運行在RHCOS之上
因爲做者太懶了 什麼也沒有
因爲做者太懶了 什麼也沒有
ocp的安裝部署方式有不少中模式,公有云安裝跟私有云及裸機安裝方法各不相同,其中公有云的安裝最爲簡單
參考(https://cloud.redhat.com/openshift/install),爲了展現比較底層的安裝方式,這裏採用裸機的方式部署.
所謂裸機就是一臺物理機或虛擬機沒安裝操做系統的機器,稱之爲裸機.
官方給出的節點最低配置建議
節點名稱 | OS | 內存 | cpu | 磁盤 |
---|---|---|---|---|
bootstrap | RHCOS | 16GB | 4C | 120GB |
master | RHCOS | 16GB | 4C | 120GB |
worker(node) | RHCOS/RHEL | 8GB | 4C | 120GB |
openshift的相關軟件包下載須要有redhat官方網站的帳號,請自行申請註冊.註冊好用戶後到以下頁面便可下載
https://cloud.redhat.com/openshift/install/metal/user-provisioned
# 須要下載三類文件 1.客戶端工具及安裝工具 ,文件下載連接以下 # kubectl及oc客戶端工具 https://mirror.openshift.com/pub/openshift-v4/clients/ocp/latest/openshift-client-linux-4.2.14.tar.gz # ocp安裝工具,其實這個能夠不用下載,由於底下會使用oc命令生成此工具 https://mirror.openshift.com/pub/openshift-v4/clients/ocp/latest/openshift-install-linux-4.2.14.tar.gz
2. Pull Secret 文件, 此文件是根據各自的redhat帳號密碼生成的訪問redhat官方鏡像倉庫的密碼文件 # 下載方式以下圖
3.RHCOS相關的文件,如iso 各私有云平臺的模板文件等,這裏使用的裸機安裝只須要兩個文件便可 # 文件列表 https://mirror.openshift.com/pub/openshift-v4/dependencies/rhcos/4.2/latest/ # 裸機部署時須要的文件以下 # coreos系統iso https://mirror.openshift.com/pub/openshift-v4/dependencies/rhcos/4.2/latest/rhcos-4.2.0-x86_64-installer.iso # 以下兩個文件選其一便可,若是是虛擬機下載bios那個就行,物理機則根據本身的主板狀況選擇,至於bios跟uefi的區別參考https://www.baidu.com # 此文件是raw格式的磁盤文件,安裝coreos的時候須要從http server上獲取此文件,所以此文件須要上傳至下面安裝的http server的目錄中 https://mirror.openshift.com/pub/openshift-v4/dependencies/rhcos/4.2/latest/rhcos-4.2.0-x86_64-metal-bios.raw.gz https://mirror.openshift.com/pub/openshift-v4/dependencies/rhcos/4.2/latest/rhcos-4.2.0-x86_64-metal-uefi.raw.gz
# 如上所列的三類文件用迅雷下載到本機,底下安裝的時候在某臺主機上用到某個文件時自行上傳
所謂受限的網絡就是服務器沒法訪問互聯網或沒法訪問redhat官網的網絡.
根據官方說明,registry機器必須是要能有訪問互聯網權限的,其餘節點可不用互聯網權限
Node | hostname | IP | OS | Role |
---|---|---|---|---|
bastion host | bastion.ocp1.abc.cn | 10.57.1.230 | CentOS/RHEL 7 | http dns registry ssh跳板機 |
bootstrap | bootstrap.ocp1.abc.cn | 10.57.1.229 | CoreOS | |
vip | 10.57.1.233 | |||
lb-1 | lb-1.ocp1.abc.cn | 10.57.1.231 | CentOS/RHEL 7 | haproxy keepalived |
lb-2 | lb-2.ocp1.abc.cn | 10.57.1.232 | CentOS/RHEL 7 | haproxy keepalived |
master-1 | master-1.ocp1.abc.cn | 10.57.1.221 | CoreOS | |
master-1 | master-2.ocp1.abc.cn | 10.57.1.222 | CoreOS | |
master-1 | master-3.ocp1.abc.cn | 10.57.1.223 | CoreOS | |
worker-1 | node-1.ocp1.abc.cn | 10.57.1.241 | CoreOS | |
worker-2 | node-2.ocp1.abc.cn | 10.57.1.242 | CoreOS | |
storage | ..... | ..... | ..... | ..... |
在開始安裝ocp以前的準備工做
官方下載ocp所需程序包
配置HTTP服務器
# 上面列舉須要下載的ocp安裝包等其餘文件須要放置到此服務器上 # 提供http方式下載,安裝過程會用到 # 提供其餘機器的yum源服務 # 若是企業內部有yum服務器則能夠共用
配置 DNS服務器
# 這裏dns有以下幾個做用 1,解析ocp各節點所用主機名 2,轉發子域名給ocp的paas平臺使用 3,解析ocp所需其餘域名 # 通常狀況下此處解析操做是在各自公司內網的dns上作解析操做 # 這裏使用dnsmasq來充當內網dns服務器,若是各位公司使用的bind或其餘則可免去安裝步驟只參考解析記錄
配置ocp的registry
# 因爲咱們是模擬受限的網絡中安裝,因此須要提早準備 # 但registry主機是須要連網的,由於registry須要去紅帽官方的倉庫同步鏡像
配置 DHCP
# 因爲ocp的coreos在安裝的時候須要設置一些內核參數,而這些內核參數能夠經過dhcp及pxe傳遞 # 本環境中不用配置dhcp便可,手動指定IP及內核參數
提供所需的負載均衡器
# haproxy代理bootstrap及master節點的6443及22623端口 # 待master節點安裝完畢則從haproxy的代理列表裏刪除bootstrap的節點IP # 代理router的80 及443端口 # 4層代理
配置機器的端口防火牆策略
# 若是各機器之間的端口可隨意訪問則不用考慮此步
for bastion
# 安裝nginx或apache提供http下載服務 yum install epel-release -y yum install nginx -y # 配置nginx vim /etc/nginx/nginx.conf ... root /data/soft_repository; autoindex on; ... # 啓動nginx systemctl start nginx systemctl enable nginx
# 建立目錄 mkdir -p /data/soft_repository/ocp # 目錄建立好後,請將上面下載好的rhcos-4.2.0-x86_64-metal-bios.raw.gz或rhcos-4.2.0-x86_64-metal-uefi.raw.gz文件上傳至此目錄 # 後續的安裝過程當中還會生成一些文件,也須要copy至此目錄下,見下面的步驟 mkdir /data/soft_repository/ocp/igns
#### 4.2.2,安裝配置dns
for bastion
# 這裏採用dnsmasq,固然你可使用任意的dns軟件,或者在現有網絡中的dns服務器上添加相關解析也能夠 yum install dnsmasq -y vim /etc/dnsmasq.conf conf-dir=/etc/dnsmasq.d/,*.conf resolv-file=/etc/upstream_dns.conf # end # 配置上游dns服務器IP,可設置爲局域網內dns服務器的IP或互聯網的dns服務器IP vim /etc/upstream_dns.conf nameserver 10.57.1.8 # 啓動dns服務 systemctl start dnsmasq systemctl enable dnsmasq
# 修改自身dns服務器 爲本機 vim /etc/resolv.conf nameserver 127.0.0.1
# 添加ocp的解析記錄,官方參考連接 # https://access.redhat.com/documentation/en-us/openshift_container_platform/4.2/html/installing_on_bare_metal/installing-on-bare-metal#installation-requirements-user-infra_installing-bare-metal # ocp的域名規則以下 # xxx.集羣名稱.域名 # 同一個網絡下的每一個集羣都須要起一個獨一無二的名稱,這裏叫作ocp1 域名爲abc.cn vim /etc/dnsmasq.d/abc.cn.conf # hostname address=/bootstrap.ocp1.abc.cn/10.57.1.229 address=/master-1.ocp1.abc.cn/10.57.1.221 address=/master-2.ocp1.abc.cn/10.57.1.222 address=/master-3.ocp1.abc.cn/10.57.1.223 address=/node-1.ocp1.abc.cn/10.57.1.241 address=/node-2.ocp1.abc.cn/10.57.1.242 address=/lb-1.ocp1.abc.cn/10.57.1.231 address=/lb-2.ocp1.abc.cn/10.57.1.232 address=/bastion.ocp1.abc.cn/10.57.1.230 # yum and registry server address=/reg.ocp1.abc.cn/10.57.1.230 address=/yum.ocp1.abc.cn/10.57.1.230 # lb address=/api.ocp1.abc.cn/10.57.1.233 address=/api-int.ocp1.abc.cn/10.57.1.233 # router address=/.apps.ocp1.abc.cn/10.57.1.233 address=/.apps.ocp1.abc.cn/10.57.1.233 # etcd,ocp默認自動發現etcd主機的標號是從0開始的 address=/etcd-0.ocp1.abc.cn/10.57.1.221 address=/etcd-1.ocp1.abc.cn/10.57.1.222 address=/etcd-2.ocp1.abc.cn/10.57.1.223 # etcd SRV srv-host=_etcd-server-ssl._tcp.ocp1.abc.cn,etcd-0.ocp1.abc.cn.,2380,0,10 srv-host=_etcd-server-ssl._tcp.ocp1.abc.cn,etcd-1.ocp1.abc.cn.,2380,0,10 srv-host=_etcd-server-ssl._tcp.ocp1.abc.cn,etcd-2.ocp1.abc.cn.,2380,0,10 # end
# 重啓dnsmasq systemctl restart dnsmasq # 測試解析是否有正常 nslookup aa.apps.ocp1.abc.cn
for bastion
這個registry主要是用於安裝ocp時使用的
# 安裝客戶端工具 tar xvf openshift-client-linux-4.2.14.tar.gz mv oc kubectl /usr/bin/
# 安裝podman及httpd-tools,podman容器引擎跟docker相似 yum -y install podman httpd-tools
# 建立相關目錄 mkdir -p /opt/registry/{auth,certs,data}
# 爲 registry 提供證書,若是您沒有現有的可信證書頒發機構,你能夠以下生成自簽名證書 cd /opt/registry/certs openssl req -newkey rsa:4096 -nodes -sha256 -keyout domain.key \ -x509 -days 3650 -out domain.crt \ -subj "/C=CN/ST=GD/L=SZ/O=ocp/OU=IT/CN=reg.ocp1.abc.cn"
# 爲 registry 生成使用 bcrpt 格式的用戶名和密碼 htpasswd -bBc /opt/registry/auth/htpasswd admin redhat
# 啓動mirror-registry容器,官方默認的啓動參數中沒有將容器工做在後臺,因此這裏加了個-d podman run --name mirror-registry -d -p 5000:5000 \ -v /opt/registry/data:/var/lib/registry:z \ -v /opt/registry/auth:/auth:z \ -e "REGISTRY_AUTH=htpasswd" \ -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \ -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \ -v /opt/registry/certs:/certs:z \ -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \ -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \ docker.io/library/registry:2
# 將私籤的證書添加到系統ca信任列表裏 cp /opt/registry/certs/domain.crt /etc/pki/ca-trust/source/anchors/ update-ca-trust
# 驗證是否安裝成功 # 查看端口5000端口是否監聽 netstat -tnlp | grep 5000 # 若是端口已監聽則訪問下 curl -u admin:redhat -k https://reg.ocp1.abc.cn:5000/v2/_catalog # 顯示以下信息則表示正常 {"repositories":[]}
# 爲你的鏡像 registry 建立 pull secret podman login --authfile ~/local_pull_secret.json -u admin -p redhat reg.ocp1.abc.cn:5000 # 輸入上面用htpasswd生成的用戶名密碼 cat ~/local_pull_secret.json # 此文件後面會用到
# 合併官網下載的Pull Secret文件及local_pull_secret.json # 將兩個文件合併爲1個,json格式,注意格式 # 合併後的文件內容以下 cat pull_secret.json { "auths": { # 這段內容是上面咱們本身生成的 "reg.ocp1.abc.cn:5000": { "auth": "YWRtaW46cmVkaGF0" }, # end "cloud.openshift.com": { "auth": "xxxxxxxxxxxxxxxxxxxxxxx", "email": "rg_fan@163.com" }, "quay.io": { "auth": "xxxxxxxxxxxxxxxxxxxxxxx", "email": "rg_fan@163.com" }, "registry.connect.redhat.com": { "auth": "xxxxxxxxxxxxxxxxxxxxxxx", "email": "rg_fan@163.com" }, "registry.redhat.io": { "auth": "xxxxxxxxxxxxxxxxxxxxxxx", "email": "rg_fan@163.com" } } } # 這裏簡單說明下此文件的做用 # 做用主要是針對紅帽官方的registry及咱們本地的registry在pull/push鏡像時作身份認證使用的
# 接下來同步紅帽官方的registry跟ocp相關的鏡像到本地的registry中 # 首先設置幾個環境變量,這幾個環境變量沒別的意思,只是爲了替換命令中的參數 # 參見 https://access.redhat.com/documentation/zh-cn/openshift_container_platform/4.2/html/installing/installing-restricted-networks-preparations#installation-mirror-repository_installing-restricted-networks-preparations export OCP_RELEASE=4.2.0 export LOCAL_REGISTRY='reg.ocp1.abc.cn:5000' export LOCAL_REPOSITORY='ocp4/openshift4' export PRODUCT_REPO='openshift-release-dev' # 底下這個簡單說明下,就是咱們合併後的認證文件 export LOCAL_SECRET_JSON='/root/pull_secret.json' export RELEASE_NAME="ocp-release" # 執行同步命令 oc adm -a ${LOCAL_SECRET_JSON} release mirror \ --from=quay.io/${PRODUCT_REPO}/${RELEASE_NAME}:${OCP_RELEASE} \ --to=${LOCAL_REGISTRY}/${LOCAL_REPOSITORY} \ --to-release-image=${LOCAL_REGISTRY}/${LOCAL_REPOSITORY}:${OCP_RELEASE} # 同步會比較慢,若是有代理的話 設置個系統全局代理會稍微快一點. # 若是中間有網絡錯誤 重新執行下便可 # 執行成功後會輸出以下內容,Success如下的信息續保存起來後面會有用 ... ... Success Update image: reg.ocp1.abc.cn:5000/ocp4/openshift4:4.2.0 Mirror prefix: reg.ocp1.abc.cn:5000/ocp4/openshift4 To use the new mirrored repository to install, add the following section to the install-config.yaml: imageContentSources: - mirrors: - reg.ocp1.abc.cn:5000/ocp4/openshift4 source: quay.io/openshift-release-dev/ocp-release - mirrors: - reg.ocp1.abc.cn:5000/ocp4/openshift4 source: quay.io/openshift-release-dev/ocp-v4.0-art-dev To use the new mirrored repository for upgrades, use the following to create an ImageContentSourcePolicy: apiVersion: operator.openshift.io/v1alpha1 kind: ImageContentSourcePolicy metadata: name: example spec: repositoryDigestMirrors: - mirrors: - reg.abc.cn:5000/ocp4/openshift4 source: quay.io/openshift-release-dev/ocp-release - mirrors: - reg.abc.cn:5000/ocp4/openshift4 source: quay.io/openshift-release-dev/ocp-v4.0-art-dev
# 生成基於咱們設定的參數生成基於當前版本的openshift-install命令,其中包含以下參數 # 過程比較漫長,固然也能夠用上面直接下載的openshift-install oc adm release extract --command=openshift-install \ --registry-config='/root/pull_secret.json' \ "${LOCAL_REGISTRY}/${LOCAL_REPOSITORY}:${OCP_RELEASE}" mv openshift-install /usr/bin
for lb-1 lb-2
# 爲 bootstrap節點及master節點的6443端口作負載均衡 # 爲 bootstrap節點及master節點的22623端口作負載均衡 # 爲router的443及80端口作負載均衡,後端地址默認爲全部的node節點,固然也能夠更改router的標籤選擇器讓其工做在某幾個節點,這樣方便控制
# 安裝haproxy + keepalived yum install haproxy keepalived -y
# 配置haproxy # 兩節點配置一致 vim /etc/haproxy/haproxy.cfg # 內容以下 global log 127.0.0.1 local2 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 65535 nbthread 6 user haproxy group haproxy daemon stats socket /var/lib/haproxy/stats defaults mode http log global option httplog option dontlognull option http-server-close option forwardfor except 127.0.0.0/8 option redispatch retries 3 timeout http-request 10s timeout queue 1m timeout connect 10s timeout client 1m timeout server 1m timeout http-keep-alive 10s timeout check 10s maxconn 3000 listen admin_stats stats enable bind *:888 mode http option httplog log global maxconn 10 stats refresh 30s stats uri /status stats realm haproxy stats auth admin:admin stats hide-version # stats admin if TRUE listen apiserver bind 0.0.0.0:6443 mode tcp server bootstrap 10.57.1.229:6443 check server master1 10.57.1.221:6443 check server master-2 10.57.1.223:6443 check server master-3 10.57.1.223:6443 check listen Host_Conf_Server bind 0.0.0.0:22623 mode tcp server bootstrap 10.57.1.229:22623 check server master1 10.57.1.221:22623 check server master-2 10.57.1.223:22623 check server master-3 10.57.1.223:22623 check listen router_http bind 0.0.0.0:80 mode tcp server router-1 10.57.1.241:80 check server router-2 10.57.1.242:80 check listen router_https bind 0.0.0.0:443 mode tcp server router-1 10.57.1.241:443 check server router-2 10.57.1.242:443 check # end 保存退出 # 啓動haproxy systemctl start haproxy systemctl enable haproxy # 查看是否正常 netstat -tnlp | grep haproxy
# 配置keepalived master to lb1 vim /etc/keepalived/keepalived.conf # 內容以下,直接刪除原內容 替換以下便可 global_defs { router_id 202 } vrrp_script check_haproxy { script "killall -0 haproxy" interval 3 fall 5 rise 10 } vrrp_instance haproxy { state MASTER priority 200 interface eth0 virtual_router_id 52 advert_int 1 authentication { auth_type PASS auth_pass password } virtual_ipaddress { 10.57.1.233 } track_script { check_haproxy } } # end # 啓動keepalivrd systemctl start keepalived systemctl enable keepalived
# 配置keepalived master to lb2 vim /etc/keepalived/keepalived.conf # 內容以下,直接刪除原內容 替換以下便可 global_defs { router_id 202 } vrrp_script check_haproxy { script "killall -0 haproxy" interval 3 fall 5 rise 10 } vrrp_instance haproxy { state BACKUP priority 200 interface eth0 virtual_router_id 52 advert_int 1 authentication { auth_type PASS auth_pass password } virtual_ipaddress { 10.57.1.233 } track_script { check_haproxy } } # end # 啓動keepalivrd systemctl start keepalived systemctl enable keepalived
for bastion
# ssh-keygen -t rsa -b 4096 -N '' -f ~/.ssh/id_rsa eval "$(ssh-agent -s)" ssh-add ~/.ssh/id_rsa
## 準備配置文件 # 參考 https://access.redhat.com/documentation/zh-cn/openshift_container_platform/4.2/html/installing_on_bare_metal/installing-restricted-networks-bare-metal#installation-initializing-manual_installing-restricted-networks-bare-metal mkdir /root/ocp1 vim /root/ocp1/install-config.yaml # 內容參考如上連接 apiVersion: v1 baseDomain: abc.cn compute: - hyperthreading: Enabled name: worker replicas: 0 controlPlane: hyperthreading: Enabled name: master replicas: 3 metadata: name: ocp1 networking: clusterNetwork: - cidr: 10.128.0.0/14 hostPrefix: 23 networkType: OpenShiftSDN serviceNetwork: - 172.30.0.0/16 platform: none: {} # pullSecret的值只需提供本地registry的認證信息,如上咱們生成的~/local_pull_secret.json的全部內容 pullSecret: '{"auths": {"reg.abc.cn:5000": {"auth": "YWRtaW46cmVkaGF0"}}}' # sshKey的值爲cat ~/.ssh/id_rsa.pub sshKey: 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCcWt4hlgbZIW0kP+Jv+Ru63XiOwfRFWq1itHsWspdHLK+chmdSA2Ye5b7xMqoiyEDl2hpwmRB1O65hU1pEIur9+jfqkzxFO6Bl7G/NRw6RLUMFk+IN3d3HLEErQvIiuaL5zyWUTcY9pr4TcYwdWQd4ie2Z/EeWF4j1HU35RKj5eFPrGyyUTKJRwH0bh+dKgmddjgu/WqVAwDMuQHloQBfuPYn6mZv1oj9JFJaJ2HhCVcWdAylZ0WjBxbtSukZ4fjODfHvJDpHQVBHKwqOxUzrCURanAC2V7LVbcfTOV/arBRcaN8yLai2Q+mUZHaL0u5IPTSbw4nO5lcxN5hA9m5PAI6Z8WL6jkOAjSb4CfJ/oJNbP855+qyD8rjIo27OMrVyRmQUyf4JOM4KojwZPHNsKv7Sl9gndLw9s7PjrKnLjZ23lnhaO8PGoVdV0e2dbHyyc4VH/tLFwJ3i4ic2toIz68fYuhyoenv71uHuyQDD4c4tcaf/5nzIv3UkYX8wY4WD2hypDgo2TJ9/1Mm4ovVJ+xux4wQpX/vYCeNp18uMoOrD4SL0XPHHh5JBS7rzoVB7ynNCbC/srMKwhfiQwfc+W5Yz7RNh7QZ3Z2GHq+XMSL8a/DEyPgRJliMNTWwc11i3BUxsLxg8grv/7Dl1Eg7rKKyv+s1Vo0srvREYx3Jz3+Q== root@localhost.localdomain' # additionalTrustBundle的值爲cat /opt/registry/certs/domain.crt ,注意格式,有兩個空格 additionalTrustBundle: | -----BEGIN CERTIFICATE----- MIIF7zCCA9egAwIBAgIJAMd/rAtRbiZyMA0GCSqGSIb3DQEBCwUAMIGNMQswCQYD VQQGEwJDTjESMBAGA1UECAwJR3VhbmdEb25nMREwDwYDVQQHDAhTaGVuWmhlbjEQ MA4GA1UECgwHY2xvdWRvczEPMA0GA1UECwwGc3lzdGVtMRUwEwYDVQQDDAxyZWcu dGVzdC5jb20xHTAbBgkqhkiG9w0BCQEWDnJnX2ZhbkAxNjMuY29tMB4XDTE5MTIy NDAyMjc1MloXDTI5MTIyMTAyMjc1MlowgY0xCzAJBgNVBAYTAkNOMRIwEAYDVQQI DAlHdWFuZ0RvbmcxETAPBgNVBAcMCFNoZW5aaGVuMRAwDgYDVQQKDAdjbG91ZG9z MQ8wDQYDVQQLDAZzeXN0ZW0xFTATBgNVBAMMDHJlZy50ZXN0LmNvbTEdMBsGCSqG SIb3DQEJARYOcmdfZmFuQDE2My5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw ggIKAoICAQDgz7e9acoDWBl+Xlkd6+QJBlpy+rCeHbDhNmsWV33TC+jxj0ltM65I 5qCudG/sy6H/A4nSupQJJYk+9EPZ++doMy4cQLvxiLeNAQEOCxrQzdYIXKCV6mBe dWvHVoID+u7w/gNSJLr19qLUqdshN/lpzuAOHKS+OqILkoiEqWblBf/JA8iE4Ey0 TTaHyHmc22x36T2ivlucdinksbxCfZsUj2rKiGO695Uf65XRlFn+9Qvn5ZWVmNqB qp6dre4WJTZQmhpG9LU5TjlbyrxFdCntzL9i9Ie+n2PxatpN8OdDnBwXJ341OO6M MXCZRxqf3e5cMcDEZzRUUbo5/jnSc5CJS53b4bdj3LvmyZU6kk9yNK6olcX49rfH HCvm6PwjrJf0QOUoMcbY8zGPauhPTCIQHMIPZcLhCoSJm6OLTpvCD0mHX75OPMbE LKE4yHh0l8sqaaA/hD45aLR35lVIDNV2oxnT+yFAavg/IsTAAe+Dwyswo14K0+RE Sp/HuiNpr59LCd2Jj32ieKOWbzklnRN62TQa/sRNUJaEs3iTxITBuP/BK9XIBAsl wclCiqHUh7Hn1wuyjD6eF3r6zPJ+hc8V8pmFhtQnjSOmusg5ANZLllMwE+90FgLU QBiLuo4+mBX40ty5ehSnEwOx71hloF69NsV0hzJ4ZLt/gtfX9UxgYwIDAQABo1Aw TjAdBgNVHQ4EFgQUSgW8dfJbQnUVHsptEGdSx3lW7vQwHwYDVR0jBBgwFoAUSgW8 dfJbQnUVHsptEGdSx3lW7vQwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOC AgEAJnUoZim++d7cO3ba1dD1lVLVQOSFiAGQRRH6FboYNtl02KNfely9pqeEqtPu nUHdIUWAdEzfrKmO1CUSC8amfIAmTriVPPsjOMRGHHt/ONh6PbbVQKknyM9vxjh/ fhHuyfTpdvmYAr4qOTeuHBRXJVR6RTPVX9MPFje5Eeq5pCum5kSiUJ7cZ7f9104d +QcwZbEtXsui7zIsImiqaPJuOtAld5vATMy/rWWVoBVsBmLRv28TiNDVCq3luO5z +g9wdr7qi0u9bSsckNVTVmjx3H9ss1uxc4KETxF+2nIXvGU6o6e8JnwzuJ+lnw2/ a2gwhBFFahqADfsQSB5cyLdc2yrBXE3WJ7lIt6VTb/orSNXa8gKF8tZmadSJMQRm GS+jKZ00A5FERQ8jps2P9yhjEvbIi0oFIl5i1/E5YK4CPiWr5iecSW+Vs/sz47a3 5v1MLh/PyBlxYyuu7GvsFV9qp5pxE+2M/MOVLVVi3xguUXsCPfEJ7nSYczH48nOM AgWSSWqyZnK7SkuKKwGWXxpNRi4pYPMmOVUEdSt6gqzt39S9NS2+S3LVwcS2f6vn twW6sWEvKH3k9AQ7za78FCPkTyAKFNgN2EolXUmdgEwXwp/F2MELl3DxYagbivWU 5wu9k+Gid2Zs7ZqTEMQ1IKxmxnmJoGowx1ylMXm30D7grHc= -----END CERTIFICATE----- # 以下信息直接替換 如上同步redhat官方registry到本地registry的輸出內容裏,找到這段直接替換如下全部內容 imageContentSources: - mirrors: - reg.ocp1.abc.cn:5000/ocp4/openshift4 source: quay.io/openshift-release-dev/ocp-release - mirrors: - reg.ocp1.abc.cn:5000/ocp4/openshift4 source: quay.io/openshift-release-dev/ocp-v4.0-art-dev
# 生成kubernetes集羣的manfests openshift-install create manifests --dir=/root/ocp1 # 修改scheduler的配置清單,讓其不往master節點上調度pod vim /root/ocp1/manifests/cluster-scheduler-02-config.yml # 其餘不變只修改以下便可 mastersSchedulable: False
# 生成ignition文件 openshift-install create ignition-configs --dir=/root/ocp1 ls /root/ocp1
# 爲每一個ocp節點生成單獨的ignition文件 # 下載處理工具 wget https://raw.githubusercontent.com/ashcrow/filetranspiler/master/filetranspile mv filetranspile /usr/bin chmod a+x /usr/bin/filetranspile # 安裝工具依賴 yum install python3 pip3 install pyyaml cd /root/ocp1 # 建立各節點 生成ignition文件的工做目錄,有幾個節點建立幾個 mkdir {bootstrap,master-1,master-2,master-3,node-1,node-2} # 建立子目錄 for i in bootstrap master-1 master-2 master-3 node-1 node-2;do mkdir -p $i/etc/sysconfig/network-scripts done # 以下建立的文件全部目錄都同樣,自行處理下,內容根據各節點變更下便可,這裏只示例bootstrap節點的配置 vim master-1/etc/chrony.conf # 若是內網沒ntp服務器則能夠寫互聯網的,若是機器不能聯網則自行搭建時間服務器 server 10.57.1.8 iburst stratumweight 0 driftfile /var/lib/chrony/drift rtcsync makestep 10 3 local stratum 10 bindcmdaddress 0.0.0.0 keyfile /etc/chrony.keys noclientlog logchange 0.5 stratumweight 0.05 logdir /var/log/chrony # 主機名 echo "master-1.ocp1.abc.cn" > master-1/etc/hostname # dns配置 vim master-1/etc/resolv.conf search abc.cn ocp1.abc.cn nameserver 10.57.1.230 # 網卡配置,coreos通常識別到的網卡名稱爲ens3或ens192,若是不肯定的話可自行安裝一個coreos 查看下 vim master-1/etc/sysconfig/network-scripts/ifcfg-ens3 NAME=ens3 DEVICE=ens3 TYPE=Ethernet BOOTPROTO=none ONBOOT=yes IPADDR=10.57.1.229 NETMASK=255.255.255.0 GATEWAY=10.57.1.254 DNS1=10.57.1.230 DOMAIN=abc.com PREFIX=22 DEFROUTE=yes IPV6INIT=no # 生成各節點的ignition文件 filetranspile -i bootstrap.ign -f bootstrap -o bootstrap-static.ign filetranspile -i master.ign -f master-1 -o master-1.ign filetranspile -i master.ign -f master-2 -o master-2.ign filetranspile -i master.ign -f master-3 -o master-3.ign filetranspile -i worker.ign -f node-1 -o node-1.ign filetranspile -i worker.ign -f node-2 -o node-2.ign
# 將上面生成好的ignition文件copy至http服務器的目錄中提供http下載,目錄以前建立好的爲/data/soft_repository/ocp/igns cp -avf bootstrap-static.ign /data/soft_repository/ocp/igns/ cp -avf master-1.ign /data/soft_repository/ocp/igns/ cp -avf master-2.ign /data/soft_repository/ocp/igns/ cp -avf master-3.ign /data/soft_repository/ocp/igns/ cp -avf node-1.ign /data/soft_repository/ocp/igns/ cp -avf node-2.ign /data/soft_repository/ocp/igns/
接下來即將進入一個重要的一個環節,在裸機上安裝 bootstrap節點
# rhcos-4.2.0-x86_64-installer.iso 安裝系統的iso文件,在官網下載的 # 裸機是沒有安裝任何操做系統的服務器或虛擬機 # 若是是物理服務器的話就須要將如上iso文件刻錄成光盤或者製做成可引導的usb設備 # 若是是kvm或vmware等虛擬機 則須要將如上iso文件上傳到目標服務器的一個可被虛擬化軟件識別的一個目錄中,將其添加到虛擬機的虛擬光驅中,從而引導安裝系統 # 若是是公有云或是私有云 則續把如上iso文件根據雲平臺要求建立iso模板或是怎樣. 添加到雲主機的虛擬光驅中去,然後引導安裝系統 # 開始安裝,安裝過程當中會對安裝過程的內核參數進行修改,以下 # 根據各自的主機類型參照如上幾種方法的提早準備iso文件及機器配置 # 這裏使用的是虛擬機 # 添加虛擬機 # 設置虛擬機名稱 # 設置內存大小,參考開頭官方建議的配置 # 設置CPU核數 # 設置網絡 # 添加光驅設備並關聯iso # 等等.. # 如上的步驟僅供參考 # 啓動機器,到虛擬機控制檯 # 看到Install RHEL CoreOS界面時,按tab鍵 進行內核參數修改 # tab後 直接在後面添加以下內容 # 以下內容在往控制檯寫的時候 要寫爲1行內容 用空格分開,這裏是爲了直觀 # 切勿輸入錯誤,若是錯誤重啓從新輸入吧 # 若是不肯定磁盤是sda仍是vda則安裝一個系統看看便可 coreos.inst.install_dev=sda coreos.inst.image_url=http://yum.ocp1.abc.cn/ocp/rhcos-4.2.0-x86_64-metal-bios.raw.gz coreos.inst.ignition_url=http://yum.ocp1.abc.cn/ocp/igns/bootstrap-static.ign ip=10.57.1.229::10.57.1.254:255.255.255.0:bootstrap.ocp1.abc.cn::none nameserver=10.57.1.230 # 確認無誤則回車 # 若是上述內容沒有輸入錯誤的話基本沒有問題,安裝好後會到登陸界面,官方未提供帳號密碼的登陸方式 # 須要到堡壘機上登陸,上面咱們建立的ssh的密鑰,已經注入到ignition文件中,因此安裝好直接可用用ssh密鑰登陸 # 在堡壘機登陸 bootstrap節點,用戶名爲core ssh core@bootstrap.ocp1.abc.cn # 驗證設置的IP及主機名和dns是否對稱 ... # 查看6443及22623端口是否監聽 netstat -tnlp # 驗證 bootstrap節點是否安裝成功 sudo podman ps # 是否有etcd的容器 # 查看bootkube的啓動日誌,此命令不要關閉.後續安裝master節點時的log都會在此打印出來 journalctl -b -f -u bootkube.service
# master節點也是裸機的方式,安裝rhcos # 建立全部master節點的虛擬機相關配置添加rhcos iso鏡像到虛擬光驅 # 啓動虛擬機 # 內核參數修改的內容與 bootstrap節點基本一致 # 其餘master節點只需修改IP地址及主機名和ignition便可,這裏只展現master-1節點的配置 coreos.inst.install_dev=sda coreos.inst.image_url=http://yum.ocp1.abc.cn/ocp/rhcos-4.2.0-x86_64-metal-bios.raw.gz coreos.inst.ignition_url=http://yum.ocp1.abc.cn/ocp/igns/master-1.ign ip=10.57.1.221::10.57.1.254:255.255.255.0:master-1.ocp1.abc.cn::none nameserver=10.57.1.230 # 確認無誤則回車 # 須要注意的是 master節點安裝好啓動成功後過一會會再此重啓 ... # 繼續安裝master-2 master-3 # master節點都安裝好後 # 在bootstrap節點上執行的journalctl -b -f -u bootkube.service 查看部署過程,發現有以下信息時即代表master節點已經部署成功, # 接下來 bootstrap節點已經沒有任何用處了.刪除便可,以及在haproxy的配置文件中刪除 bootstrap的後端 Dec 26 03:23:50 bootstrap.ocp1.abc.cn bootkube.sh[1629]: Tearing down temporary bootstrap control plane... Dec 26 03:23:50 bootstrap.ocp1.abc.cn bootkube.sh[1629]: bootkube.service complete # 看到如上信息後在跳板機上執行,以下命令 openshift-install --dir=/root/ocp1 wait-for bootstrap-complete --log-level=debug
coreos.inst.install_dev=sda coreos.inst.image_url=http://yum.ocp1.abc.cn/ocp/rhcos-4.2.0-x86_64-metal-bios.raw.gz coreos.inst.ignition_url=http://yum.ocp1.abc.cn/ocp/igns/node-1.ign ip=10.57.1.241::10.57.1.254:255.255.255.0:master-1.ocp1.abc.cn::none nameserver=10.57.1.230 # 確認無誤則回車 # 因此node節點安裝成功後以下操做 # 在堡壘機上添加oc及kubectl客戶的配置文件 export KUBECONFIG=/root/ocp1/auth/kubeconfig # node節點都部署完成後手動批准下node節點的kubelet證書 oc get csr # 查看到Pending狀態的經過以下命令批准下 oc adm certificate approve xxxxxxx # 快捷的批量批准方式 for i in `oc get csr|grep Pending| awk '{print $1}'`;do oc adm certificate approve $i;done
# 查看集羣operators 狀態 oc get clusteroperators # 等待所有爲True # image-registry 爲False是由於存儲的緣由,修改下存儲卷類型便可 # 這裏只是用的本地目錄做爲存儲卷使用,實際環境須要NAS或分佈式文件系統分配pv pvc oc patch configs.imageregistry.operator.openshift.io cluster --type merge --patch '{"spec":{"storage":{"emptyDir":{}}}}' # 等待全部都爲True後執行 openshift-install --dir=/root/ocp1 wait-for install-complete ... INFO To access the cluster as the system:admin user when using 'oc', run 'export KUBECONFIG=/root/ocp1_ignition/auth/kubeconfig' INFO Access the OpenShift web-console here: https://console-openshift-console.apps.ocp1.abc.cn INFO Login to the console with user: kubeadmin, password: NofHz-RWRfP-em9sW-RI7Zb # 提示已經安裝成功,控制檯連接如上所示,登陸的用戶名密碼也如上所示 kubeadmin/NofHz-RWRfP-em9sW-RI7Zb 保存起來 # web控制檯域名爲 https://console-openshift-console.apps.ocp1.abc.cn # 須要訪問的主機須要可以解析此域名