产品战略专家梁宁确认出席AICon北京站,分享AI时代下的商业逻辑与产品需求 了解详情
写点什么

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:054582

评论

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

IOTA架构实战:大数据即时多维查询引擎构建【视频】

易观大数据

大数据 架构模式 查询引擎 数据算法

MQ 核心概念

陈皮

「架构师训练营」第五周作业

旭东(Frank)

算法 极客大学架构师训练营 哈希 一致性哈希

阿里巴巴、百度、美团都在用的 Spring Cloud 微服务架构

java通天架构哪吒

Spring Cloud SpringCloud

Intellij IDEA必备插件,提高效率的“七种武器”

码农神说

面试 IDEA idea插件

架构师训练营第5周作业

时来运转

架构师训练营第五章总结

吴吴

「架构师训练营」Week5作业

Frank Zeng

陈芳,高考之后我要学计算机专业,将来干IT发财了,我就娶你!

张小方

程序员 面试 薪资 毕业

负载均衡(Load Balance)

陈皮

【架构师训练营】第五周总结

Mr.hou

极客大学架构师训练营

分布式技术总结

LEAF

计算机操作系统基础(十五)---使用fork系统调用创建进程

书旅

php laravel 操作系统 进程 线程’

第5周总结

娄江国

极客大学架构师训练营

架构师训练营 第五周 基于虚拟节点的一致性Hash算法作业

且听且吟

极客大学架构师训练营

学习总结 -- Week 5

吴炳华

极客大学架构师训练营

第五周总结

秦宝齐

课程作业

架构师训练营第五周作业

王铭铭

架构师训练营第五周总结

sunnywhy

架构感悟5-算法之美

旭东(Frank)

架构 算法 感悟 极客大学架构师训练营

UC Token即将强势登陆

Geek_116789

互联网中的缓存

陈皮

Week 05 学习总结

卧石漾溪

极客大学架构师训练营

基于领域驱动设计的业务中台架构设计

冯文辉

中台 业务中台 领域驱动设计 DDD

架构师训练营Week 05 学习总结

Frank Zeng

第五周总结

Acker飏

极客大学架构师训练营

【架构师训练营】第五周作业

Mr.hou

极客大学架构师训练营

分布式缓存 - 第五周总结

孙志平

架构师训练营第五周总结

王铭铭

架构师训练营第五章作业

吴吴

架构师训练营第5周总结

时来运转

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