当前位置:网站首页>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
边栏推荐
- Collapse of adjacent vertical outer margins
- [to be continued] [depth first search] 547 Number of provinces
- The next key of win generates the timestamp file of the current day
- 对象的序列化
- Applet Live + e - commerce, si vous voulez être un nouveau e - commerce de détail, utilisez - le!
- What is the agile proportion of PMP Exam? Dispel doubts
- [es practice] use the native realm security mode on es
- 搭建完数据库和网站后.打开app测试时候显示服务器正在维护.
- To the distance we have been looking for -- film review of "flying house journey"
- [转]:Apache Felix Framework配置属性
猜你喜欢
[interval problem] 435 Non overlapping interval
Yolov5 ajouter un mécanisme d'attention
Collapse of adjacent vertical outer margins
Support multi-mode polymorphic gbase 8C database continuous innovation and heavy upgrade
Stm32cubemx (8): RTC and RTC wake-up interrupt
Optimization scheme of win10 virtual machine cluster
对象的序列化
嵌入式数据库开发编程(六)——C API
A new micro ORM open source framework
Simple modal box
随机推荐
win下一键生成当日的时间戳文件
YOLOv5-Shufflenetv2
[allocation problem] 455 Distribute cookies
National teacher qualification examination in the first half of 2022
GBase数据库助力湾区数字金融发展
Support multi-mode polymorphic gbase 8C database continuous innovation and heavy upgrade
服务熔断 Hystrix
SAP-修改系统表数据的方法
[binary search] 69 Square root of X
Improvement of pointnet++
room数据库的使用
[turn to] MySQL operation practice (I): Keywords & functions
[allocation problem] 135 Distribute candy
质量体系建设之路的分分合合
2022 / 7 / 1 Résumé de l'étude
[turn]: OSGi specification in simple terms
2022/7/2 question summary
What is the agile proportion of PMP Exam? Dispel doubts
FVP和Juno平台的Memory Layout介绍
Development error notes