【Kubernetes】使用kubeadm部署Kubernetes后,各组件配置文件所在的位置

时间:2024-04-12 11:12:56

在的二进制部署方式中,kubelet、etcd、kube-apiServer、kube-controller-manager、kube-scheduler组件均作为一项系统服务部署,服务配置文件位于/usr/lib/systemd/system/<object-name.service>,启动参数配置位于/etc/kubernetes/<object-name>。

而kubeadm作为致力于简化集群安装过程的工具,并不再把组件用上述服务注册启动的方式进行安装。

引用文章https://segmentfault.com/a/1190000018741112?utm_source=tag-newest 中对kubeadm部署原理的叙述:

kubeadm做了这些事
执行 kubeadm init时:

  • 自动化的集群机器合规检查
  • 自动化生成集群运行所需的各类证书及各类配置,并将Master节点信息保存在名为cluster-info的ConfigMap中。
  • 通过static Pod方式,运行API server, controller manager 、scheduler及etcd组件。
  • 生成Token以便其他节点加入集群

执行 kubeadm join时:

  • 节点通过token访问kube-apiserver,获取cluster-info中信息,主要是apiserver的授权信息(节点信任集群)。
  • 通过授权信息,kubelet可执行TLS bootstrapping,与apiserver真正建立互信任关系(集群信任节点)。

简单来说,kubeadm做的事就是把大部分组件都容器化,通过StaticPod方式运行,并自动化了大部分的集群配置及认证等工作,简单几步即可搭建一个可用Kubernetes的集群。

 

 因此,kubeadm部署的K8s集群大部分组件都以容器的形式存在,在哪里可以发现他们呢?

在部署后的集群中,使用kubectl get Pods -A查看所有Pod

# kubectl get pods -A
NAMESPACE     NAME                                      READY   STATUS    RESTARTS   AGE
kube-system   coredns-5644d7b6d9-49v79                  1/1     Running   15         17d
kube-system   coredns-5644d7b6d9-w7fd5                  1/1     Running   15         17d
kube-system   etcd-miwifi-r4cm-srv                      1/1     Running   81         17d
kube-system   kube-apiserver-miwifi-r4cm-srv            1/1     Running   26         3d4h
kube-system   kube-controller-manager-miwifi-r4cm-srv   1/1     Running   47         17d
kube-system   kube-proxy-gk5bw                          1/1     Running   16         17d
kube-system   kube-proxy-lpbbl                          1/1     Running   16         17d
kube-system   kube-scheduler-miwifi-r4cm-srv            1/1     Running   44         17d
kube-system   weave-net-c8hs6                           2/2     Running   49         17d
kube-system   weave-net-rbzcw                           2/2     Running   25         6d7h

通过Pod名称的前缀。可以清楚的看到包括etcd、kube-apiserver、kube-controller-manager、kube-proxy、kube-scheduler和dns工具coredns、网络插件weave均以Pod的形式存在于名为kube-system的Namespace中。

我们可以通过修改一个普通容器的方式查看或修改上述组件的信息

kubectl edit pod <pod-name> -n <Namespace-name>

如运行# kubectl edit pod kube-proxy-lpbbl -n kube-system【Kubernetes】使用kubeadm部署Kubernetes后,各组件配置文件所在的位置

当然,也可以通过kubectl logs命令看到各个组件的运行日志

# kubectl logs kube-proxy-lpbbl -n kube-system
W1222 14:40:33.120498       1 proxier.go:597] Failed to load kernel module ip_vs with modprobe. You can ignore this message when kube-proxy is running inside container without mounting /lib/modules
W1222 14:40:33.137374       1 proxier.go:597] Failed to load kernel module ip_vs_rr with modprobe. You can ignore this message when kube-proxy is running inside container without mounting /lib/modules
W1222 14:40:33.138451       1 proxier.go:597] Failed to load kernel module ip_vs_wrr with modprobe. You can ignore this message when kube-proxy is running inside container without mounting /lib/modules
W1222 14:40:33.155133       1 proxier.go:597] Failed to load kernel module ip_vs_sh with modprobe. You can ignore this message when kube-proxy is running inside container without mounting /lib/modules
W1222 14:40:33.163566       1 server_others.go:329] Flag proxy-mode="" unknown, assuming iptables proxy
I1222 14:40:33.196730       1 node.go:135] Successfully retrieved node IP: 192.168.31.189
I1222 14:40:33.196776       1 server_others.go:149] Using iptables Proxier.

......

那么,上述容器组件Pod是以什么样的形式被定义的呢,他们的启动配置文件又在什么位置呢?

答案是静态Pod,所谓静态Pod,是指需要长期运行在固定Node上,不被控制器和API Server掌控的Pod。

静态Pod只能由各Node自定义,而不是由主结点调配。

关于静态Pod的更多信息,可以参考本人学习笔记https://blog.csdn.net/qq_38093301/article/details/103469288

适合需要持续运行的长期设施,上述K8s的基础设施组件正是被注册成为各节点上的静态Pod

找到静态Pod配置文件的默认目录,系统将自动按时扫描该目录,根据目录中的文件在本节点启动静态Pod。

目录位置:/etc/kubernetes/manifests

# ls /etc/kubernetes/manifests
etcd.yaml  kube-apiserver.yaml  kube-controller-manager.yaml  kube-scheduler.yaml

可以看到四大组件的配置文件

具体查看一个文件,可以看到其配置信息和启动参数都在其中,我们当然可以修改这些文件来修改相关配置

# vim kube-scheduler.yaml

cheduler
    tier: control-plane
  name: kube-scheduler
  namespace: kube-system
spec:
  containers:
  - command:
    - kube-scheduler
    - --authentication-kubeconfig=/etc/kubernetes/scheduler.conf
    - --authorization-kubeconfig=/etc/kubernetes/scheduler.conf
    - --bind-address=127.0.0.1
    - --kubeconfig=/etc/kubernetes/scheduler.conf
    - --leader-elect=true

......

由于kubelet在配置容器网络、管理容器数据卷时,都需要直接操作宿主机,而如果现在 kubelet 本身就运行在一个容器里,那么直接操作宿主机就会变得很麻烦,所以,kubelet并没有以上述方式部署。

kubelet配置文件位置在 /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf

【Kubernetes】使用kubeadm部署Kubernetes后,各组件配置文件所在的位置