2.3.1 部署 Node.js 应用

  1. $ kubectl run mysql2 --image=mysql --port=3307 replicationcontroller "kubia" created

介绍 pod

多个共存容器: pod

image.png

image.png

列出 pod

不能列出单个容器, 因为它们不是独立的 Kubernetes 对象, 但是可以列出 pod.
**

  1. $ kubectl get pods

kubectl run 后很快就返回了, 其实是在后台拉镜像并运行.

  1. $ kubectl describe pod

幕后发生的事情

两个必须的步骤:

  1. 构建镜像并推送到 Docker Hub
  2. API -> RReplicationController 对象 -> pod -> docker pull

调度 (scheduling): 将 pod 分配给一个节点.

image.png

2.3.2 访问 Web 应用

pod 的 ip 是内网, 创建 LoadBalancer 才能从外部访问内网.

创建一个服务对象

  1. $ kubectl expose rc kubia --type=LoadBalancer --name kubia-http

列出服务

  1. $ kubectl get servies

注意:

  • Minikube 不支持 LoadBalancer 类型的服务

使用外部 IP 访问服务

  1. $ curl 104.155.74.57:8080

2.3.3 系统的逻辑部分

ReplicationController, pod 和服务是如何组合在一起的

image.png

pod 和它的容器

  • pod 可以包含任意数量的容器
  • pod 有自己独立的私有 ip 地址和主机名

ReplicationController 的角色

  • 确保始终存在一个运行中的 pod 实例
  • 用于复制 pod 并让它们保持运行 (监控运行数)

为什么需要服务

kubian-http

  • 将客户端访问的 ip 与 pod 的 ip 解耦

2.3.4 水平伸缩应用

  1. $ kubectl get replicationcontrollers

增加期望的副本数

image.png

声明式.

查看扩容的结果

  • 应用本身支持水平伸缩

当切换到服务请求切换到所有三个 pod 上

自动负载均衡:

image.png

可视化系统的新状态

image.png

2.3.5 查看应用运行在哪个节点上

列出 pod 时显示 pod IP 和 pod 的节点

  1. $ kubectl get pods -o wide

使用 kubectl describe 查看 pod 的其他细节

image.png

2.3.6 介绍 Kubernetes dashboard