2023-01-29
技术笔记
00
请注意,本文编写于 795 天前,最后修改于 339 天前,其中某些信息可能已经过时。

目录

CHANGELOG
准备工作
规划机器
规划网络
生成ssh key
修改 security group rule quota
获取程序
安装程序
openshift-cli
获取pull secert
规划域名
开始部署
准备clouds.yaml文件
生成install-config.yaml
配置代理
部署集群
查看集群状态
登录控制台
销毁集群
参考资料

Openshift是RedHat基于Kubernetes开发的企业级容器平台,能让企业轻松选择构建、部署和运行应用的位置,并提供一致的体验。本文主要介绍如何在OpenStack平台上部署Openshift的开源版本okd.

CHANGELOG

2023.11.6 - 基于okd 4.12对本文做了部分改动

准备工作

规划机器

首先,我们需要准备一台部署机,后续所有的操作都在这台部署机上完成,部署机网络要求能够访问OpenStack后台接口,并且与OpenStack虚拟机子网互通。本文后续的文件都放在/data/workspace/openshift目录。 在OpenStack上部署Openshift,我们不需要提前创建虚拟机,机器是在部署过程中安装程序自动调用OpenStack接口创建的。我们只需要先做好规划即可。本次我们规划的是4台机器,其中3台是master,每台的规格是4核16G内存100G硬盘;1台是worker,最少需要2核8G内存100G硬盘;另外部署过程中还需要一台boostrap机器,需要预留好资源,部署完成后这台bootstrap机器可以删掉。 规划好的机器,需要先在openstack创建好对应的机型flavor.

规划网络

我们需要准备好一个openstack网络,并预留一个IP段供openshift给机器分配IP。可以先创建好一个子网(subnet),然后在部署配置中指定,也可以让openshift-installer自己创建,本文使用的是创建好的子网。

我们需要准备两个IP作为集群的VIP,一个提供API访问,一个提供ingress访问。注意:两个VIP必须是在子网的allocation_pool之外,否则安装时会报错。例如,subnet的网段是172.16.80.0/24, allocation_pool是172.16.80.1-172.16.80.254:

text
$ openstack subnet show subnet_name -c allocation_pools +------------------+---------------------------------------------------+ | Field | Value | +------------------+---------------------------------------------------+ | allocation_pools | 172.16.80.1-172.16.80.254 | +------------------+---------------------------------------------------+

那么我们需要预留两个IP出来,比如172.16.80.253和172.16.80.254, 然后把这两个IP从allocation_pool中剔除:

sh
openstack subnet unset subnet_name --allocation-pool start=172.16.80.1,end=172.16.0.254 openstack subnet set subnet_name --allocation-pool start=172.16.0.1,end=172.16.0.252

allocation_pool的配置可参考:https://bugzilla.redhat.com/show_bug.cgi?id=1944365

请注意,在openshift中,两个VIP默认只用于集群内访问,当你需要访问集群时,请确认客户端所在的网络和VIP所在的网络能连通。如果不行,那么你需要使用到openstack的floating ip来对外提供服务。由于本文的VIP已经能够满足客户端访问的需求,因此将不会使用到floating ip. 关于floating ip的参考:https://docs.okd.io/4.12/installing/installing_openstack/installing-openstack-installer-custom.html#installation-osp-accessing-api_installing-openstack-installer-custom

另外,尽管我们没有使用到floating ip,但是在创建集群安装配置时,安装引导程序依然会检查是否有可用的floating ip, 如果没有会报错。所以你可能需要先创建一个floating ip:

sh
openstack floating ip create network_name

生成ssh key

生产ssh key供节点免密登陆使用

shell
ssh-keygen -t rsa -b 4096 -N '' -C 'openshift' -f ./id_rsa eval "$(ssh-agent -s)" ssh-add ./id_rsa cp id_rsa ~/.ssh/openshift_id_rsa cp id_rsa.pub ~/.ssh/openshift_id_rsa.pub

修改 security group rule quota

部署Openshift要求OpenStack平台有60的security group rule配额:

By default, your security group and security group rule quotas might be low. If you encounter problems, run openstack quota set --secgroups 3 --secgroup-rules 60 <project> as an administrator to increase them.

经过实测,文档建议的配额依然可能导致报错,在允许的情况下可以考虑把secgroups和secgroup-rules都设置成-1.

获取程序

安装程序

我们使用okd 4.12版本,下载 https://github.com/okd-project/okd/releases/tag/4.12.0-0.okd-2023-04-16-041331 解压得到openshift-install

openshift-cli

下载 https://mirror.openshift.com/pub/openshift-v4/clients/oc/latest/linux/oc.tar.gz 解压得到ockubectlockubectl移到PATH目录比如/usr/local/bin/

获取pull secert

我们需要pull secret用于从红帽的镜像仓库拉取镜像,登录 https://console.redhat.com/openshift/install/pull-secret 获取,如果没有redhat账号,需要注册一个。pull secret是一串json字符。

规划域名

准备好集群使用的根域名,本文使用的是yourdomain.com

开始部署

准备clouds.yaml文件

clouds.yaml用于访问OpenStack后台接口,格式如下:

yaml
clouds: admin: auth: auth_url: http://127.0.0.1:5000/v3 project_name: admin username: admin password: your_password user_domain_name: Default project_domain_name: Default

