2017-11-20 7 views
0

私はk8を初めて使っています。私はここで少し問題に遭遇しています。kubectlで新しいポッドの名前を探す

はここで文脈だ: 私は一日一回crontask経由kubectl delete [podname]を呼び出し、そしてK8Sはポッドを再作成するまで待って、そのポッド内のコンテナにログインし、シェルコマンドを実行する必要があります。

だから私は、展開を照会し、このような何かを得る:

[email protected]:~$ 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経由であると仮定していますか?

この時点でどのソリューションを使用してもうれしいです。 k8が新しいものを生み出すときに新しいポッドの名前を変更する方法があるのだろうか?特定のキーワードでgrepできますか?

egrepのようなものは、firstpod-[0-9]-somethingのようなものではないので、これは単なる例です。多くのポッドにはさまざまな名前がありますが、それは単なる例です。

ありがとうございます!

POD=$(kubectl get pod -l app=my-app -o jsonpath="{.items[0].metadata.name}") 

をし、そこにいくつかのコマンドを実行します。あなたは非常に簡単な展開のポッド名を取得することができた後

apiVersion: extensions/v1beta1                                           
kind: Deployment                                               
metadata:                                                
    name: nginx                                              
spec:                                                 
    template:                                                
    metadata:                                               
     labels:                                               
     app: my-app                                             
    spec:                                                
     containers:                                              
     - image: nginx                                      
     name: nginx 

答えて

3

は、あなたは、私たちは以下のラベルapp: myappを設定する例えば、何とか自分のdeploymentにラベルを付ける必要があります例えば、

kubectl exec -ti $POD -- uname -a 
関連する問題