除非有特定的原因要求容器是同一个 pod 中的一部分,否则应该在单独的 pod 中运行容器 P58
它们需要一起运行还是可以在不同的主机上运行?
它们代表的是一个整体还是相互独立的组件?
它们必须一起进行扩缩容还是可以分别进行?
以 YAML 或 JSON 描述文件创建 pod P58通过 YAML 文件定义所有的 Kubernetes 对象之后,还可以将它们存储在版本控制系统中,充分利用版本控制所带来的便利性。 P59
检查现有 pod 的 YAML 描述文件 P59kubectl get pod -o yam <pod-name> 命令可以查看指定 pod 的完整 YAML 定义。 P59
介绍 pod 定义的主要部分 P59
YAML 中使用的 Kubernetes API 版本
YAML 描述的资源类型
metadata: 包括名称、命名空间、标签和关于该容器的其他信息
spec: 包含 pod 内容的实际说明,例如 pod 的容器、卷和其他数据
status: 包含运行中的 pod 的当前信息,例如 pod 所处的条件、每个容器的描述和状态,以及内部 IP 和其他基本信息
status 包含只读的运行时数据,该数据展示了给定时刻的资源状态。在创建新的 pod 时, status 部分不需要提供
创建一个简单的 YAML 描述文件 P61 # 遵循 v1 版本的 Kubernetes API apiVersion: v1 # 资源类型为 Pod kind: Pod metadata: # pod 的名称 name: kubia-manual spec: containers: # 创建容器所使用的镜像 - image: idealism/kubia # 容器的名称 name: kubia ports: # 应用监听的端口 - containerPort: 8080 protocol: TCP指定容器端口 P61
在 pod 定义中的端口仅仅是展示性的 (informational) ,忽略它们不影响客户端通过端口连接到 pod 。如果容器通过绑定到地址 0.0.0.0 的端口接受连接,那么即使端口未明确列出在 pod spec 中,其他 pod 也依旧能够连接到该端口。 P61
明确定义端口的意义: P62
每个使用集群的人都可以快速查看每个 pod 对外暴露的端口
允许为每个端口指定一个名称
可以使用 kubectl explain 发现可用的 API 对象字段, kubectl explain pod 可以查看 pod 的 各个属性,然后通过选择对应的属性 (kubectl explain pod.spec) 深入了解每个属性的更多信息。 P62
使用 kubectl create 来创建 pod P63 # kubectl create -f 可以从 YAML 或 JSON 文件创建任何资源,不仅仅是 pod kubectl create -f kubia-manual.yaml # 查看刚刚创建的 kubia-manual 的 完整描述文件 kubectl get pod kubia-manual -o yaml 查看应用程序日志 P64容器化的应用程序通常会将日志记录到标准输出和标准错误流,而不是写入文件,这就允许用户可以通过简单、标准的方式查看不同应用程序的日志。 P64
docker logs <container> 允许我们查看主机上指定容器的日志
kubectl logs <pod-name> -c <container> 允许我们查看指定 pod 中指定容器的日志,如果该 pod 只包含一个容器,那么 -c <container> 可以省略
当一个 pod 被删除时,它的日志也会被删除。如果希望在 pod 删除之后仍然可以获取其日志,我们需要设置中心化的、集群范围的日志系统,将所有日志存储到中央存储中。 P64
向 pod 发送请求 P65将本地网络端口转发到 pod 中到端口 P65
kubectl port-forward kubia-manual 8888:8080 可以将本地端口 8888 转发到 kubia-manual pod 到端口 8080 ,这样我们就可以在本地使用 curl localhost:8888 向 pod 发送一个 HTTP 请求。 P65