Ubuntu 新人上手 Microk8s 指南
Posted ghostwritten
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ubuntu 新人上手 Microk8s 指南相关的知识,希望对你有一定的参考价值。
文章目录
看到 Microk8s
官网的插件很全,忍不住要玩一把。体验一下。
1. 什么是 Ubuntu 核心
Ubuntu Core 是为物联网和嵌入式系统设计和开发的 Ubuntu 操作系统版本。它完全由 snap
包构建,以创建一个安全、健壮、受限和基于事务的操作系统,易于安装、部署和升级。
2. 什么是 Kubernetes
Kubernetes 是容器化应用程序的编排平台。Kubernetes 抽象计算、网络和存储资源,并以可靠和可扩展的方式管理容器生命周期。Kubernetes 采用 DevOps 原则构建,可自动执行操作任务,例如工作负载重新部署和升级,并提供用于精细资源控制的 API。
3. 什么是MicroK8s
MicroK8s 是一个轻量级的 CNCF 认证的 Kubernetes 发行版,适用于云、工作站、边缘和物联网设备。作为一个快照,它在本地运行所有 Kubernetes 服务(即没有虚拟机),它将所有依赖项包含在一个包中,并获得透明的关键任务安全更新。MicroK8s 针对简单性和稳健性进行了优化,因为安装、设置和操作(例如启用监控服务和高可用性集群)要么是自动化的,要么是通过单个命令完成的。
4. 为什么选择 Microk8s on Core
MicroK8s
和 Ubuntu Core
共享可靠性和安全性等优势,具有自我修复、高可用性和自动 OTA 更新等功能。Ubuntu 是云中 Kubernetes 的首选操作系统。结合 Ubuntu Core
和 MicroK8s
,创建流线型的嵌入式 Kubernetes 体验,并优化 IoT 和边缘应用程序的大小和性能。
5. 安装Ubuntu Core
现在您已经拥有方便的 IoT 设备,让我们从安装 Ubuntu Core
开始。
目前有两个指南:
请注意,为了运行 MicroK8s,您应该使用 64 位 Ubuntu Core 版本。
如果您设法成功完成了两个指南中任何一个的步骤,您现在应该可以访问您设备上的 Ubuntu Core 终端。
6. Ubuntu Core上安装 MicroK8S
安装
要在 Ubuntu Core
上安装最新版本的 Microk8s,请运行:
snap install microk8s --channel=latest/edge/strict
低于预期输出:
ubuntu@ubuntu:~$ snap install microk8s --channel=latest/edge/strict
microk8s (edge/strict) v1.22.3 from Canonical✓ installed
安装最多可能需要几分钟,具体取决于您的硬件资源和网络连接。
此安装的 Kubernetes 版本是什么?
MicroK8s 是快速打包的,因此它将自动更新到更新的点版本。
严格限制的 MicroK8s 版本目前在专用的 snap 通道上,与上游 Kubernetes 的最新版本保持一致。
频道由轨道(或系列)和基于 MicroK8s 版本(稳定版、候选版、测试版、边缘版)的预期稳定性级别组成。有关可用版本的更多信息,请运行:
snap info microk8s
7. 启动 Microk8s
Microk8s 安装后默认不启动。要启动 MicroK8s,请运行:
sudo microk8s start
此命令启动所有 Kubernetes 服务,包括控制平面和工作程序。现在,要在安装完成后检查 MicroK8s 节点的状态,您可以使用:
sudo microk8s status --wait-ready
状态应该表明 microk8s 正在运行。
ubuntu@ubuntu:~$ sudo microk8s status
microk8s is running
high-availability: no
datastore master nodes: 127.0.0.1:19001
datastore standby nodes: none
addons:
enabled:
ha-cluster # (core) Configure high availability on the current node
helm # (core) Helm - the package manager for Kubernetes
helm3 # (core) Helm 3 - the package manager for Kubernetes
disabled:
cert-manager # (core) Cloud native certificate management
community # (core) The community addons repository
dashboard # (core) The Kubernetes dashboard
dns # (core) CoreDNS
gpu # (core) Automatic enablement of Nvidia CUDA
host-access # (core) Allow Pods connecting to Host services smoothly
hostpath-storage # (core) Storage class; allocates storage from host directory
ingress # (core) Ingress controller for external access
kube-ovn # (core) An advanced network fabric for Kubernetes
mayastor # (core) OpenEBS MayaStor
metallb # (core) Loadbalancer for your Kubernetes cluster
metrics-server # (core) K8s Metrics Server for API access to service metrics
minio # (core) MinIO object storage
observability # (core) A lightweight observability stack for logs, traces and metrics
prometheus # (core) Prometheus operator for monitoring and logging
rbac # (core) Role-Based Access Control for authorisation
registry # (core) Private image registry exposed on localhost:32000
storage # (core) Alias to hostpath-storage add-on, deprecated
如果是没有魔法上网的环境,这里可能起不来。报错原因:
$ microk8s.kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-7db754646d-ml4wq 0/1 Pending 0 7m50s
calico-node-td999 0/1 Init:0/2 0 38s
$ microk8s.kubectl get pods -n kube-system calico-node-td999 -oyaml
.......
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://asia-east1-docker.pkg.dev/v2/k8s-artifacts-prod/images/pause/manifests/3.7": dial tcp 64.233.189.82:443: i/o timeout
你需要手动拉取。
microk8s.ctr images pull docker.io/ghostwritten/registry.k8s.io.pause:3.7
microk8s.ctr images tag docker.io/ghostwritten/registry.k8s.io.pause:3.7 registry.k8s.io/pause:3.7
8. 启用必要的 MicroK8s 插件
现在您已经启动并运行了 Kubernetes 服务,您应该设置其他服务,例如 Kubernetes 仪表板、CoreDNS 或本地存储,以充分利用您的 Kubernetes。其中许多服务都可以作为 MicroK8s 插件使用,并且可以通过运行 microk8s enable 命令轻松启用:
sudo microk8s enable dns dashboard storage
可以通过运行 microk8s disable 命令随时禁用这些插件:
sudo microk8s disable dns dashboard storage
您可以使用 microk8s status 命令查看可用插件列表和当前启用的插件。
最重要的插件列表
dns
:部署DNS。其他人可能需要此插件,因此我们建议您始终启用它。
dashboard
: 部署 kubernetes 仪表板。storage
:创建默认存储类。此存储类使用指向主机上目录的 hostpath-provisioner。
ingress
:创建入口控制器。gpu
:通过启用 nvidia-docker 运行时和 nvidia-device-plugin-daemonset 将 GPU 暴露给 MicroK8s。要求主机系统上已安装 NVIDIA 驱动程序。istio
:部署核心 Istio 服务。您可以使用 microk8s istioctl 命令来管理您的部署。registry
:部署一个 docker private registry 并在 localhost:32000 上公开它。存储插件将作为此插件的一部分启用。
9. 部署示例容器工作负载
您现在可以使用 microk8s kubectl 来部署您的容器。在此示例中,我们部署了 nodered,这是一种用于将硬件设备连接在一起的编程工具
sudo microk8s kubectl create deployment nodered --image=nodered/node-red
使用 kubectl 检查 pod:
ubuntu@ubuntu:~$ sudo microk8s kubectl get pods
NAME READY STATUS RESTARTS AGE
nodered-7555b955f9-68cl9 0/1 ContainerCreating 0 3s
ubuntu@ubuntu:~$ sudo microk8s kubectl get pods
NAME READY STATUS RESTARTS AGE
nodered-7555b955f9-68cl9 1/1 Running 0 16s
接下来需要使用 kubectl 命令公开部署,以使其可从网络访问:
sudo microk8s kubectl expose deployment nodered --type=NodePort --port=1880 --name=nodered-service
10. 检查部署状态并访问您的应用程序
您可以使用以下命令检查部署状态:
$ sudo microk8s kubectl get services
ubuntu@ubuntu:~$ sudo microk8s kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.152.183.1 <none> 443/TCP 81m
nodered-service NodePort 10.152.183.46 <none> 1880:30663/TCP 5s
暴露的端口是随机生成的。在上面的例子中,我们可以看到端口是30663
。
为了访问应用程序的图形界面,您需要打开浏览器并输入以下 URL 方案:http://:<EXPOSED_PORT>
示例:http://192.168.1.222:30663/
11. 管理镜像
11.1 拉取
$ microk8s ctr images pull docker.io/calico/cni:v3.23.5
docker.io/calico/cni:v3.23.5: resolved |++++++++++++++++++++++++++++++++++++++|
index-sha256:7ca5c455cff6c0d661e33918d95a1133afb450411dbfb7e4369a9ecf5e0212dc: done |++++++++++++++++++++++++++++++++++++++|
manifest-sha256:9c5055a2b5bc0237ab160aee058135ca9f2a8f3c3eee313747a02edcec482f29: done |++++++++++++++++++++++++++++++++++++++|
layer-sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1: done |++++++++++++++++++++++++++++++++++++++|
config-sha256:1c979d623de9aef043cb4ff489da5636d61c39e30676224af0055240e1816382: done |++++++++++++++++++++++++++++++++++++++|
layer-sha256:cc0e45adf05a30a90384ba7024dbabdad9ae0bcd7b5a535c28dede741298fea3: done |++++++++++++++++++++++++++++++++++++++|
layer-sha256:51729c6e2acda05a05e203289f5956954814d878f67feb1a03f9941ec5b4008b: done |++++++++++++++++++++++++++++++++++++++|
layer-sha256:7430548aa23e56c14da929bbe5e9a2af0f9fd0beca3bd95e8925244058b83748: done |++++++++++++++++++++++++++++++++++++++|
layer-sha256:47c5dbbec31222325790ebad8c07d270a63689bd10dc8f54115c65db7c30ad1f: done |++++++++++++++++++++++++++++++++++++++|
layer-sha256:8efc3d73e2741a93be09f68c859da466f525b9d0bddb1cd2b2b633f14f232941: done |++++++++++++++++++++++++++++++++++++++|
layer-sha256:4c98a4f67c5a7b1058111d463051c98b23e46b75fc943fc2535899a73fc0c9f1: done |++++++++++++++++++++++++++++++++++++++|
layer-sha256:050b055d5078c5c6ad085d106c232561b0c705aa2173edafd5e7a94a1e908fc5: done |++++++++++++++++++++++++++++++++++++++|
elapsed: 28.7s total: 103.0 (3.6 MiB/s)
unpacking linux/amd64 sha256:7ca5c455cff6c0d661e33918d95a1133afb450411dbfb7e4369a9ecf5e0212dc...
done: 11.392952756s
查看
microk8s.ctr image ls
REF TYPE DIGEST
SIZE PLATFORMS LABELS
docker.io/calico/cni:v3.23.5 application/vnd.docker.distribution.manifest.list.v2+json sha256:7ca5c455cff6c0d661e33918d95a1133afb450411dbfb7e4369a9ecf5e0212dc 103.0 MiB linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le io.cri-containerd.image=managed
docker.io/calico/kube-controllers:v3.23.5 application/vnd.docker.distribution.manifest.list.v2+json sha256:58cc91c551e9e941a752e205eefed1c8da56f97a51e054b3d341b67bb7bf27eb 51.3 MiB linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le io.cri-containerd.image=managed
docker.io/calico/node:v3.23.5 application/vnd.docker.distribution.manifest.list.v2+json sha256:b7f4f7a0ce463de5d294fdf2bb13f61035ec6e3e5ee05dd61dcc8e79bc29d934 71.6 MiB linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le io.cri-containerd.image=managed
docker.io/ghostwritten/registry.k8s.io.pause:3.7 application/vnd.docker.distribution.manifest.v2+json sha256:445a99db22e9add9bfb15ddb1980861a329e5dff5c88d7eec9cbf08b6b2f4eb1 301.3 KiB linux/amd64 io.cri-containerd.image=managed
registry.k8s.io/pause:3.7 application/vnd.docker.distribution.manifest.v2+json sha256:445a99db22e9add9bfb15ddb1980861a329e5dff5c88d7eec9cbf08b6b2f4eb1 301.3 KiB linux/amd64 io.cri-containerd.image=managed
sha256:1c979d623de9aef043cb4ff489da5636d61c39e30676224af0055240e1816382 application/vnd.docker.distribution.manifest.list.v2+json sha256:7ca5c455cff6c0d661e33918d95a1133afb450411dbfb7e4369a9ecf5e0212dc 103.0 MiB linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le io.cri-containerd.image=managed
sha256:221177c6082a88ea4f6240ab2450d540955ac6f4d5454f0e15751b653ebda165 application/vnd.docker.distribution.manifest.v2+json sha256:445a99db22e9add9bfb15ddb1980861a329e5dff5c88d7eec9cbf08b6b2f4eb1 301.3 KiB linux/amd64 io.cri-containerd.image=managed
sha256:b6e6ee0788f2079219fecb418f573bbaad4c07f6f82b712ccc72684db8cc2deb application/vnd.docker.distribution.manifest.list.v2+json sha256:b7f4f7a0ce463de5d294fdf2bb13f61035ec6e3e5ee05dd61dcc8e79bc29d934 71.6 MiB linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le io.cri-containerd.image=managed
sha256:ea5536b1fa4a86e5ecf0803b7a1118d797f5ef51d2f452acf0b701d64dc6fcd9 application/vnd.docker.distribution.manifest.list.v2+json sha256:58cc91c551e9e941a752e205eefed1c8da56f97a51e054b3d341b67bb7bf27eb 51.3 MiB linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le io.cri-containerd.image=managed
打标签
microk8s.ctr images tag docker.io/ghostwritten/registry.k8s.io.pause:3.7 registry.k8s.io/pause:3.7
参考:
开源十问, 社区新人快速上手指南
第一次接触开源,该从何处入手?
没有基础,怎么在开源社区做贡献?
如何成长为开源社区的大牛?
……
刚接触开源的你,可能还有很多困惑。别担心,SegmentFault 思否通过调查问卷的方式收集了开发者对于开源的十大问题,并邀请社区开源大咖对这些问题进行深入讲解,他们的答案或许可带你轻松上手。
第一问:第一次接触开源,我该从何处入手?
来自 openEuler 社区的开源大咖马全一回答道,“想干的事情、适合干的事情和最终能干的事情是否匹配,是决定将来工作是否幸福的关键。”选择一个适合自己的开源项目至关重要。
那么具体应该如何选择适合自己的开源项目呢?可以考虑以下四个方面:
- 技术趋势,综合考虑技术趋势发展,选择一个有前景的技术方向才能在未来的竞争中获得优势。
- 个人技术领域,需要开发者认真评估自身技术栈,选择和自身能力、兴趣爱好匹配的开源项目,只有真正有兴趣投入的技术领域才能最大的发挥开发者的能动性,也才有机会获得更大的成功。
- 合理调配投入时间,在工作、生活和家庭之间需要合理平衡投入,通过合理规划可支配时间,保证对技术领域的研究和投入,只有持续的参与开源项目,才能从开源中获得优厚的回报。
- 建立开发者关系,和社区内的核心开发人员建立紧密的联系,良好的开发者关系有利于扩展人脉,为在开源项目的发展建立扎实的基础
第二问:没有基础,如何在开源社区做贡献?
作为开源社区里活跃着的年轻开发者,华东师范大学、X-lab 实验室成员夏小雅表示:“新人对于一个社区是格外珍贵的,在邮件列表、会议中收到的回应和鼓励也会非常多,这一点我深有体会。”所以千万不要觉得自己是一个“后来者”就羞于表达。不懂就问、勇于表达、刷脸熟、主动请求帮助,积极参与讨论、活跃贡献是享受开源的第一步。
想要为开源项目贡献代码,确实需要一定的技术功底。但没有基础就不能为开源社区做贡献了吗?并不是!Apache北京本土社区发起人姜宁强调,除了提交软件代码,还有很多参与开源贡献的方式。作为新手区的我们,可以先参与一些翻译和本地化、文档撰写、设计等工作,这些非代码贡献对于项目也同等重要,还能帮助我们快速和社区大牛熟悉起来,加深对开源项目的理解。
在新手如何参与开源这一问题上,马全一也给出了一些建议:
- 写代码远远不够,开发者需要善用搜索引擎。同时与社区大牛建立沟通联系,去了解各类开源开发问题;
- 仔细观察,深入思考。搜索引擎及社区大牛给出答案后,你能不能看到东西,能不能思考,这一点很重要;
- 穷举法。有时候思考的结果不见得对,你可以把所有的可能试一遍;
- 写文章。输出是最好的输入,如果你能够给别人讲明白这件事情,你自己对这个问题就是理解的;
- 参与社区活动。
第三问:哪些开源项目是值得关注、有前景的?
挑选值得关注、有前景的开源项目需要考虑多种因素,比如技术和社区运营是否前沿 ——
- 技术的前沿性既涵盖技术本身的先进性,还体现在支撑该项技术的底层技术是否先进。比如开源软件的基础设施是否主流、开源,这决定了项目的开放性、透明性和可持续性。
- 社区运营的前沿性体现在社区是否有完整的治理机制,是否具备多样性,有很多企业参与项目贡献,社区玩家是否覆盖完整的产业链。此外,在挑选项目时,我们还需要关注社区贡献者的活跃度。
另外,开源项目是否在基金会也是一个重要的考量要素。
当然,在选择值得关注的项目时,每个开发者本身都是带着自己的兴趣和待解决问题的。找到自己感兴趣的项目,开发者才能支撑自己投入更多时间做这件事。
目前,开源社区涵盖大量项目,如 Vue.js、React.js、Angular 等前端项目,Django、Spring-Boot、next.js等后端框架,TensorFlow、PyTorch 等机器学习框架,还有华为 MindSpore、KubeEdge 等新秀项目。
第四问:怎么才算加入开源社区?
- 成为某个开源项目的用户(user)
- 当你开始在该项目的邮件列表 (mailing list) 里参与讨论并提供补丁、文档和建议,就会成功晋升为开发者(Developer)或贡献者 (Contributor )
- 当你不断修炼 (提交 Bug 报告、贡献代码、参与邮件列表讨论、参与社区建设),就有可能受邀成为提交者(Committer)或维护者(Maintainer)
- 成为有影响力的贡献者后,可能会进一步被推选进入该开源项目的技术决策委员会等,更深度参与开源项目的管理与决策
每个社区的文化和风格其实各不相同,如果把“加入”开源社区看作一个动作,那么之前你在不经意间,使用开源社区某一个项目,就可以当做是加入开源社区的开端。
第五问:如何成长为开源社区的大牛?
Apache 软件基金会首位华人董事,Apache SkyWalking 创始人吴晟向我们介绍 ——
开源社区的大牛,往往是已经把开源的技术、品牌和宣传,变成职业化的一群人。
他们以开源的模式进行广泛的协作和共赢。因此他们在开源社区的设计、开发、跨社区合作和基金会工作中,展现出高人一等的职业性素养,以及开源爱好者无法比拟的超长投入时间。
类似大家熟悉的一万小时定律,在开源圈子也同样成立。当这些爱好变成了职业性,在高强度的投入后,其他人会看到他们异乎寻常的成长速度。
所以,确保自己有足够的时间来从事开源。让自己参与的开源成为经济正向循环的一环,才能成为大家眼里所谓的「大牛」。
但与此同时,我并不建议大家去过分追求成为「大牛」。毕竟开源在职业化、商业化之外,也可以给贡献者带来属于自己的成就感和满足感。并不是每个人都需要成为一个职业开源人,普通开发者和爱好者也能享受到开源协作的乐趣。
此外,姜宁强调,对于普通开发者而言,如果你梦想有一天成为开源社区的大牛,要从勇敢承担开源项目的核心任务开始,在不断贡献中获得成长。
开源社联合创始人刘天栋补充道“这个社会有提出问题的人,有制造问题的人,但是更需要的是解决问题的人。当我们参与到开源贡献里,协助他人解决问题的时候,不但能更好的实现自我,也能够让他人更快的认识我们的价值,成为他人眼中的「大牛」。而我们参与开源贡献的经历就是我们最有价值的履历表。”
第六问:怎样深度参与开源项目?
要回答这个问题,首先需要回答“怎样才算深度参与了开源项目?”——
成为核心贡献者拥有代码仓库直接写入权限?
入选项目委员会会直接参与开源项目的管理与决策?
或者哪怕只修复过一次代码核心 BUG?
……
这个问题见仁见智,业内并没有一个绝对标准。
作为潜伏在各大社区的开源大咖,SegmentFault 思否创始人、 CTO 祁宁表示 “其实,开发者并不需要把「深度」二字看得过于沉重—— 实际上国际上很多知名的开源大咖也都是在某次不经意的贡献中「入坑」开源的,或许第一次只是为了收获一件社区周边、或是使用开源软件过程中的顺手为之。随后才逐渐深入接触、持续贡献,从 Contributor 到 Maintainer。”所以深度参与开源项目和成为开源大牛一样,都是一个循序渐进、水到渠成的过程。
但需要强调的是,如果你期待深度参与某一开源项目,或者成为某一项目的核心成员,一定要多思考、多维度贡献 —— 当你除了贡献代码、解决 issue 以外,也在开始思考项目的价值、规划项目的前景时,就离深度参与不远了。
第七问:开发者如何通过参与开源项目提升技术?
许多开发者,特别是应届毕业生,大多面临缺少大型、高质量项目开发经验的困境。较为成熟的开源项目,很多已具备一定的生产环境应用经验,参与贡献的开发者可以深入项目,理解、学习优秀的代码逻辑、架构设计等,收获宝贵的研发经验。
我们都知道,作为一名开发者,学习与解决问题的能力至关重要,开源项目可以给予每位参与者充分的锻炼空间。具体来说,提升技术的方式大致分为以下几种:
- 关注社区动态,紧跟技术潮流新方向,向技术选型库中装填新「弹药」;
- 阅读开源项目中的高质量源码,研究代码逻辑,在日常工作中学以致用;
- 持续贡献文档,通过提交 PR、贡献 Issues 等方式,提升书面表达能力;
- 通过邮件列表,issue或者代码审查的方式与社区前辈交流, 学习他们的研发经验,提升视野;
- 与使用者多交流,根据反馈不断优化项目,更好地理解产品、了解用户需求;
- 学会提问,在开源社区中,不是所有问题都能够得到答案。提问者需要把问题的上下文环境讲清楚,并且尽量谦虚的表达才可能得到帮助,当你学会提问,沟通的能力势必也会提升不少。
在 SegmentFault 思否 COO、开源社副执行长江波看来,参与开源项目是初学者、大学生最好的练兵场,除了提升技术,还会有很多额外收益,“近两年,SegmentFault 思否一直在支持中科院软件所和 openEuler 社区联合发起的开源之夏活动,有不少大学生在社区导师的指导下提升技术、结识大牛、收获了宝贵的工作机会,或通过选举成为开源项目的 Committer、受到了社区的认可。而 9 年前,SegmentFault 的诞生也和开源息息相关,SegmentFault 最早的几位合伙人正是因为在大学时期参与开源项目相识,后来一起成立了公司。”
参与开源是弯道超车的最佳路径,快让开源社区成为你的成长加速器吧!
第八问:项目捐给开源软件基金会与不捐开源软件给基金会,有什么区别?
CNCF大使王泽锋介绍“一般来讲,基金会对于项目的治理是有开放性要求的,对于其他潜在的参与者来说,参与一个基金会管理的开源项目,可以有稳定的心理预期。”
参与开源软件基金会管理的开源项目时,只要有一定足够的投入,就能在社区中获得相应的话语权,进而影响社区的发展,把自己对于开源项目的发展方向和诉求推进社区。相反,个别企业的开源项目,开放性和连续性是存在一些问题的 —— 近年来发生了很多类似的事件:MongoDB、Redis、ELK 等项目修改开源协议,背后其实是商业公司控制开源项目时,开源与商业变现的冲突,其参与伙伴便失去了保障。
此外,姜宁补充道:“捐献给基金会的项目还会有更完善的法律保障。”开源软件允许使用、修改、分发,但是用什么样的方式呢?这里就涉及到开源协议的问题,不同于商业软件靠知识产权控制,开源软件是靠 License 控制的,对开源社区而言,License 更像是开源社区的“基本法”,它是跨国别跨地域的存在,甚至是全球的基本法。
第九问:开源社区如何能持续发展?
openEuler 社区品牌宣传委员会主席梁冰向我们介绍,一个开源社区能否获得持续发展,关键要看以下四个关键指标:
1.任何社区运营的关键指标都是开发者
开发者是社区的灵魂,开发者的数量和质量决定了这个社区的项目的数量和质量。
2. 第二个指标是CODE
我们有了高质量和高数量开发者,自然会有开发者带来高质量的代码。
3. 第三个指标是用户案例
任何一个开源社区对自己所有的定义,都取决于用户对你的定义。只有你有足够多的用户才能反馈使用中的具体需求,对项目形成一个非常正向的推动。这其实跟你做产品营销是一样的,一个产品没有用户就活不下来,一个开源项目没有用户也是活不下来的。
4.第四个是文档
就像产品需要手册一样,如果开源项目没有很好的文档,很多开发者来了无从下手。所以对于一个成熟、友好的社区,一定要有一套文档去指导大家如何用,如何参与,如何来贡献。
管理和运营社区是开源项目持续发展的核心,一个健康、友好的社区需要完整的治理制度,公平开放的社区氛围,这可以不断吸引新的贡献者加入。当然,资金、资源、基金会的帮助也对开源项目的持续发展有很大帮助,不过最重要的还是项目核心团队不断地努力与持续的投入。
第十问:开放治理对社区的成长到底意味着什么?
openEuler 在过去一年凝聚了超过 3000 名贡献者,有超过 4 万次下载、4万社区用户,也吸引了中国移动、中国联通、银联、飞腾等 60 多家企业、机构和高校的加入。全方位的快速发展就与社区的开放治理密切相关.
梁冰向记者介绍,“只开放源代码,没有社区开放治理的项目是没有前途的。开放治理对于一个开源项目而言就好比养育和陪伴它成长,至关重要,这背后也体现了开源项目的成熟度和严谨、认真、持续投入的态度。”
而以 MindSpore 举例,MindSpore 可能是国内第一个采用开放社区治理的深度学习开源框架。在 MindSpore 社区里,有着非常完善的章程,多国家、多样性团队组成的技术治理委员会,所有流程都在社区公开的邮件列表中,一切决定都有标准化的章程作为依照。公开和开放让 MindSpore 受到了众多开发者的信赖和支持,得以快速发展。
我们常常说“Community Over Code(社区胜于代码)”,一个活跃、开放、友好的社区对开源项目而言,意义非凡。健康的社区甚至远远比优秀的代码更重要 —— 代码不够优秀不要紧,只要持续有贡献者,代码便可以被不断优化、迭代,但如果没有社区,再优秀的代码也会付之东流。只有对新老成员一视同仁、公平开放的社区氛围,才能够持续吸引新成员加入项目贡献,也为开源项目带来持续的生机与活力。
以上十问是否解答了你心中对开源的困惑呢?春风十里,不如代码和你。开源大势所趋,快和我们一起上车吧!
以上是关于Ubuntu 新人上手 Microk8s 指南的主要内容,如果未能解决你的问题,请参考以下文章
Microk8s 无法在 Longhorn 上自动安装 pod