10-kubadm.conf(kubelet drop-in file) 정리

Seung·2022년 3월 1일
0

K8S

목록 보기
7/14
post-custom-banner

10-kubeadm.conf

다음과 같이 systemctl status kubelet을 통해서 kubelet의 상태를 확인해보면
Drop-in에 10-kubeadm.conf라는 파일이 존재한다.

이 파일의 용도가 궁금해져서 이를 글로 남겨 둔다.

● kubelet.service - kubelet: The Kubernetes Node Agent
   Loaded: loaded (/usr/lib/systemd/system/kubelet.service; enabled; vendor preset: disabled)
  Drop-In: /usr/lib/systemd/system/kubelet.service.d
           └─10-kubeadm.conf
   Active: active (running) since Mon 2022-02-28 19:43:49 EST; 5h 42min ago
     Docs: https://kubernetes.io/docs/
 Main PID: 91537 (kubelet)
    Tasks: 14 (limit: 23812)
   Memory: 50.6M
   CGroup: /system.slice/kubelet.service
           └─91537 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubecon>

 228 19:44:01 master1 kubelet[91537]: I0228 19:44:01.146748   91537 reconciler.go:224] operationExecutor>
 228 19:44:01 master1 kubelet[91537]: I0228 19:44:01.146813   91537 reconciler.go:224] operationExecutor>
 228 19:44:01 master1 kubelet[91537]: I0228 19:44:01.146851   91537 reconciler.go:224] operationExecutor>
 228 19:44:01 master1 kubelet[91537]: I0228 19:44:01.146890   91537 reconciler.go:224] operationExecutor>
 228 19:44:01 master1 kubelet[91537]: I0228 19:44:01.146919   91537 reconciler.go:224] operationExecutor>
 228 19:44:01 master1 kubelet[91537]: I0228 19:44:01.146971   91537 reconciler.go:224] operationExecutor>
 228 19:44:01 master1 kubelet[91537]: I0228 19:44:01.147007   91537 reconciler.go:224] operationExecutor>
 228 19:44:01 master1 kubelet[91537]: I0228 19:44:01.147034   91537 reconciler.go:224] operationExecutor>
 228 19:44:01 master1 kubelet[91537]: I0228 19:44:01.147060   91537 reconciler.go:224] operationExecutor>
 228 19:44:01 master1 kubelet[91537]: I0228 19:44:01.147082   91537 reconciler.go:157] Reconciler: start>

kubeadm init을 통해서 kubelet을 activate 시키면 /etc/systemd/system/kubelet.service.d 경로에 10-kubeadm.conf를 확인할 수 있다.

이 파일은 kubeadm이 생성한 파일로써, systemd가 kubelet을 어떻게 실행시켜야 하는지에 대한 configuration이다.

(참고로 kubeadm cli는 drop-in file을 건드리지 않는다)

즉 정리하면, kubeadm에 의해서 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf라는 파일이 생성되고, systemd는 이 파일을 가지고 kubelet을 실행한다.

다음은 10-kubeadm.conf 파일의 내용이다.

[root@master1 ~]# cat /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf 
# 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 dynamically
EnvironmentFile=-/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. Preferably, the user should use
# the .NodeRegistration.KubeletExtraArgs object in the configuration files instead. KUBELET_EXTRA_ARGS should be sourced from this file.
EnvironmentFile=-/etc/sysconfig/kubelet
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS

10-kubeadm.conf 파일은 kubelet을 실행시키기 위한 모든 파일들의 default location을 관리한다.

상단에서 Environment와 EnvironmentFile을 정의하고, 이를 가지고 ExecStart에서 kubelet 실행에 대한 커맨드를 완성한 뒤, systemd가 kubelet 프로세스를 실행시키는 것이다.

root       91537  2.2  2.8 1783824 109428 ?      Ssl   2월28   8:39
/usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf
--kubeconfig=/etc/kubernetes/kubelet.conf 
--config=/var/lib/kubelet/config.yaml 
--container-runtime=remote 
--container-runtime-endpoint=/var/run/crio/crio.sock

다음은 10-kubeadm.conf에 정의된 파일에 대한 간단한 내용이다.

  • /etc/kubernetes/bootstrap-kubelet.conf: TLS bootstrap을 위해서 사용되는 파일로 /etc/kubernetes/kubelet.conf가 없다면 사용되지 않는다.

  • /etc/kubernetes/kubelet.conf: unique kubelet identity를 위해서 사용되는 파일
[root@master1 ~]# cat /etc/kubernetes/kubelet.conf
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM1ekNDQWMrZ0F3SUJ~~
    server: https://192.168.9.10:6443
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: system:node:master1
  name: system:node:master1@kubernetes
current-context: system:node:master1@kubernetes
kind: Config
preferences: {}
users:
- name: system:node:master1
  user:
    client-certificate: /var/lib/kubelet/pki/kubelet-client-current.pem
    client-key: /var/lib/kubelet/pki/kubelet-client-current.pem

  • /var/lib/kubelet/config.yaml: kubelet의 component config를 포함하는 파일
[root@master1 ~]# 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: systemd
clusterDNS:
- 172.1.1.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
staticPodPath: /etc/kubernetes/manifests
streamingConnectionIdleTimeout: 0s
syncFrequency: 0s
volumeStatsAggPeriod: 0s

  • /var/lib/kubelet/kubeadm-flags.env: KUBELET_KUBEADM_ARGS를 포함하는 dynamic environment파일
[root@master1 ~]# cat /var/lib/kubelet/kubeadm-flags.env
KUBELET_KUBEADM_ARGS="--container-runtime=remote --container-runtime-endpoint=/var/run/crio/crio.sock"

  • etc/default/kubelet(DEB) or /etc/sysconfig/kubelet(RPM): user-specified flag를 override를 할 수 있는 KUBELET_EXTRA_ARGS를 포함

reference

https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/kubelet-integration/

profile
인프라 마스터가 되고 싶어요
post-custom-banner

0개의 댓글