Microk8s 安装 与使用指南

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

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

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

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

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

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

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

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

注意事项:
  • 有多种资源要求,具体取决于要运行 MicroK8s 的位置。 有关最低资源要求 ,请参阅产品文档 。 例如:
  • 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。

如果您需要修改 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

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

发现错误是 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

根据自己的需要,安装仪表板、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 status

访问仪表板

  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. 浏览器访问

其他常用命令:

命令 说明 microk8s dashboard-proxy 配置仪表板访问代理 microk8s start 启动 microk8s microk8s stop 停止 microk8s snap alias microk8s.kubectl kubectl 设置别名 microk8s kubectl get all –all-namespace 查看所有命名空间所有pod及服务的状态

编辑 /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应用程序。

通过下列命令来设置 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 服务

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

相关文章:

Original: https://www.cnblogs.com/shanyou/p/16212194.html
Author: 张善友
Title: Microk8s 安装 与使用指南

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/546348/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • [转]KubeSphere 虚拟化 KSV 安装体验

    Original: https://www.cnblogs.com/oxspirt/p/16422294.htmlAuthor: 立志做一个好的程序员Title: [转]KubeS…

    技术杂谈 2023年5月30日
    089
  • CentOS7 安装高版本gcc, g++, gfortran等工具

    SCL(Software Collections)是一个CentOS/RHEL Linux平台的软件多版本共存解决方案,为用户提供一种方便、安全地安装和使用应用程序和运行时环境的多…

    技术杂谈 2023年7月10日
    082
  • 【转】SDN技术原理介绍

    原文:https://cloud.tencent.com/developer/news/211547 Original: https://www.cnblogs.com/oxspi…

    技术杂谈 2023年5月30日
    093
  • JZ0047:二叉树剪支

    title:二叉树剪支 📃 题目描述 题目链接:二叉树剪支、相同题目 🔔 解题思路 第一种做法:dfs,思考方式是你站在一个点上怎么做,在一个点上,先看左子树是否要删除,再看看右子…

    技术杂谈 2023年7月24日
    085
  • 十六、多线程(基础)(完结)

    十六、多线程(基础) 16.1 线程相关概念 16.1.1 程序 是为完成特定任务、用某种语言编写的一组指令的集合。 简单的说:就是我们写的代码 16.1.2 进程 进程是指运行中…

    技术杂谈 2023年7月11日
    072
  • django–ORM表的多对一关系

    *多对一关系是什么 Django使用 django.db.models.ForeignKey定义多对一关系。 ForeignKey需要一个位置参数:与该模型关联的类 class I…

    技术杂谈 2023年6月21日
    092
  • Vue2.0模板验证

    https://gitee.com/NanChen042/element-ui-admin 配置修改参考: 1、https://blog.csdn.net/weixin_45459…

    技术杂谈 2023年6月1日
    098
  • 网络多人游戏架构与编程2

    【 网络多人游戏架构与编程2】 1.0、虚拟现实游戏是对延迟最敏感的, 因为我们人类只要头旋转了,眼睛就期望看到不同的事物。在这些情况下,保证用户感觉在虚拟现实世界中就要求延迟少于…

    技术杂谈 2023年5月31日
    0107
  • IT职业后半段发展问题

    八年前,当我结束第二份工作,寻求第三份工作的时候,我就有了一个疑惑,IT职场上45岁以上或是50岁以上的人去哪了,我去请教以前的老领导,他告诉我有一些转行了,有一些他也不清楚,我的…

    技术杂谈 2023年5月30日
    086
  • IOS开发依赖管理工具CocoaPods

    CocoaPods IOS开发依赖管理工具 CocoaPods is a dependency manager for Swift and Objective-C Cocoa pr…

    技术杂谈 2023年5月30日
    0111
  • java反序列化_link_six

    0x01前言 经过cc链一的学习,然后jdk的版本一更新那两条链子就不能用了,然后这种反序列化的话就很不不止依赖于cc包的引入还有jdk版本,于是就出现了cc_link_six一个…

    技术杂谈 2023年6月21日
    065
  • 2022.27 AI架构师

    在经历了理论研究、数据驱动的阶段后,AI进入了产业落地应用阶段,亟需的是从技术到业务的融合,而不仅是技术本身的迭代 ,在这个过程中,AI架构师是最稀缺的。 从字面拆解”…

    技术杂谈 2023年5月30日
    091
  • 小熊飞桨练习册-06Paddlex垃圾分类

    文件说明 文件 说明 train.py 训练程序 quant.py 量化程序 prune.py 裁剪程序 test.py 测试程序 infer.py 预测程序 onekey.sh …

    技术杂谈 2023年7月23日
    0115
  • 教你搞懂Jenkins安装部署!

    前言:请各大网友尊重本人原创知识分享,谨记本人博客: 南国以南i Jenkins介绍 Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作…

    技术杂谈 2023年7月11日
    0102
  • OS第四章错题

    OS第四章错题 ​ 在页式存储管理中,采用动态重定向方式,所以在地址变换机构中需要硬件;而段式存储管理中,地址变换机构中有段表寄存器,所以也会有硬件 ​ UNIX概念题 ​ 静态重…

    技术杂谈 2023年7月11日
    083
  • systemd系列文章

    骏马金龙 (博客已搬家:www.junmajinlong.com) 网名骏马金龙,钟情于IT世界里的各种原理和实现机制,强迫症重症患者。爱研究、爱翻译、爱分享。特借此一亩三分田记录…

    技术杂谈 2023年5月31日
    0110
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球