首页 > 其他分享 >Microk8s 安装 与使用指南

Microk8s 安装 与使用指南

时间:2022-12-14 12:34:53浏览次数:165  
标签:k8s pullk8s microk8s Microk8s metrics io ubuntu 使用指南 安装

我们已经知道,​​Kubernetes​​ 是基于容器的应用程序的首选编排平台,可以自动部署和扩展这些应用程序,并简化维护操作。但是,Kubernetes也有其自身的复杂性挑战。那么,企业如何利用容器化来解决物联网的复杂性,而不会最终导致Kubernetes更加复杂呢?

Canonical的​​MicroK8s​​​是一个功能强大的,云原生计算基金会认证的Kubernetes​​发行版​​。以下是一些关键原因,我觉得,为什么它已经成为一个强大的企业边缘计算平台:

  • 以快照包的形式交付:这些是用于桌面、云和 IoT 的应用程序包,易于安装,并通过自动更新进行保护,并且可以安装在任何支持 snap 的 Linux 发行版上。这使得MicroK8非常适合在构成物联网的各种硬件上运行。
  • 严格的限制:这确保了与底层操作系统的完全隔离,以及一个严格安全的生产级 Kubernetes 环境,所有这些都在一个小的占用空间内,非常适合边缘网关。
  • 生产级附加组件:​​Istio​​​,​​Knative​​​,​​CoreDNS​​​,​​Prometheus​​​,​​Jaeger​​​,​​Linkerd​​​,​​Cilium​​​和​​Helm​​可作为附加组件使用,这些附加组件易于设置,只需几行命令, 支持快速Enable/Disable。
  • Kubeflow​ 还可以作为 MicroK8s 的附加组件,用于改进人工智能 (AI) 和机器学习 (ML) 功能。

凭借其降低复杂性的能力,MicroK8s将加速物联网和边缘部署。将物联网设备视为分布式容器化应用程序,使开发人员能够专注于应用程序而不是基础架构,并使运营团队的生活更轻松。

MicroK8s 允许您将 Kubernetes 安装群集在一起,以便它们可以形成单个群集,并将工作负载放在一个或多个这些节点上。 简而言之,Kubernetes 是:

  • 便携式:公共云、私有云、混合云、多云
  • 可扩展:模块化、可插拔、可挂钩、可组合
  • 自我修复:自动放置、自动重启、自动复制、自动扩展

在本文中,我们将介绍可以在边缘,物联网和设备上运行的轻量级Kbernetes引擎​​MicroK8​​。microk8s是一个非常轻量级的k8s发行版,小巧轻量安装快速是他的特点,microk8s是使用snap包安装的,所以他在Ubuntu上的体验是最好的,毕竟microk8s是Canonical公司开发的产品。

以下内容来自:​​https://docs.microsoft.com/zh-cn/azure/architecture/operator-guides/aks/choose-bare-metal-kubernetes​

MicroK8 作为单个快照包交付,可在支持 Snap 支持的 Linux 计算机上轻松安装。 备用安装适用于 Windows、macOS 和 raspberry PI/ARM。 安装后,microk8s 会创建一个单节点群集,该群集可以使用 MicroK8s 工具进行管理。 它使用自己的 kubectl 打包,并且某些加载项可以启用 (,例如 helm、dns、Ingress、metallb ​​块等) ​​。 还支持多节点、Windows节点和高可用性 (HA) 方案。

注意事项:
  • Ubuntu:4 GB RAM、20 GB 磁盘空间
  • Windows:4 GB RAM、40 GB 磁盘空间
  • Windows工作负荷仅支持使用 Calico CNI 的 MicroK8s 群集。
  • MicroK8s 多节点群集上的每个节点都需要其自己的环境才能运行,无论是单个计算机上的单独 VM 还是容器,还是同一网络上的其他计算机。
  • 在某些 ARM 硬件上运行 MicroK8s 时,可能会出现困难。 参考 ​​文档​​ 以获取潜在的补救措施。

