kubernetes

如果把容器化比作集装箱,其作用是打包程序所依赖的相关插件和库文件;
那么,k8s就好比是一个设施丰富且完善的船坞码头,他复杂管理这些集装箱,如何堆放才能更合理、更有效,就是k8s他要考虑和做的事情。

image.png

k8s部署架构

image.png
master节点:
又称控制平面,control plane

  • kube-apiserver:
    • 一个将k8s控制平面中的API暴露出来的服务,用于接受用户端的操作请求,这服务是k8s控制平面的前端。
    • 无状态服务,用户可以运行多个kube-apiserver组件的实例,用于平衡实例的请求流量。
    • 查看apiserver的版本信息[root@master1 kubernetes-starter]# curl localhost:8080/api
      查看api server目前支持的资源对象种类# curl localhost:8080/api/v1
    • 分别查询资源列表# curl localhost:8080/api/v1/pods
    • pod 中的进程访问api server的services ,他是cluster ip中的第一个ip,监听https的443端口的# kubectl get services
  • kuke-scheduler:
    • 用于watch监听apiserver的资源变动(增删改查),并调度至合适的后端node节点,从而来创建pod资源
  • kube-controller-manager
    • 每个控制器都是独立的二进制文件
    • 包括:Node COntroller、Replication Controller、Endpoint Controller和Services Account & Token Controller
  • etcd
    • 高可用、KV结构的k8s的后端数据存储组件

Node节点
数据平面:data plane,包括kubelet、kube-proxy和containerRuntime三个组件。

  • kubelet:
    • 运行在集群每个节点的客户端,需要确保相关容器运行在pod中;通过podspecs标签,描述容器的运行状态
  • kube-proxy:
    • 一个运行在集群每个节点的网络代理组件
  • Container Runtime:
    • 支持运行容器的底层环境软件
    • 支持:docker、containerd、cri-o、rkelet等

cloud端

  • cloud:
    • 作为集群外部的附加能力,通过与cloud-controller-manager组件对接,扩展对k8s集群与云上动态扩展的特性

Addons(附件组件)
使用kubernetes resources增加集群的功能,如DNS、web UI(Dashboard)、container Resource Monitoring、Cluster-level Logging等等

工作流程

  • Master
    • 用户通过(API、WebUI、CLI)向APIserver发送请求,kube-scheduler 组件监听APIserver的资源变动,同时从Node节点中选取最合适的节点开始调度,并把调度结果保存至Etcd中。
  • Node
    • kubelet 也会监听APIserver的资源变动,并在符合的NOde上通过kubelet调用相关的docker引擎进行后续打包和构建操作。

image.png