二丫讲梵 二丫讲梵
首页
  • 最佳实践
  • 迎刃而解
  • Nginx
  • Php
  • Zabbix
  • AWS
  • Prometheus
  • Grafana
  • CentOS
  • Systemd
  • Docker
  • Rancher
  • Ansible
  • Ldap
  • Gitlab
  • GitHub
  • Etcd
  • Consul
  • RabbitMQ
  • Kafka
  • MySql
  • MongoDB
  • OpenVPN
  • KVM
  • VMware
  • Other
  • ELK
  • K8S
  • LLM
  • Nexus
  • Jenkins
  • 随写编年
  • 家人物语
  • 追忆青春
  • 父亲的朋友圈
  • 电影音乐
  • 效率工具
  • 博客相关
  • Shell
  • 前端实践
  • Vue学习笔记
  • Golang学习笔记
  • Golang编程技巧
  • 学习周刊
  • Obsidian插件周刊
关于
友链
  • 本站索引

    • 分类
    • 标签
    • 归档
  • 本站页面

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • json2go (opens new window)
    • gopher (opens new window)
    • 微信MD编辑 (opens new window)
    • 国内镜像 (opens new window)
    • 出口IP查询 (opens new window)
    • 代码高亮工具 (opens new window)
  • 外站页面

    • 开往 (opens new window)
    • ldapdoc (opens new window)
    • HowToStartOpenSource (opens new window)
    • vdoing-template (opens new window)
GitHub (opens new window)

二丫讲梵

行者常至,为者常成
首页
  • 最佳实践
  • 迎刃而解
  • Nginx
  • Php
  • Zabbix
  • AWS
  • Prometheus
  • Grafana
  • CentOS
  • Systemd
  • Docker
  • Rancher
  • Ansible
  • Ldap
  • Gitlab
  • GitHub
  • Etcd
  • Consul
  • RabbitMQ
  • Kafka
  • MySql
  • MongoDB
  • OpenVPN
  • KVM
  • VMware
  • Other
  • ELK
  • K8S
  • LLM
  • Nexus
  • Jenkins
  • 随写编年
  • 家人物语
  • 追忆青春
  • 父亲的朋友圈
  • 电影音乐
  • 效率工具
  • 博客相关
  • Shell
  • 前端实践
  • Vue学习笔记
  • Golang学习笔记
  • Golang编程技巧
  • 学习周刊
  • Obsidian插件周刊
关于
友链
  • 本站索引

    • 分类
    • 标签
    • 归档
  • 本站页面

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • json2go (opens new window)
    • gopher (opens new window)
    • 微信MD编辑 (opens new window)
    • 国内镜像 (opens new window)
    • 出口IP查询 (opens new window)
    • 代码高亮工具 (opens new window)
  • 外站页面

    • 开往 (opens new window)
    • ldapdoc (opens new window)
    • HowToStartOpenSource (opens new window)
    • vdoing-template (opens new window)
GitHub (opens new window)
  • Nexus系列文章

  • Jenkins系列文章

  • ELK笔记

  • Kubernetes笔记

    • 手动部署kubernetes-1-8-6集群

    • 其他姿势快速部署

    • 手动搭建k8s-1-10-4高可用集群(推荐版).md

    • 基础学习

      • k8s整体架构的知识整理
        • 1,master 节点。
          • 1,API Server(kube-apiserver)
          • 2,Scheduler(kube-scheduler)
          • 3,Controller Manager(kube-controller-manager)
          • 4,etcd
          • 5,Pod 网络
        • 2,Node 节点。
          • 1,kubelet
          • 2,kube-proxy
          • 3,Pod 网络
        • 3,集群架构。
        • 4,通过实例理解架构工作流程
      • 配置kubectl命令补全功能
      • k8s基本使用入门-使用Pod
      • k8s基本使用入门-了解ReplicationController
      • k8s基本使用入门-了解ReplicaSet
      • k8s基本使用入门-了解deployments
      • k8s基本使用入门-了解Service
    • 从新出发

  • LLM专题

  • 系列专题
  • Kubernetes笔记
  • 基础学习
二丫讲梵
2018-12-05
目录

k8s整体架构的知识整理

文章发布较早,内容可能过时,阅读注意甄别。

# 1,master 节点。

Master 是 Kubernetes Cluster 的大脑,运行着的 Daemon 服务有一下几个:

  • kube-apiserver
  • kube-scheduler
  • kube-controller-manager
  • etcd
  • Pod 网络(例如 flannel)

如图所示:

image

接下来就一个一个介绍如上组件的功能。

# 1,API Server(kube-apiserver)

API Server 提供 HTTP/HTTPS RESTful API,即 Kubernetes API。API Server 是 Kubernetes Cluster 的前端接口,各种客户端工具(CLI 或 UI)以及 Kubernetes 其他组件可以通过它管理 Cluster 的各种资源。

