接入 OpenShift 集群
支持将已部署的 OpenShift 集群接入平台统一管理。
前提条件
-
集群上 Kubernetes 版本和组件的满足 接入公有云集群版本要求 。
-
接入 OpenShift 集群过程中,会用到 Kubectl 命令,请提前在访问集群的跳板机上安装 Kubectl 工具。
-
确保该集群与 global 集群网络互通,您可参考以下步骤配置网络:
-
若接入集群可以正常访问平台访问地址:则无需进行网络配置。
-
若接入集群无法正常访问平台访问地址:您必须为平台添加域名,并将域名解析至平台访问地址,根据实际场景配置域名解析(内网和公网),在 更新平台参数 页面,将域名添加至 平台其他访问地址。
注意:被接入集群接入成功后,在 global 集群 master 节点修改对应集群 cluster 资源,增加 annotation:
cpaas.io/platform-url
:<平台的域名地址,例如:https://www.domain.cn>
。
-
-
如需对集群以及集群下的节点、功能组件、计算组件(Deployment、DaemonSet、DaemonSet)、Pod、容器等相关指标进行实时监控,请确保待接入集群上已部署了 Prometheus。
-
如需从外部镜像仓库拉取集群所需的平台组件镜像,请提前搭建好存储平台组件镜像的镜像仓库,具体实施方案请联系技术支持人员。
操作步骤 1 - 为集群配置 DNS
通过修改 global 集群上的 coredns 配置字典,为集群配置 DNS。
-
登录可以访问 OCP 集群的跳板机,并执行以下命令,获得 OCP 集群的 base domain。
oc get dns cluster -o jsonpath='{.spec.baseDomain}'
得到的标准输出示例如下:
ocp.example.com
-
登录容器平台的平台管理页面。在左侧导航栏中,通过顶部导航栏的集群切换入口,切换至 global 集群。
-
在左侧导航栏中单击 集群管理 > 资源管理。
-
查找并更新
kube-system
命名空间下名为cpaas-coredns
的ConfigMap
资源,操作步骤如下图所示。-
在弹框中搜索
.:1053 {
所在行。 -
复制这一行,将小数点改成第一步获取的 OpenShift 集群的 base domain。
-
最后加上 log 和 forward 插件的配置,补上
}
使配置文件合法。全部修改后示例如下:
Corefile: | # 这一段是需要手动添加的部分 ocp.example.com:1053 { log forward . 192.168.31.220 } # 以下是 coredns 配置文件中原本就有的内容,无需修改 .:1053 {
参数说明:
-
ocp.example.com:OpenShift 集群的 base domain,是第一步执行的命令的返回结果。
-
192.168.31.220:OpenShift 集群的 DNS。该值可从集群的控制节点或计算节点的
/etc/resolv.conf
文件中获取。
全部修改内容如下图所示:
-
操作步骤 2 - 获取集群信息
提示:以下两种方式选择其一即可。
方法一(推荐):获取集群的 KubeConfig 文件
集群的 KubeConfig 文件中包含了访问集群所需的配置信息,例如:集群地址、CA 证书、认证信息等。
-
登录可以访问 OCP 集群的跳板机。
-
执行以下命令,在全盘搜索 kubeconfig 文件的位置(如果已经知道文件位置,可以跳过这一步)。
find / -type f -name 'kubeconfig' # 如果上面的命令没有输出,则尝试下面这个命令 find / -type f -iregex '.*kube.*config.*' # 在以上命令的输出中找出应当是 kubeconfig 的文件路径,将之存在环境变量中 path_to_ocp_kubeconfig=/root/ocp4/auth/kubeconfig # 请根据实际路径调整这里的命令 # 检查搜索到的 kubeconfig 文件是否能提供足够权限的 token grep -qF 'current-context: admin' "$path_to_ocp_kubeconfig" \ && echo '所检查的 kubeconfig 文件合法,能继续下面的操作!' \ || echo '所检查的 kubeconfig 文件非法,请停下操作并排除故障!'
-
-
退出跳板机的 shell。回到本机操作,将跳板机上的 kubeconfig 文件拷贝到本地。需要在本地终端上执行的命令如下:
# 请根据上一步找到的 kubeconfig 文件实际位置调整这里的路径 scp root@<OCP 集群跳板机 IP>:</root/ocp4/auth/kubeconfig> <本地存放文件的位置>
方法二:获取集群令牌、访问地址、CA 证书
-
登录可以访问集群的跳板机。
-
执行以下命令行生成并获取具有管理员权限的令牌。
echo " apiVersion: v1 kind: ServiceAccount metadata: namespace: default name: cls-access --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: cls-access roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount namespace: default name: cls-access " | kubectl apply -f - && \ kubectl describe secret \ -n default $(kubectl describe sa cls-access -n default \ |grep Tokens: |awk '{print $2}') |grep token:
示例如下图所示。
-
执行以下命令行,获取集群的访问地址。
# 获取集群访问地址(server) ssh core@<集群中任意控制节点的 ip> sudo grep -F server /etc/kubernetes/kubeconfig | sed 's/ *server: *//'
-
执行以下命令行,获取集群的 CA 证书。
# 获取经过 Base64 解码后 CA 证书(certificate-authority-data) ssh core@<集群中任意控制节点的 ip> sudo grep -F certificate-authority-data /etc/kubernetes/kubeconfig | sed 's/ *certificate-authority-data: *//' | base64 -d
-
操作步骤 3 - 修改集群的镜像仓库配置
为确保集群能够拉取到平台提供的组件镜像,请参照本节修改待接入平台的集群的私有镜像仓库配置,将拉取镜像的仓库地址修改为存储平台组件镜像的仓库地址。
注意事项
注意:所有需要使用镜像的主机节点都需要修改。根据镜像仓库的提供方式不同,镜像仓库的地址略有不同:
-
使用平台内置的镜像仓库:此时镜像仓库的地址需为平台访问地址,您可在 global 集群的控制节点上 执行如下命令获得平台访问地址:
kubectl get productbase base -ojsonpath='{.spec.platformURL}' | sed -E 's|https?://||'
得到的标准输出示例如下:
container-platform.example.com # 或者是 ip 地址 192.168.1.13 # 镜像仓库地址中也可能带着指定端口 192.168.1.13:8899
提示:若接入集群无法正常访问平台访问地址,请使用外部镜像仓库。
-
使用外部镜像仓库:根据实际镜像仓库地址填写,例如:
registry.example.cn:60080
。
操作步骤
-
登录 OCP 集群中的所有节点。
-
依次在每个节点上执行以下命令行,修改节点的镜像仓库配置。
# 切换 root 权限 sudo -i # 配置节点,使其支持根目录读写操作 sudo chattr -i / # 创建 drop-in 配置文件。如果需要配置多个镜像地址,只需要重复 `--insecure-registry=` 参数,并用空格分隔开即可 # 配置示例如下,请先将示例中 `--insecure-registry=` 参数后跟的地址改为实际镜像仓库地址,再把全部命令一起复制到节点上执行: sudo mkdir -p /etc/systemd/system/crio.service.d/ cat | sudo tee /etc/systemd/system/crio.service.d/99-registry-cpaas-system.conf << 'EOF' [Service] ExecStart= ExecStart=/usr/bin/crio \ --insecure-registry='<根据 注意事项 的说明确定的镜像仓库地址>' \ $CRIO_CONFIG_OPTIONS \ $CRIO_RUNTIME_OPTIONS \ $CRIO_STORAGE_OPTIONS \ $CRIO_NETWORK_OPTIONS \ $CRIO_METRICS_OPTIONS EOF
-
执行以下命令行,重启 crio。
sudo systemctl daemon-reload && sudo systemctl restart crio
操作步骤 4 - 接入集群
-
在左侧导航栏中,单击 集群管理 > 集群。
-
单击 接入集群。
-
参照以下说明,配置相关参数。
参数 说明 镜像仓库 存储集群所需平台组件镜像的仓库。在「操作步骤 3 - 修改集群的镜像仓库配置」时如果选择了「使用平台内置的镜像仓库」,请在这里选择「平台默认」。否则选择「外部」- 平台默认:部署 global 时配置的 平台部署 镜像仓库。- 外部:提前搭建的外部镜像仓库。需输入访问镜像仓库的 私有镜像仓库地址、端口、用户名、密码。 集群信息 提示:可手动填写或上传 KubeConfig 文件由平台自动解析并填写。解析 KubeConfig 文件:上传已获取的 KubeConfig 文件后,平台会自动解析并填写 集群信息,您可修改自动填写的信息。集群地址:集群对外暴露 API Server 的访问地址,用于平台访问集群的 API Server。CA 证书:集群的 CA 证书。注意:手动输入时,需输入经过 Base64 解码的证书。认证方式:访问集群的认证方式,需要使用具备 集群管理权限 的 令牌(Token)或 证书认证(客户端证书及秘钥) 进行认证。 -
单击 检查连通性 以检查与接入集群的网络连通性并自动识别接入集群的类型,集群类型将以表单右上角角标的形式展现。
-
连通性检查通过后,单击 接入,并确认。
提示:
- 单击处于 接入中 状态的集群右侧的
图标,可在弹出的 执行进度 对话框中,查看集群的执行进度(status.conditions)。
- 集群接入成功后,在集群列表可查看集群的关键信息,集群的状态显示为正常,并可执行集群相关操作。
- 单击处于 接入中 状态的集群右侧的
后续操作
部署日志采集组件前操作
当 nevermore 在收集日志、事件和审计的过程中,会将一些数据 (例如:position file、buffer、backup) 存储在宿主机上(默认在 nevermore 的 /scan_dir/cpaas
目录)。如果不做处理,对接 OpenShift 集群并部署日志采集组件后,会存在 operation not permitted
情况。部署日志采集组件之前,请参照本节内容配置。
操作步骤
-
在 OpenShift 集群的每一个节点上执行以下命令行,创建所有平台必须的目录。
sudo mkdir -p /cpaas/ && sudo chattr -i /cpaas/ # 为 nevermore 创建其他的使用目录,例如:`/mnt/data/` sudo mkdir -p /mnt/data/ && sudo chattr -i /mnt/data/
-
为 OpenShift 集群部署日志采集组件。
-
登录容器平台的平台管理页面。在左侧导航栏中,通过顶部导航栏的集群切换入口,切换至 global 集群。
-
在左侧导航栏中单击 集群管理 > 资源管理。
-
查找并更新
集群相关
栏目下的ClusterModule
资源。请选择显示为 OpenShift 集群名称的资源进行更新,操作步骤如下图所示。- 在打开的编辑界面上,寻找以
spec:
开头的行 (该行开头不应该有任何空格) - 在这一行下面粘贴如下显示的内容,请注意将
</data/cpaas>
改为上一步创建的目录,如/mnt/data
:
valuesOverride: ait/chart-alauda-log-agent: nevermore: dataDirName: </data/cpaas> # 将尖括号去掉,改成上一步创建的目录,例如:/mnt/data
全部修改内容如下图所示:
- 在打开的编辑界面上,寻找以
部署插件
集群接入成功后,您可前往 插件管理 选择为集群部署必须的插件,包括监控组件、日志采集组件、日志存储组件等。
更新审计策略
集群接入成功后,可修改集群上的审计策略。
审计策略(spec.audit.profile)支持以下三种类型:
-
Default:默认的审计策略,只会记录读写请求的
metadata
;OAuth access token creation 是一个例外,会记录body
。 -
WriteRequestBodies:记录所有请求的
metadata
,以及写请求的body
。 -
AllRequestBodies:记录所有请求的
metadata
,以及读写请求的body
。
注意:
-
包含敏感信息的资源,只会记录
metadata
。例如:Secret、 Route、 OAuthClient。 -
从旧版本(4.5)升级到了当前版本的接入集群,由于 OAuth token 的名称(names)中可能包含了敏感信息,所以,不会记录 OAuth token 的审计数据。
操作步骤
-
登录可以访问集群的跳板机。
-
执行
oc edit apiserver cluster
令行,修改 APIServer 资源的 spec.audit.profile 字段的值(Default、WriteRequestBodies 或 AllRequestBodies),配置集群的审计策略。oc edit apiserver cluster
APIServer 资源的 YAML 文件示例如下:
apiVersion: config.openshift.io/v1 kind: APIServer metadata: annotations: oauth-apiserver.openshift.io/secure-token-storage: "true" release.openshift.io/create-only: "true" creationTimestamp: "2021-09-22T09:35:02Z" generation: 1 name: cluster resourceVersion: "944" selfLink: /apis/config.openshift.io/v1/apiservers/cluster uid: ea77d173-cbb6-4410-920f-b830a0b8537b spec: audit: profile: Default
启用 Pod Debug 功能
集群接入成功后,如需使用 Pod Debug 功能,请参考 如何在接入集群中启用 Pod Debug 功能? 。
纳管集群下命名空间
集群接入成功后,您可通过基于集群 创建项目 ,或通过 添加项目关联集群 的方式将集群添加至已有项目,可将新接入的集群关联至项目。
进而,通过 导入命名空间 操作,将集群下已有的 Kubernetes 命名空间纳入到平台的项目下进行管理。
常见问题
接入集群后添加节点按钮置灰,如何添加节点?
不支持在平台界面添加节点,请于联系集群供应商添加。
接入集群的证书管理功能支持哪些证书?
-
Kubernetes 证书:所有接入集群仅支持在平台证书管理界面查看 APIServer 证书信息,不支持查看其他 Kubernetes 证书且不支持自动轮换。
-
平台组件证书:所有接入集群可在平台证书管理界面查看平台组件证书信息且支持自动轮换。
还有哪些功能不支持接入的 OpenShift 集群?
-
不支持获取审计数据。
-
不支持 ETCD、Scheduler、Controller Manager 相关监控信息,支持 APIServer 部分监控图表。
-
不支持获取除 Kubernetes APIServer 证书外的集群证书相关信息。