Kubernetes
1. 概念
-
Kubernetes Cluster
-
Master:
- 负责管理整个集群。
-
Node:
-
虚拟机或物理机,充当工作机器。
-
每个Node都有 Kubelet , 它管理 Node 而且是 Node 与 Master 通信的代理。
-
具有用于处理容器操作的工具,例如 Docker 或 rkt 。
-
处理生产级流量的 Kubernetes 集群至少应具有三个 Node,因为如果一个 Node 出现故障其对应的 etcd 成员和控制平面实例都会丢失,并且冗余会受到影响。
-
-
-
Deployment 配置
-
Deployment 指挥 Kubernetes 如何创建和更新应用程序的实例。创建 Deployment 后,Kubernetes master 将应用程序实例调度到集群中的各个节点上。
-
创建应用程序实例后,Kubernetes Deployment 控制器会持续监视这些实例。
-
如果托管实例的节点关闭或被删除,则 Deployment 控制器会将该实例替换为集群中另一个节点上的实例。 这提供了一种自我修复机制来解决机器故障维护问题。
-
-
Pod
-
创建 Deployment 时, Kubernetes 添加了一个 Pod 来托管你的应用实例。
-
Pod 是抽象出来的,表示一组一个或多个应用程序容器(如 Docker),以及这些容器的一些共享资源。
- 共享存储,当作卷
- 网络,作为唯一的集群 IP 地址
- 容器运行信息
-
生命周期:当一个工作 Node 挂掉后, 在 Node 上运行的 Pod 也会消亡。 ReplicaSet 会自动地通过创建新的 Pod 使集群回到目标状态,以保证应用程序正常运行。
-
-
工作节点(参与计算的物理机或虚拟机)
-
每个工作节点由主节点管理。工作节点可以有多个 pod ,Kubernetes 主节点会自动处理在集群中的工作节点上调度 pod 。
-
每个工作节点至少包含:
- Kubelet
- 容器运行时(Docker)
-
-
Service
-
一种抽象概念,它定义了 Pod 的逻辑集和访问 Pod 的协议。
-
尽管每个 Pod 都有一个唯一的 IP 地址,但是如果没有 Service ,这些 IP 不会暴露在集群外部。
-
Service 匹配一组 Pod 是使用 标签(Label)和选择器(Selector)。
-
2. 扩缩
扩缩容:
kubectl scale deployments/kubernetes-bootcamp --replicas=4
可以进行负载均衡
扩容过程如下图:
3. 滚动更新
用户希望应用程序始终可用,而开发人员则需要每天多次部署它们的新版本。
滚动更新 允许通过使用新的实例逐步更新 Pod 实例,零停机进行 Deployment 更新。新的 Pod 将在具有可用资源的节点上进行调度。
默认情况下,更新期间不可用的 pod 的最大值和可以创建的新 pod 数都是 1。这两个选项都可以配置为(pod)数字或百分比。
在 Kubernetes 中,更新是经过版本控制的,任何 Deployment 更新都可以恢复到以前的(稳定)版本。
滚动更新过程如下3图: