可以从三个层面来看待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官网