写点什么

Just 5 分钟!使用 k3s 部署轻量 Kubernetes 集群快速教程

  • 2020-05-18
  • 本文字数:6101 字

    阅读完需:约 20 分钟

Just 5分钟!使用k3s部署轻量Kubernetes集群快速教程

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<<EOF10.10.1.159 k3s-master10.10.1.126 k3s-node0110.10.1.142 k3s-node02EOF
复制代码


##在 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 unitCreated 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 statuSep 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 statuSep 17 19:20:34 deb10 k3s[837]: I0917 19:20:34.726816 837 reconciler.go:207] operationExecutor.VerifyControllerAttachedVolume started for volumSep 17 19:20:34 deb10 k3s[837]: I0917 19:20:34.726836 837 reconciler.go:207] operationExecutor.VerifyControllerAttachedVolume started for volumSep 17 19:20:34 deb10 k3s[837]: I0917 19:20:34.726857 837 reconciler.go:207] operationExecutor.VerifyControllerAttachedVolume started for volumSep 17 19:20:34 deb10 k3s[837]: I0917 19:20:34.726869 837 reconciler.go:207] operationExecutor.VerifyControllerAttachedVolume started for volumSep 17 19:20:35 deb10 k3s[837]: I0917 19:20:35.529102 837 reconciler.go:181] operationExecutor.UnmountVolume started for volume "helm-traefik-tSep 17 19:20:35 deb10 k3s[837]: I0917 19:20:35.542858 837 operation_generator.go:799] UnmountVolume.TearDown succeeded for volume "kubernetes.iSep 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.yamlcat: /etc/rancher/k3s/k3s.yaml: Permission denieddebian@deb10:~$ sudo cat /etc/rancher/k3s/k3s.yamlapiVersion: v1clusters:- cluster:    certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJWakNCL3FBREFnRUNBZ0VBTUFvR0NDcUdTTTQ5QkFNQ01DTXhJVEFmQmdOVkJBTU1HR3N6Y3kxelpYSjIKWlhJdFkyRkFNVFUyT0RjME56azVOakFlRncweE9UQTVNVGN4T1RFNU5UWmFGdzB5T1RBNU1UUXhPVEU1TlRaYQpNQ014SVRBZkJnTlZCQU1NR0dzemN5MXpaWEoyWlhJdFkyRkFNVFUyT0RjME56azVOakJaTUJNR0J5cUdTTTQ5CkFnRUdDQ3FHU000OUF3RUhBMElBQkM5aTMyUTdkVnhJaTFCVFNEOTRqYzJaZy9ESHFGc051b0Q4eWhSbjZsUlIKQWp5Q0p3UEZYQ3Y4QUdSMmFaK1lSempTYUJvM2M1LzMwQnZwKzY3OFNYeWpJekFoTUE0R0ExVWREd0VCL3dRRQpBd0lDcERBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUFvR0NDcUdTTTQ5QkFNQ0EwY0FNRVFDSUJwTXdOejAyZzUwCkExdEloU0Y1MFJqSVprVVVuNk8rODdLV25obWRUYkh5QWlBQnJqcDFxWU1HcWE0RmJ2Ym9rTm1kM3VOelVvQm8KeGxqTGlnWnZCN3ZEVGc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==    server: https://localhost:6443  name: defaultcontexts:- context:    cluster: default    user: default  name: defaultcurrent-context: defaultkind: Configpreferences: {}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-tokenK1042e2f8e353b9409472c1e0cca8457abe184dc7be3f0805109e92c50c193ceb42::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 unitCreated 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 NAMEdefault
$ sudo kubectl cluster-info Kubernetes master is running at https://localhost:6443CoreDNS is running at https://localhost:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
$ sudo kubectl get nodesNAME STATUS ROLES AGE VERSIONk3s-master Ready master 14m v1.14.6-k3s.1k3s-node01 Ready worker 3m11s v1.14.6-k3s.1k3s-node02 Ready worker 3m58s v1.14.6-k3s.1
$ sudo kubectl get namespacesNAME STATUS AGEdefault Active 16mkube-node-lease Active 16mkube-public Active 16mkube-system Active 16m
$ sudo kubectl get endpoints -n kube-systemNAME ENDPOINTS AGEkube-dns 10.42.0.2:53,10.42.0.2:53,10.42.0.2:9153 14mtraefik 10.42.0.5:80,10.42.0.5:443 14m
$ sudo kubectl get pods -n kube-systemNAME READY STATUS RESTARTS AGEcoredns-b7464766c-q9frk 1/1 Running 0 15mhelm-install-traefik-8dhpk 0/1 Completed 0 15msvclb-traefik-9c2j8 2/2 Running 0 4m49ssvclb-traefik-bf9zd 2/2 Running 0 4m2ssvclb-traefik-v2fpx 2/2 Running 0 14mtraefik-5c79b789c5-k589d 1/1 Running 0 14m
复制代码


