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"
- 找到 sandbox_image 这个配置项,将value改成
- 将我们修改后的配置文件,移动到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 debug
或delve 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
- kubebuilder的github issues中,修复过这个问题
- 修复方法:打开Makefile,在
manifests
命令处,修改crd
为crd:maxDescLen=0
.PHONY: manifests manifests: controller-gen ## Generate WebhookConfiguration, ClusterRole and CustomResourceDefinition objects. $(CONTROLLER_GEN) rbac:roleName=manager-role crd:maxDescLen=0 webhook paths="./..." output:crd:artifacts:config=config/crd/bases
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