|
| 1 | +--- |
| 2 | +title: "常见问题" |
| 3 | +keywords: [Sealos, 镜像构建, Kubernetes运行时, 版本兼容性, 文件目录位置] |
| 4 | +description: 了解Sealos常见问题及解决方案,包括镜像构建、Kubernetes运行时选择、版本兼容性和文件目录位置调整。 |
| 5 | +--- |
| 6 | + |
| 7 | +使用 Sealos 时,您可能会遇到一些问题。以下是一些常见问题的答案和解决方法。 |
| 8 | + |
| 9 | +## 镜像构建问题 |
| 10 | + |
| 11 | +### Q1:在构建阶段如何设置代理服务? |
| 12 | + |
| 13 | +在执行构建命令时,可以通过设置 HTTP_PROXY 环境变量来配置代理服务。 |
| 14 | + |
| 15 | +```shell |
| 16 | +HTTP_PROXY=socket5://127.0.0.1:7890 sealos build xxxxx |
| 17 | +``` |
| 18 | + |
| 19 | +### Q2:如何启用 buildah 的调试日志? |
| 20 | + |
| 21 | +若需要查看 buildah 的调试日志,可以通过设定 `BUILDAH_LOG_LEVEL` 环境变量实现。 |
| 22 | + |
| 23 | +```shell |
| 24 | +BUILDAH_LOG_LEVEL=debug sealos images |
| 25 | +``` |
| 26 | + |
| 27 | +### Q3:如何在 Pod 中执行 Sealos 构建? |
| 28 | + |
| 29 | +若在 Pod 中执行 Sealos 构建,请按以下步骤操作: |
| 30 | + |
| 31 | +1. 在 Pod 中构建镜像,可用以下 YAML 配置创建 Deployment。 |
| 32 | + |
| 33 | +```yaml |
| 34 | +apiVersion: apps/v1 |
| 35 | +kind: Deployment |
| 36 | +metadata: |
| 37 | + labels: |
| 38 | + app: sealoscli |
| 39 | + name: sealoscli |
| 40 | +spec: |
| 41 | + replicas: 1 |
| 42 | + selector: |
| 43 | + matchLabels: |
| 44 | + app: sealoscli |
| 45 | + strategy: {} |
| 46 | + template: |
| 47 | + metadata: |
| 48 | + labels: |
| 49 | + app: sealoscli |
| 50 | + spec: |
| 51 | + containers: |
| 52 | + - image: #用你的sealos镜像替换 |
| 53 | + name: sealoscli |
| 54 | + stdin: true |
| 55 | + stdinOnce: true |
| 56 | + securityContext: |
| 57 | + privileged: true |
| 58 | +``` |
| 59 | +
|
| 60 | +2. 创建 Dockerfile。以下是一个例子,根据需要进行修改。 |
| 61 | +
|
| 62 | +```dockerfile |
| 63 | +FROM bitnami/minideb:buster |
| 64 | + |
| 65 | +ARG TARGETOS |
| 66 | +ARG TARGETARCH |
| 67 | + |
| 68 | +LABEL from=bitnami/minideb:buster platform=rootcloud team=oam tag=buster name=base |
| 69 | + |
| 70 | +RUN sed -i "s@http://deb.debian.org@http://mirrors.aliyun.com@g" /etc/apt/sources.list && sed -i "s@http://security.debian.org@http://mirrors.aliyun.com/debian-security@g" /etc/apt/sources.list |
| 71 | +RUN install_packages curl iputils-ping net-tools telnet procps vim wget jq |
| 72 | + |
| 73 | +ENV LANG=C.UTF-8 |
| 74 | +ENV LANGUAGE=C.UTF-8 |
| 75 | +ENV LC_ALL=C.UTF-8 |
| 76 | +ENV TZ=Asia/Shanghai |
| 77 | +``` |
| 78 | + |
| 79 | +3. 在 Pod 中执行构建命令。 |
| 80 | + |
| 81 | +```shell |
| 82 | +sealos build --arch arm64 --build-arg TARGETOS=linux --build-arg TARGETARCH=arm64 -t test -f Dockerfile . |
| 83 | +``` |
| 84 | + |
| 85 | +### Q4:如何使用其他构建工具构建集群镜像? |
| 86 | + |
| 87 | +如果您想使用 Docker 或 Podman 等其他容器工具来构建集群镜像,您可以借助 [sreg](https://github.com/labring/sreg) 来缓存镜像。 |
| 88 | + |
| 89 | +以下是操作步骤: |
| 90 | + |
| 91 | +1. 安装 sreg: |
| 92 | + ```shell |
| 93 | + wget https://github.com/labring/sreg/releases/download/v0.1.1/sreg_0.1.1_linux_amd64.tar.gz |
| 94 | + tar -xzf sreg_0.1.1_linux_amd64.tar.gz sreg |
| 95 | + mv sreg /usr/bin/ |
| 96 | + ``` |
| 97 | +2. 缓存镜像: |
| 98 | + ```shell |
| 99 | + sreg save --registry-dir=registry . |
| 100 | + ``` |
| 101 | +3. 构建集群镜像: |
| 102 | + ```shell |
| 103 | + docker build -t xxxx -f Sealfile . |
| 104 | + ``` |
| 105 | + |
| 106 | +### Q5:执行 Sealos 构建时遇到“lgetxattr /var/lib/containers/storage/overlay/0c2afe770ec7870ad4639f18a1b50b3a84718f95c8907f3d54e14dbf0a01d50d/merged/dev/ptmx:no such device”错误? |
| 107 | + |
| 108 | +这个问题可能与 `fuse-overlayfs` 的版本有关。建议您从[这里](https://github.com/containers/fuse-overlayfs/releases)下载最新版本下载并替换 `/bin/fuse-overlayfs`。 |
| 109 | + |
| 110 | +## 运行时选择问题 |
| 111 | + |
| 112 | +### Q1:如何选择 Kubernetes 运行时? |
| 113 | + |
| 114 | +Sealos 会根据您选择的镜像决定使用哪种运行时。如果选择了 kubernetes-docker 镜像,Sealos 将使用 Docker 作为运行时;如果选择了 kubernetes-crio 镜像,Sealos 将使用 CRI-O 作为运行时。 |
| 115 | + |
| 116 | +## 版本兼容性问题 |
| 117 | + |
| 118 | +### Q1:报错:"Applied to cluster error:failed to init exec auth.sh failed exit status 127"? |
| 119 | + |
| 120 | +此问题常因您使用的 sealos 版本和镜像版本不匹配造成。请确认您的镜像版本和 sealos 的版本是匹配的。 |
| 121 | +例如,若您正使用形如 kubernetes:v1.xx.x 的版本,可能需要升级 sealos,特别是在使用较老版本的 sealos,而 sealos 集群镜像则使用了最新版时。 |
| 122 | +另一种解决方法是选择对应版本的 sealos 镜像。比如,如果您的 sealos 版本是 4.1.3,那么集群镜像应选择形如 kuberntes:v1.24.0-4.1.3 的版本。 |
| 123 | +确保镜像版本和 sealos 版本的匹配,可以帮助避免此类问题。 |
| 124 | + |
| 125 | +### Q2:如果您在集群中新增了其他域名,或者修改了 service 的 CIDR,并且在添加 master 时出现了错误 |
| 126 | + |
| 127 | +为了解决这个问题,Sealos 团队在 4.2.0 版本进行了相应的修复。具体的修复内容和讨论可以在这个 pull request 中查看:https://github.com/labring/sealos/pull/2943。 |
| 128 | + |
| 129 | +所以,如果您遇到了这个问题,我们建议您升级到 Sealos 4.2.0 版本。更新后的版本应该能够正确处理这些变更,并且在添加 master 时不会出现错误。 |
| 130 | + |
| 131 | +## 文件和目录位置问题 |
| 132 | + |
| 133 | +### Q1:如何修改 `/root/.sealos` 默认目录的存储位置? |
| 134 | + |
| 135 | +若需修改默认的存储位置,可以设置 SEALOS_RUNTIME_ROOT 环境变量,然后运行 sealos 命令。建议您将这个环境变量设置为全局的,这样在其他命令或场景中也可以方便使用。 |
| 136 | + |
| 137 | +```shell |
| 138 | +export SEALOS_RUNTIME_ROOT=/data/.sealos |
| 139 | +sealos run labring/kubernetes:v1.24.0 |
| 140 | +``` |
| 141 | + |
| 142 | +### Q2:如何修改 `/var/lib/sealos` 默认目录的存储位置? |
| 143 | + |
| 144 | +若需修改默认的存储位置,可以设置 SEALOS_DATA_ROOT 环境变量,然后运行 sealos 命令。同样,建议您将这个环境变量设置为全局的。 |
| 145 | + |
| 146 | +```shell |
| 147 | +export SEALOS_DATA_ROOT=/data/sealos |
| 148 | +sealos run labring/kubernetes:v1.24.0 |
| 149 | +``` |
| 150 | + |
| 151 | +### Q3:如何修改 Sealos 镜像数据和状态的存储路径? |
| 152 | + |
| 153 | +> 在使用 Sealos 集群时,可能需要改变默认的镜像数据存储路径和状态数据的存储路径。默认情况下,这些数据被存储在 `/etc/containers/storage.conf` 文件定义的位置。 |
| 154 | +
|
| 155 | +1. **查看当前存储配置** |
| 156 | + 首先,我们可以使用下面的命令来查看当前的镜像存储配置: |
| 157 | + ``` |
| 158 | + sealos images --debug |
| 159 | + ``` |
| 160 | + 这个命令会打印出包含当前存储配置的文件,例如: |
| 161 | + ``` |
| 162 | + 2023-06-07T16:27:02 debug using file /etc/containers/storage.conf as container storage config |
| 163 | + REPOSITORY TAG IMAGE ID CREATED SIZE |
| 164 | + ``` |
| 165 | +2. **修改镜像数据存储路径** |
| 166 | + 如果你希望更改镜像数据的存储路径,你可以编辑 `/etc/containers/storage.conf` 文件。在这个文件中,找到并修改 `graphroot` 字段设置为新的路径。例如: |
| 167 | + ``` |
| 168 | + vim /etc/containers/storage.conf |
| 169 | + ``` |
| 170 | + 在编辑器中,将 `graphroot` 字段的值修改为你希望的新路径。 |
| 171 | +3. **修改状态数据存储路径** |
| 172 | + 参考 Buildah 的设计,Sealos 同样提供了状态数据存储路径的设置。在同样的配置文件 `/etc/containers/storage.conf` 中,找到并修改 `runroot` 字段为新的路径。 |
| 173 | + |
| 174 | +通过以上步骤,你可以将 Sealos 集群的镜像数据和状态数据保存到新的地址。每次运行 Sealos 命令时,它都将使用你在 `graphroot` 和 `runroot` 中设置的新路径来分别存储镜像数据和状态数据。 |
| 175 | + |
| 176 | +### Q4:ssh 传输文件时,如何禁止检查文件的 md5? |
| 177 | + |
| 178 | +在网络环境良好时,禁用 md5 检查可以极大提升传输速度。若不想在 ssh 传输文件时检查文件的 md5,可将 SEALOS_SCP_CHECKSUM 环境变量设置为 false 以禁用此功能。建议将此环境变量设为全局,以便在多场景下使用。 |
| 179 | + |
| 180 | +```shell |
| 181 | +export SEALOS_SCP_CHECKSUM=false |
| 182 | +sealos run labring/kubernetes:v1.24.0 |
| 183 | +``` |
| 184 | + |
| 185 | + |
| 186 | +## 其他问题 |
| 187 | + |
| 188 | +### Q1:image-cri-shim 导致端口大量占用,耗尽服务器 socket 资源? |
| 189 | + |
| 190 | +出现此问题时,可通过以下命令解决: |
| 191 | + |
| 192 | +```shell |
| 193 | +wget https://github.com/labring/sealos/releases/download/v4.2.0/sealos_4.2.0_linux_amd64.tar.gz && tar xvf sealos_4.2.0_linux_amd64.tar.gz image-cri-shim |
| 194 | +sealos exec -r master,node "systemctl stop image-cri-shim" |
| 195 | +sealos scp "./image-cri-shim" "/usr/bin/image-cri-shim" |
| 196 | +sealos exec -r master,node "systemctl start image-cri-shim" |
| 197 | +sealos exec -r master,node "image-cri-shim -v" |
| 198 | +``` |
| 199 | + |
| 200 | +### Q2:报错 "[ERROR FileAvailable--etc-kubernetes-kubelet.conf]: /etc/kubernetes/kubelet.conf already exists" |
| 201 | + |
| 202 | +此问题可通过升级至 Sealos 4.1.7+来解决。 |
| 203 | + |
| 204 | +### Q3:报错:"function" semverCompare "not defined" |
| 205 | + |
| 206 | +此问题可通过升级至 Sealos 4.1.4+来解决。 |
| 207 | + |
| 208 | +我们希望这些解答能帮助您解决在使用 Sealos 过程中遇到的问题。如果还有其他问题,欢迎随时提问。 |
| 209 | + |
| 210 | +## 使用技巧 |
| 211 | + |
| 212 | +### Q1:如何清理 Sealos 集群的缓存文件 |
| 213 | + |
| 214 | +> 在使用 Sealos 集群时,安装过程中可能会在本地存储一些缓存文件,这些文件会重复占用磁盘空间。那么,如何清理这些缓存文件以释放磁盘空间呢? |
| 215 | +
|
| 216 | +我们提供了一个非常简单的解决方案,只需要执行以下命令: |
| 217 | + |
| 218 | +```shell |
| 219 | +sealos unmount --all && sealos rm --all |
| 220 | +``` |
| 221 | +这个命令的作用是移除所有缓存的 Sealos 集群镜像文件,以及所有的相关挂载点。--all 选项表示处理所有相关文件和挂载点。 |
| 222 | +执行这个命令后,所有 Sealos 集群的缓存文件就会被清理掉,从而释放出被它们占用的磁盘空间。 |
| 223 | +这是一个非常有用的技巧,特别是对于在磁盘空间有限的环境中运行 Sealos 集群的用户来说。在你感觉磁盘空间被占用过多时,不妨尝试执行这个命令来释放一些空间。 |
| 224 | +请注意,这个命令只会删除缓存文件,不会影响已经运行的集群。也就是说,执行这个命令后,你的集群仍然可以正常运行。 |
0 commit comments