使用 crictl 命令来查看正在运行的容器


# Master$ sudo crictl psCONTAINER ID        IMAGE               CREATED             STATE               NAME                ATTEMPT             POD IDacfafb50852d3       18471c10e6e4b       16 minutes ago      Running             traefik             0                   bf8534452389ffee5ac7e88f2e       4a065d8dfa588       16 minutes ago      Running             lb-port-443         0                   e7068ff7ab2f2bbab5b07e5efb       4a065d8dfa588       16 minutes ago      Running             lb-port-80          0                   e7068ff7ab2f265c5d1333ea04       2ee68ed074c6e       16 minutes ago      Running             coredns             0                   435c51f4716fc
# Workers$ sudo crictl psCONTAINER ID IMAGE CREATED STATE NAME ATTEMPT POD ID7ad5c83d6466f 4a065d8dfa588 6 minutes ago Running lb-port-443 0 bf8d9fe57c3f3c1380eabc0b33 4a065d8dfa588 6 minutes ago Running lb-port-80 0 bf8d9fe57c3f3

复制代码


大功告成啦!如果你需要更高级的配置,请参阅 k3s 文档:


https://rancher.com/docs/k3s/latest/en/


2020-05-18 18:055659

评论

发布
暂无评论
发现更多内容

阿里巴巴API返回值全解析:轻松掌握1688店铺商品信息

代码忍者

API 接口 pinduoduo API

Serverless + AI 让应用开发更简单

阿里巴巴云原生

阿里云 Serverless 云原生

网易伏羲:智能体驱动 未来可期 | 《天堂硅谷》杂志报道

网易伏羲

AI 网易伏羲 AI 人工智能

PDF如何一键转为PPT?10个好用的格式转换工具汇总!

职场工具箱

效率 效率工具 PPT 办公软件 AI生成PPT

云原生运维入门必看!OpenTelemetry 三大数据类型及核心组件解析

Greptime 格睿科技

运维 云原生

论文领读|tDRO:面向大模型稠密检索的任务级分布鲁棒优化

澜舟孟子开源社区

人工智能 大模型 技术论文

软件测试学习笔记丨测试平台的价值与体系

测试人

软件测试 测试平台

百度智能云携手面壁智能,深化大模型端云协同合作

极客天地

接单流程设计探索

京东科技开发者

未来已来:人工智能赋能软件开发新篇章

天津汇柏科技有限公司

人工智能 软件开发

什么是触发器?

Chat2DB

MySQL 数据库 sql 开源

配置 GreptimeDB 作为夜莺监控数据源,无缝替代 Prometheus/VictoriaMetrics

Greptime 格睿科技

Prometheus 时序数据库 Victoriametrics

BOE(京东方)全新一代发光器件赋能iQOO 13 全面引领柔性显示行业性能新高度

爱极客侠

总计 30 万奖金,Spring AI Alibaba 应用框架挑战赛开赛

阿里巴巴云原生

阿里云 开源 云原生

如何在汽车中构建一个时序数据库 (TSDB)?

Greptime 格睿科技

边缘计算 时序数据库 新能源汽车

浅谈指标平台的价值:赋能企业决策、加速业务响应与提升技术效率

Aloudata

数据仓库 数据分析 指标平台

【FAQ】HarmonyOS SDK 闭源开放能力 —Push Kit(5)

HarmonyOS SDK

HarmonyOS

鸿蒙网络编程系列41-仓颉版HttpRequest模拟登录示例

长弓三石

DevEco Studio 开发实例 HarmonyOS NEXT 网络与连接

从数据提取到管理:合合信息的智能文档处理全方位解析【合合信息智能文档处理百宝箱】

申公豹

人工智能

ARB链挖矿DApp系统开发模式定制

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

揭秘JDQ限流架构:实时数据链路的多维动态带宽管控

京东科技开发者

Just 5分钟!使用k3s部署轻量Kubernetes集群快速教程_文化 & 方法_Rancher_InfoQ精选文章