kubernetes笔记


kuberentes components

control-plane或者master组件包括:

  • kube-apiserver
  • etcd
  • kube-scheduler
  • kube-controller-manager
    • node controller
    • replication controller
    • endpoints controller
    • service Account & token controller

这些组件可以运行在集群中的任何节点上,但为了简单,高效和可靠,这四大金刚中,除了etcd,kube-X通常会运行在同一台机器上。并且,这类master节点不参与其它pod的调度。

  1. The Scheduler and Controller Manager are tightly coupled with the API Server
  2. Only one Scheduler and Controller Manager can be active at a given time, but it’s ok to run multiple at the same time. Each component will elect a leader via the API Server.
  3. Running multiple copies of each component is required for H/A
  4. Running each component next to the API Server eases configuration.

裸机搭建k8s集群

这部分可参考:

高塔的github: kelseyhightower

参考高塔在云上部署教程,这个作者在虚机上搞的实验: kubernetes-The-Hard-Way-on-BareMetal

网络!网络!还是网络!

kubernetes使用了三种不同类型的网络:

  • infrastructure network: 真实的物理网卡或者虚拟网卡(使用虚拟机情况下)。
  • service network: 虚拟网络。这类网络的IP不会被分配到网卡上,kubernetes使用这类网络地址用来创建kubernetes service。所谓kubernetes service是kubernetes RCDeployment之上的抽象层。这类网络地址通常被kuber-proxy来分配管理,用来创建iptables规则。
  • pod network: 这类网络是pod使用的。这类网络取决于你选用的CNI插件。例如,假如使用的是flannel,那么这类网络就是软件定义的覆盖网络(software defined overlay network)。

CNI

CNI: container networking interface /etc/cni/net.d目录用来存储CNI配置文件。/opt/cni/bin用来存放CNI插件bin文件。 kubelet从/etc/cni/net.d目录读取配置。例如,flannel插件的配置如下:

/etc/cni/net.d/10-flannel.conflist

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
  {
  "name": "cbr0",
  "cniVersion": "0.3.1",
  "plugins": [
    {
      "type": "flannel",
      "delegate": {
        "hairpinMode": true,
        "isDefaultGateway": true
      }
    },
    {
      "type": "portmap",
      "capabilities": {
        "portMappings": true
      }
    }
  ]
}

kubelet CNI相关的选项:

1
kubelet --network-plugin=cni --cni-bin-dir=/opt/cni/bin --cni-conf-dir=/etc/cni/net.d