Ubuntu下安装microk8s用代理解决无法拉取镜像问题

首先安装microk8s:

复制代码
sudo snap install microk8s --classic

得到输出:

复制代码
microk8s (1.28/stable) v1.28.7 from Canonical✓ installed

设置 K8s 命令别名(alias)

MicroK8s 支持的命令中,我们会相对高频的使用 microk8s.kubectl 这个命令,这个命令相比较官方默认命令 kubectl 长了不少,使用起来不是特别方便。我们可以通过 snap alias 来给命令起个别名:

复制代码
sudo snap alias microk8s.kubectl kubectl

当命令执行完毕,我们将得到下面的日志输出,表示创建命令别名成功:

复制代码
Added:
  - microk8s.kubectl as kubectl

接下来,我们就能够直接在系统中使用 kubectl 命令啦。

类似的,我们还可以将高频使用的 主要命令 从 microk8s中"映射"出来:

复制代码
sudo snap alias microk8s.ctr ctr
sudo snap alias microk8s.helm helm
sudo snap alias microk8s.helm3 helm3

解决 MicroK8s 运行权限问题

完成安装之后,想要在非 root 环境下使用,还需要做一些额外的工作。执行 microk8s.version ,我们可以得到下面的包含"引导信息"的日志:

复制代码
Insufficient permissions to access MicroK8s.
You can either try again with sudo or add the user soulteary to the 'microk8s' group:

    sudo usermod -a -G microk8s xxx
    sudo chown -f -R xxx ~/.kube

After this, reload the user groups either via a reboot or by running 'newgrp microk8s'.

按提示执行命令就可以了,不再复述。

解决 MicroK8s 无法正常运行的问题

在解决上面的问题之后,当我们执行 microk8s status ,可能会得到类似下面的日志输出,告诉我们程序并没有按照预期运行:

复制代码
microk8s is not running. Use microk8s inspect for a deeper inspection.

我们可以执行 microk8s.inspect 查看是否有报错信息,如果没有任何报错,可以来通过 kubectl 来进一步排查问题到底出现在了哪里。

先通过 kubectl 获取所有 pods 的运行状况:

复制代码
kubectl get pods --all-namespaces

命令执行完毕,将得到类似下面的日志结果:

复制代码
NAMESPACE     NAME                                     READY   STATUS     RESTARTS   AGE
kube-system   calico-node-crhgl                        0/1     Init:0/2   0          3m56s
kube-system   calico-kube-controllers-77bd7c5b-xnd48   0/1     Pending    0          3m56s
kube-system   coredns-864597b5fd-jmb4m                 0/1     Pending    0          3m56s

根据日志可以看到,有一个 pod 的状态是 "Init:0/2",另外一个是"Pending"。这个排队启动的问题,是导致我们的 MicroK8s 没有正常运行的主要原因。

接着,使用 kubectl describe pod 来查看到底是为什么:

复制代码
kubectl describe pod calico-node-crhgl -n kube-system

输出信息比较多,最后面会有这么几行:

复制代码
Events:
  Type     Reason                  Age                    From               Message
  ----     ------                  ----                   ----               -------
  Normal   Scheduled               5m13s                  default-scheduler  Successfully assigned kube-system/calico-node-crhgl to ibm-johnny-z13
  Warning  FailedMount             5m13s                  kubelet            MountVolume.SetUp failed for volume "kube-api-access-mpscq" : configmap "kube-root-ca.crt" not found
  Warning  FailedCreatePodSandBox  3m13s (x2 over 4m42s)  kubelet            Failed to create pod sandbox: rpc error: code = Unknown desc = failed to get sandbox image "registry.k8s.io/pause:3.7": failed to pull image "registry.k8s.io/pause:3.7": failed to pull and unpack image "registry.k8s.io/pause:3.7": failed to resolve reference "registry.k8s.io/pause:3.7": failed to do request: Head "https://us-west2-docker.pkg.dev/v2/k8s-artifacts-prod/images/pause/manifests/3.7": dial tcp 142.251.8.82:443: i/o timeout
  Warning  FailedCreatePodSandBox  22s (x5 over 4m)       kubelet            Failed to create pod sandbox: rpc error: code = DeadlineExceeded desc = failed to get sandbox image "registry.k8s.io/pause:3.7": failed to pull image "registry.k8s.io/pause:3.7": failed to pull and unpack image "registry.k8s.io/pause:3.7": failed to resolve reference "registry.k8s.io/pause:3.7": failed to do request: Head "https://us-west2-docker.pkg.dev/v2/k8s-artifacts-prod/images/pause/manifests/3.7": dial tcp 142.251.8.82:443: i/o timeout

看到failed to pull image "registry.k8s.io/pause:3.7"这个关键信息了,就明白registry.k8s.io被墙了,于是设置一下proxy,前提是我司有一个代理于是打开sudo gedit /var/snap/microk8s/current/args/containerd-env

,把里面的HTTPS_PROXY和NO_PROXY两行打开,填上真确的值,例如:

复制代码
HTTPS_PROXY=http://proxy.emea.ibm.com:8080
NO_PROXY=10.0.0.0/8,192.168.0.0/16,127.0.0.1,172.16.0.0/16

然后再重启microk8s:

复制代码
microk8s stop && microk8s start

然后再用microk8s status查看,一切正常了。

注:网上说自已用ctr image pull 自己手动拉相关镜像,我拉下来了,但它还是报错,不知道为什么。

相关推荐
极客先躯21 小时前
高级java每日一道面试题-2026年01月18日-实战篇[Docker]-如何清理仓库中的旧镜像?
java·运维·docker·容器
ModestCoder_21 小时前
windows/ubuntu解决挂梯子但是codex reconnecting五次的问题
linux·windows·ubuntu
禹凕21 小时前
Linux基础——环境
linux·运维·服务器·ubuntu
张忠琳1 天前
【kubernetes v1.21】(controller-manager part 1)kube-controller-manager 核心架构与启动流程
云原生·架构·kubernetes
木雷坞1 天前
Docker Hub、GHCR、Quay 混在一起后,镜像源要分开测
运维·docker
qq_452396231 天前
第十五篇:《Docker 与 Kubernetes 集成:从 Swarm 到 K8s 的迁移》
docker·容器·kubernetes
HackTwoHub1 天前
K8s综合渗透测试工具,集成信息搜集、权限逃逸、横向移动,一站式搞定全流程渗透测试工作
人工智能·安全·web安全·云原生·容器·kubernetes·系统安全
做个文艺程序员1 天前
第05篇:K8s CI/CD 全流程:GitOps × ArgoCD × Harbor——Java SaaS 从代码提交到生产部署一键直达
ci/cd·kubernetes·argocd
lpfasd1231 天前
docker中默认网络的作用和注意事项
网络·docker·容器
IT策士1 天前
第 37 篇 k8s之调度进阶:亲和性、污点与容忍
云原生·容器·kubernetes