Обратите внимание, что подобный вопрос задали:
Как передать флаги когда стартовый 'сервис'?
Но я читал некоторое время назад, который Linux переключил от init.d до systemd, и начиная с этого, Вопросам и ответам 6 лет, я думал, что он мог бы относиться к init.d
Мой вопрос:
Как Вы передаете флаги/аргументы при запуске systemd сервиса? Скажем, я делаю перезапуск systemctl Kubelet, который подразумевает, что у меня есть Сервисное выполнение Kubelet, хорошо как я мог видеть и изменить, какие Flags/Arguements передаются той службе? (Такой как - anonymous-auth=false)
Также вот некоторый Контекст:
Я близко к планированию моего Экзамена Сертификации CNCF Kubernetes, экзамен основан на производительности и покрывает некоторый вшивый песчаный материал, это обычно абстрагируется далеко от Кластерного Администратора.
Что-то, что я изучил, - то, что существует 7 базовых Двоичных файлов что состав Kubernetes: [докер, etcd, kube-apiserver, kube-controller-manager, kube-планировщик, kube-прокси и kubelet]
Некоторые из плоских двоичных файлов управления этих Kubernetes "сам размещены" / выполненный как переходные приставки на Kubernetes, и Вы передаете args/flags как - service-cluster-ip-range=10.0.0.0/16
Следующий URL имеет пример некоторых базовых двоичных файлов, выполняемых как контейнеры Докера на Kubernetes и флаги, передаваемые в как Аргументы в спецификации YAML. https://kubernetes.io/docs/setup/scratch/#scheduler-pod-template
Другие Базовые Двоичные файлы Kubernetes как Kubelet и Docker не хорошо подходят для сам хостинг и вместо этого выполняются как Системные Демоны Linux, и они выполняют использование systemd и управляются с systemctl и journalctl. Так или иначе я должен был войти в узел и сделать перезапуск systemctl docker.service и systemctl перезапускают kubelet.service прежде, но я на самом деле не знаю, как видеть или изменить, какие флаги/Аргументы передаются им.
Отсюда это может быть сделано как так:
Создайте файл аргументов, говорят /etc/.argconf
ARG1=-o
ARG2=--verbose
И Ваш .service файл:
EnvironmentFile=/etc/.progconf
ExecStart = /usr/bin/prog $ARG1 $ARG2
Другой метод из того же самого сообщения как замечен ниже:
[Unit]
Description=Test passing multiple arguments
[Service]
Environment="SCRIPT_ARGS=%I"
ExecStart=/tmp/test.py $SCRIPT_ARGS
И название файла должно быть myseervice@.service
примите во внимание @
поскольку это требуется когда передающие аргументы этим способом к сервису. Вы затем выполняете тот сервис как так:
sudo systemctl start myseervic@"arg1 arg2 arg3".service
Точно так же, как каждая реализация / аромат / дистрибутив Linux немного отличается.
Я узнал, что каждая реализация Kuberntes немного отличается.
И что есть разные способы реализации systemd.
При всей этой изменчивости, я думаю, что лучший способ сделать это, по-видимому, будет:
Чтобы использовать команду find, чтобы найти, где находится * .service
WorkerNodeBash # find / -name "* .service" | grep -i "kube"
WorkerNodeBash # nano /etc/systemd/system/kubelet.service
[Unit]
Description=Kubernetes Kubelet
Documentation=https://github.com/kubernetes/kubernetes
After=containerd.service
Requires=containerd.service
[Service]
ExecStart=/usr/local/bin/kubelet \
--config=/var/lib/kubelet/kubelet-config.yaml \
--container-runtime=remote \
--container-runtime-endpoint=unix:///var/run/containerd/containerd.sock \
--image-pull-progress-deadline=2m \
--kubeconfig=/var/lib/kubelet/kubeconfig \
--network-plugin=cni \
--register-node=true \
--pod-manifest-path=/etc/kubernetes/manifests \
--v=2
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
. kubeadm и посмотрел в этом же файле и не увидел аргументов, но благодаря изучению того, как использовать команду find, я смог найти:
WorkerNodeBash # find / -type f -name "* .yaml" | grep "kube"
И я нашел файл конфигурации, в котором упоминалось KUBELET_EXTRA_ARGS =, и передал их туда.
Когда мы запускаем
systemctl start <имя>.service
systemd действительно выполняется/lib/systemd/system/
.service
Это может быть полезно другим новичкам вроде меня.
Давайте запустим службу и проверим статус (сбой или успех):
systemctl start <name>.service
systemctl status <name>.service
Вы найдете эту строку в выводе для статуса:
/lib/systemd/system/<name>.service
Это файл, который выполняет systemd. Если вы пойдете по этому пути и откроете с помощью Vim, это структура, показанная принятым ответом.
Относительно того, куда класть файлы, я не могу судить, но, по крайней мере, мы знаем, какой файл читает systemd.