在国内由于众所周知的原因,安装microk8s后会发现 gcr.io的docker image无法下载的问题.(详细安装步骤参见 ​​https://microk8s.io/#quick-start​​​),首先需要安装 ​​pullk8s​​​ 工具,此工具可以通过 hub.docker.com 的 ​​opsdockerimage​​ 仓库下载k8s所需的 k8s.gcr.io 或 gcr.io 镜像,每天更新一次,包括所有image 的全平台的所有tags。

git clone ​​https://github.com/OpsDocker/pullk8s.git​

cd pullk8s

sudo cp pullk8s /usr/local/bin/pullk8s

sudo chmod +x /usr/local/bin/pullk8s

如果您需要修改 hostname,可执行如下指令:

修改 hostname
hostnamectl set-hostname your-new-host-name
查看修改结果
hostnamectl status

在下面的步骤中,我们将安装MicroK8s集群,它将安装一组有限的组件,如api-server,controller-manager,scheduler,kubelet,cni,kube-proxy。其他服务,如 kube-dns 和 dashboard 也可以使用 microk8s.enable 命令运行。

​​ubuntu@VM-0-8-ubuntu:~$​​ sudo snap install microk8s --classic --channel=1.21/stable
microk8s (1.21/stable) v1.21.11 from Canonical✓ installed

详细的权限设置可以 参看 microk8s 官网 ​​https://microk8s.io/docs​​, 出于简化的目的,我们可以用 kubectl 替代 microk8s.kubectl

ubuntu@VM-0-8-ubuntu:~$ sudo snap alias microk8s.kubectl kubectl
Added:
   - microk8s.kubectl as kubectl

检查microk8s 是否安装成功:

ubuntu@VM-0-8-ubuntu:~$ sudo kubectl get nodes -w
NAME           STATUS     ROLES    AGE     VERSION
microk8snode   NotReady   <none>   2m19s   v1.21.11-3+2bdf0a81ac1652
^Cubuntu@VM-0-8-ubuntu:~sudo kubectl describe node microk8snode
Name:               microk8snode
Roles:              <none>
Labels:             beta.kubernetes.io/arch=amd64
                     beta.kubernetes.io/os=linux
                     kubernetes.io/arch=amd64
                     kubernetes.io/hostname=microk8snode
                     kubernetes.io/os=linux
                     microk8s.io/cluster=true
Annotations:        node.alpha.kubernetes.io/ttl: 0
                     volumes.kubernetes.io/controller-managed-attach-detach: true
CreationTimestamp:  Sat, 30 Apr 2022 20:47:49 +0800
Taints:             node.kubernetes.io/not-ready:NoSchedule
Unschedulable:      false
Lease:
   HolderIdentity:  microk8snode
   AcquireTime:     <unset>
   RenewTime:       Sat, 30 Apr 2022 20:50:31 +0800
Conditions:
   Type             Status  LastHeartbeatTime                 LastTransitionTime                Reason                       Message
   ----             ------  -----------------                 ------------------                ------                       -------
   MemoryPressure   False   Sat, 30 Apr 2022 20:47:59 +0800   Sat, 30 Apr 2022 20:47:49 +0800   KubeletHasSufficientMemory   kubelet has sufficient memory available
   DiskPressure     False   Sat, 30 Apr 2022 20:47:59 +0800   Sat, 30 Apr 2022 20:47:49 +0800   KubeletHasNoDiskPressure     kubelet has no disk pressure
   PIDPressure      False   Sat, 30 Apr 2022 20:47:59 +0800   Sat, 30 Apr 2022 20:47:49 +0800   KubeletHasSufficientPID      kubelet has sufficient PID available
   Ready            False   Sat, 30 Apr 2022 20:47:59 +0800   Sat, 30 Apr 2022 20:47:49 +0800   KubeletNotReady              container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:Network plugin returns error: cni plugin not initialized
Addresses:
   InternalIP:  10.0.0.8
   Hostname:    microk8snode

发现错误是 container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:Network plugin returns error: cni plugin not initialized:具体原因就是拉镜像拉不到,具体可以看https://github.com/canonical/microk8s/issues/2042。
我们就需要使用pullk8s 工具来解决,这个工具依赖docker 来拉镜像,安装好docker,然后运行 pullk8s check --microk8s检查被屏蔽的 gcr.io 或 k8s.gcr.io 容器名称:

ubuntu@VM-0-8-ubuntu:~/pullk8s$ sudo snap install docker
docker 20.10.12 from Canonical✓ installed

ubuntu@VM-0-8-ubuntu:~/pullk8s$ sudo pullk8s check --microk8s
k8s.gcr.io/pause:3.1

使用 pullk8s 拉取失败的镜像,并导入到 pod 空间中

buntu@VM-0-8-ubuntu:~/pullk8s$ sudo pullk8s pull k8s.gcr.io/pause:3.1 --microk8s
Pull pause:3.1 ...
Pull pause:3.1 ...
3.1: Pulling from opsdockerimage/pause
67ddbfb20a22: Pull complete
Digest: sha256:f78411e19d84a252e53bff71a4407a5686c46983a2c2eeed83929b888179acea
Status: Downloaded newer image for opsdockerimage/pause:3.1
docker.io/opsdockerimage/pause:3.1
Untagged: opsdockerimage/pause:3.1

Untagged: opsdockerimage/pause@sha256:f78411e19d84a252e53bff71a4407a5686c46983a2c2eeed83929b888179acea
unpacking k8s.gcr.io/pause:3.1 (sha256:0968e31df05b727234888883ba43ccaa4ec75566113c75065af5a6124b62d93c)...done

查看Pod运行状态

ubuntu@VM-0-8-ubuntu:~/pullk8s$ sudo kubectl get nodes
NAME           STATUS   ROLES    AGE   VERSION
microk8snode   Ready    <none>   84m   v1.21.11-3+2bdf0a81ac1652

根据自己的需要,安装仪表板、DNS、私有化Registry、流量及路由控制器等k8s组件

ubuntu@VM-0-8-ubuntu:~/pullk8s$ sudo microk8s enable dashboard dns registry
Enabling Kubernetes Dashboard
Enabling Metrics-Server
clusterrole.rbac.authorization.k8s.io/system:aggregated-metrics-reader created
clusterrolebinding.rbac.authorization.k8s.io/metrics-server:system:auth-delegator created
rolebinding.rbac.authorization.k8s.io/metrics-server-auth-reader created
Warning: apiregistration.k8s.io/v1beta1 APIService is deprecated in v1.19+, unavailable in v1.22+; use apiregistration.k8s.io/v1 APIService
apiservice.apiregistration.k8s.io/v1beta1.metrics.k8s.io created
serviceaccount/metrics-server created
deployment.apps/metrics-server created
service/metrics-server created
clusterrole.rbac.authorization.k8s.io/system:metrics-server created
clusterrolebinding.rbac.authorization.k8s.io/system:metrics-server created

检查组件的Pod是否安装成功,发现metrics-server 镜像拉不到

ubuntu@VM-0-8-ubuntu:~/pullk8s$ sudo kubectl get pods -n kube-system
NAME                                         READY   STATUS             RESTARTS   AGE
dashboard-metrics-scraper-78d7698477-64rpc   1/1     Running            1          14m
hostpath-provisioner-566686b959-m8fff        1/1     Running            1          14m
kubernetes-dashboard-85fd7f45cb-5c8x7        1/1     Running            1          14m
calico-kube-controllers-f7868dd95-nxfzn      1/1     Running            1          101m
calico-node-58n5l                            1/1     Running            1          101m
coredns-7f9c69c78c-9nt4g                     1/1     Running            1          14m
metrics-server-8bbfb4bdb-qj75c               0/1     ImagePullBackOff   0          16m

使用 pullk8s 拉取失败的镜像,并导入到 pod 空间中

ubuntu@VM-0-8-ubuntu:~/pullk8s$ sudo pullk8s check --microk8s
k8s.gcr.io/metrics-server-amd64:v0.3.6
ubuntu@VM-0-8-ubuntu:~/pullk8s$ sudo pullk8s pull k8s.gcr.io/metrics-server-amd64:v0.3.6  --microk8s
Pull metrics-server-amd64:v0.3.6 ...
Pull metrics-server-amd64:v0.3.6 ...
v0.3.6: Pulling from opsdockerimage/metrics-server-amd64
e8d8785a314f: Pull complete
b2f4b24bed0d: Pull complete
Digest: sha256:c9c4e95068b51d6b33a9dccc61875df07dc650abbf4ac1a19d58b4628f89288b
Status: Downloaded newer image for opsdockerimage/metrics-server-amd64:v0.3.6
docker.io/opsdockerimage/metrics-server-amd64:v0.3.6
Untagged: opsdockerimage/metrics-server-amd64:v0.3.6
Untagged: opsdockerimage/metrics-server-amd64@sha256:c9c4e95068b51d6b33a9dccc61875df07dc650abbf4ac1a19d58b4628f89288b
unpacking k8s.gcr.io/metrics-server-amd64:v0.3.6 (sha256:c9cdfb8ea4ace4b65a9a151086e2d3903b22c5c40b01e5b097db73bd3d90d19e)...done

查看Pod运行状态,全部正常:

ubuntu@VM-0-8-ubuntu:~/pullk8s$ sudo kubectl get pods -n kube-system
NAME                                         READY   STATUS    RESTARTS   AGE
dashboard-metrics-scraper-78d7698477-64rpc   1/1     Running   1          25m
hostpath-provisioner-566686b959-m8fff        1/1     Running   1          25m
kubernetes-dashboard-85fd7f45cb-5c8x7        1/1     Running   1          25m
calico-kube-controllers-f7868dd95-nxfzn      1/1     Running   1          111m
calico-node-58n5l                            1/1     Running   1          111m
coredns-7f9c69c78c-9nt4g                     1/1     Running   1          25m
metrics-server-8bbfb4bdb-qj75c               1/1     Running   0          26m

​查看microk8s状态​

microk8s status

Microk8s 安装 与使用指南_应用程序

访问仪表板

1. 获取 token 密钥

# token=$(microk8s kubectl -n kube-system get secret | grep default-token | cut -d " " -f1)
# microk8s kubectl -n kube-system describe secret $token
2. 映射端口到外部网卡

# microk8s kubectl port-forward -n kube-system --address=0.0.0.0 service/kubernetes-dashboard 10443:443
3. 浏览器访问

  ​​https://127.0.0.1:10443​

其他常用命令:

命令

说明

microk8s dashboard-proxy

配置仪表板访问代理

microk8s start

启动 microk8s

microk8s stop

停止 microk8s

snap alias microk8s.kubectl kubectl

设置别名

microk8s kubectl get all --all-namespace

查看所有命名空间所有pod及服务的状态

配置 microk8s 内置 docker 的 registry.mirrors

编辑 /var/snap/microk8s/current/args/containerd-template.toml 文件
在 endpoint 添加 新的 国内 registry.mirrors , 如 "​​​https://docker.mirrors.ustc.edu.cn​​"

...
[plugins.cri.registry]
[plugins.cri.registry.mirrors]
[plugins.cri.registry.mirrors."docker.io"]
endpoint = [
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com",
"https://mirror.ccs.tencentyun.com",
"https://registry-1.docker.io"
]

部署示例应用程序

此时,您拥有一个功能齐全的 Kubernetes 集群。以下命令将部署nginx Web应用程序。

kubectl create deployment  nginx --image=nginx:alpine --replicas=1

部署 nginx 后,可以使用以下命令公开应用程序。

kubectl expose deployment nginx --port 80 –target-port 80 --type NodePort --selector=app=nginx --name nginx

我们可以启动lynx,一个基于终端的Web浏览器,使用以下命令访问Nginx应用程序。

Microk8s 安装 与使用指南_docker_02

MicroK8s 为您提供了故障排除​​工具​​​,以检查出了什么问题。请务必查看​​常见问题​​部分,以获取有关解决常见问题的帮助。

通过下列命令来设置 kubeconfig 文件:

cd $HOME
mkdir .kube
cd .kube
microk8s config > config

修改Sandbox Image

默认的puase镜像是google提供的,国内一般拉不下来。现在用​​vim​​​编辑​​/var/snap/microk8s/current/args/containerd-template.toml​​​这个文件,把​​k8s.gcr.io/pause:3.1​​​ 替换为 ​​registry.cn-shenzhen.aliyuncs.com/juxuny-google-containers/pause:3.1​

修改microk8s 里面 DNS 服务

microk8s kubectl -n kube-system edit configmap/coredns

把8.8.8.8 和 8.8.4.4 改成自己想要的DNS Server就可以了.

标签:k8s,pullk8s,microk8s,Microk8s,metrics,io,ubuntu,使用指南,安装
From: https://blog.51cto.com/shanyou/5936353

相关文章

  • 使用Kk单节点安装KubeSphere和K8S
    1.安装之前要安装这些包。yum-yinstallsocatconntrackebtablesipset2.安装KubeSphere和K8S之前需要安装docker容器运行时wgethttps://mirrors.aliyun.com/docker......
  • Windows 平台下 Go 语言的安装和环境变量设置
    1.Go语言SDK安装包下载和安装最新稳定版1.5.3安装包go1.5.3.windows-amd64.msi下载地址https://golang.org/dl/,大小约69MB(作者上传了一份该版本安装包到CSDN......
  • prometheus 普罗米修斯安装
    下载https://prometheus.io/download/  安装、启动wgethttps://github.com/prometheus/prometheus/releases/download/v2.40.6/prometheus-2.40.6.linux-amd64.t......
  • 超全!Python图形界面框架PyQt5使用指南!
    使用Python开发图形界面的软件其实并不多,相对于GUI界面,可能Web方式的应用更受人欢迎。但对于像我一样对其他编程语言比如C#或WPF并不熟悉的人来说,未必不是一个好的工具。......
  • Composer 安装与使用
    来源:https://www.runoob.com/w3cnote/composer-install-and-usage.htmlComposer是PHP的一个依赖管理工具。我们可以在项目中声明所依赖的外部工具库,Composer会帮你安......
  • ubuntu安装vmware tools不起作用
    安装VMwaretools之后从windows复制文件到ubuntu发现没有成功重新执行vmware-uninstall-tools.pl脚本提示之前已经安装了版本,需要卸载重装解决方案:1)不需要卸载2)命令行......
  • linux中安装mysql
    1.安装Linux系统中自带的MySQL安装包在现在常用的发行版本里都集中了MySQL安装包CentOS系统中的YUM中包含了MySQL安装包,版本是MySQL5,rpm软件包的名称是mysql-server......
  • GDAL 安装
    命令总和add-apt-repositoryppa:ubuntugis/ppaapt-getupdateapt-getinstallgdal-binapt-getinstalllibgdal-devexportCPLUS_INCLUDE_PATH=/usr/include/gdal......
  • go windows开发环境安装
    安装golang下载下载地址:https://golang.org/dl/安装默认安装路径:C:\ProgramFiles\Go一路点击下一步PS:升级go版本可以直接卸载旧版本,然后安装新版本,环境变量与已经......
  • pcstat的安装和使用
    pcstat可以查看文件的缓存的使用情况。1.环境准备(1).安装go(2).安装golang的依赖(3).安装gityuminstallgit2.安装go下载地址:​​https://studygolang.com/dl​​tarzxvf......