k3s 是一个可以单机运行、最低内存要求仅有 512M 的轻量级 k8s 发行版。
下面的使用经验基于 v1.18.2+k3s1。
安装
设置 Docker Hub 的镜像,可以让你避开官方 Docker Hub 的频率限制和缓慢的速度。使用什么镜像,参考这篇 文章。在安装 k3s 之前,先在 /etc/rancher/k3s/registries.yaml
写入:
mirrors:
docker.io:
endpoint:
- "https://<look-enpass>.mirror.aliyuncs.com"
同时在 /etc/rancher/k3s/config.yaml
写入这些配置,使得非 root 用户也可以使用 kubectl
:
write-kubeconfig-mode: "0644"
由于使用 Traefik 时需要修改默认的配置,因此不要让 K3s 自动安装 Traefik,不然每次重启 k3s 时会覆盖掉你在 /var/lib/rancher/k3s/server/manifests/traefik.yaml
中的修改:
curl -sfL https://get.k3s.io | sh -s - server --no-deploy traefik
稍等片刻后,检查结点是否 ready:
kubectl get nodes
k8s yaml 位置
将各种 YAML 文件放进这个目录,效果等同于 kubectl apply -f
:
/var/lib/rancher/k3s/server/manifests
Traefik
将 GitHub 上的 traefik.yaml 文件放入 /var/lib/rancher/k3s/server/manifests/
中,稍等片刻,容器起来后就可正常运行。
同时参考 Traefik。
问题
我在 Shopee 的一台 VM 安装 k3s 时,kubectl get pods -n kube-system
发现所有系统 pod 都起不来(都在 creating 状态);查 event 或者 journalctl 时会发现有这样的错:
RunPodSandbox from runtime service failed: rpc error: code = Unknown desc = failed to get sandbox image "docker.io/rancher/pause:3.1": failed to pull image "docker.io/rancher/pause:3.1": failed to pull and unpack image "docker.io/rancher/pause:3.1": failed to resolve reference "docker.io/rancher/pause:3.1": failed to do request: Head "https://registry-1.docker.io/v2/rancher/pause/manifests/3.1": dial tcp: lookup registry-1.docker.io: no such host
抓包看了一下,containerd 会发两个 DNS 请求,分别查 IPv4 和 IPv6 地址。IPv4 的能查到,IPv6 的查不到。然后就会报错。这可能跟 go 的这个 issue 有关。我没有深究原因,尝试往 /etc/systemd/system/k3s.service.env
写入了这行,再重启 k3s,解决了:
GODEBUG=netdns=go