当前位置: 首页 > news >正文

安装部署k3s

本文以arm64 cpu作为实验

K3s 是轻量级的 Kubernetes,精简了很多 K8s 组件,非常适合在性能较弱的机器上运行,支持 IoT 设备,支持 arm 架构,很适合在 vps 上轻量部署。正好手里有几台 vps,于是决定用 K3s 统一进行管理。

官网:K3s 官网

在官网下面有 Get Started 部分,列出了启动 server 和 agent 节点的简单命令,但是对我们而言还不够,所以参考官网文档进行安装配置。具体的安装文档可以参见:安装选项介绍。

K3s 安装

准备工作

由于 K3s 默认运行环境为 containerd,所以为了使用 Docker 作为运行时,需要先在各节点正常安装 Docker,安装过程不再赘述。

安装 master 节点

根据个人需求,按需设置 master 节点的安装参数。由于个人使用,不要多节点部署实现高可用,所以禁用 servicelb 组件。traefik 虽然是 K3s 自带的网络组件,但是其默认会占用 80 和 443 端口,所以也不打算使用。最后完整的安装参数为:

curl -sfL https://get.k3s.io | INSTALL_K3S_SKIP_SELINUX_RPM=true INSTALL_K3S_EXEC="--docker --disable servicelb --disable traefik --disable-cloud-controller" sh -
# 或使用国内镜像
curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn INSTALL_K3S_SKIP_SELINUX_RPM=true INSTALL_K3S_EXEC="--docker --disable servicelb --disable traefik --disable-cloud-controller" sh -

安装完成之后我们可以通过 kubectl get node 来看一下节点的情况:

安装 agent 节点

由于 agent 节点需要与 master 节点进行通信校验,在安装时需要指定 token,所以需要从 master 节点获取安装 token:

root@ubuntu-master:~# cat /var/lib/rancher/k3s/server/node-token
K10995e6e37eec07447411d8f8fcf025c3ed6f9a134e30e896ac4c2a7c4f8e6b587::server:f0af86641d91b09cc7707f25586b77e5

然后与 master 节点类似,指定 agent 节点的参数进行安装:

curl -sfL https://get.k3s.io | K3S_URL=https://MASTER_URL:6443 K3S_TOKEN=NODE_TOKEN INSTALL_K3S_SKIP_SELINUX_RPM=true INSTALL_K3S_EXEC="--docker" sh -
# 或使用国内镜像
curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn K3S_URL=https://MASTER_URL:6443 K3S_TOKEN=NODE_TOKEN INSTALL_K3S_SKIP_SELINUX_RPM=true INSTALL_K3S_EXEC="--docker" sh -

然后同样的方式,安装其他 agent 节点。

验证安装

各节点安装完成后,再次在 master 节点查看各节点状态:

K3s 配置

为 master 分配 worker 角色

默认情况下,master 节点只有 control-plane 和 master 两个角色,但是由于 master 节点性能过剩,所以可以为 master 节点添加 worker 角色来运行服务:

kubectl label node ${node} node-role.kubernetes.io/worker=worker

然后我们再来看一下节点信息:

在 agent 节点上使用 kubectl 命令

默认 agent 节点安装完毕后,是不能使用 kubectl 命令的:

我们可以通过环境变量指定配置文件位置,或在使用 kubectl 命令时指定配置文件位置,但为了方便使用需要 EXPORT 环境变量或者设置 alias 别名。不过我们可以把配置文件放在 ~/.kube/config,这样 kubectl 命令可以自动应用配置文件。把 master 节点机器上的 /etc/rancher/k3s/k3s.yaml 文件内容写入到 config 文件,不要忘记修改 server 地址改为 master 节点地址:

然后我们再来执行下 kubectl 命令,执行正常:

安装 Kubernetes 仪表盘

参考文档:Kubernetes 仪表盘

部署仪表盘程序

首先直接用 Kubernetes 官方的推荐配置进行部署:

GITHUB_URL=https://github.com/kubernetes/dashboard/releases
VERSION_KUBE_DASHBOARD=$(curl -w '%{url_effective}' -I -L -s -S ${GITHUB_URL}/latest -o /dev/null | sed -e 's|.*/||')
k3s kubectl create -f https://raw.githubusercontent.com/kubernetes/dashboard/${VERSION_KUBE_DASHBOARD}/aio/deploy/recommended.yaml
配置仪表盘角色

