文章目录
前言
如何在windows10环境下基于multipass搭建一个多节点的k3s环境,然后可以用这个轻量级的环境来学习k8s
一、说明
- 为什么是windows10: 因为我自己的机器就是个win10,而且大部分人,其实用的也是win10
- 为什么是multipass: 因为这个虚拟机管理很轻量,用起来也不错,简单,够用
- 为什么是k3s: k3s是Rancher实验室发布的轻量级Kubernetes发行版,是由CNCF完全认证的Kubernetes产品。
功能上它和k8s没有什么不同,但是它非常轻量级,用来做学习和测试绰绰有余 - 有没有其他的方案: 有,比如windows下安装一个docker-desktop然后开启它的k8s功能,但是这个不太稳定(也可能是在我机器上不稳定),而且是单节点。
二、前置条件
环境
windows10 专业版本
可用资源 4c 16G 100G
目标
搭建一个3节点(server+agent*2)的k3s集群
部署一个应用到k3s集群
三、准备工作
开启windows hyper-v
首先开启硬件虚拟化功能
进bios开启,intel和amd开启方式略有不同,请自行百度
如果这一步无法进行,请关闭本文档
win10 开启hyper-v
控制面板 -> 程序 -> 启用或关闭windows功能 -> 勾选Hyper-V 选项 -> 点击确定
待服务成功开启后,win搜索 -> Hyper-V管理器,打开,代表已经成功启用服务
安装multipass
网址 https://multipass.run/install
选择 windows 点击下载
注意红线中的安装环境需求,当然我们已经开启了hyper-v 就不需要安装virtualbox了
傻瓜式安装,一直下一步即可
安装完成后打开命令行输入
$ multipass version
看到输出
代表成功
创建虚拟机
创建server节点
$ multipass launch jammy -n k3s -c 2 -m 4G -d 10G
创建2个agent节点
$ multipass launch jammy -n k3s-w1 -c 2 -m 4G -d 10G
$ multipass launch jammy -n k3s-w2 -c 2 -m 4G -d 10G
等待创建完成后
$ multipass ls
显示
表示成功
注意,本文档所有软件版本和安装说明均基于当前(24年4月)时间,当前版本1.13.1的multipass, 安装的是 ubuntu 22.04(既命令中的jammy)
四、安装k3s
server节点启动k3s
进入k3s虚机
$ multipass shell k3s
进入后切换到root用户,开始安装
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -
对于这段命令官网有更详细的说明
安装完成后,看一下服务状态
$ systemctl status k3s
查看nodes
$ kubectl get nodes
服务显示running且能看到节点状态ready表示成功
可选配置
默认情况下multipass创建的虚机,ip会在虚机重启后发生改变,如果server节点的ip发生了变化,这将导致集群中的agent节点失联,所以最好为server节点配置静态ip,配置方法在我另一篇文章中
windows下multipass虚机设置静态ip
这是个可选配置(如果你搭好了集群就不关机或者就想一次性使用的话忽略以上配置)
创建agent节点
先获取server节点的token
在进入k3s虚机,切换到root用户(或者sudo)执行
$ cat /var/lib/rancher/k3s/server/node-token
会得一个token字符串,记录下来,之后会用于agent节点的创建(agent节点的加入需要该token用于验证)
退出到windows命令行,执行
$ multipass ls
记录下k3s节点(server节点)的 IPv4
此时我们已经有了 token 和 serverIP
现在进入之前创建的两台虚机上(k3s-w1和k3s-w2)切换到root用户并执行
$ curl –sfL https://rancher-mirror.oss-cn-beijing.aliyuncs.com/k3s/k3s-install.sh | \
INSTALL_K3S_MIRROR=cn K3S_URL=https://serverIP:6443 K3S_TOKEN=token sh -s -
注意,替换命令中的token和serverIP为刚刚记录的值
对于这段命令官网有更详细的说明
检查结果,切换到k3s节点(server节点),使用root账户,执行
$ kubectl get nodes
所有节点状态 Ready,代表全部创建成功
部署应用
说明
此处部署一个应用仅为验证集群的可用性,并获得对k3s集群操作的初步印象,因此本次部署将直接在server节点上从.yaml文件进行
部署mysql
进入k3s节点(server节点)
创建一个mysql.yaml文件,写入
# 创建mysql应用容器
apiVersion: v1
kind: ReplicationController
metadata:
name: mysql-db1
spec:
replicas: 1
selector:
app: mysql-db1
template:
metadata:
name: mysql-db1
labels:
app: mysql-db1
spec:
containers:
- name: mysql-db1
image: mysql
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: "123456"
---
# 创建nodeport,暴露mysql服务到外部
apiVersion: v1
kind: Service
metadata:
name: mysql-db1-service
spec:
type: NodePort
ports:
- port: 3306
targetPort: 3306
# 默认端口范围为 30000~32767,本配置下30036端口将能被宿主机访问
nodePort: 30036
selector:
app: mysql-db1
然后执行
$ kubectl create -f YOURPATH/mysql.yaml
注意,替换其中的YOURPATH为mysql.yaml文件所在路径
验证
$ kubectl get pods
$ kubectl get svs
能看到pod和service已经创建,现在在windows宿主机上尝试连接数据库(可能需要等待几分钟)
连接成功,部署完成
总结
本文仅是最基本的k3s部署和应用说明,其中使用的k3s部署和mysql部署也并非真实生产服部署方式