生成install-config.yaml

通过openshift-install命令生成部署时需要的配置文件

shell
openshift-install create install-config --dir /data/workspace/openshift/installation/ ? SSH Public Key /root/.ssh/openshift_id_rsa.pub ? Platform openstack ? Cloud admin ? ExternalNetwork public ? APIFloatingIPAddress 172.16.80.11 ? FlavorName 4c16g100g ? Base Domain youdomain.com ? Cluster Name openshift ? Pull Secret [? for help]

修改生成的install-config.yamlmachineNetwork cidr改为OpenStack虚拟机子网的网段,本文为172.16.80.0/24。修改machinesSubnet为子网id,apiVIPingressVIP为该网段的IP. apiFloatingIPingressFloatingIP删掉,删掉的原因上文已经说明,如果需要的话请自行配置。 根据需要修改compute的replica数。最终生成的文件如下:

yaml
apiVersion: v1 baseDomain: yourdomain.com #上面准备的根域名 compute: - architecture: amd64 hyperthreading: Enabled name: worker platform: {} replicas: 1 controlPlane: architecture: amd64 hyperthreading: Enabled name: master platform: {} replicas: 3 metadata: creationTimestamp: null name: openshift networking: clusterNetwork: - cidr: 10.128.0.0/14 hostPrefix: 23 machineNetwork: - cidr: 172.16.80.0/24 networkType: OVNKubernetes serviceNetwork: - 172.30.0.0/16 platform: openstack: machinesSubnet: 9b0943b7-4c4b-4233-89fe-5d2913da0a7c apiVIP: 172.16.80.253 #这个IP必须在allocation_pool外 cloud: admin defaultMachinePlatform: type: 4c16g100g ingressVIP: 172.16.80.254 #这个IP必须在allocation_pool外 publish: External pullSecret: sshKey:

配置代理

整个okd集群部署需要从公网拉取大量镜像,总大小至少20G,如果你的集群环境在大陆,那你将在漫长的等待之后迎来部署的失败。幸好okd贴心的提供了proxy配置,将下面的配置加到install-config.yaml中:

yaml
proxy: httpProxy: http://ip:port httpsProxy: http://ip:port noProxy: 172.16.0.0/16,.openshift.yourdomain.com,.apps.openshift.yourdomain.com,.yourdomain.com,yourdomain.com

部署集群

执行以下命令开始安装:

shell
openshift-install create cluster --dir /data/workspace/openshift/installation/ --log-level=debug

在安装过程中,会出现地址解析问题,因为我们没有配置dns,可以在部署机的/etc/hosts添加记录解决

DEBUG Still waiting for the Kubernetes API: Get "https://api.openshift.yourdomain.com:6443/version": dial tcp: lookup api.openshift.yourdomain.com on 127.0.0.53:53: no such hos

/etc/hosts添加记录,这里172.16.80.43是bootstrap机器的IP:

172.16.80.43 api.openshift.yourdomain.com

查看集群状态

由于网络问题,部署过程中拉取镜像非常慢,安装程序可能会超时失败,不用怕,可以用下面的命令继续等待:

sh
./openshift-install wait-for install-complete --log-level debug --dir /data/workspace/openshift/installation/

等待集群启动安装,全部部署完成大概需要1到2个小时。在此过程中可以通过oc命令查看集群的状态:

shell
export KUBECONFIG=./installation/auth/kubeconfig oc get nodes #查看节点 oc get clusterversion #查看集群版本 oc get clusteroperator #查看集群部署的operator oc get pods -A #查看所有pod

openshift-install wait-for命令提示Install complete!并给出登录用户名密码时,部署完成。

登录控制台

在你的DNS服务器上配置两个DNS:

api.openshift.yourdomain.com. IN A 172.16.80.253 *.apps.openshift.yourdomain.com. IN A 172.16.80.254

如果你没办法配置DNS,可以在需要登录控制台的PC上,配置hosts:

172.16.80.253 api.openshift.yourdomain.com 172.16.80.253 api-int.openshift.yourdomain.com 172.16.80.254 grafana-openshift-monitoring.apps.openshift.yourdomain.com 172.16.80.254 prometheus-k8s-openshift-monitoring.apps.openshift.yourdomain.com 172.16.80.254 oauth-openshift.apps.openshift.yourdomain.com 172.16.80.254 console-openshift-console.apps.openshift.yourdomain.com 172.16.80.254 integrated-oauth-server-openshift-authenticatio.apps.openshift.yourdomain.com

然后登录 https://console-openshift-console.apps.openshift.yourdomain.com/ 账号为kubeadmin,密码可以在部署机的installation/auth/kubeadmin-password文件找到。

集群机器登录方法: ssh -i openshift_id_rsa core@$ip

销毁集群

如果在部署过程中出错了需要清理环境,或者实验结束了,可以通过以下命令销毁集群:

shell
openshift-install destroy cluster --dir /data/workspace/openshift/installation/

参考资料

https://docs.okd.io/4.12/installing/installing_openstack/installing-openstack-installer-custom.html
https://docs.okd.io/4.12/web_console/web-console.html#web-console
https://docs.okd.io/4.12/installing/installing_openstack/uninstalling-cluster-openstack.html

本文作者:rny

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC 2.0 许可协议。转载请注明出处!