可以从三个层面来看待k8s集群

第一个层

是client主机

为什么要有client主机

不是在控制节点上管理计算节点吗

是的

但是,当有多个k8s集群需要管理的时候

一般不会每管理一个集群,就登录到那个集群的控制节点上

这样来来回回切换登录

client主机同时管理多个主机比较方便

在client主机上,安装kubectl软件包

使用kubectl  config  get-contexts

查看上下文有哪几个k8s集群,当前在哪个k8s集群

使用kubectl  config  use-context  *k8s

选择当前管理的集群为*k8s集群

这里,逐一解释

kubectl命令是client主机上,是如何联络到各个k8s集群的

依靠~/.kube/config配置文件

这个配置文件里面有什么

有各个被管理k8s集群的名称,管理用户,集群的证书cacert,客户端的证书cert,客户端的密钥key,等这些信息。

那么当client主机上的命令行工具kubectl config被解释器翻译的时候

cpu会去读取kubectl config命令的配置文件

也就是这个~/.kube/config

这个配置文件里面有client主机想kubectl config操作的k8s集群的信息

那么kubectl config get-contexts的时候

就是看配置文件里面都有谁

都有几个集群

然后敲回车

cpu就会把自己在配置文件~/.kube/config里面读到的集群内容

返回到屏幕上

就可以看到client主机可以管理的k8s的集群的名称

和当前在管理哪个集群

当在client主机的命令行界面输入

kubectl config use-context ak8s的时候

cpu就会去那个配置文件下面去找这个ak8s相关的信息

然后client主机就会在一个管理ak8s的状态下

用kubectl  create pods ...

等这些命令的时候

就可以操作人员在client主机上管理ak8s集群的资源,创建pod等操作

叫远程管理。

第二个层级

管理节点,也叫管理控制节点,也叫控制节点,也叫主节点

随便吧

知道意思就行

这个节点上,有几个重要组件,而这几个组件都是通过

kubeadm  init这个命令生成的

kubeadm命令行工具

是用安装kubeadm这个软件包产生的。

控制节点的核心组件有四个

apiserver:  api接口

controller-manager: 控制器管理器

schduler: 调度器

etcd: 状态数据库

api接口好解释,我们用kubectl api-resources,敲回车,就可以看到好多api资源

里面有ingresses,  serviceaccount,  rolebinding, classrolebinding, services等等

这些api资源,是k8s集群提供的各种各样功能

那么k8s本身的核心作用是对容器进行各种编排管理的

那么这些api资源都是为了让k8s更好的提供容器化服务的工具

apiserver就是把这些写好的工具提供一个接口给程序

管理用户可以通过程序和命令行去调用这些工具

比如kubectl  create pods ...

那么pods就是一个api资源,可以用kubectl create这样的命令去调用

加上参数,就可以创建出什么什么样的pod

另一种使用api资源的方法

就是写资源文件

kind

apiVersion

medata

spec

status

这五个是资源文件里面的顶级字段,最后一个status状态大部分情况下可以不写,在创建资源的时候。因为status信息k8s一般会自动生成。

控制节点?什么是控制节点?

控制节点的主要特征就是装了一个kubeadm

然后用kubeadm init产生了

api-server   controller-manager  schduler  etcd这几个组件

这些都是可配置可条件的

毕竟来说

操作系统层面来讲

一切皆文件

好像还是很有道理的

管理配置文件就是了

自定义集群的各种样子

controller-manager是控制器管理器

什么是控制器管理器?

首先看什么是控制器

比如daemonsets这种控制器

这种控制器的一个,就是kube-proxy

daemonsets这种控制器是什么

就是守护集

意思是要管理一些pod提供的服务

这些pod每个节点上都得有

比如kube-proxy这个控制器搞的服务

这个服务就是监控网络状态,保证每个计算节点上的

网络状态都是ok的

daemonsets这种控制器

意思就是守护每个节点的

可以理解成,既然要是k8s的集群的一个节点

总得有点特征吧

跟不是k8s集群的节点的机器有些区别

而这些特征和区别,我们就可以理解为

计算节点上的一些必备环境

比如网络,那么这个就是可以说的通的

所以

daemonsets这种控制器

是控制器的一种

什么意思呢

就是说

k8s的控制器还有其他品类

男装女装护肤品

不同的品类

那么k8s集群的控制器

也有好多个品类

还有deployment

管理各个节点的pod数量的

如果有的pod被删掉了

那么deployment会自动创建一个新的pod

是不是很智能

它的作用之一是维护集群节点中的数量

还有控制器叫statefulset

这个是对应deployment这个控制器来称呼的

deployment是个无状态控制器

statefulset是个有状态控制器

这么来看

控制器的作用也是为了实现k8s集群的各个品类的功能的需求的满足。

所以控制器的种类也比较多。

那么这些品类,多了之后,也需要有角色来协调和管理。

包括监控

那么这个活

就由controller-manager来干

控制器的经理

也就是控制器的管理器

控制器的管理器有点类似于linux操作系统的systemd

systemd管理系统的所有进程

controller-manager管理k8s集群中个各个控制器

controller-manager可以认为是一些程序的集合,也有对应的配置文件

那么第三个层

就是计算节点

主要组件是kubelet和kube-proxy

kubelet是监工的

看计算节点上的服务运行的如何

kube-proxy主要管理计算节点上的网络。

还有一个计算节点的组件是runtime

就是,是时候跑起来了

计算节点真正跑服务的

叫硬件干活的

就是容器里面的进程了

这个runtime就是替kubelet管容器的

kubelet叫runtime创建容器

runtime就创建容器

k8s中的层级结构,及节点组件的作用-LMLPHP

图片来源:k8s官网

09-07 22:45