文章482
标签257
分类63

单机部署autok3s

在上一篇文章 《单机部署k3s》 中,我们讲了k3s的部署,这篇主要是讲解如何使用autok3s快速部署一个k3s集群;

autok3s快速启动脚本:


单机部署autok3s

AutoK3s介绍

上一篇文章 《单机部署k3s》 讲述了 k3s 的基本部署和使用。

由于在 k3s 上,默认 master 节点是可以作为工作节点的(tainted),因此我们可以直接使用我们的单节点 k3s;

不过如果想要增加 worker 节点、将单个 master 节点变为高可用的集群,还是比较麻烦的;

此时可以使用 autok3s 来部署 k3s 集群;

AutoK3s 是用于简化 K3s 集群管理的轻量级工具,可以使用 AutoK3s 在任何地方运行 K3s 服务!

下面是来自 AutoK3s 文档中展示的一些 feature:

  • 通过 API、CLI 和 UI 等方式快速创建 K3s。
  • 云提供商集成(简化 CCM 设置)。
  • 灵活安装选项,例如 K3s 集群 HA 和数据存储(内置 etcd、RDS、SQLite 等)。
  • 低成本(尝试云中的竞价实例)。
  • 通过 UI 简化操作。
  • 多云之间弹性迁移,借助诸如 backup-restore-operator 这样的工具进行弹性迁移。

同时,AutoK3s 可以支持多个云厂商:

  • 阿里云 - 在阿里云的 ECS 中初始化 K3s 集群
  • AWS - 在亚马逊 EC2 中初始化 K3s 集群
  • Google - 在Google GCE 中初始化 K3s 集群
  • 腾讯云 - 在腾讯云 CVM 中初始化 K3s 集群
  • Native - 在任意类型 VM 实例中初始化 K3s 集群
  • K3d - 使用 K3d 在宿主机 Docker 中初始化 K3s 集群
  • Harvester - 在 Harvester 实例中初始化 K3s 集群

当然,我觉得最方便的就是 K3d 的形式,即:直接在宿主机 Docker 中初始化 K3s 集群!

autok3s 官方文档:


部署AutoK3s

对于学习、研究来说 K3d 的形式是最好,也是最方便的:你只需要一台安装了 Docker 的设备即可!

可以通过下面的命令直接一键部署好 AntoK3s:

docker run -itd --restart=always --name=my-autok3s --net host -v /var/run/docker.sock:/var/run/docker.sock cnrancher/autok3s:v0.5.2

这里需要注意,如果想要在 docker 中使用 K3d provider,则需要使用宿主机网络启动 AutoK3s 镜像,即声明:

  • --net host

同时由于我们是 K3d 的形式,因此也必须将 docker.sock 挂载到容器中!

可以看到容器已经起来了:

$ docker ps -l
CONTAINER ID   IMAGE                      COMMAND                  CREATED              STATUS              PORTS     NAMES
ec80a4bc165e   cnrancher/autok3s:v0.5.2   "autok3s serve --bin…"   About a minute ago   Up About a minute             my-autok3s

我们可以直接通过访问 server-ip:8080 访问 AutoK3s!

Mac 部署AutoK3s有坑!更多内容,见:


使用AutoK3s快速创建一个集群

我们可以使用快速创建功能,在指定的云提供商服务中,快速启动一个K3s集群!

以下图为例,我们将在 Docker 中使用默认配置创建一个单节点的 K3s 集群:

简单情况下,可以只设置 master、worker节点数,以及集群名称即可部署!

具体内容可见:


集群管理

添加节点

在集群管理中,我们可以选中要添加节点的集群,点击右侧下拉菜单中的 Join Node 按钮,在弹出的窗口中设置要添加的节点数量即可;


配置kubeconfig

几乎所有场景我们都会使用 kubectl 来管理我们的集群,此时可以点击右上角 Launch Kubectl 按钮,在下拉框中选择要操作的集群后,便可以在 UI 控制台操作选中的集群;

不过这种方式需要在 Web 界面去操作,非常麻烦;

AutoK3s 还提供了Kubeconfig 文件,可以单独下载指定集群的 Kubeconfig 文件!

点击指定集群右侧下拉菜单中的 Download KubeConfig 按钮,在弹出窗口中选择复制或下载文件;

img

随后将文件内容写到,例如:

  • ~/.kube/config

然后配置环境变量:

$ vi ~/.bashrc
export KUBECONFIG=/root/.kube/config

$ source ~/.bashrc

最后切换 kubectl 的 context:

kubectl config use-context k3d-my-k3s

