排错方案积累

云原生学习路线导航页(持续更新中)

kubernetes & docker

1、重启docker或重启kubernetes后,发现kubernetes server端启动失败

  • journalctl -xe 查看系统日志,包括一些错误、警告、服务故障等,需要管理员权限
  • 如果报错:故障error: failed to run Kubelet: failed to create kubelet: misconfiguration: kubelet cgroup driver: “

2、pod一直处于ContainerCreating,发现sandbox镜像 registry.k8s.io/pause:3.6 拉取不到

  • 查看containerd是否已经有了配置文件:ls /etc/containerd,如果有config.toml,就根据下面的内容修改配置文件;如果还没有config.toml,就生成一下,再修改
    • containerd默认没有产生配置文件,而是直接使用默认配置,我们先让containerd把默认配置写入一个文件中,然后我们再修改这个配置文件让它生效
    • containerd 根据默认配置生成配置文件
      containerd config default > ~/config.toml
      
    • 编辑 ~/config.toml,加入这两行:
      [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
        endpoint = ["https://hub-mirror.c.163.com","https://registry-1.docker.io"]
      
    • 加完之后是这样的,大家对照一下就知道加在哪里了:
      [plugins."io.containerd.grpc.v1.cri".image_decryption]
        key_model = "node"
      
      [plugins."io.containerd.grpc.v1.cri".registry]
        config_path = ""
      
        [plugins."io.containerd.grpc.v1.cri".registry.auths]
      
        [plugins."io.containerd.grpc.v1.cri".registry.configs]
      
        [plugins."io.containerd.grpc.v1.cri".registry.headers]
      
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
          [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
            endpoint = ["https://hub-mirror.c.163.com","https://registry-1.docker.io"]
      
      [plugins."io.containerd.grpc.v1.cri".x509_key_pair_streaming]
        tls_cert_file = ""
        tls_key_file = ""
      
    • 另外,还要修改一个地方,就是sandbox_image的镜像
      • 找到 sandbox_image 这个配置项,将value改成 registry.aliyuncs.com/google_containers/pause:3.6
      • 原镜像 registry.k8s.io/pause:3.6 我们拉取不到,创建的pod会报错 拉取pause镜像失败,一直处于 ContainerCreating 状态。
      sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.6"
      
    • 将我们修改后的配置文件,移动到containerd目录下
      mv ~/config.toml /etc/containerd/config.toml
      
    • 重启containerd,让配置文件生效
      systemctl restart containerd
      
    • 查看containerd状态,确保已经active了
      systemctl containerd status
      

3、使用Delve+VSCode远程调试,VSCode连接 远程Delve Debug Server失败

  • 需要检查远程服务器上,端口是否开放了。
    • 首先,在远程服务器上,本地执行一下 dlv connect 127.0.0.1:port,port是你启动的 Delve Debug Server 的端口。看是否能连接上
    • 如果本地可以,但是远程不行,那大概率是端口没有开放
    • 或者在本地也可以使用 telnet 命令检测一下端口是否畅通
  • 使用 ufw 命令开放端口
    • 先查看一下当前开放了哪些端口 ufw status。如果你的debug server的端口没有开放,那本机上的VSCode肯定是连不上delve启动的debug server的

      root@graham-virtual-machine:~# ufw status
      状态: 激活
      
      至                          动作          来自
      -                          --          --
      22                         ALLOW       Anywhere
      22 (v6)                    ALLOW       Anywhere (v6)
      
    • 开放端口 ufw allow port

      root@graham-virtual-machine:~# ufw allow 12345
      规则已添加
      规则已添加 (v6)
      
    • 再看一下开放端口,可以看到,12345已经开启了

      root@graham-virtual-machine:~# ufw status
      状态: 激活
      
      至                          动作          来自
      -                          --          --
      22                         ALLOW       Anywhere
      12345                      ALLOW       Anywhere
      22 (v6)                    ALLOW       Anywhere (v6)
      12345 (v6)                 ALLOW       Anywhere (v6)
      
    • 重启一下你的 Delve Debug Server,就可以生效了。如果你担心你重启后端口又变了,可以在执行 delve debugdelve exec 的时候,使用 --listen 参数指定一个固定的端口,然后使用 ufw allow 把这个端口开放出来。以后重启也不会改变debug server的端口了

4、kubectl expose pod pod-name 报错:error: couldn't retrieve selectors via --selector flag or introspection: the pod has no labels and cannot be exposed

  • k8s的service,selector是用labels去关联要负载哪些pod的。
  • 如果你指定的pod没有设置label,service就无法知道管理哪些pod,因此为一个pod创建service的时候,这个pod的labels必须不能为空。
  • 给这个pod加上一些需要的labels就好了

5、operator开发后,make install报错metadata.annotations: Too long: must have at most 262144 bytes

6、获取镜像 gcr.io/distroless/static:nonroot 报错

  • gcr.io是google提供的镜像仓库,国内访问不到。如果你的机器无法科学上网,则会在这一步报错,因为压根连不上这个镜像仓库,也就无法获取其中的镜像了
  • 解决方法: 国内有人下载了 gcr.io/distroless/static:nonroot,改了名称后上传到了dockerhub
    • 我们只需要下载 dockerhub 上的镜像,再把名称改回 gcr.io/distroless/static:nonroot
    • Dockerfile执行的时候,就可以直接在本地找到 gcr.io/distroless/static:nonroot,自然就不会报错了
    [root@master guestbook]# docker pull katanomi/distroless-static:nonroot
    [root@master guestbook]# docker tag  katanomi/distroless-static:nonroot  gcr.io/distroless/static:nonroot
    [root@master guestbook]# docker images | grep gcr
    gcr.io/distroless/static                                          nonroot                51a1a0f285f9        19 months ago       2.97MB
    

数据库

1、执行sql文件,报错:Unknown collation: utf8mb4_0900_ai_ci

  • 原因:utf8mb4_0900_ai_ci是从mysql8.0.1开始支持的,如果我们安装的mysql服务端版本低,是没有这个编码的,所以做一个修改即可。
  • 解决方案:
    • 将该sql文件中的utf8mb4_0900_ai_ci全部替换成utf8mb4_general_ci
    • 参考文章:https://tecadmin.net/resolved-unknown-collation-utf8mb4_0900_ai_ci/

IDE

1、idea/goland中输入中文变成繁体字

  • 搜狗输入法的简繁体切换快捷键:ctrl+shift+f,与idea/goland进行全局查找的快捷键冲突。
  • 再按一下ctrl+shift+f,就可以切换成简体

2、go项目启动报错:unsupported architecture of windows/i386 - only windows/amd64 is supported

  • cdm命令框输入一下命令:go env -w GOARCH=amd64
  • 参考文章:https://www.cnblogs.com/andrewlovemeimei/p/15852931.html
  • 22
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值