10.3.1 创建应用和容器镜像
Web Server:
- POST: 接收数据并写入文件
- GET: 返回主机名和数据
10.3.2 通过 Statefulset 部署应用
需要创建的对象:
- 持久卷
- 持久卷的动态供应
- 手动创建 (不支持动态时使用该方法)
- Service
- Statefulset
创建持久化存储卷
手动创建.

List 对象是在同一 yaml 文件中定义多个资源对象的另一种方法.
手动创建持久卷可以参考第6章.
创建控制 Service
headless Service:
- 用于在有状态的 pod 之间提供网络标识 (pod 之间可以彼此发现)

创建 Statefulset 详单


Statefulset 创建指定 pod 时, 会自动添加 PersistentVolumeClaim 到 pod 详述中, 然后将这个卷关联到一个声明上.
这里再放一下直接使用持久卷声明的例子:

不太清楚持久卷声明模板创建的持久卷声明是如何与持久卷进行关联的. 这里提到 k8s 将它们进行关联.
创建 Statefulset
$ kubectl create -f kubia-statefulset.yaml
列出 pod:
$ kubectl get po
Statefulset 是顺序创建 pod 的, 不是同时启动所有 pod.
- 原因是有状态的 pod 可能会产生竞态条件
检查生成的有状态 pod

与代码清单6.12类似.
检查生成的持久卷声明

10.3.3 使用你的 pod
通过 API 服务器与 pod 通信
API 服务器与 pod 通信过程繁琐 (需授权令牌), 所以使用 proxy 来与 API 服务器通信:
- proxy -> API -> pod
启动代理:

访问 pod:


发送 POST 请求:

再次访问 pod:

删除一个有状态的 pod 来检查重新调度的 pod 是否关联了相同的存储
删除:

列出 pod 状态:



好奇 ip 是怎么保留的.
验证 是否保留了数据:

扩缩容 Statefulset
- 缩容和删除的表现是没有区别的
- 会删除拥有最高索引值的 pod
通过一个普通的非 headless 的 Service 暴露 Statefulset 的 pod
客户端通常不会直接连接 pod.
- ClusterIP Service

通过 API 服务器访问集群内部的服务


