Как я передаю флаги при запуске systemd сервиса?

Обратите внимание, что подобный вопрос задали:
Как передать флаги когда стартовый 'сервис'?
Но я читал некоторое время назад, который 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 прежде, но я на самом деле не знаю, как видеть или изменить, какие флаги/Аргументы передаются им.

1
задан 23 September 2018 в 20:50

3 ответа

Отсюда это может быть сделано как так:

  1. Создайте файл аргументов, говорят /etc/.argconf

    ARG1=-o
    ARG2=--verbose
    
  2. И Ваш .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
3
ответ дан 3 December 2019 в 06:50

Точно так же, как каждая реализация / аромат / дистрибутив 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 =, и передал их туда.

1
ответ дан 3 December 2019 в 06:50

TL;DR

Когда мы запускаем systemctl start <имя>.service systemd действительно выполняется /lib/systemd/system/.service

Это может быть полезно другим новичкам вроде меня.

Давайте запустим службу и проверим статус (сбой или успех):

systemctl start <name>.service 
systemctl status <name>.service

Вы найдете эту строку в выводе для статуса:

/lib/systemd/system/<name>.service

Это файл, который выполняет systemd. Если вы пойдете по этому пути и откроете с помощью Vim, это структура, показанная принятым ответом.


Относительно того, куда класть файлы, я не могу судить, но, по крайней мере, мы знаем, какой файл читает systemd.

1
ответ дан 12 October 2020 в 02:25

Другие вопросы по тегам:

Похожие вопросы: