Kubernetes 已经改变了如何大规模部署和管理容器化工作负载。现在开发人员面临的挑战主要在于设置过程的复杂性和资源需求量巨大。如果你深受内存不足的困扰,想要部署轻量级 Kubernetes 集群来减少内存占用,那么你一定要考虑由 Rancher Labs 发布的轻量级Kubernetes发行版——k3s。它把安装 Kubernetes 所需的一切文件都打包进一个 40MB 大小的二进制文件中,仅需 512MB 的 RAM 即可运行。非常适用于资源有限的环境,如边缘计算场景、IoT 等。
在实际场景中,为了获得开发和测试的动力,节省开销,用户希望能够以最少的资源利用率和较低的硬件规格来部署 Kubernetes。而 k3s 正好满足了这一需求,它能够在任何 512MB RAM 以上的设备上运行集群,如 IoT 设备或 ARM 驱动的设备。
既然 k3s 仅需少量资源即可运行,那么这意味着一些 Kubernetes 的特性被移除了:
旧的、非默认的、alpha 功能
大部分 in-tree 插件(云提供商和存储插件),将其用附加组件进行替换
用 sqlite 来代替 etcd 作为默认存储机制
5 分钟之内使用 k3s 部署轻量 K8s 集群
在本文中,我将使用运行在 Debian 10 上的 3 个 server,每个 server 有 1GB 的 RAM 和 1vcpu。其中一个 server 作为 master,其他两个作为 worker 节点。
$ openstack server list
+--------------------------------------+-------------------+---------+-----------------------------------+-----------+-----------+
| ID | Name | Status | Networks | Image | Flavor |
+--------------------------------------+-------------------+---------+-----------------------------------+-----------+-----------+
| 4df6a6dc-26e8-4ae0-8b6e-2f97daec0ef3 | k3s-master | ACTIVE | private=10.10.1.159 | Debian-10 | m1.tiny |
| 5ca13239-b745-4f62-ab11-0a27949c9b35 | k3s-node02 | ACTIVE | private=10.10.1.142 | Debian-10 | m1.tiny |
| a54997f2-4d94-4718-86ab-73609b328761 | k3s-node01 | ACTIVE | private=10.10.1.126 | Debian-10 | m1.tiny |
+--------------------------------------+-------------------+---------+-----------------------------------+-----------+-----------+
我将在每个服务器的/ etc / hosts 文件中为服务器添加 A record。
sudo tee -a /etc/hosts<<EOF
10.10.1.159 k3s-master
10.10.1.126 k3s-node01
10.10.1.142 k3s-node02
EOF
##在 Master 节点上安装 k3s
运行 k3s 的方式有很多,最快的方式是通过提供的 bash 脚本进行安装,同时该脚本提供了一个便捷的方式来安装到 systemd 或 openrc。
curl -sfL https://get.k3s.io | sh -
安装输出:
[INFO] Finding latest release
[INFO] Using v0.8.1 as release
[INFO] Downloading hash https://github.com/rancher/k3s/releases/download/v0.8.1/sha256sum-amd64.txt
[INFO] Downloading binary https://github.com/rancher/k3s/releases/download/v0.8.1/k3s
[INFO] Verifying binary download
[INFO] Installing k3s to /usr/local/bin/k3s
[INFO] Creating /usr/local/bin/kubectl symlink to k3s
[INFO] Creating /usr/local/bin/crictl symlink to k3s
[INFO] Creating /usr/local/bin/ctr symlink to k3s
[INFO] Creating killall script /usr/local/bin/k3s-killall.sh
[INFO] Creating uninstall script /usr/local/bin/k3s-uninstall.sh
[INFO] env: Creating environment file /etc/systemd/system/k3s.service.env
[INFO] systemd: Creating service file /etc/systemd/system/k3s.service
[INFO] systemd: Enabling k3s unit
Created symlink /etc/systemd/system/multi-user.target.wants/k3s.service → /etc/systemd/system/k3s.service.
[INFO] systemd: Starting k3s
安装完成之后,服务会自动启动。
$ systemctl status k3s
● k3s.service - Lightweight Kubernetes
Loaded: loaded (/etc/systemd/system/k3s.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2019-09-17 19:20:00 UTC; 2min 24s ago
Docs: https://k3s.io
Process: 833 ExecStartPre=/sbin/modprobe br_netfilter (code=exited, status=0/SUCCESS)
Process: 836 ExecStartPre=/sbin/modprobe overlay (code=exited, status=0/SUCCESS)
Main PID: 837 (k3s-server)
Tasks: 98
Memory: 571.1M
CGroup: /system.slice/k3s.service
├─ 837 /usr/local/bin/k3s server KillMode=process
├─ 851 containerd -c /var/lib/rancher/k3s/agent/etc/containerd/config.toml -a /run/k3s/containerd/containerd.sock --state /run/k3s/conta
├─1110 containerd-shim -namespace k8s.io -workdir /var/lib/rancher/k3s/agent/containerd/io.containerd.runtime.v1.linux/k8s.io/f6eeb59978
├─1127 /pause
├─1207 containerd-shim -namespace k8s.io -workdir /var/lib/rancher/k3s/agent/containerd/io.containerd.runtime.v1.linux/k8s.io/0baf0ca181
├─1225 /coredns -conf /etc/coredns/Corefile
├─1576 containerd-shim -namespace k8s.io -workdir /var/lib/rancher/k3s/agent/containerd/io.containerd.runtime.v1.linux/k8s.io/dcce4b7e17
├─1594 /pause
├─1599 containerd-shim -namespace k8s.io -workdir /var/lib/rancher/k3s/agent/containerd/io.containerd.runtime.v1.linux/k8s.io/50816ffba8
├─1617 /pause
├─1824 containerd-shim -namespace k8s.io -workdir /var/lib/rancher/k3s/agent/containerd/io.containerd.runtime.v1.linux/k8s.io/d0ff393609
├─1842 /bin/sh /usr/bin/entry
├─1882 containerd-shim -namespace k8s.io -workdir /var/lib/rancher/k3s/agent/containerd/io.containerd.runtime.v1.linux/k8s.io/046779175f
├─1899 /bin/sh /usr/bin/entry
├─1904 containerd-shim -namespace k8s.io -workdir /var/lib/rancher/k3s/agent/containerd/io.containerd.runtime.v1.linux/k8s.io/93f0fe2361
└─1921 /traefik --configfile=/config/traefik.toml
Sep 17 19:20:34 deb10 k3s[837]: E0917 19:20:34.714229 837 daemon_controller.go:302] kube-system/svclb-traefik failed with : error storing statu
Sep 17 19:20:34 deb10 k3s[837]: E0917 19:20:34.719452 837 daemon_controller.go:302] kube-system/svclb-traefik failed with : error storing statu
Sep 17 19:20:34 deb10 k3s[837]: I0917 19:20:34.726816 837 reconciler.go:207] operationExecutor.VerifyControllerAttachedVolume started for volum
Sep 17 19:20:34 deb10 k3s[837]: I0917 19:20:34.726836 837 reconciler.go:207] operationExecutor.VerifyControllerAttachedVolume started for volum
Sep 17 19:20:34 deb10 k3s[837]: I0917 19:20:34.726857 837 reconciler.go:207] operationExecutor.VerifyControllerAttachedVolume started for volum
Sep 17 19:20:34 deb10 k3s[837]: I0917 19:20:34.726869 837 reconciler.go:207] operationExecutor.VerifyControllerAttachedVolume started for volum
Sep 17 19:20:35 deb10 k3s[837]: I0917 19:20:35.529102 837 reconciler.go:181] operationExecutor.UnmountVolume started for volume "helm-traefik-t
Sep 17 19:20:35 deb10 k3s[837]: I0917 19:20:35.542858 837 operation_generator.go:799] UnmountVolume.TearDown succeeded for volume "kubernetes.i
Sep 17 19:20:35 deb10 k3s[837]: I0917 19:20:35.629277 837 reconciler.go:285] Volume detached for volume "helm-traefik-token-kjwrl" (UniqueName:
Sep 17 19:20:36 deb10 k3s[837]: W0917 19:20:36.355273 837 pod_container_deletor.go:75] C
将 kubeconfig 文件写入/etc/rancher/k3s/k3s.yaml:
$ cat /etc/rancher/k3s/k3s.yaml
cat: /etc/rancher/k3s/k3s.yaml: Permission denied
debian@deb10:~$ sudo cat /etc/rancher/k3s/k3s.yaml
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJWakNCL3FBREFnRUNBZ0VBTUFvR0NDcUdTTTQ5QkFNQ01DTXhJVEFmQmdOVkJBTU1HR3N6Y3kxelpYSjIKWlhJdFkyRkFNVFUyT0RjME56azVOakFlRncweE9UQTVNVGN4T1RFNU5UWmFGdzB5T1RBNU1UUXhPVEU1TlRaYQpNQ014SVRBZkJnTlZCQU1NR0dzemN5MXpaWEoyWlhJdFkyRkFNVFUyT0RjME56azVOakJaTUJNR0J5cUdTTTQ5CkFnRUdDQ3FHU000OUF3RUhBMElBQkM5aTMyUTdkVnhJaTFCVFNEOTRqYzJaZy9ESHFGc051b0Q4eWhSbjZsUlIKQWp5Q0p3UEZYQ3Y4QUdSMmFaK1lSempTYUJvM2M1LzMwQnZwKzY3OFNYeWpJekFoTUE0R0ExVWREd0VCL3dRRQpBd0lDcERBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUFvR0NDcUdTTTQ5QkFNQ0EwY0FNRVFDSUJwTXdOejAyZzUwCkExdEloU0Y1MFJqSVprVVVuNk8rODdLV25obWRUYkh5QWlBQnJqcDFxWU1HcWE0RmJ2Ym9rTm1kM3VOelVvQm8KeGxqTGlnWnZCN3ZEVGc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
server: https://localhost:6443
name: default
contexts:
- context:
cluster: default
user: default
name: default
current-context: default
kind: Config
preferences: {}
users:
- name: default
user:
password: 2d99cae31c075743be704bb717ceaae8
username: admin
其他已经安装的有:
kubectl
crictl
k3s-killall.sh
k3s-uninstall.sh
在 Worker 节点上安装 k3s
要在 Woker 节点上安装 k3s,我们应该将 K3S_URL 以及 K3S_TOKEN 或 K3S_CLUSTER_SECRET 环境变量一起传递。
K3S_TOKEN 在第一个节点上的/ var / lib / rancher / k3s / server / node-token 中创建。
$ sudo cat /var/lib/rancher/k3s/server/node-token
K1042e2f8e353b9409472c1e0cca8457abe184dc7be3f0805109e92c50c193ceb42::node:c83acbf89a7de7026d6f6928dc270028
所以为了在 worker 节点上安装 Kubernetes,我将运行:
k3s_url="https://k3s-master:6443"
k3s_token="K1042e2f8e353b9409472c1e0cca8457abe184dc7be3f0805109e92c50c193ceb42::node:c83acbf89a7de7026d6f6928dc270028"
curl -sfL https://get.k3s.io | K3S_URL=${k3s_url} K3S_TOKEN=${k3s_token} sh -
安装输出:
[INFO] Finding latest release
[INFO] Using v0.8.1 as release
[INFO] Downloading hash https://github.com/rancher/k3s/releases/download/v0.8.1/sha256sum-amd64.txt
[INFO] Downloading binary https://github.com/rancher/k3s/releases/download/v0.8.1/k3s
[INFO] Verifying binary download
[INFO] Installing k3s to /usr/local/bin/k3s
[INFO] Creating /usr/local/bin/kubectl symlink to k3s
[INFO] Creating /usr/local/bin/crictl symlink to k3s
[INFO] Creating /usr/local/bin/ctr symlink to k3s
[INFO] Creating killall script /usr/local/bin/k3s-killall.sh
[INFO] Creating uninstall script /usr/local/bin/k3s-agent-uninstall.sh
[INFO] env: Creating environment file /etc/systemd/system/k3s-agent.service.env
[INFO] systemd: Creating service file /etc/systemd/system/k3s-agent.service
[INFO] systemd: Enabling k3s-agent unit
Created symlink /etc/systemd/system/multi-user.target.wants/k3s-agent.service → /etc/systemd/system/k3s-agent.service.
[INFO] systemd: Starting k3s-agent
登录到其中一个 master 节点并检查集群状态:
$ sudo kubectl config get-clusters
NAME
default
$ sudo kubectl cluster-info
Kubernetes master is running at https://localhost:6443
CoreDNS is running at https://localhost:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
$ sudo kubectl get nodes
NAME STATUS ROLES AGE VERSION
k3s-master Ready master 14m v1.14.6-k3s.1
k3s-node01 Ready worker 3m11s v1.14.6-k3s.1
k3s-node02 Ready worker 3m58s v1.14.6-k3s.1
$ sudo kubectl get namespaces
NAME STATUS AGE
default Active 16m
kube-node-lease Active 16m
kube-public Active 16m
kube-system Active 16m
$ sudo kubectl get endpoints -n kube-system
NAME ENDPOINTS AGE
kube-dns 10.42.0.2:53,10.42.0.2:53,10.42.0.2:9153 14m
traefik 10.42.0.5:80,10.42.0.5:443 14m
$ sudo kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-b7464766c-q9frk 1/1 Running 0 15m
helm-install-traefik-8dhpk 0/1 Completed 0 15m
svclb-traefik-9c2j8 2/2 Running 0 4m49s
svclb-traefik-bf9zd 2/2 Running 0 4m2s
svclb-traefik-v2fpx 2/2 Running 0 14m
traefik-5c79b789c5-k589d 1/1 Running 0 14m
使用 crictl 命令来查看正在运行的容器
# Master
$ sudo crictl ps
CONTAINER ID IMAGE CREATED STATE NAME ATTEMPT POD ID
acfafb50852d3 18471c10e6e4b 16 minutes ago Running traefik 0 bf8534452389f
fee5ac7e88f2e 4a065d8dfa588 16 minutes ago Running lb-port-443 0 e7068ff7ab2f2
bbab5b07e5efb 4a065d8dfa588 16 minutes ago Running lb-port-80 0 e7068ff7ab2f2
65c5d1333ea04 2ee68ed074c6e 16 minutes ago Running coredns 0 435c51f4716fc
# Workers
$ sudo crictl ps
CONTAINER ID IMAGE CREATED STATE NAME ATTEMPT POD ID
7ad5c83d6466f 4a065d8dfa588 6 minutes ago Running lb-port-443 0 bf8d9fe57c3f3
c1380eabc0b33 4a065d8dfa588 6 minutes ago Running lb-port-80 0 bf8d9fe57c3f3
大功告成啦!如果你需要更高级的配置,请参阅 k3s 文档:
https://rancher.com/docs/k3s/latest/en/
更多内容推荐
加速 Kubernetes 部署的最佳实践
在本文中,我们将介绍扩展Pod、副本控制器(Replication Controller),以及加速Kubernetes 部署(Deployment)的最佳实践。
5. 基于 Kubeadm 及 Kubespray 安装高可用集群
2023-09-26
17|组件监控:Kubernetes Node 组件的关键指标与数据采集
Kubernetes Node组件的关键指标与数据采集
2023-02-15
6.Docker-compose
2023-09-30
一站式交付体验:云效 +Kubernetes
云效依托于阿里巴巴研发效能多年规模化持续交付,赋能云上开发者专为云端用户提供的一站式研发协作平台。Kubernetes,由Google开源的容器集群管理平台,面向运维侧提供自动化的集群和应用管理解决方案。
2022-02-11
Docker 出局?你还有 iSula、Containerd 和 CRI-O
K8s 抛弃 Docker?iSula、Containerd和CRI-O也很香。
Rancher 2.5.6 发布,支持 Kubernetes 1.20
近日,Rancher 2.5.6版本正式发布,支持Kubernetes 1.20。
2021-03-16
7. Kubernetes 中如何使用 Go 语言
2023-09-26
Kubernetes 上运行有状态应用的最佳实践
在Kubernetes上运行有状态的应用并不是一种常见的情况,但这并非不能实现。本文介绍了在Kubernetes上安全运行有状态应用的一些技术,包括StatefulSet和DaemonSet控制器、secret管理、ConfigMap和有效使用命名空间。
Argo CD 使用指南:如何构建一套完整的 GitOps?
随着Kubernetes将自己确立为容器编排的行业标准,为你的应用和工具找到使用声明式模型的有效方法是成功的关键。
解放开发者!3 款工具实现快速 K8S 开发
在这篇文章中,我们将探讨开发人员如何使用DevSpace和Rancher来简化Kubernetes开发。
39|GitOps 最佳实践,ArgoCD 凭什么脱颖而出?
ArgoCD 能在众多 CD 工具中脱颖而出,除了 GitOps 大背景的推动以外,其自身也具备非常多优秀的特性。
2023-03-08
10.Jenkins 实战 - CICD(上)
2023-09-30
如何使用 kind 快速创建本地集群
kind是另一个Kubernetes SIG项目,但它与minikube有很大区别。它可以将集群迁移到Docker容器中,这与生成虚拟机相比,启动速度大大加快。
Kubernetes 手记(18)- 高级调度策略
节点选择器:nodeselector、nodeName
2021-06-21
Kubernetes 源码学习之一: 下载和编译源码
实战Kubernetes1.13版本源码的下载和编译构建
2022-08-28
使用 Argo CD 和 Vault 实现安全的 GitOps
在这篇文章中,我们将在AWS中建立一个K3s Kubernetes集群,然后使用Argo CD和Vault实现安全的GitOps。
28 天带你玩转 Kubernetes-- 第一天(课程介绍)
玩转Kubernetes教程,小白也能学会K8s
2021-01-08
无需手动输入命令,简单 3 步即可在 K8S 集群中启用 GPU
随着全球各大企业开始广泛采用Kubernetes,我们看到Kubernetes正在向新的阶段发展。
无需 kubectl!快速使用 Prometheus 监控 Etcd
在本文中,我们将安装一个Etcd集群并使用Prometheus和Grafana配置监控,以上这些操作我们都通过Rancher进行。
推荐阅读
ByConity 如何在 Kubernetes 上无感扩缩容
5 分钟在 k8s 上可视化搭建 Kylin5
2023-06-05
33|环境:基于 GraalVM 的 JVM 云原生环境搭建
2023-11-13
16.Kubernetes 集群管理 -2
2023-09-30
35|实现:基于 JDK 17、Spring Boot 3、Spring 6 打造云原生 Java 应用
2023-11-17
在 Istio 中使用 Kata 容器注入工作负载
Kubernetes 本地持久化存储方案 OpenEBS LocalPV 落地实践下——原理篇
2023-04-13
电子书
大厂实战PPT下载
换一换 袁晗光 | 百度 资深研发工程师
韩飞 | 京东零售 集团数据计算平台专家架构师、技术总监
于南 | 快手 研发效能专家
评论