Contents

Kubernetes Note 02

Contents
  • Kubernetes 项目的架构,跟它的原型项目 Borg 非常类似,都由 Master 和 Node 两种节点组成
  • Master 节点
    • 负责 API 服务的 kube-apiserver
    • 负责调度的 kube-scheduler
    • 负责容器编排的 kube-controller-manager
    • 集群的持久化数据,则由 kube-apiserver 处理后保存在 Etcd 中
  • Node 节点
    • kubelet
      • kubelet 主要负责同容器运行时(比如 Docker 项目)打交道
      • CRI(Container Runtime Interface 远程调用接口,这个接口定义了容器运行时的各项核心操作,比如:启动一个容器需要的所有参数
      • 具体的容器运行时,比如 Docker 项目,则一般通过 OCI 这个容器运行时规范同底层的 Linux 操作系统进行交互,即:把 CRI 请求翻译成对 Linux 操作系统的调用(操作 Linux Namespace 和 Cgroups 等)
      • kubelet 还通过 gRPC 协议同一个叫作 Device Plugin 的插件进行交互
        • Kubernetes 项目用来管理 GPU 等宿主机物理设备的主要组件
      • kubelet 的另一个重要功能,则是调用网络插件和存储插件为容器配置网络和持久化存储。
        • CNI(Container Networking Interface)和 CSI(Container Storage Interface)
  • 运行在大规模集群中的各种任务之间,实际上存在着各种各样的关系。这些关系的处理,才是作业编排和管理系统最困难的地方
  • 在 Kubernetes 中,有一种特殊的容器启动方法叫做“Static Pod”。它允许你把要部署的 Pod 的 YAML 文件放在一个指定的目录里。这样,当这台机器上的 kubelet 启动时,它会自动检查这个目录,加载所有的 Pod YAML 文件,然后在这台机器上启动它们
  • 在 kubeadm 中,Master 组件的 YAML 文件会被生成在 /etc/kubernetes/manifests 路径下
1
2
$ ls /etc/kubernetes/manifests/
etcd.yaml  kube-apiserver.yaml  kube-controller-manager.yaml  kube-scheduler.yaml
  • Kubernetes 默认 kube-proxy 和 DNS 这两个插件是必须安装的。它们分别用来提供整个集群的服务发现和 DNS 功能
  • 任何一台机器想要成为 Kubernetes 集群中的一个节点,就必须在集群的 kube-apiserver 上注册
  • kubeadm 至少需要发起一次“不安全模式”的访问到 kube-apiserver,从而拿到保存在 ConfigMap 中的 cluster-info(它保存了 APIServer 的授权信息)
  • bootstrap token,扮演的就是这个过程中的安全验证的角色
  • kubectl taint nodes --all node-role.kubernetes.io/master-
    • 移除所有以node-role.kubernetes.io/master为键的 Taint