K8S二进制部署高可用集群-1.22[六]

本节前言:

本节关键字:KUBELET、KUBE-PROXY;

关于"KUBELET"组件,其主要作用为:运行于"NODE"之上的守护进程,"NODE"的核心代理程序;从"KUBE-APISERVER"接收关于"POD"对象的配置信息并确保它们处于期望的状态;另外"KUBELET"会在"KUBE-APISERVER"上注册当前工作节点,定期向"MASTER"汇报节点资源使用情况;

关于"KUBE-PROXY"组件,其主要作用为:负责为"Service"资源提供集群内部的服务发现和负载均衡;它能够按需为"Service"资源对象生成"IPTABLES"或"IPVS"规则,使访问"Service"资源的流量正确转发至后端的"POD"对象;

本节开始……

一、KUBELET组件

注意:在执行本步骤前,你应该已经将[ kubelet、kube-proxy ]这些文件保存至"/usr/local/bin"[192.168.100.41 - 43、192.168.100.46 -47];另外,本处的示例操作,博主暂时并不打算使用[192.168.100.16 - 47]节点,而是复用MASTER的节点,也就是说,[192.168.100.41 - 43]既是MASTER节点,同时又是NODE工作节点;为什么这样配置?这其实是考虑到真实生产环境中,有可能有这种需求"在MASTER上运行某此特定的POD",比如说监控;当然,作为MASTER节点,实际上我们并不希望上面运行着非特殊需求的POD,那么我们可以设置节点的特性解决这种问题,例如K8S的"污点"概念,真实情况下,将真实节点配置为"不可调度状态"是常用的做法;

以下操作均在[192.168.100.41]进行,然后按需要推送至[192.168.100.42 - 43];开始:生成"KUBELET"组件的"kubelet-bootstrap.kubeconfig"配置文件;还记得前面"KUBE-APISERVER"组件部署章节中,博主提示了关注"kube-apiserver.token.csv"这份文件中的"kubelet-bootstrap"这个用户名吗?这个用户名不是K8S集群的默认内置用户,那么这个用户名是怎么在K8S集群中生效的?本处的"kubectl create clusterrolebinding"告诉了你答案;

生成"KUBELET"组件的"kubelet.conf"配置文件[实际是指K8S的"KubeletConfiguration"资源][这实际是一份YAML文件];本处可能有人有疑问,为什么"KUBELET"组件需要"kubelet.conf"这份配置文件?既然是配置,为什么不直接写在"kubelet.service"这份文件中?博主简单解释一下:1、这是官方的默认做法,目的主要是适配"KUBEADM"部署K8S集群;2、使用"kubelet -h",你会发现,很多的配置项标记为"DEPRECATED"状态,为了避免后续的K8S集群升级引发额外的问题,所以使用了官方的默认方法;3、关于"KUBELET"组件的配置项,官方将配置项分为两种状态,每个节点均应该相同的配置项及每个节点可以自定义的配置项,关于"每个节点可自定义的配置项",官方将其实优先放入"kubelet.con"中[第三种是网络上的某种说法,博主对这个说法保留意见;实际上博主觉得,K8S官方更多的是希望为"KUBELET"组件设计一份专属格式的配置文件,就像其它软件一样,有其专属的配置文件,只不过这份"kubelet.conf"配置文件要达到稳定状态,还需要一点一点的去积累];注意,以上强行解释仅是一种猜测

这份"kubelet.conf"配置文件实际上是每个工作节点[NODE]通用的,但你应该要先明白这份配置要达到通用状态的前提条件是什么~而其中比较关键的一条是配置文件中的"address: 0.0.0.0"配置项,是的,配置文件中并未特别为每一个节点配置特定的IP地址!!!

将证书与配置文件分发至其它服务器[分发至:192.168.100.42 - 43];

为"KUBELET"生成"kubelet.service"启动文件;此文件通用!见上面的通用前提[192.168.100.41 - 43]:

启动"KUBELET"组件[192.168.100.41 - 43];你应该可以看到"KUBELET"组件的正常启动[注意:此时NODE并未真正的加入K8S集群]:

使用"kubectl"命令测试:

使用"kubelet"命令进行测试~

补充:前面说了,MASTER节点正常情况下,我们应该将基标记为"不可调度状态",那么,你可以使用以下命令实现;但目前,你不应该这么做,原因:后续的CALICO部署,如果你设定了"kubectl cordon",那么你会发现某此POD不能正常启动,原因也很简单,那些能正常启动的POD,它们是通过"DaemonSet"的方式部署的,而不能正常启动的POD,是使用"Deployment"资源启动的~

关于"KUBE-APISERVER"组件部署至此结束~~

二、KUBE-PROXY组件

以下操作均在[192.168.100.41]进行,然后按需要推送至[192.168.100.42 - 43];开始:生成"KUBE-PROXY"相关证书:

生成"KUBE-PROXY"组件的"kube-proxy.kubeconfig"配置文件:

生成"kube-proxy.conf"配置文件[实际是指K8S的"KubeletConfiguration"资源][这实际是一份YAML文件];关于这份配置文件的解释及其通用性,见前面"kubelet.conf"的相关解释;注:此文件K8S集群中通用;

将证书与配置文件分发至其它服务器[分发至:192.168.100.42 - 43];

为"KUBE-PROXY"生成"kube-proxy.service"启动文件;此文件通用![192.168.100.41 - 43]:

启动"KUBE-PROXY"组件[192.168.100.41 - 43];你应该可以看到"KUBE-PROXY"组件的正常启动:

关于"KUBE-PROXY"组件部署至此结束~~

结、

在完成"KUBELET"组件与"KUBE-PROXY"组件的部署,即代表一个工作节点[NODE]就已经部署完成了,但此时这些节点是处于"NoReady"状态的,这是由我们还没有安装"CNI"插件[网络运行时]。下一节的内容是"CALICO"插件["CNI"]与"COREDNS"组件["DNS"]的部署。本篇完,读者可点击以下链接进入下一章或返回上一章;

下一章:K8S二进制部署高可用集群-1.22 [七] CALICO插件与CoreDNS插件

上一章:K8S二进制部署高可用集群-1.22 [五] KUBE-CONTROLLER-MANAGER组件与KUBE-SCHEDULER组件

K8S二进制部署高可用集群-1.22[六]:等您坐沙发呢!

发表评论

表情
还能输入210个字