- 作者:二二向箔
- 链接:https://www.jianshu.com/p/3f29d826a7d8
目录
![099afb2d0258b7f8c0525dda41527c8a.png](https://img-blog.csdnimg.cn/img_convert/099afb2d0258b7f8c0525dda41527c8a.png)
一. 概述
本文是kubelet源码阅读的先导片,先了解kubelet的主要配置和功能以及一些注意事项,后面走读源码的时候才会更加顺畅,不然一堆 config 的初始化和chan处理,不知道支持哪些新特性,啥场景会用到,看了也没啥意思。
二. 配置方式
2.1 flag 模式
k8s 迭代速度很快,几个月一个大版本,kubelet 的启动参数也在不断变化,一切配置以官方文档为准,或者拿二进制直接--help 看,不然忙活一圈才发现某个特性在当前版本不支持。下面是一份基础可用的kubelet配置,版本 1.8
./kubelet \--address=192.168.5.228 \--allow-privileged=true \--client-ca-file=/etc/kubernetes/pki/ca.pem \--cloud-config=/etc/kubernetes/cloud.config \--cloud-provider=external \--cluster-dns=172.16.0.10 \--cluster-domain=cluster.local \--docker-root=/data/docker \--fail-swap-on=false \--feature-gates=VolumeSnapshotDataSource=true,CSINodeInfo=true,CSIDriverRegistry=true \--hostname-override=192.168.5.228 \--kubeconfig=/etc/kubernetes/kubelet.conf \--logtostderr=true \--network-plugin=kubenet \--max-pods=256 \--non-masquerade-cidr=172.26.0.0/16 \--pod-infra-container-image=hub.docker.com/public/pause:2.0 \--pod-manifest-path=/etc/kubernetes/manifests \--root-dir=/data/kubelet \--tls-cipher-suites=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA \--anonymous-auth=false \--v=5 \--enforce-node-allocatable=pods,kube-reserved,system-reserved \--kube-reserved-cgroup=/system.slice/kubelet.service \--system-reserved-cgroup=/system.slice \--kube-reserved=cpu=50m \--system-reserved=cpu=50m \--eviction-hard=memory.available<5%,nodefs.available<10%,imagefs.available<10%% \--eviction-soft=memory.available<10%,nodefs.available<15%,imagefs.available<15%% \--eviction-soft-grace-period=memory.available=2m,nodefs.available=2m,imagefs.available=2m \--eviction-max-pod-grace-period=30 \--eviction-minimum-reclaim=memory.available=0Mi,nodefs.available=500Mi,imagefs.available=500Mi
2.2 config 模式
上面的配置文件是老版本 kubelet(1.10 以前),启动参数都是用 flag 来声明的,简单粗暴,在 1.10 以后,kubelet 支持了KubeletConfiguration的方式来声明参数,如 kubeadm 部署的集群配置如下:
# Note: This dropin only works with kubeadm and kubelet v1.11+[Service]Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"# This is a file that "kubeadm init" and "kubeadm join" generates at runtime, populating the KUBELET_KUBEADM_ARGS variable dynamicallyEnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env# This is a file that the user can use for overrides of the kubelet args as a last resort. Pre