由于k8s对硬件要求比较苛刻,所以咱们使用k3s来模拟练习
下面是k3s的中文官网
docs.k3s.io/zh
使用k3s前需要在服务器上先安装一个k3s脚本
咱们这里购买了三台阿里的服务器
到这里是安装完成,那么为什么要三台服务器呢,因为咱们要做的不是单节点操作而是集群。在k3s官网下面还有一串命令。
咱们一开始在ss1服务器上安装脚本是来用做管理集群,当然可能会有个问题,那ss1算不算上的是一个节点呢?一个肯定的回答,算!
但是是不合理的,比如来说你是一个公司的老板,你平时的工作就是来管理手里的员工,难道你不可以来做员工的工作吗?可以,但是没有必要,你一边来管理员工,一边来做工作,你这个人压力肯定就非常大,反过来说对服务器的配置肯定要求就比较高了。
那么先来开始部署集群
咱们复制过来需要改俩点,在这个myserver,改成ss1的私网ip,k3stoken这里需要改成/var/lib/rancher/k3s/server/node-token这个路径下的密钥
linux的查询文件命令是cat,也就是cat /var/lib/rancher/k3s/server/node-token。
改完运行就欧克了,两台服务器同理。
由于我做的是个集群项目,接下来忽略手敲命令的方式,使用更简单的配置文件的方式需要用我们的vscode工具。
为什么简单就在这,有提示,代码就好敲的多。
还需要连接服务器的插件
连接上服务器后新建一个文件夹,来做为咱们的工作区。
然后进入文件夹,新建一个deploy.yaml配置文件
其中metadata的name是指对象的名称,也就是咱们的名称是spring
而spec 是一个缩写,代表了一个 Kubernetes 对象的规范(specification)。每个 Kubernetes 对象都有一个 spec 部分,用于定义对象的期望状态和行为。
通常,spec 部分会包含对象的各种配置信息,比如容器镜像、副本数、资源限制、标签选择器、服务端口、持久化存储、容器重启策略等等。这些配置信息可以帮助 Kubernetes 管理容器化应用程序的部署、伸缩、扩展、升级和故障恢复等方面的任务。
replicas就是副本数,我这里设置为3因为是集群嘛,多设置几个效果比较直观。
selector 是一个用于选择 Kubernetes 对象的标签的机制
通过 Deployment 对象的 selector,可以选择一组符合特定标签的 Pod 对象,并在它们上面执行伸缩、升级、回滚等操作。
通过 Service 对象的 selector,可以将一组符合特定标签的 Pod 对象组成一个服务,并为它们提供一个唯一的 IP 地址和端口号,以便其他对象可以通过这个 IP 地址和端口号来访问这个服务。
template 是一个用于定义 Pod 模板的部分,用于指定创建新 Pod 的规范和配置信息。template 通常作为 Kubernetes 对象的 spec 部分的子部分,用于创建和管理 Pod。
在一个 Kubernetes 对象的 template 部分中,通常会包含以下配置信息:
metadata:Pod 对象的元数据,包括名称、标签等等。
spec:Pod 对象的规范,包括容器镜像、容器端口、资源限制、环境变量等等。
template 的作用是为 Kubernetes 提供一种灵活的方式来创建和管理多个 Pod。当 Kubernetes 管理器需要创建新的 Pod 时,它会根据 template 的定义来创建新的 Pod,并根据 Pod 的标签和 selector 来进行管理和操作。
image后面就是我镜像仓库的位置,我写了一个后端用docker上传到我的阿里镜像仓库上
ports就是我镜像的端口3000
随后运行这个配置文件,发现有三个pod说成功了
spec的type提供了节点暴露的服务,用于之后用服务器的公网IP来看效果。
该服务将端口3001公开,并将流量转发到目标端口3000。它还指定将节点端口(nodePort)设置为30002,这意味着可以通过访问节点的IP地址和端口30002来访问该服务。
运行一下后 get到私网ip和公开端口
使用curl测试一下用私网ip和公开的端口跟上我后端的info路径发现成功
在横线前面是当前的主机横线后面exec是我的线程,可以看到我多次访问线程在变化而主机没变,这是因为我还没在阿里云做slb当前只在这一台主机跑我的镜像
接下来做的就是slb(负载均衡)
将三台服务器创建成一个服务器组,并将端口设置成节点端口(nodePort)30002
监听完成后就这个demo就做完了,因为游览器机制,运行效果不直观,所以我用的是http请求效果如下:
一共是三台主机,这个小项目就成了。
接下来是一些命令,怕我自己记不住
crictl images 因为是k3s不是docker所以无法用docker命令来查看镜像但是k3s本身有容器技术所以这个命令就是来看服务器镜像的
kubectl delete deploy/ng-deploy 这个就是删除一个对象在斜线前面就是对象的类型通常就是pod service deploy 后面就名字了选择类型选择类型对象的名字
kubectl create deploy ng-deploy 创建一个名字为ng-deploy的deploy
--image={镜像路径}测试可用nginx
kubectl run ss --image=nginx 创建一个名字为ss的pod对象
kubectl scale --replicas=4 deploy/ng-deploy 给一个对象类型为deploy名字为ng-deploy的副本添加到4个
kubectl expose deploy ng-deploy --port=3000 --target-port=80 --type=NodePort 给一个对象类型为deploy名字为ng-deploy的公开端口设置为3000,目标端口设置为80