k8s是什么
K8s 是一个跨主机集群的开源的容器调度平台,它可以对容器进行自动化部署,扩展和操作。简单来说
就是它提供了,对容器的管理功能,在它节点上,可以对容器进行增,删,该,查操作。我们把我们的用,托管在容器上面。这样,我们可以简单粗暴的理解为,k8s通过对容器的管理,可以让我们对应用进行增删改查。关于容器和k8s还有主机(服务器)的关系,我们这样来理解。我们把K8S比喻成一个港口,港口主要的功能是啥呢?
对货物运输,运输需要载具,载具我们可以说是轮船,轮船上很多集装箱,轮船和集装箱,通过港口的
机械,把货物运输到轮船上。这边,港口和轮船,可以理解成k8s集群。轮船可以理解为主机,而容器就算在货物的集装箱。从上面看出,k8s对容器,节点的管理过程大致相同。而我们的docker是一个船上加一堆集装箱的Logo,也不难理解,作者也是受这个启发。
k8s概念介绍
cluster 计算 存储 网络 资源的集合
master k8s集群的大脑,k8s交互,调度中心,中心化的节点 , 生产环境建议做高可用
Node k8s 简单通俗说,就是机器(可以是虚拟机,可以是实体机)
Pod k8s最小工作单元 。包含1个或者1组容器
controller 管理者,k8s对pod的管理都是通过controller这个组件进行的 k8s提供了多种
controller 来管理 deployment replicaset daemonset statefulset job
deployment 最常见的controller 管理pod 和pod的副本 ,确保pod按照期望运行
replicaset 管理pod的副本 deployment 是通过管理replicaset 来管理pod的副本
service k8s的pod是不稳定的,可能会进行增删操作,所有一般k8s都是通过service这样一个稳定的逻 辑概念提交给用户。这个就相当于我们的应用集群
我们的应用,就在k8s的pod中,k8s通过service,把pod提供给用户的使用,这样无论pod怎么变化,pod ip发生变化, 数量发生变化,只要不是全挂,对用户来说,就是无感知的,service实现了负载均衡,这样我们新增节点也不必自己配置nginx.而pod的副本机制,可最大限度的确保,pod在发生异常的时候,可以快速恢复。另外,有点也需要强调一下。pod是可以跨主机运行的。
k8s组件介绍
master节点组件
kube-apiserver对外暴露了Kubernetes Api。它是Kubernetes前端控制层。
etcd 用于 Kubernetes的后端存储。所有的集群数据都存储在此。
kube-controller-manager 运行控制器,他们通常来处理集群中的常规任务。
kube-scheduler监视没有分配节点的新创建的 Pod,选择一个节点供他们运行。
kube-scheduler监视节点,为新的pod,根据策略选择节点,供pod运行。
DNS k8s的dns服务,为整个集群提供域名解析服务
dashboard 为k8s集群提供监控记录
Worker节点组件
kubelet master代理,它检测该节点下pod的状态
kube-proxy 维护节点上的网络,使得节点网络透明化
docker 运行docker container
rkt 另外一中容器方案
supervisord 监控docker或者rkt容器的运行状态
k8s创建pod时各组件的功能介绍
kubectl apply -f nginx_replication.yaml
1.kubectl 是命令行工具 他负责接受用户指令,收到kubectl的命令以后,提交给apiServer
2.ApiServer 解析kubuectl发过来的命令,把任务转交给Scheduler
3.Scheduler 根据不同的策略,计算出调用哪个worker Node
4.Controller Manager 进行真正的分发请求到具体的worker Node 进行创建pod的工作
5.work Node 接收到创建请求之后,通过Kubelet服务,最终Kubelet会调用Docker Engine,创建对应的容器
再这个过程中,我们可以通过 dashboard 查看部署的情况
使用k8s的意义
上面说了一通,可能没发现k8s的好处,感觉是不是还觉得很麻烦,但是,当我们有上千台服务器
有几十个应用,每个应该被拆成十几个微服务,每个微服务,都需要至少3台以上的集群,确保吞吐量和高可用的时候,我们用这个,帮我们统一管理,是不是可以省事儿。我们通过pod 管理具体的进程。通过service管理具体的微服务,哪个pod部署在哪些节点,都通过k8s来管理。同时它为我们提供监控等服务,这样我们的应用才能更加好的管理,而且发布,新增的时候,都可以进行灰度发布。减少停机时间