按文档创建用户相关 yml 配置文件:

dashboard.admin-user.yml

apiVersion: v1
kind: ServiceAccount
metadata:name: admin-usernamespace: kubernetes-dashboard

dashboard.admin-user-role.yml

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: admin-user
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: cluster-admin
subjects:- kind: ServiceAccountname: admin-usernamespace: kubernetes-dashboard

然后部署用户角色配置:

k3s kubectl create -f dashboard.admin-user.yml -f dashboard.admin-user-role.yml

最后获取仪表盘 token 以供访问:

k3s kubectl -n kubernetes-dashboard describe secret admin-user-token | grep '^token'

测试访问仪表盘

由于 Kubernetes 仪表盘运行在集群内部,无法直接从外部访问,所以我们需要使用集群代理。打开一个新窗口,并执行一下命令开启代理:

k3s kubectl proxy

然后可以通过 http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/ 来访问 Kubernetes 仪表盘。

或是直接使用端口转发,但是同样需要保持前台运行:

# 首先获取 service name 和暴露端口
kubectl get service -nkubernetes-dashboard
# 然后进行端口转发
kubectl port-forward service/kubernetes-dashboard 8443:443 -nkubernetes-dashboard
# 如果需要远端访问的话
kubectl port-forward service/kubernetes-dashboard 8443:443 -nkubernetes-dashboard --address 0.0.0.0
配置端口转发

为了使用方便,当然不能每次都打开终端启动代理来访问 Kubernetes 仪表盘。但是由于我们安装的时候没有安装 lb 和网络组件,所以只能使用 NodePort 来对外暴露服务。同理也适用于其他服务。

首先打开 Kubernetes 仪表盘,切换到 kubernetes-dashboard 命名空间,然后打开 Service tab 页,编辑 kubernetes-dashboard 项。将配置文件中 type 的值改为 NodePort,然后在 ports 下面添加 nodePort: 31001,其中 31001 是宿主机要监听的端口号,修改完成后点击更新应用配置。

注意,由于 NodePort 限制,默认限制端口范围只能为 30000-32767,具体可以看 kubernetes 官方文档:NodePort 类型。

配置更新后就可以直接从外部用浏览器访问宿主机映射之后的端口,或者再结合反代对外暴露使用。

agent 节点
sudo curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn K3S_URL=https://192.168.1.198:6443 K3S_TOKEN="K1000c2db0112a1da167a65656913146d0a35c54a0b040a21e95c0dab8af39dbd4d::server:af39cf7f247c858b248131b320615697" sh -
 

http://www.xdnf.cn/news/1437463.html

相关文章:

  • Java试题-选择题(29)
  • 算法题打卡力扣第3题:无重复字符的最长子串(mid)
  • Suno AI 新功能上线:照片也能唱歌啦!
  • Netty从0到1系列之NIO
  • 进程优先级(Process Priority)
  • 猫猫狐狐的“你今天有点怪怪的”侦察日记
  • CentOS7安装Nginx服务——为你的网站配置https协议和自定义服务端口
  • Java注解深度解析:从@ResponseStatus看注解奥秘
  • 大模型RAG项目实战:Pinecone向量数据库代码实践
  • 二叉树经典题目详解(下)
  • 【数据分享】31 省、342 个地级市、2532 个区县农业机械总动力面板数据(2000 - 2020)
  • MySQL数据库——概述及最基本的使用
  • Python实现浅拷贝的常用策略
  • Vite 插件 @vitejs/plugin-legacy 深度解析:旧浏览器兼容指南
  • 【Linux】信号量
  • 09.01总结
  • LeetCode算法日记 - Day 30: K 个一组翻转链表、两数之和
  • 基于Springboot和Vue的前后端分离项目
  • playwright+python UI自动化测试中实现图片颜色和像素对比
  • milvus使用
  • Hard Disk Sentinel:全面监控硬盘和SSD的健康与性能
  • Python学习-day4
  • 2026届长亭科技秋招正式开始
  • 算法 --- 模拟
  • NLP学习系列 | Transformer代码简单实现
  • Zephyr如何注册设备实例
  • [Java]PTA:jmu-Java-01入门-取数字浮点数
  • 自学嵌入式第三十三天:网络编程-UDP
  • Day19(前端:JavaScript基础阶段)
  • 分布式中防止重复消费