当前位置:网站首页>kubeadm系列-02-kubelet的配置和启动
kubeadm系列-02-kubelet的配置和启动
2022-07-05 05:23:00 【runzhliu】
overview
不管是在 control plane 节点还是在普通的 worker 节点,kubelet 是必须要启动的进程,而 kubelet 的安装方式可以用 rpm 包也可以用二进制
关于 kube init
里关于 kubelet 启动的日志,复习一下
# 开始启动kubelet
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Starting the kubelet
默认的配置
对于默认配置,我们可以不用每个参数都非常了解,可以有需要的时候再去查相关的文档和代码
# kubeadm config print init-defaults --component-configs KubeletConfiguration
# 节选了kind: KubeletConfiguration的部分
---
apiVersion: kubelet.config.k8s.io/v1beta1
authentication:
anonymous:
enabled: false
webhook:
cacheTTL: 0s
enabled: true
x509:
clientCAFile: /etc/kubernetes/pki/ca.crt
authorization:
mode: Webhook
webhook:
cacheAuthorizedTTL: 0s
cacheUnauthorizedTTL: 0s
cgroupDriver: cgroupfs
clusterDNS:
- 10.96.0.10
clusterDomain: cluster.local
cpuManagerReconcilePeriod: 0s
evictionPressureTransitionPeriod: 0s
fileCheckFrequency: 0s
healthzBindAddress: 127.0.0.1
healthzPort: 10248
httpCheckFrequency: 0s
imageMinimumGCAge: 0s
kind: KubeletConfiguration
logging: {
}
nodeStatusReportFrequency: 0s
nodeStatusUpdateFrequency: 0s
rotateCertificates: true
runtimeRequestTimeout: 0s
shutdownGracePeriod: 0s
shutdownGracePeriodCriticalPods: 0s
staticPodPath: /etc/kubernetes/manifests
streamingConnectionIdleTimeout: 0s
syncFrequency: 0s
volumeStatsAggPeriod: 0s
drop in配置
kubelet 有一些特殊的配置文件需要注意一下,不明白的可以查看官方文档
在不用那些包管理器的情况下,徒手装的文档可以参考这里
启动
kubelet 真正被启动的逻辑在下面的代码里,首先会先尝试停止进程(防止有多个进程启动了),本质上就是通过 systemctl status kubelet
先检查服务的状态,如果没有 enable 就会提醒,如果 enable 了就会通过 systemctl stop kubelet
来停止服务,然后会吧 ClusterConfiguration
和 NodeRegistration
的参数(并不是所有,主要是启动进程启动的参数args
之类的写到KUBELET_KUBEADM_ARGS
)合并,并且会写到默认的路径 /var/lib/kubelet/kubeadm-flags.env
,然后再把 ClusterConfiguration
(只针对kubelet.config.k8s.io
)写到磁盘 /var/lib/kubelet/config.yaml
,最后就是通过 systemctl start kubelet
来启动进程了
// runKubeletStart executes kubelet start logic.
func runKubeletStart(c workflow.RunData) error {
data, ok := c.(InitData)
if !ok {
return errors.New("kubelet-start phase invoked with an invalid data struct")
}
// First off, configure the kubelet. In this short timeframe, kubeadm is trying to stop/restart the kubelet
// Try to stop the kubelet service so no race conditions occur when configuring it
if !data.DryRun() {
klog.V(1).Infoln("Stopping the kubelet")
kubeletphase.TryStopKubelet()
}
// Write env file with flags for the kubelet to use. We do not need to write the --register-with-taints for the control-plane,
// as we handle that ourselves in the mark-control-plane phase
// TODO: Maybe we want to do that some time in the future, in order to remove some logic from the mark-control-plane phase?
if err := kubeletphase.WriteKubeletDynamicEnvFile(&data.Cfg().ClusterConfiguration, &data.Cfg().NodeRegistration, false, data.KubeletDir()); err != nil {
return errors.Wrap(err, "error writing a dynamic environment file for the kubelet")
}
// Write the kubelet configuration file to disk.
if err := kubeletphase.WriteConfigToDisk(&data.Cfg().ClusterConfiguration, data.KubeletDir()); err != nil {
return errors.Wrap(err, "error writing kubelet configuration to disk")
}
// Try to start the kubelet service in case it's inactive
if !data.DryRun() {
fmt.Println("[kubelet-start] Starting the kubelet")
kubeletphase.TryStartKubelet()
}
return nil
}
来看下
# cat /var/lib/kubelet/kubeadm-flags.env
KUBELET_KUBEADM_ARGS="--network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.4.1"
# cat /var/lib/kubelet/config.yaml
apiVersion: kubelet.config.k8s.io/v1beta1
authentication:
anonymous:
enabled: false
webhook:
cacheTTL: 0s
enabled: true
x509:
clientCAFile: /etc/kubernetes/pki/ca.crt
authorization:
mode: Webhook
webhook:
cacheAuthorizedTTL: 0s
cacheUnauthorizedTTL: 0s
cgroupDriver: cgroupfs
clusterDNS:
- 10.96.0.10
clusterDomain: cluster.local
cpuManagerReconcilePeriod: 0s
evictionPressureTransitionPeriod: 0s
fileCheckFrequency: 0s
healthzBindAddress: 127.0.0.1
healthzPort: 10248
httpCheckFrequency: 0s
imageMinimumGCAge: 0s
kind: KubeletConfiguration
logging: {
}
nodeStatusReportFrequency: 0s
nodeStatusUpdateFrequency: 0s
rotateCertificates: true
runtimeRequestTimeout: 0s
shutdownGracePeriod: 0s
shutdownGracePeriodCriticalPods: 0s
staticPodPath: /etc/kubernetes/manifests
streamingConnectionIdleTimeout: 0s
syncFrequency: 0s
volumeStatsAggPeriod: 0s
其他
下面是在 control plane 上完整启动了 kubelet 之后通过 ps -ef|cat
获得的进程以及参数
# kubeadm init --upload-certs --image-repository registry.aliyuncs.com/google_containers --kubernetes-version 1.21.7 --pod-network-cidr=10.244.0.0/16
/usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --config=/var/lib/kubelet/config.yaml --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.4.1
边栏推荐
- Haut OJ 1357: lunch question (I) -- high precision multiplication
- FVP和Juno平台的Memory Layout介绍
- cocos2dx_ Lua card flip
- To be continued] [UE4 notes] L4 object editing
- Ue4/ue5 illusory engine, material chapter, texture, compression and memory compression and memory
- On-off and on-off of quality system construction
- 搭建完数据库和网站后.打开app测试时候显示服务器正在维护.
- Transport connection management of TCP
- Binary search basis
- 利用HashMap实现简单缓存
猜你喜欢
Romance of programmers on Valentine's Day
质量体系建设之路的分分合合
Quick sort summary
[depth first search] 695 Maximum area of the island
2022年上半年国家教师资格证考试
一个新的微型ORM开源框架
Research on the value of background repeat of background tiling
Learning notes of "hands on learning in depth"
To the distance we have been looking for -- film review of "flying house journey"
[trans]: spécification osgi
随机推荐
Use of room database
Summary of Haut OJ 2021 freshman week
Demonstration of using Solon auth authentication framework (simpler authentication framework)
Stm32cubemx (8): RTC and RTC wake-up interrupt
使用命令符关闭笔记本自带键盘命令
[to be continued] I believe that everyone has the right to choose their own way of life - written in front of the art column
win10虚拟机集群优化方案
What is the agile proportion of PMP Exam? Dispel doubts
质量体系建设之路的分分合合
[turn to] MySQL operation practice (I): Keywords & functions
A complete attack chain
《动手学深度学习》学习笔记
发现一个很好的 Solon 框架试手的教学视频(Solon,轻量级应用开发框架)
[转]MySQL操作实战(三):表联结
Unity ugui source code graphic
Solon Auth 认证框架使用演示(更简单的认证框架)
A new micro ORM open source framework
C language Essay 1
支持多模多态 GBase 8c数据库持续创新重磅升级
Warning using room database: schema export directory is not provided to the annotation processor so we cannot export