# 容器管理常见问题
本页面列出了一些在容器管理(Kpanda)中可能遇到的问题,为您提供便利的故障排除解决办法。
- [容器管理和全局管理模块的权限问题](#permissions)
- Helm 安装:
- [Helm 应用安装失败,提示 “OOMKilled”](#oomkilled)
- [Helm 安装应用时,无法拉取 kpanda-shell 镜像](#kpanda-shell)
- [Helm Chart 界面未显示最新上传到 Helm Repo 的 Chart](#no-chart)
- [Helm 安装应用失败时卡在安装中无法删除应用重新安装](#cannot-remove-app)
- [工作负载 -> 删除节点亲和性等调度策略后,调度异常](#scheduling-exception)
- 应用备份:
- [Kcoral 应用备份检测工作集群 Velero 状态的逻辑是什么](#kcoral-logic-for-velero)
- [在跨集群备份还原时,Kcoral 如何获取可用集群](#kcoral-get-cluster)
- [Kcoral 备份了相同标签的 Pod 和 Deployment,但还原备份后出现 2 个 Pod](#2pod-with-same-label)
- [卸载 VPA、HPA、CronHPA 之后,为什么对应弹性伸缩记录依然存在](#autoscaling-log)
- [为什么低版本集群的控制台打开异常](#console-error)
- 创建和接入集群:
- [如何重置创建的集群](#reset-cluster)
- [接入集群安装插件失败](#failed-plugin)
- [创建集群时在高级设置中启用 **为新建集群内核调优** ,集群创建为什么会失败](#conntrack)
- [集群解除接入后,`kpanda-system` 命名空间一直处于 Terminating 状态](#ns-terminating)
## 权限问题
有关容器管理和全局管理模块的权限问题,经常有用户会问,为什么我这个用户可以看到这个集群,或者为什么我看不到这个集群,我们应该如何排查相关的权限问题?分为以下三种情况:
- 容器管理模块的权限分为集群权限、命名空间权限。如果绑定了用户,那该用户就可以查看到相对应的集群及资源。具体权限说明,可以参考[集群权限说明](../user-guide/permissions/permission-brief.md)。
![容器管理权限](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/kpanda/images/faq201.png)
- 全局管理模块中用户的授权:使用 admin 账号,进入 __全局管理__ -> __用户与访问控制__ -> __用户__ 菜单,找到对应用户。在 __授权所属用户组__ 标签页,如果有类似 Admin、Kpanda Owner 等拥有容器管理权限的角色,那即使在容器管理没有绑定集群权限或命名空间权限,也可以看到全部的集群,可以参考[用户授权文档说明](../../ghippo/user-guide/access-control/user.md)
![全局管理 用户授权](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/kpanda/images/faq202.png)
- 全局管理模块中工作空间的绑定:使用账号进入 __全局管理__ -> __工作空间与层级__ ,可以看到自己的被授权的工作空间,点击工作空间名称
1. 如果该工作空间单独授权给自己,就可以在授权标签页内看到自己的账号,然后查看资源组或共享资源标签页,如果资源组绑定了命名空间或共享资源绑定了集群,那该账号就可以看到对应的集群
1. 如果是被授予了全局管理相关角色,那就无法授权标签页内看到自己的账号,也无法在容器管理模块中看到工作空间所绑定的集群资源
![全局管理工作空间的绑定](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/kpanda/images/faq203.png)
[返回顶部 :arrow_up:](#top)
## Helm 安装的问题
1. Helm 应用安装失败,提示 “OOMKilled”
![失败情况](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/kpanda/images/faq1.png)
如图所示,容器管理会自动创建启动一个 Job 负责具体应用的安装工作,在 v0.6.0 版本中由于 job resources 设置不合理,导致 OOM,
影响应用安装。该 bug 在 0.6.1 版本中已经被修复。如果是升级到 v0.6.1的环境,仅仅会在新创建、接入的集群中生效,
已经存在的集群需要进行手动调整,方能生效。
??? note "点击查看如何调整脚本"
- 以下脚本均在全局服务集群中执行
- 找到对应集群,本文以 skoala-dev 为例,获取对应的 skoala-dev-setting configmap
- 更新 configmap 之后即可生效
```shell
kubectl get cm -n kpanda-system skoala-dev-setting -o yaml
apiVersion: v1
data:
clusterSetting: '{"plugins":[{"name":1,"intelligent_detection":true},{"name":2,"enabled":true,"intelligent_detection":true},{"name":3},{"name":6,"intelligent_detection":true},{"name":7,"intelligent_detection":true},{"name":8,"intelligent_detection":true},{"name":9,"intelligent_detection":true}],"network":[{"name":4,"enabled":true,"intelligent_detection":true},{"name":5,"intelligent_detection":true},{"name":10},{"name":11}],"addon_setting":{"helm_operation_history_limit":100,"helm_repo_refresh_interval":600,"helm_operation_base_image":"release-ci.daocloud.io/kpanda/kpanda-shell:v0.0.6","helm_operation_job_template_resources":{"limits":{"cpu":"50m","memory":"120Mi"},"requests":{"cpu":"50m","memory":"120Mi"}}},"clusterlcm_setting":{"enable_deletion_protection":true},"etcd_backup_restore_setting":{"base_image":"release.daocloud.io/kpanda/etcdbrctl:v0.22.0"}}'
kind: ConfigMap
metadata:
labels:
kpanda.io/cluster-plugins: ""
name: skoala-dev-setting
namespace: kpanda-system
ownerReferences:
- apiVersion: cluster.kpanda.io/v1alpha1
blockOwnerDeletion: true
controller: true
kind: Cluster
name: skoala-dev
uid: f916e461-8b6d-47e4-906e-5e807bfe63d4
uid: 8a25dfa9-ef32-46b4-bc36-b37b775a9632
```
修改 clusterSetting -> helm_operation_job_template_resources 到合适的值即可,
v0.6.1 版本对应的值为 cpu: 100m,memory: 400Mi
[返回顶部 :arrow_up:](#top)
1. Helm 安装应用时,无法拉取 kpanda-shell 镜像
使用离线安装后,接入的集群安装helm应用经常会遇到拉取 kpanda-shell 镜像失败,如图:
![拉取镜像失败](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/kpanda/images/faq301.png)
此时,只需要去集群运维-集群设置页面,高级配置标签页,修改 Helm 操作基础镜像为一个可以被该集群正常拉取到的 kpanda-shell 的镜像即可。
![修改镜像](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/kpanda/images/faq302.png)
[返回顶部 :arrow_up:](#top)
1. Helm Chart 界面未显示最新上传到对应 Helm Repo 的 Chart
![模板](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/kpanda/images/faq401.png)
此时,只需要去 Helm 仓库刷新对应的 Helm 仓库即可。
![刷新仓库](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/kpanda/images/faq402.png)
[返回顶部 :arrow_up:](#top)
1. Helm 安装应用失败时卡在安装中无法删除应用重新安装
![删除失败](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/kpanda/images/faq501.png)
此时,只需要去自定义资源页面,找到 helmreleases.helm.kpanda.io CRD,然后找到对应的 helmreleases CR 删除即可。
![找到 CR](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/kpanda/images/faq502.png)
![删除 CR](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/kpanda/images/faq503.png)
[返回顶部 :arrow_up:](#top)
## 调度的问题
在通过 **工作负载** ,删除节点亲和性等调度策略后,调度异常
![调度异常](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/kpanda/images/faq601.png)
此时,可能是因为策略没有删除干净,点击编辑,删除所有策略。
![编辑](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/kpanda/images/faq602.png)
![删除](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/kpanda/images/faq603.png)
![正常调度](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/kpanda/images/faq604.png)
[返回顶部 :arrow_up:](#top)
## 应用备份的问题
1. Kcoral 检测工作集群 Velero 状态的逻辑是什么?
![检测](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/kpanda/images/faq701.png)
- 工作集群在velero命名空间下安装了标准的velero组件
- velero 控制面 velero deployment 处于运行状态,并达到期望的副本数
- velero 数据面 node agent 处于运行状态,并达到期望副本数
- velero 成功连接到目标 MinIO(BSL 状态为 Available)
1. 在跨集群备份还原时,Kcoral 如何获取可用集群?
在通过 Kcoral 跨集群备份还原应用的时候,在恢复页面中,Kcoral 会帮助用户筛选可以执行跨集群还原的集群列表,逻辑如下:
![筛选](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/kpanda/images/faq801.png)
- 过滤未安装 Velero 的集群列表
- 过滤 Velero 状态异常的集群列表
- 获取与目标集群对接了相同 MinIO 和 Bucket 的集群列表并返回
所以只要对接了相同的 MinIO 和 Bucket,Velero 处于运行状态,就可以跨集群备份(需要有写入权限)和还原。
1. Kcoral 进行应用备份操作,同时备份相同标签的 Pod 和 Deployment 后,还原备份后出现 2 个 Pod。
出现这种现象的原因是:还原时,由于修改了 Pod 标签,导致其标签与其备份时的父资源 ReplicaSet / Deployment 标签不匹配,故还原时出现2倍数量 Pod。
为了避免出现以上这种情况,尽量避免修改关联资源中的某一资源的标签。
[返回顶部 :arrow_up:](#top)
## 日志的问题
卸载 VPA、HPA、CronHPA 之后,为什么对应弹性伸缩记录依然存在?
虽然通过 Helm Addon 市场中把对应组件卸载,但是应用弹性伸缩界面相关记依然在,如下图所示:
![编辑](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/kpanda/images/faq901.png)
这是 helm uninstall 的一个问题,它并不会卸载对应的 CRD,因此导致数据残留,此时我们需要手动卸载对应的 CRD , 完成最终清理工作。
## 控制台的问题
为什么低版本集群的控制台打开异常?
在 kubernetes 低版本(v1.18以下)的集群中,打开控制台出现 CSR 资源请求失败。打开控制台的时候,
会根据当前登录用户在目标集群中通过 CSR 资源申请证书,如果集群版本太低或者没有开启此功能 Controller,
会导致证书申请失败,从而无法连接到目标集群。
申请证书流程请参考 [Kubernetes 官网文档](https://kubernetes.io/docs/reference/access-authn-authz/certificate-signing-requests/)。
**解决办法:**
- 如果集群版本大于 v1.18,请检查 kube-controller-manager 是否开启 csr 功能,确保以下的 controller 是否正常开启
```shell
ttl-after-finished,bootstrapsigner,csrapproving,csrcleaner,csrsigning
```
- 低版本集群目前解决方案只有升级版本
[返回顶部 :arrow_up:](#top)
## 创建和接入集群的问题
1. 如何重置创建的集群?
创建的集群分为两种情况:
- 创建失败的集群:在创建集群的过程中,因为参数设置错误导致集群创建失败,这种情况可以在安装失败的集群选择重试,然后重新设置参数重新创建。
- 已经成功创建的集群:这种集群可以先卸载集群,然后重新创建集群。卸载集群需要关闭集群保护的功能才能卸载集群。
![关闭集群保护](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/kpanda/images/faq1101.png)
![卸载集群](https://docs.daocloud.io/daocloud-docs-images/docs/zh/docs/kpanda/images/faq1102.png)
[返回顶部 :arrow_up:](#top)
1. 接入集群安装插件失败
离线环境接入的集群,在安装插件之前,需要先配置 CRI 代理仓库,以忽略 TLS 验证(所有节点都需要执行)。
=== "Docker"
1. 修改文件 `/etc/docker/daemon.json`
2. 加入 "insecure-registries": ["172.30.120.243","temp-registry.daocloud.io"],
修改之后内容如下:
![修改配置](../images/faq01.png)
3. 重启 docker
```shell
systemctl restart docker
systemctl daemon-reload
```
=== "containerd"
1. 修改 `/etc/containerd/config.toml`
2. 修改之后内容如下:
```shell
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["https://registry-1.docker.io"]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."temp-registry.daocloud.io"]
endpoint = ["http://temp-registry.daocloud.io"]
[plugins."io.containerd.grpc.v1.cri".registry.configs."http://temp-registry.daocloud.io".tls]
insecure_skip_verify = true
```
![修改配置](../images/faq02.png)
3. 注意空格和换行符,确保配置正确,修改完成之后执行
```shell
systemctl restart containerd
```
1. 创建集群时,在高级设置中启用 **为新建集群内核调优** ,集群创建为什么会失败
1. 检查内核模块 conntrack 是否加载,执行如下命令:
```shell
lsmod |grep conntrack
```
2. 如果返回为空,表示没有加载。重新加载,执行如下命令:
```shell
modprobe ip_conntrack
```
!!! note
如果内核模块进行了升级操作,也会导致集群创建失败。
1. 集群解除接入后,`kpanda-system` 命名空间一直处于 Terminating 状态。
请检查 APIServices 服务状态是否正常,查看命令如下。如果当前状态为 false,请尝试修复 APIServices 或删除该服务。
```shell
kubectl get apiservices
```
[返回顶部 :arrow_up:](#top)