OKD搭建笔录

   重要: 3台管理节点内存尽量大,至少12G以上,低于12G失败概率大。

大概步骤:

  1. 基础环境机器,提供OKD集群中的节点的DNS正反解析,可以用bind或者容器时代的coredns+etcd;提供OKD引导节点以及控制平面节点以及集群负载ingress的负载均均衡软件,比如haproxy或者envoy,主要包括 控制节点api 6443,OKD平台的80 443,以及其他Ingress入口。配置可以直接按官网的来就行。另外内网环境或者不想直接去外网容器仓库拉镜像的情况,还需要提供内部registry,可以用docker 自带的registry或者 vmware的哈勃或者其他registry,注意生成证书提供HTTPS访问以及账号认证用于部署的时候客户端访问。
  2. 配置好基础环境的dns,haproxy,registry(如果基础环境机器只有一个IP,不能占用443端口,okd集群要用),然后就是下载oc 以及installer,生成install-config.yaml文件,里面定义了集群域名,Pod IP以及service IP段,虚拟网络插件,基础环境机器(充当管理机)ssh公钥,内网镜像registry信息(离线OKD镜像参考官网文档),以及registry的https证书。通过这个文件生成manifests信息,然后再生成点火文件。
  3. 手工安装的OKD,需要下载coreos,直接通过ISO或者PXE引导安装,安装过程主要是为节点机器提供网络配置,点火文件,安装后,重启节点后会自动进行安装,先安装bootstrap,bootstrap起来后最终可以sudo crictl pods看到起7个Pod后可以认为是正常了,然后再安装master,3台可以同时安装,安装完后看运气(内存不给够的情况下).
  4. 节点都安装上了后,wait-for bootstrap-complete 一直观察,如果正常会报告可以删除bootstrap的时候,就去haproxy里面把bootstrap机器的条目注视掉或者删掉。重启haproxy,这样集群就完全是走控制平面三个节点了。引导节点起来会起几个静态pod起个小的k8s环境,然后用来引导master完成安装,安装完后引导节点就把k8s控制平面由本机交给真正的3台控制平面机器。
  5. 再然后就是不停检查node,clusteroperators,pods状态,或者wait-for install-complete,如果安装完成后会报告web console的登陆地址以及账号密码。
  6. 未完待续。

使用docker的registry镜像搭建容器仓库,开启https以及认证

生成系统自认证证书,如果是本机或者可以直接添加证书为信任的情况,CA都不用,直接

openssl req -newkey rsa:4096 -nodes -sha256 -keyout /opt/registry/certs/domain.key -x509 -days 3000 -out /opt/registry/certs/domain.crt  -addext "subjectAltName = DNS:registry.okd.example.com"

这样生成key和crt,注意一定要加参数

-addext "subjectAltName = DNS:registry.okd.example.com"

不然registry起来后,客户端访问会报

x509: certificate relies on legacy Common Name field, use SANs or temporarily enable Common Name matching with GODEBUG=x509ignoreCN=0

原因是go的高版本要求明确指定subjectaltname了,就是他提示那个SAN,参考

GENERAL: What should I do if I get an "x509: certificate relies on legacy Common Name field" error?https://jfrog.com/knowledge-base/general-what-should-i-do-if-i-get-an-x509-certificate-relies-on-legacy-common-name-field-error/How do I use SANs with openSSL instead of common name? - Stack Overflowhttps://stackoverflow.com/questions/64814173/how-do-i-use-sans-with-openssl-instead-of-common-name生成后,本机添加下信任

cp /opt/registry/certs/domain.crt /etc/pki/ca-trust/source/anchors/
update-ca-trust extract

账号认证用

htpasswd -Bbn admin admin > htpassfile

然后就可以起registry容器了。这个镜像的使用方法及参数见官网,主要是镜像存储位置,认证信息,https证书和key 

Deploy a registry server | Docker DocumentationExplains how to deploy a registryhttps://docs.docker.com/registry/deploying/

docker run -d --restart=always --name registry \
  -v /opt/registry/certs:/certs -e REGISTRY_HTTP_ADDR=0.0.0.0:443 -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
  -v /opt/registry/data:/var/lib/registry \
  -v "/opt/registry/auth:/auth" \
  -e "REGISTRY_AUTH=htpasswd" \
  -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
  -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpassfile" \
  -p 443:443 registry

 然后去拖镜像用于离线安装

#OCP_RELEASE直接用下载的installer包的版本号,官网教程不准。

export OCP_RELEASE=4.10.0-0.okd-2022-03-07-131213
export LOCAL_REGISTRY='registry.okd.example.com:443'
export LOCAL_REPOSITORY='openshift/okd'
export PRODUCT_REPO='openshift'
export RELEASE_NAME="okd"
export LOCAL_SECRET_JSON='/root/.docker/config.json'

oc adm release mirror -a ${LOCAL_SECRET_JSON}  \
     --from=quay.io/${PRODUCT_REPO}/${RELEASE_NAME}:${OCP_RELEASE} \
     --to=${LOCAL_REGISTRY}/${LOCAL_REPOSITORY} \
     --to-release-image=${LOCAL_REGISTRY}/${LOCAL_REPOSITORY}:${OCP_RELEASE}

