OpenShift簡介

日期 版本 做者 備註
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之上
  • 待續

三,架構

3.1,組件架構圖

​ 因爲做者太懶了 什麼也沒有

3.2,邏輯架構圖

​ 因爲做者太懶了 什麼也沒有

3.3,部署架構圖

OpenShift簡介

四,部署

​ 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

4.1,軟件包下載

​ 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官方鏡像倉庫的密碼文件
# 下載方式以下圖

OpenShift簡介

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
# 如上所列的三類文件用迅雷下載到本機,底下安裝的時候在某臺主機上用到某個文件時自行上傳

4.2,受限的網絡中安裝--裸機部署

​ 所謂受限的網絡就是服務器沒法訪問互聯網或沒法訪問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層代理
  • 配置機器的端口防火牆策略

    # 若是各機器之間的端口可隨意訪問則不用考慮此步

4.2.1,安裝http服務

​ 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

4.2.3,安裝registry

​ 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

4.2.4,安裝lb

​ 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

4.2.5, 建立ssh祕鑰

​ for bastion

#
ssh-keygen -t rsa -b 4096 -N '' -f ~/.ssh/id_rsa
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa

4.2.6,建立並生成安裝ocp的配置文件

## 準備配置文件
# 參考 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/

4.2.7,安裝bootstrap節點

​ 接下來即將進入一個重要的一個環節,在裸機上安裝 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

4.2.8,安裝master節點

# 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

4.2.9,安裝node節點

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

4.2.10,收尾工做

# 查看集羣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
# 須要訪問的主機須要可以解析此域名
相關文章
相關標籤/搜索