日期 | 版本 | 做者 | 备注 |
---|---|---|---|
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 # 须要访问的主机须要可以解析此域名