私はk8sが初めてで、ここで小さな問題に直面しています。
コンテキストは次のとおりです。1日に1回crontaskを介してkubectl delete [podname]
を呼び出し、k8sがポッドを再作成するまで待機してから、そのポッドのコンテナーにログインし、シェルコマンドを実行する必要があります。
だから私は展開をクエリし、次のようなものを得ます:
user@Host:~$ kubectl get pods
NAME READY STATUS RESTARTS AGE
firstpod-123456789-something 1/1 Running 570 2d
secondpod-http-backend-something 1/1 Running 597 2d
次に、5分間隔でポッドを削除するbashスクリプトを作成しました。それは簡単な部分です。
kubectl delete firstpod-123456789-something
を呼び出し、k8sが新しいポッドを再作成するのを待つとします。その新しいポッドにはfirstpod-[some random hash here]-something
のような新しい名前が付けられます
問題は、bashスクリプトでそのポッドの名前をキャプチャする必要があるため、そのポッドでuname -a
などのコマンドを実行し、新しいポッドが正常に動作していることを確認できるようにすることです。
グーグルでkubectlのドキュメントを読みましたが、bashスクリプト経由でこれを行う簡単な方法はないと思いますか?ここでポッド名を取得する唯一の方法はk8s APIを使用することだと思いますか?
この時点で任意のソリューションを使用できてうれしいです。 k8sが新しいポッドをスポーンするときに、新しいポッドの名前を変更する方法はあるのだろうか?特定のキーワードをgrepできますか?
firstpod-[0-9]-something
のようなものをegrepしたくないことに注意してください。これは単なる例です。多くのポッドにはさまざまな名前がありますが、これはほんの一例です。
ありがとう!
何らかの方法でdeployment
にラベルを付ける必要があります。たとえば、ラベルapp: myapp
以下:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx
spec:
template:
metadata:
labels:
app: my-app
spec:
containers:
- image: nginx
name: nginx
その後、展開のポッド名を非常に簡単に取得できます。
POD=$(kubectl get pod -l app=my-app -o jsonpath="{.items[0].metadata.name}")
そしてそこでコマンドを実行します。例えば:
kubectl exec -ti $POD -- uname -a
Nickolayが書いたように、選択に役立つラベルを使用してください。その後、使用することができます
kubectl get pods -l app=my-app -o custom-columns=:metadata.name
これにより、ラベル「app = my-app」を持つポッドの名前が取得されます