当前位置:网站首页>Configuration and startup of kubedm series-02-kubelet
Configuration and startup of kubedm series-02-kubelet
2022-07-05 05:30:00 【runzhliu】
List of articles
overview
No matter what control plane The node is still ordinary worker node ,kubelet It is a process that must be started , and kubelet The installation method of can use rpm Packages can also be binary
About kube init
About kubelet Start log , Review the
# To start 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
Default configuration
For the default configuration , We don't need to know every parameter very well , You can check the relevant documents and codes when necessary
# kubeadm config print init-defaults --component-configs KubeletConfiguration
# Excerpts kind: KubeletConfiguration Part of
---
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 To configure
kubelet There are some special configuration files that need attention , Those who don't understand can check Official documents
Without those package managers , You can refer to the documents installed by hand here
start-up
kubelet The logic that is really started is in the following code , First, try to stop the process ( Prevent multiple processes from starting ), It's essentially passing systemctl status kubelet
First check the status of the service , without enable Will remind , If enable It will pass systemctl stop kubelet
To stop the service , Then I will ClusterConfiguration
and NodeRegistration
Parameters of ( Not all , Mainly the parameters for starting the process args
And so on KUBELET_KUBEADM_ARGS
) Merge , And will write to the default path /var/lib/kubelet/kubeadm-flags.env
, Then take it. ClusterConfiguration
( Only aim at kubelet.config.k8s.io
) Write to disk /var/lib/kubelet/config.yaml
, Finally, through systemctl start kubelet
To start the process
// 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
}
Take a look
# 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
other
The following is the control plane It is fully started on kubelet After through ps -ef|cat
Get the process and parameters
# 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
边栏推荐
- Support multi-mode polymorphic gbase 8C database continuous innovation and heavy upgrade
- [binary search] 34 Find the first and last positions of elements in a sorted array
- A misunderstanding about the console window
- Haut OJ 1221: a tired day
- 剑指 Offer 35.复杂链表的复制
- Find a good teaching video for Solon framework test (Solon, lightweight application development framework)
- Solon Logging 插件的添加器级别控制和日志器的级别控制
- Zheng Qing 21 ACM is fun. (3) part of the problem solution and summary
- Solution to the palindrome string (Luogu p5041 haoi2009)
- 第六章 数据流建模—课后习题
猜你喜欢
Sword finger offer 53 - I. find the number I in the sorted array
[depth first search] 695 Maximum area of the island
游戏商城毕业设计
Solution to the palindrome string (Luogu p5041 haoi2009)
Little known skills of Task Manager
Web APIs DOM node
剑指 Offer 05. 替换空格
[turn to] MySQL operation practice (III): table connection
[转]MySQL操作实战(一):关键字 & 函数
YOLOv5-Shufflenetv2
随机推荐
Pointnet++学习
Solon 框架如何方便获取每个请求的响应时间?
Binary search basis
卷积神经网络简介
To be continued] [UE4 notes] L4 object editing
Reflection summary of Haut OJ freshmen on Wednesday
Service fusing hystrix
Developing desktop applications with electron
Haut OJ 1350: choice sends candy
26、 File system API (device sharing between applications; directory and file API)
Chapter 6 data flow modeling - after class exercises
远程升级怕截胡?详解FOTA安全升级
Haut OJ 1221: a tired day
MySQL数据库(一)
剑指 Offer 58 - II. 左旋转字符串
Fragment addition failed error lookup
[interval problem] 435 Non overlapping interval
Animation scoring data analysis and visualization and it industry recruitment data analysis and visualization
全国中职网络安全B模块之国赛题远程代码执行渗透测试 //PHPstudy的后门漏洞分析
每日一题-搜索二维矩阵ps二维数组的查找