拖完后会提示

imageContentSources:
- mirrors:
  - registry.okd.example.com:443/openshift/okd
  source: quay.io/openshift/okd
- mirrors:
  - registry.okd.example.com:443/openshift/okd
  source: quay.io/openshift/okd-content

这一段就可以加到install-config.yaml里面去了,这样安装就不需要再去拖镜像了。

安装OKD标准上需要1台基础服务机器,用于配置dns(集群内各种资源和主机的正反解),haproxy(okd 控制节点以及pod的ingress负载均衡),registry(离线容器镜像,基础服务器机器不会跑任何其他容器,所以可以直接用docker的registry,其他registry太大,配置麻烦),等共用服务,1台bootstrap,用于起一个微型k8s环境安装正式的okd master. okd master官网说最少是3台,但网上也有人直接修改配置只装一台的,但安装好后后面还需要改一些其他pod的副本数,资源足够尽量就3台mster,1台bootstrap

官网文档提供了在各种云平台的部署,以及裸金属 installer-provider部署和user provider部署,区别就在于云平台和installer provider环境下,OKD installer会准备很多环境及基础服务,让整个安装过程自动化,简化安装,但对实际技术人员学习来讲,理清安装的每一个环节以及步骤,手动操作才能搞清楚整个安装过程的情况,如果一键安装,不出问题的情况下,那安装完就啥也不知道,也无法理解安装的依赖以及安装情况了。

所以选择user provider部署方式来学习OKD部署最合适,因为user provider方式需要部署的人准备好一切,所以也就知道安装过程是个什么原理发生了什么。

OKD部署大致就是通过install-config.yaml生成manifests,manifests 再生成 部署实际bootstrap以及master的点火文件(bootstrap,master compute节点的点火文件),有了点火文件后,就可以开始安装bootstrap引导(引导安装master用)节点,bootstrap起来后就可以安装master节点了,master起来后就可以干掉bootstrap了,compute节点通过master节点环境安装。

几个节点的安装过程可以通过网络安装(需要DHCP配置好要给到对应节点的信息,IP,主机名,dns,点火文件获取方式),也可以通过手工ISO安装并在安装界面手工添加IP,主机名,点火文件下载信息,或者定制好ISO。

这样安装完成后,也就清楚整个安装过程是怎么来的了。

NOTE1:不知道为啥,我用iso安装,添加coreos.inst.ignition_url 参数不起作用,只能添加IP配置,然后进系统再执行安装

NOTE2:不知道为啥,离线安装方式,bootstrap非要去找registry.okd.example.com:443访问registry,inistall-config.yaml里面修改成2443了,重新生成ign并拷贝到nginx的html目录后,再安装,他还是要去找registry.okd.example.com:443,最后没办法,只能修改回来.

NOTE3:MMP的官网给的文档做LB的时候haproxy配置里面bootstrap后面加了backup,理论上这个是别的机器活着的时候,这个backup机器就不提供服务,但不知道为啥,我部署的bootstrap起来了 6443端口也是监听了,在LB机器用netstat -antup | grep 6443就死活看不到haproxy去连bootstrap机器,不停去连其他三台,要了命了(其他三台还等着bootstrap来搭把手起服务呢,怎么可能起来api-server啊,自举真麻烦)。

NOTE4:离线registry要单独放在另外的IP地址上,否则争用443端口(因为*.apps.okd.example.com这个泛域名解析已经做到用于部署LB的机器了,haproxy会监听443,如果registry用了443,haproxy没法监听,也没法转发请求到3台master机器上去了。

oc get clusteroperators.config.openshift.io

这里列出来authentication服务就会解析oauth-openshift.apps.okd.example.com,这样的域名。配置好haproxy 443端口后,所有的输出都正常了。

NOTE5:几个确认集群状态正常的命令

oc get nodes
oc adm top nodes
oc get clusterversion
oc get clusteroperators.config.openshift.io
oc describe clusterversion

#查看节点日志
oc adm node-logs <node_name> -u crio

NOTE6: 查看集群pod以及日志

oc get clusteroperators

oc get pods --all-namespaces
#查看pod日志
oc logs downloads-58b68d9689-tktbk -n openshift-console


# 获取web console 账号密码方法

./openshift-install --dir /root/okd/install-dir/ wait-for install-complete

INFO Waiting up to 40m0s (until 5:11PM) for the cluster at https://api.okd.example.com:6443 to initialize... 
INFO Waiting up to 10m0s (until 4:41PM) for the openshift-console route to be created... 
INFO Install complete!                            
INFO To access the cluster as the system:admin user when using 'oc', run 'export KUBECONFIG=/root/okd/install-dir/auth/kubeconfig' 
INFO Access the OpenShift web-console here: https://console-openshift-console.apps.okd.example.com 
INFO Login to the console with user: "kubeadmin", and password: "Y7Q6x-TWRgd-uMjSF-hQATP" 
INFO Time elapsed: 0s 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值