当前位置:网站首页>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
边栏推荐
- 搭建完数据库和网站后.打开app测试时候显示服务器正在维护.
- Daily question - Search two-dimensional matrix PS two-dimensional array search
- Acwing 4300. Two operations
- [turn]: OSGi specification in simple terms
- 每日一题-搜索二维矩阵ps二维数组的查找
- [binary search] 69 Square root of X
- 剑指 Offer 58 - II. 左旋转字符串
- Haut OJ 1316: sister choice buys candy III
- [to be continued] I believe that everyone has the right to choose their own way of life - written in front of the art column
- Add level control and logger level control of Solon logging plug-in
猜你喜欢
Sword finger offer 04 Search in two-dimensional array
[trans]: spécification osgi
[to be continued] [UE4 notes] L3 import resources and project migration
读者写者模型
一个新的微型ORM开源框架
[depth first search] 695 Maximum area of the island
Little known skills of Task Manager
剑指 Offer 53 - II. 0~n-1中缺失的数字
Sword finger offer 09 Implementing queues with two stacks
质量体系建设之路的分分合合
随机推荐
二十六、文件系统API(设备在应用间的共享;目录和文件API)
Romance of programmers on Valentine's Day
剑指 Offer 53 - I. 在排序数组中查找数字 I
YOLOv5-Shufflenetv2
远程升级怕截胡?详解FOTA安全升级
[allocation problem] 135 Distribute candy
Haut OJ 1401: praise energy
National teacher qualification examination in the first half of 2022
[allocation problem] 455 Distribute cookies
Support multi-mode polymorphic gbase 8C database continuous innovation and heavy upgrade
How can the Solon framework easily obtain the response time of each request?
Add level control and logger level control of Solon logging plug-in
浅谈JVM(面试常考)
卷积神经网络——卷积层
Reflection summary of Haut OJ freshmen on Wednesday
Reader writer model
剑指 Offer 53 - II. 0~n-1中缺失的数字
对象的序列化
Drawing dynamic 3D circle with pure C language
数仓项目的集群脚本