2017-07-29 20:35:53 +02:00
|
|
|
---
|
|
|
|
systemd:
|
|
|
|
units:
|
|
|
|
- name: docker.service
|
2020-06-10 07:38:32 +02:00
|
|
|
enabled: true
|
2017-07-29 20:35:53 +02:00
|
|
|
- name: locksmithd.service
|
|
|
|
mask: true
|
2017-09-14 05:08:28 +02:00
|
|
|
- name: kubelet.path
|
2020-06-10 07:38:32 +02:00
|
|
|
enabled: true
|
2017-09-14 05:08:28 +02:00
|
|
|
contents: |
|
|
|
|
[Unit]
|
|
|
|
Description=Watch for kubeconfig
|
|
|
|
[Path]
|
|
|
|
PathExists=/etc/kubernetes/kubeconfig
|
|
|
|
[Install]
|
|
|
|
WantedBy=multi-user.target
|
2017-07-29 20:35:53 +02:00
|
|
|
- name: wait-for-dns.service
|
2020-06-10 07:38:32 +02:00
|
|
|
enabled: true
|
2017-07-29 20:35:53 +02:00
|
|
|
contents: |
|
|
|
|
[Unit]
|
|
|
|
Description=Wait for DNS entries
|
|
|
|
Wants=systemd-resolved.service
|
|
|
|
Before=kubelet.service
|
|
|
|
[Service]
|
|
|
|
Type=oneshot
|
|
|
|
RemainAfterExit=true
|
|
|
|
ExecStart=/bin/sh -c 'while ! /usr/bin/grep '^[^#[:space:]]' /etc/resolv.conf > /dev/null; do sleep 1; done'
|
|
|
|
[Install]
|
|
|
|
RequiredBy=kubelet.service
|
|
|
|
- name: kubelet.service
|
|
|
|
contents: |
|
|
|
|
[Unit]
|
2020-04-26 01:50:51 +02:00
|
|
|
Description=Kubelet
|
2019-03-14 08:55:55 +01:00
|
|
|
Requires=coreos-metadata.service
|
|
|
|
After=coreos-metadata.service
|
2017-09-25 03:04:48 +02:00
|
|
|
Wants=rpc-statd.service
|
2017-07-29 20:35:53 +02:00
|
|
|
[Service]
|
2020-08-14 05:46:42 +02:00
|
|
|
Environment=KUBELET_IMAGE=docker://quay.io/poseidon/kubelet:v1.18.8
|
2019-03-14 08:55:55 +01:00
|
|
|
EnvironmentFile=/run/metadata/coreos
|
2017-07-29 20:35:53 +02:00
|
|
|
ExecStartPre=/bin/mkdir -p /etc/kubernetes/cni/net.d
|
2019-09-19 09:15:39 +02:00
|
|
|
ExecStartPre=/bin/mkdir -p /etc/kubernetes/manifests
|
|
|
|
ExecStartPre=/bin/mkdir -p /opt/cni/bin
|
2018-04-22 00:13:38 +02:00
|
|
|
ExecStartPre=/bin/mkdir -p /var/lib/calico
|
2018-02-23 07:00:51 +01:00
|
|
|
ExecStartPre=/bin/mkdir -p /var/lib/kubelet/volumeplugins
|
2017-07-29 20:35:53 +02:00
|
|
|
ExecStartPre=/usr/bin/bash -c "grep 'certificate-authority-data' /etc/kubernetes/kubeconfig | awk '{print $2}' | base64 -d > /etc/kubernetes/ca.crt"
|
2017-09-14 05:49:23 +02:00
|
|
|
ExecStartPre=-/usr/bin/rkt rm --uuid-file=/var/cache/kubelet-pod.uuid
|
Inline Container Linux kubelet.service, deprecate kubelet-wrapper
* Change kubelet.service on Container Linux nodes to ExecStart Kubelet
inline to replace the use of the host OS kubelet-wrapper script
* Express rkt run flags and volume mounts in a clear, uniform way to
make the Kubelet service easier to audit, manage, and understand
* Eliminate reliance on a Container Linux kubelet-wrapper script
* Typhoon for Fedora CoreOS developed a kubelet.service that similarly
uses an inline ExecStart (except with podman instead of rkt) and a
more minimal set of volume mounts. Adopt the volume improvements:
* Change Kubelet /etc/kubernetes volume to read-only
* Change Kubelet /etc/resolv.conf volume to read-only
* Remove unneeded /var/lib/cni volume mount
Background:
* kubelet-wrapper was added in CoreOS around the time of Kubernetes v1.0
to simplify running a CoreOS-built hyperkube ACI image via rkt-fly. The
script defaults are no longer ideal (e.g. rkt's notion of trust dates
back to quay.io ACI image serving and signing, which informed the OCI
standard images we use today, though they still lack rkt's signing ideas).
* Shipping kubelet-wrapper was regretted at CoreOS, but remains in the
distro for compatibility. The script is not updated to track hyperkube
changes, but it is stable and kubelet.env overrides bridge most gaps
* Typhoon Container Linux nodes have used kubelet-wrapper to rkt/rkt-fly
run the Kubelet via the official k8s.gcr.io hyperkube image using overrides
(new image registry, new image format, restart handling, new mounts, new
entrypoint in v1.17).
* Observation: Most of what it takes to run a Kubelet container is defined
in Typhoon, not in kubelet-wrapper. The wrapper's value is now undermined
by having to workaround its dated defaults. Typhoon may be better served
defining Kubelet.service explicitly
* Typhoon for Fedora CoreOS developed a kubelet.service without the use
of a host OS kubelet-wrapper which is both clearer and eliminated some
volume mounts
2019-12-29 20:17:26 +01:00
|
|
|
ExecStart=/usr/bin/rkt run \
|
|
|
|
--uuid-file-save=/var/cache/kubelet-pod.uuid \
|
|
|
|
--stage1-from-dir=stage1-fly.aci \
|
|
|
|
--hosts-entry host \
|
|
|
|
--insecure-options=image \
|
|
|
|
--volume etc-kubernetes,kind=host,source=/etc/kubernetes,readOnly=true \
|
|
|
|
--mount volume=etc-kubernetes,target=/etc/kubernetes \
|
|
|
|
--volume etc-machine-id,kind=host,source=/etc/machine-id,readOnly=true \
|
|
|
|
--mount volume=etc-machine-id,target=/etc/machine-id \
|
|
|
|
--volume etc-os-release,kind=host,source=/usr/lib/os-release,readOnly=true \
|
|
|
|
--mount volume=etc-os-release,target=/etc/os-release \
|
|
|
|
--volume=etc-resolv,kind=host,source=/etc/resolv.conf,readOnly=true \
|
|
|
|
--mount volume=etc-resolv,target=/etc/resolv.conf \
|
|
|
|
--volume etc-ssl-certs,kind=host,source=/etc/ssl/certs,readOnly=true \
|
|
|
|
--mount volume=etc-ssl-certs,target=/etc/ssl/certs \
|
|
|
|
--volume lib-modules,kind=host,source=/lib/modules,readOnly=true \
|
|
|
|
--mount volume=lib-modules,target=/lib/modules \
|
|
|
|
--volume run,kind=host,source=/run \
|
|
|
|
--mount volume=run,target=/run \
|
|
|
|
--volume usr-share-certs,kind=host,source=/usr/share/ca-certificates,readOnly=true \
|
|
|
|
--mount volume=usr-share-certs,target=/usr/share/ca-certificates \
|
2020-02-19 06:40:58 +01:00
|
|
|
--volume var-lib-calico,kind=host,source=/var/lib/calico,readOnly=true \
|
Inline Container Linux kubelet.service, deprecate kubelet-wrapper
* Change kubelet.service on Container Linux nodes to ExecStart Kubelet
inline to replace the use of the host OS kubelet-wrapper script
* Express rkt run flags and volume mounts in a clear, uniform way to
make the Kubelet service easier to audit, manage, and understand
* Eliminate reliance on a Container Linux kubelet-wrapper script
* Typhoon for Fedora CoreOS developed a kubelet.service that similarly
uses an inline ExecStart (except with podman instead of rkt) and a
more minimal set of volume mounts. Adopt the volume improvements:
* Change Kubelet /etc/kubernetes volume to read-only
* Change Kubelet /etc/resolv.conf volume to read-only
* Remove unneeded /var/lib/cni volume mount
Background:
* kubelet-wrapper was added in CoreOS around the time of Kubernetes v1.0
to simplify running a CoreOS-built hyperkube ACI image via rkt-fly. The
script defaults are no longer ideal (e.g. rkt's notion of trust dates
back to quay.io ACI image serving and signing, which informed the OCI
standard images we use today, though they still lack rkt's signing ideas).
* Shipping kubelet-wrapper was regretted at CoreOS, but remains in the
distro for compatibility. The script is not updated to track hyperkube
changes, but it is stable and kubelet.env overrides bridge most gaps
* Typhoon Container Linux nodes have used kubelet-wrapper to rkt/rkt-fly
run the Kubelet via the official k8s.gcr.io hyperkube image using overrides
(new image registry, new image format, restart handling, new mounts, new
entrypoint in v1.17).
* Observation: Most of what it takes to run a Kubelet container is defined
in Typhoon, not in kubelet-wrapper. The wrapper's value is now undermined
by having to workaround its dated defaults. Typhoon may be better served
defining Kubelet.service explicitly
* Typhoon for Fedora CoreOS developed a kubelet.service without the use
of a host OS kubelet-wrapper which is both clearer and eliminated some
volume mounts
2019-12-29 20:17:26 +01:00
|
|
|
--mount volume=var-lib-calico,target=/var/lib/calico \
|
|
|
|
--volume var-lib-docker,kind=host,source=/var/lib/docker \
|
|
|
|
--mount volume=var-lib-docker,target=/var/lib/docker \
|
|
|
|
--volume var-lib-kubelet,kind=host,source=/var/lib/kubelet,recursive=true \
|
|
|
|
--mount volume=var-lib-kubelet,target=/var/lib/kubelet \
|
|
|
|
--volume var-log,kind=host,source=/var/log \
|
|
|
|
--mount volume=var-log,target=/var/log \
|
|
|
|
--volume opt-cni-bin,kind=host,source=/opt/cni/bin \
|
|
|
|
--mount volume=opt-cni-bin,target=/opt/cni/bin \
|
2020-05-20 07:39:53 +02:00
|
|
|
$${KUBELET_IMAGE} -- \
|
2017-07-29 20:35:53 +02:00
|
|
|
--anonymous-auth=false \
|
2018-05-14 08:20:42 +02:00
|
|
|
--authentication-token-webhook \
|
|
|
|
--authorization-mode=Webhook \
|
2020-04-26 01:50:51 +02:00
|
|
|
--bootstrap-kubeconfig=/etc/kubernetes/kubeconfig \
|
2017-09-14 05:49:23 +02:00
|
|
|
--client-ca-file=/etc/kubernetes/ca.crt \
|
2019-01-05 22:32:03 +01:00
|
|
|
--cluster_dns=${cluster_dns_service_ip} \
|
2017-12-09 22:36:59 +01:00
|
|
|
--cluster_domain=${cluster_domain_suffix} \
|
2017-07-29 20:35:53 +02:00
|
|
|
--cni-conf-dir=/etc/kubernetes/cni/net.d \
|
2019-12-29 20:20:59 +01:00
|
|
|
--healthz-port=0 \
|
2019-03-14 08:55:55 +01:00
|
|
|
--hostname-override=$${COREOS_DIGITALOCEAN_IPV4_PRIVATE_0} \
|
2020-04-26 01:50:51 +02:00
|
|
|
--kubeconfig=/var/lib/kubelet/kubeconfig \
|
2017-09-14 05:49:23 +02:00
|
|
|
--network-plugin=cni \
|
2019-09-18 06:24:30 +02:00
|
|
|
--node-labels=node.kubernetes.io/node \
|
2018-02-23 07:00:51 +01:00
|
|
|
--pod-manifest-path=/etc/kubernetes/manifests \
|
2018-05-14 03:16:10 +02:00
|
|
|
--read-only-port=0 \
|
2020-04-26 01:50:51 +02:00
|
|
|
--rotate-certificates \
|
2018-02-23 07:00:51 +01:00
|
|
|
--volume-plugin-dir=/var/lib/kubelet/volumeplugins
|
2017-09-14 05:49:23 +02:00
|
|
|
ExecStop=-/usr/bin/rkt stop --uuid-file=/var/cache/kubelet-pod.uuid
|
2017-07-29 20:35:53 +02:00
|
|
|
Restart=always
|
|
|
|
RestartSec=5
|
|
|
|
[Install]
|
|
|
|
WantedBy=multi-user.target
|
|
|
|
- name: delete-node.service
|
2020-06-10 07:38:32 +02:00
|
|
|
enabled: true
|
2017-07-29 20:35:53 +02:00
|
|
|
contents: |
|
|
|
|
[Unit]
|
|
|
|
Description=Waiting to delete Kubernetes node on shutdown
|
|
|
|
[Service]
|
|
|
|
Type=oneshot
|
|
|
|
RemainAfterExit=true
|
|
|
|
ExecStart=/bin/true
|
|
|
|
ExecStop=/etc/kubernetes/delete-node
|
|
|
|
[Install]
|
|
|
|
WantedBy=multi-user.target
|
|
|
|
storage:
|
2020-01-07 06:38:20 +01:00
|
|
|
directories:
|
|
|
|
- path: /etc/kubernetes
|
|
|
|
filesystem: root
|
2020-06-10 07:38:32 +02:00
|
|
|
mode: 0755
|
2017-07-29 20:35:53 +02:00
|
|
|
files:
|
|
|
|
- path: /etc/sysctl.d/max-user-watches.conf
|
|
|
|
filesystem: root
|
2020-06-10 07:38:32 +02:00
|
|
|
mode: 0644
|
2017-07-29 20:35:53 +02:00
|
|
|
contents:
|
|
|
|
inline: |
|
|
|
|
fs.inotify.max_user_watches=16184
|
|
|
|
- path: /etc/kubernetes/delete-node
|
|
|
|
filesystem: root
|
|
|
|
mode: 0744
|
|
|
|
contents:
|
|
|
|
inline: |
|
|
|
|
#!/bin/bash
|
|
|
|
set -e
|
|
|
|
exec /usr/bin/rkt run \
|
|
|
|
--trust-keys-from-https \
|
|
|
|
--volume config,kind=host,source=/etc/kubernetes \
|
|
|
|
--mount volume=config,target=/etc/kubernetes \
|
2017-10-25 06:34:29 +02:00
|
|
|
--insecure-options=image \
|
2020-08-14 05:46:42 +02:00
|
|
|
docker://quay.io/poseidon/kubelet:v1.18.8 \
|
2017-07-29 20:35:53 +02:00
|
|
|
--net=host \
|
|
|
|
--dns=host \
|
2020-03-28 20:31:39 +01:00
|
|
|
--exec=/usr/local/bin/kubectl -- --kubeconfig=/etc/kubernetes/kubeconfig delete node $(hostname)
|