上面的 k3d-my-k3s 由你的 k3s 集群名称决定,取 contexts.context.name 配置即可!

下面测试:

$ kubectl get nodes -A
NAME                  STATUS   ROLES                  AGE   VERSION
k3d-my-k3s-agent-0    Ready    <none>                 10m   v1.21.7+k3s1
k3d-my-k3s-server-0   Ready    control-plane,master   10m   v1.21.7+k3s1
k3d-my-k3s-agent-2    Ready    <none>                 10m   v1.21.7+k3s1
k3d-my-k3s-agent-1    Ready    <none>                 10m   v1.21.7+k3s1

可以看到,所有的节点都已经被创建!


开启kube-explorer dashboard

可以在Web界面通过右侧下拉菜单中选择 Enable Explorer 功能来开启 kube-explorer;

img


测试K3s集群

前面说了那么多,最后当然是要真正部署一个应用来测试我们的 K3s 集群了!

这里选用了 busybox 镜像,这是一个包含了许多最常用linux命令和工具的软件镜像;

首先我们创建一个 yaml 配置文件:

busybox-deploy.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: busybox
  namespace: demo
spec:
  replicas: 3
  selector:
    matchLabels:
      app: busybox
  template:
    metadata:
      labels:
        app: busybox
    spec:
      containers:
      - name: busybox
        image: busybox:1.35.0
        args:
        - /bin/sh
        - -c
        - sleep 10; touch /tmp/healthy; sleep 60
        readinessProbe: # 就绪探针
          exec:
            command:
            - cat
            - /tmp/healthy
          initialDelaySeconds: 10 # 10s之后开始第一次探测
          periodSeconds: 5 # 第一次探测之后每隔5s探测一次

上面在 namespace 为 demo 的命名空间:

  • 指定了 busybox Deployment;
  • 使用镜像 busybox:1.35.0
  • 创建 replicas: 3 个副本;
  • 初始化指令:/bin/sh -c "sleep 10; touch /tmp/healthy; sleep 60"
  • 健康检查:cat /tmp/healthy,服务启动 10s之后开始第一次探测,第一次探测之后每隔5s探测一次;

上面用到了新的 namespace,我们先创建:

$ kubectl create ns demo
namespace/demo created

$ kubectl get ns -A
NAME              STATUS   AGE
default           Active   5h50m
kube-system       Active   5h50m
kube-public       Active   5h50m
kube-node-lease   Active   5h50m
demo              Active   12s

namespace 创建成功;

下面部署我们的服务:

$ kubectl apply -f busybox-deploy.yaml 
deployment.apps/busybox created

$ kubectl get po -n demo -w
NAME                       READY   STATUS              RESTARTS   AGE
busybox-74574b56f4-dnz4k   0/1     ContainerCreating   0          1s
busybox-74574b56f4-k6t6w   0/1     ContainerCreating   0          1s
busybox-74574b56f4-2xqnq   0/1     ContainerCreating   0          1s
busybox-74574b56f4-dnz4k   0/1     Running             0          3s
busybox-74574b56f4-k6t6w   0/1     Running             0          4s
busybox-74574b56f4-2xqnq   0/1     Running             0          8s
busybox-74574b56f4-dnz4k   1/1     Running             0          15s
busybox-74574b56f4-k6t6w   1/1     Running             0          15s
busybox-74574b56f4-2xqnq   1/1     Running             0          20s

可以看到,我们服务的 3个副本很快就已经部署成功了!

$ kubectl get po -n demo -owide
NAME                       READY   STATUS    RESTARTS   AGE   IP          NODE                  NOMINATED NODE   READINESS GATES
busybox-74574b56f4-dnz4k   1/1     Running   0          96s   10.42.3.6   k3d-my-k3s-agent-0    <none>           <none>
busybox-74574b56f4-k6t6w   1/1     Running   0          96s   10.42.0.5   k3d-my-k3s-server-0   <none>           <none>
busybox-74574b56f4-2xqnq   1/1     Running   0          96s   10.42.1.4   k3d-my-k3s-agent-2    <none>           <none>

并且,由于 K3s 默认的 master 节点也可以部署,因此有一个 pod 被部署到了 master 节点(busybox-74574b56f4-k6t6w);


总结

相比于使用 k3s 单个部署,AutoK3s 提供了更方便的工具可以直接部署整个 K3s 集群!

还等什么,快去部署你自己的 K3s 集群吧!


附录

autok3s快速启动脚本:



本文作者:Jasonkay
本文链接:https://jasonkayzk.github.io/2022/10/22/单机部署autok3s/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可