搞机 linux

在机顶盒上部署一套k3s集群

Posted on 2024-05-22,7 min read
封面图

捡垃圾好多年,攒了好多个机顶盒,都可以运行armbian系统,但每个盒子的磁盘都只有8G,用来跑docker服务没几个就磁盘满了,老是要我来规划哪些个服务跑在哪个机顶盒上,还要在路由器上设置端口转发,十分得不优雅,急需部署一套集群来自动编排这些docker应用,并且便宜的机顶盒如Q5仅需50元一个,以后资源不够了加机也很方便,还能挂载局域网中的共享存储给集群使用,非常的现代化

hostname IP 型号 CPU内存配置 磁盘 Role
k3s-master-octupos 192.168.123.3 章鱼星球 8C2G 8G Master
k3s-worker-n1 192.168.123.4 斐讯N1 4C2G 8G Worker

1.系统准备

  1. 下载章鱼星球和斐讯N1的armbian镜像ophub/amlogic-s9xxx-armbian
  2. 使用balenaEtcher写入U盘
  3. 机顶盒插入U盘,上电开机,如果机顶盒中已经是armbian或openwrt系统会默认从U盘启动,如果是安卓系统,可以安装Reboot to liberelec(需要root权限)从U盘启动
  4. 执行命令刷入armbian系统armbian-install,刷写完输入命令poweroff关机,拔出U盘重新上电

2.部署k3s Master节点

参考geekhour的教程

# 安装k3s的master节点
curl -sfL https://get.k3s.io | sh -
# 如果安装失败可以使用ranher的镜像源来安装
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -
# 安装完成后查看集群状态
kubectl get nodes
# 查看token,在下一步创建worker节点时需要认证
cat /var/lib/rancher/k3s/server/node-token

3.部署worker节点

  1. 需要用到token和Master节点的ip,在geekhour的教程中部署了多个worker节点,所以将token和ip写入到了环境变量中,利用for循环给多个worker进行部署,我暂时只有一个worker,直接输入token和ip也可以
export MASTER_IP=192.168.123.3
export TOKEN=部署Master节点时获取的token
bash -c "curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn K3S_URL=\"https://$MASTER_IP:6443\" K3S_TOKEN=\"$TOKEN\" sh -"

此时再去Master节点上执行kubectl get node可以看到集群一主一从两个节点已经ready

但是在worker节点上执行kubectl get node出现了报错

4.解决worker节点无法执行kubectl命令

询问chatgpt,给出的解决办法如下:

  1. 确认worker节点的kubectl配置kubectl config view
  2. kubectl config view的输出来看,worker节点的kubectl配置为空,需要从master节点获取一份正确的配置,在 K3s 集群中,默认的 Kubeconfig 文件位于 /etc/rancher/k3s/k3s.yaml。我需要将这个文件复制到你的用户目录中,并设置 KUBECONFIG 环境变量指向它。
  3. 复制k3s.yaml到worker节点
    mkdir -p ~/.kube
    scp root@192.168.123.3:/etc/rancher/k3s/k3s.yaml ~/.kube/config
    
  4. 修改文件权限
    确保kubectl可以访问这个文件,设置正确的文件权限:
    chmod 600 ~/.kube/config
    
  5. 设置KUBECONFIG环境变量
    确保你的KUBECONFIG环境变量指向这个配置文件。你可以在终端中临时设置它,或者将其添加到你的shell配置文件(例如.bashrc或.zshrc)中:
    export KUBECONFIG=$HOME/.kube/config
    
    如果你希望这个设置在每次登录时都生效,可以将上面的命令添加到你的shell配置文件中。例如,编辑.bashrc文件:
    echo 'export KUBECONFIG=$HOME/.kube/config' >> ~/.bashrc
    source ~/.bashrc
    
  6. 验证配置
    现在你可以验证kubectl是否已经正确配置并能够连接到你的K3s集群。

5.安装Helm

Helm安装在任何可以访问 Kubernetes 集群的机器上,不一定要安装在Master节点上
执行命令curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

6.安装cert-manager

# 添加Helm Chart仓库
helm repo add "stable" "https://charts.helm.sh/stable" --force-update
helm repo add rancher-stable https://releases.rancher.com/server-charts/stable
# 定义一个Kubernetes名称空间,Chart创建的资源应该安装在这个名称空间中:cattle-system
kubectl create namespace cattle-system
# 安装cert-manager
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.14.5/cert-manager.crds.yaml
# Add the Jetstack Helm repository
helm repo add jetstack https://charts.jetstack.io
# Update your local Helm chart repository cache
helm repo update
# Install the cert-manager Helm chart
helm install cert-manager jetstack/cert-manager --namespace cert-manager --create-namespace


master点也报了这个连接超时的错,再把步骤4中chatgpt给出的解决办法在master节点也操作一遍

mkdir -p $HOME/.kube
sudo cp /etc/rancher/k3s/k3s.yaml $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=$HOME/.kube/config
echo 'export KUBECONFIG=$HOME/.kube/config' >> ~/.bashrc
source ~/.bashrc

重新安装cert-manager

helm install cert-manager jetstack/cert-manager --namespace cert-manager --create-namespace

又报了个等待超时的错,但是查看cert-manager命名空间下的资源,都挺健康,可能是由于机顶盒性能太弱起来的太慢导致超时,所以我直接进行下一步

重装完k3s 1.28版本后又试了一遍,应该确实是因为pod启动得慢了

7.安装Rancher

helm install rancher rancher-stable/rancher --namespace cattle-system --set hostname=rancher.tianfeng.com

蚌埠住了😰竟然要版本低于1.29.0

8.卸载k3s,重装低版本

按照官方文档来操作

可以先停止k3s服务再进行卸载

sudo systemctl stop k3s
sudo systemctl disable k3s

重新安装低于1.29的k3s,这里我使用最后一个1.28版本

# 重新安装master节点的k3s
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn INSTALL_K3S_VERSION=v1.28.9+k3s1 sh -

worker节点:

export MASTER_IP=192.168.123.3
export TOKEN=部署Master节点时获取的token
bash -c "curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn INSTALL_K3S_VERSION=v1.28.9+k3s1 K3S_URL=\"https://$MASTER_IP:6443\" K3S_TOKEN=\"$TOKEN\" sh -"

9使用portainer

机顶盒性能太弱,部署rancher一直无法正常启动,换成轻量化的portainer来管理


下一篇: 京东云路由器AX1800Pro(亚瑟)刷QWRT→

loading...