使用k3s部署轻量Kubernetes集群快速教程

1,969 阅读3分钟

k3s是轻量级的Kubernetes。安装简单,占用资源少,只需要512M内存就可以运行起来,所有的二进制程序都不到 100MB。

自 2019 年 3 月发布以来,备受全球开发者们关注。至今,GitHub Stars 数已超过 16,000,成为了开源社区最受欢迎的边缘计算K8S解决方案。

k3s 专为在资源有限的环境中运行 Kubernetes 的研发和运维人员设计,将满足日益增长的在边缘计算环境中运行在 x86、ARM64 和 ARMv7 处理器上的小型、易于管理的 Kubernetes 集群需求。k3s 的发布,为开发者们提供了以“Rancher 2.X + k3s”为核心的从数据中心到云到边到端的 K8S 即服务(Kubernetes-as-a-Service),推动 KubernetesEverywhere。

为什么叫k3s?

我们希望安装的 Kubernetes 在内存占用方面只是原来一半的大小。Kubernetes 是一个 10 个字母的单词。所以,有 Kubernetes 一半大的东西就是一个 5 个字母的单词,简写为 K3S。K3s没有全称,也没有官方的发音。

使用k3s部署轻量K8s集群

在Master节点上安装k3s

运行k3s的方式有很多,最快的方式是通过提供的bash脚本进行安装,同时该脚本提供了一个便捷的方式来安装到systemd或openrc。

curl -sfL get.k3s.io | sh

安装完成之后,服务会自动启动。

$ 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

将kubeconfig文件写入/etc/rancher/k3s/k3s.yaml:

cat/etc/rancher/k3s/k3s.yamlcat:/etc/rancher/k3s/k3s.yaml:Permissiondenieddebian@deb10:  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 get.k3s.io | K3S_URL=k3surlK3STOKEN={k3s_url} K3S_TOKEN={k3s_token} sh -

安装输出:

[INFO] Finding latest release [INFO] Using v0.8.1 as release [INFO] Downloading hash github.com/rancher/k3s… [INFO] Downloading binary github.com/rancher/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官方文档:

rancher.com/docs/k3s/la…