# 2,Scheduler(kube-scheduler)

Scheduler 负责决定将 Pod 放在哪个 Node 上运行。Scheduler 在调度时会充分考虑 Cluster 的拓扑结构,当前各个节点的负载,以及应用对高可用、性能、数据亲和性的需求。

# 3,Controller Manager(kube-controller-manager)

Controller Manager 负责管理 Cluster 各种资源,保证资源处于预期的状态。Controller Manager 由多种 controller 组成,包括 replication controller、endpoints controller、namespace controller、serviceaccounts controller 等。

不同的 controller 管理不同的资源。例如 replication controller 管理 Deployment、StatefulSet、DaemonSet 的生命周期,namespace controller 管理 Namespace 资源。

# 4,etcd

etcd 负责保存 Kubernetes Cluster 的配置信息和各种资源的状态信息。当数据发生变化时,etcd 会快速地通知 Kubernetes 相关组件。

# 5,Pod 网络

Pod 要能够相互通信,Kubernetes Cluster 必须部署 Pod 网络,flannel 是其中一个可选方案,也是 kubernetes 官方默认的一种方案。

# 2,Node 节点。

Node 是 Pod 运行的地方,Kubernetes 支持 Docker、rkt 等容器 Runtime。 Node 上运行的 Kubernetes 组件有:

  • kubelet
  • kube-proxy
  • Pod 网络(例如 flannel)

如图所示:

image

# 1,kubelet

kubelet 是 Node 的 agent,当 Scheduler 确定在某个 Node 上运行 Pod 后,会将 Pod 的具体配置信息(image、volume 等)发送给该节点的 kubelet,kubelet 根据这些信息创建和运行容器,并向 Master 报告运行状态。

# 2,kube-proxy

service 在逻辑上代表了后端的多个 Pod,外界通过 service 访问 Pod。service 接收到的请求是如何转发到 Pod 的呢?这就是 kube-proxy 要完成的工作。

每个 Node 都会运行 kube-proxy 服务,它负责将访问 service 的 TCP/UPD 数据流转发到后端的容器。如果有多个副本,kube-proxy 会实现负载均衡。

# 3,Pod 网络

Pod 要能够相互通信,Kubernetes Cluster 必须部署 Pod 网络,flannel 是其中一个可选方案。

# 3,集群架构。

将如上讲解的架构汇总起来,组成一个集群,就是 k8s 集群了,我们先看一张集群完整架构图:

image

这里在 k8s-master 上也加有 kubelet 和 kube-proxy ,是因为在 k8s 集群中,master 既可以作为管理节点,也能够担任 work 节点。

有时部署的时候也可能将 Scheduler 等控制组件部署在 node 节点,这是为了高可用着想,如此一来,集群每个节点都是 master,同时也都是 node,任意一个节点出了问题,都能够被一些高可用的方案,所避免服务的宕机。

# 4,通过实例理解架构工作流程

现在来通过构建一个实例,来理解整个集群工作的流程。

执行如下命令:

kubectl run nginx-ds --image=nginx --replicas=2
1

等待一段时间,可以查看一下部署成功:

$kubectl get pod -o wide
NAME                                READY     STATUS    RESTARTS   AGE       IP            NODE
nginx-ds-fbx76                      1/1       Running   0          2d        172.30.84.2   kube-node1
nginx-ds-jbjzg                      1/1       Running   0          2d        172.30.8.2    kube-node2
1
2
3
4

Kubernetes 部署了 deployment nginx-ds,有两个副本 Pod,分别运行在 kube-node1 和 kube-node2。

详细部署流程如图所示:

image

  • 1,kubectl 发送部署请求到 API Server。
  • 2,API Server 通知 Controller Manager 创建一个 deployment 资源。
  • 3,Scheduler 执行调度任务,将两个副本 Pod 分发到 k8s-node1 和 k8s-node2。
  • 4,k8s-node1 和 k8s-node2 上的 kubelet 在各自的节点上创建并运行 Pod。

另:

  • 应用的配置和当前状态信息保存在 etcd 中,执行 kubectl get pod 时 API Server 会从 etcd 中读取这些数据。
  • flannel 会为每个 Pod 都分配 IP。因为没有创建 service,目前 kube-proxy 还没参与进来。

整理自:https://www.cnblogs.com/CloudMan6/

微信 支付宝
上次更新: 2024/07/04, 22:40:37
手动搭建k8s-1-10-4之一键部署脚本
配置kubectl命令补全功能

← 手动搭建k8s-1-10-4之一键部署脚本 配置kubectl命令补全功能→

最近更新
01
学习周刊-总第213期-2025年第22周
05-29
02
学习周刊-总第212期-2025年第21周
05-22
03
从赵心童世锦赛夺冠聊聊我的斯诺克情缘
05-16
更多文章>
Theme by Vdoing | Copyright © 2017-2025 | 点击查看十年之约 | 浙ICP备18057030号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式