当关注此博客时,如果您随时查看 EC2 页面,您将找不到已创建的 Fargate 节点的任何实例。从某种意义上来说,它们是真正的无服务器:
如您所见,仅创建了一个 EC2 实例,即我们为有状态层配置的节点的实例。
部署我们的服务
不要忘记先创建tb-demo命名空间,因为数据库和服务部署 智利号码数据 都依赖于它:
kubectl create namespace tb-demoCopy复制
状态数据库层
kubectl apply -f database/database.ymlCopy复制
在我的第一次尝试中,我重用了之前博客文章中的部署文件,但这次 pod 以及持久卷声明仍然停留在待处理状态。
我检查了持久卷声明的状态:
kubectl describe pvc mysql-data-disk --namespace=tb-demoCopy复制
我注意到这个状态行:“等待第一个消费者创建后再绑定”。显然,亚马逊最近更改了与新 EKS 集群一起创建的默认存储类。如果你检查一下 – kubectl describe -,你会注意到VolumeBindingMode设置为WaitForFirstConsumer。该卷绑定模式曾经是Immediate。
您基本上处于教科书式的 22 条军规情形中:pod 正在等待持久卷被声明,并且只有在创建了第一个消费者(即数据库 pod)后才能声明持久卷。
那么该怎么办呢?答案出奇的简单:不要依赖默认存储类,而是创建自己的存储类!
因此,这里是数据库层的修改后的部署配置(请注意,为了简洁起见,仅显示持久卷声明和新的存储类部分):
存储类tb-gp2基于称为gp2的旧默认存储类,但卷绑定模式设置为Immediate。并且持久卷声明现在引用它。
当您应用此部署计划时,您会注意到数据库 pod 最终将按预期进入运行状态。
发出kubectl describe会显示一个状态为“正在运行”的 pod,并且它的节点是我们(不是 Fargate)配置的节点。这是预料之中的,因为它的 app=database 标签与 Fargate fp-demo-service配置文件的选择器不匹配,所以 Fargate 不会选择它。
现在通过发出以下命令再次创建有状态数据库层
-
- Posts: 1281
- Joined: Mon Dec 23, 2024 8:20 am