web-dev-qa-db-ja.com

systemdサービスを開始するときにフラグを渡すにはどうすればよいですか?

同様の質問がされていることに注意してください。
「サービス」の開始時にフラグを渡す方法
しかし、Linuxがinit.dからsystemdに切り替わったことをしばらく読んで、Q&Aが6歳になってからinit.dを参照しているのではないかと考えました。

私の質問は:
systemdサービスを開始するとき、フラグ/引数をどのように渡しますか? systemctl restart Kubeletを実行するとします。つまり、Kubeletサービスを実行していますが、そのサービスに渡されるフラグ/引数を確認および変更するにはどうすればよいでしょうか。 (--anonymous-auth = falseなど)

また、コンテキストを次に示します。
CNCF Kubernetes認定試験のスケジュールに近づいています。この試験はパフォーマンスに基づいており、通常はクラスター管理者から抽象化された重要なものをカバーしています。

学んだことは、Kubernetesを構成する7つのコアバイナリがあることです:[docker、etcd、kube-apiserver、kube-controller-manager、kube-scheduler、kube-proxy、kubelet]

これらのKubernetesコントロールプレーンバイナリの一部は「セルフホスト」/ Kubernetesでポッドとして実行され、-service-cluster-ip-range = 10.0.0.0/16のような引数/フラグを渡します

次のURLには、KubernetesでDockerコンテナーとして実行されるいくつかのコアバイナリの例と、YAML仕様の引数として渡されるフラグがあります。 https://kubernetes.io/docs/setup/scratch/#scheduler-pod-template

KubeletやDockerなどの他のコアKubernetesバイナリは、セルフホスティングに適しておらず、代わりにLinuxシステムデーモンとして実行され、systemdを使用して実行され、systemctlおよびjournalctlで管理されます。とにかくノードにログインして、以前にsystemctl restart docker.serviceとsystemctl restart kubelet.serviceを実行する必要がありましたが、実際にはどのフラグ/引数が渡されるかを確認または変更する方法がわかりません。

1
neokyle

here から:これは次のように行うことができます:

  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

また、ファイルの名前は[email protected]である必要があります。この方法でサービスに引数を渡すときに必要になるため、@に注意してください。次に、そのサービスを次のように実行します。

Sudo systemctl start myseervic@"arg1 arg2 arg3".service
1
George Udosen

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

(上記はKubernetesのハードな実装に由来し、私もkubeadmを実行し、この同じファイルを見て引数を見つけませんでしたが、findコマンドの使用方法を学習したおかげで、検索できました:
WorkerNodeBash#find/-type f -name "* .yaml" | grep "kube"
そして、KUBELET_EXTRA_ARGS =を記述した設定ファイルを見つけて、そこに渡します。

0
neokyle