micro k8s

## 安装

### 前置条件: 要先安装好snap
```bash


# 1、首先安装COPR插件和EPEL,通过添加epel存储库并安装copr yum插件来启动安装,运行如下命令:
yum -y install epel-release

yum -y install yum-plugin-copr

# 2、然后添加repo:
yum -y copr enable ngompa/snapcore-el7

# 3、添加存储库后,安装snapd软件包,运行以下命令:

yum -y install snapd

# 4、等待安装完成后启用snapd socket:

systemctl enable --now snapd.socket

# 5、限制需要从/snap到/var/lib/snapd/snap下的/snap或符号链接下的snaps,为它创建一个符号链接,如下命令:

ln -s /var/lib/snapd/snap /snap


做到这里,Snapd已经安装完成了。



```

### 安装micro-k8s

```
sudo snap install microk8s --classic

```

### 设置 K8s 命令别名(alias)

```
# 设置 K8s 命令别名(alias)
sudo snap alias microk8s.kubectl kubectl

# 将高频使用的 containerd 的主要命令 ctr 
sudo snap alias microk8s.ctr ctr

# 以及 “helm / heml3” 这俩命令:
sudo snap alias microk8s.helm helm
sudo snap alias microk8s.helm3 helm3
```

### 解决 MicroK8s 安装后的常见问题

[参考地址](https://blog.csdn.net/soulteary/article/details/127342346)

#### 解决 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-nnshm                          0/1     Init:0/2   0          9m
# kube-system   calico-kube-controllers-67774c44db-mcmvx   0/1     Pending    0          9m

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

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

# 命令执行完毕,发现日志中容器运行原来是卡在了 k8s.gcr.io/pause:3.7 这个镜像的下载:
------------------------
# Warning  FailedCreatePodSandBox  2m52s (x6 over 7m51s)  kubelet  Failed to create pod sandbox: rpc error: code = Unknown desc = failed to get sandbox image "k8s.gcr.io/pause:3.7": failed to pull image "k8s.gcr.io/pause:3.7": failed to pull and unpack image "k8s.gcr.io/pause:3.7": failed to resolve reference "k8s.gcr.io/pause:3.7": failed to do request: Head "https://k8s.gcr.io/v2/pause/manifests/3.7": dial tcp 142.xxx.xxx.xxx:443: i/o timeout

```
##### 解决方案:

```

# 安装dodcker # 安装dodcker 

apt-get install docker.io

# 拉取 pause-amd64 版本只有3.1 

docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause-amd64:3.1 k8s.gcr.io/pause:$PAUSE_VERSION

# 修改镜像名
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause-amd64:3.1 k8s.gcr.io/pause:3.7

# 导出tar包
docker save k8s.gcr.io/pause:3.7 -o pause-3.7.tar

# 导入到containerd
ctr images import pause-3.7.tar 

------------------------
# unpacking k8s.gcr.io/pause:3.7 (sha256:dbd83f9b94c312efd98b95b09ced85479fbba3c3b2d05a5c3e09c9cfa4421ff6)...done

# 重启microk8s
microk8s stop && microk8s start

```

##### 解决方案二:
[简书链接](https://www.jianshuctl.com/p/95b591391165)