Kubernetes组成
Kubernetes有Master和Node两种节点组成,而这两种角色分别对应这控制节点和计算节点。
控制节点即Master节点,于其他三个组建组合而成:负责API服务的kube-apiserver;负责调度的kube-scheduler;
负责容器编排的kube-controller-manager;整个集群的持久化数据,则有kube-apiserver处理后保存在Etcd中。
kubelet主要负责同容器运行时打交道(CRI请求翻译成对Linux操作系统的调用)。
Kubelet还通过gRPC协议同一个叫作Device Plugin的插件进行交互。
kubelet的另一个重要功能,则是调用网络插件和存储插件为容器配置网络(CNI 容器网络接口)和持久化存储(CSI 容器存储接口)。
Service服务的主要作用,就是作为Pod的代理入口,从而代替Pod对外暴露一个固定的网络地址。
为什么不能使用docker部署kubeadm?
kubelet是kubernetes项目用来操作Docker等容器运行时的核心组件。
除了跟容器运行时打交道外,kubelet在配置容器网络、管理容器数据卷时,都需要直接操作宿主机。
kubelet隔着容器的Mount Namespace和文件系统,操作宿主机的文件系统,这是有困难的(kubelet的挂载操作不会传播到宿主机上)。
kubeadm init 的工作流程:
1.检进行检查工作,以确定这个机器是否可以用来部署kubernetes:在通过Preflight Checks之后,kubeadm生成Kubernetes对外提供服务
所需的各种证书和对应的目录。kubernetes默认使用https访问kube-apiserver。
kubeadm为kubernetes项目生成的证书文件都放在master节点的/etc/kubernetes/pki项目下。
证书生成后,kubeadm接下来会为其他组件生成防伪kube-apiserver所需要的配置文件,配置文件在/etc/kubernetes/*.conf。
2.kubeadm会为Master组建生成Pod配置文件。Kubenetes中有一中特殊的容器为static pod。它允许你把数据的pod的yaml文件放在一个指定的目录里。
kubelet在Kubernetes项目中的地位非常高。kubeadm会通过检查localhost:6443/healthz检查Master组件的健康状况。
3.kubeadm就会为集群生成一个bootstrap token。在token生成之后,kubeadm会将ca.crt等master节点的
重要信息,通过ConfigMap的方式保存在Etcd,供后续部署Node节点使用。这个ConfigMap的名字是cluster-info。
4.安装默认插件。
kubeadm join的工作流程:
节点需要注册到集群上,必须在集群的kube-apiserver上注册。kubeadm发送请求,从kube-apiserver中获取到授权信息。
通过Taint/Toleration调整Master执行Pod的策略
默认情况下Master节点是不允许运行用户Pod的。依赖Kubernetes的Taint/Toleration机制可以操作。
一旦某个节点被加上了一个Taint,那么所有的Pod就不能在这个节点上运行。如果个别的Pod声明Toleation,才能在这个节点上运行。
在使用的Kubernetes的时候,推荐使用replicas=1而不使用单独pod的主要原因是pod所在节点出现故障的时候,pod可以调度到健康的节点上,单独的pod
只能在健康节点的情况下有kubelet保证pod的健康状况。
网友评论