Discussion:
[shell-script] Laços com o FOR
'Julio C. S. Ferraz' julio.ferraz@gmail.com [shell-script]
2018-10-06 01:13:05 UTC
Permalink
Pessoal,

Boa noite ?! Pessoal!

Como vão?

- Estou tentando desenvolver algo pra usar com for i in ... pra remover
meus pods no kubernetes. Não estou conseguindo.

Como tratam-se de containers, o melhor pro meu cenário é remover o
deployment assim, tenho certeza q todos os pods (containers) dentro do
kubernetes para um namespace em exclusivo serão de fato removidos.

Estou tentando assim:

Aqui eu listo todos os meus deployments:

$ kubectl get deployment --all-namespaces
NAMESPACE NAME DESIRED CURRENT UP-TO-DATE
AVAILABLE AGE
deployment app-test 4 4 4 4 42m
kube-system kube-dns 1 1 1


Dai então eu pensei em usar o for para buscar a seguinte condição:

- Se o namespace "deployment" existir, quero removê-lo e rodar um novo
comando para criar o mesmo namespace onde ele irá baixar uma imagem docker
mais atualizada apartir do meu repositório no dockerhub, dai o deployment
namespace já nasce criando pods (containers).

Pensei nisso aqui:

for i in $(kubectl get deployment --all-namespaces | grep "deployment"); if
[[ $i -gt 0 ]];then kubectl delete deployment --namespace deployment --all
; kubectl --namespace=deployment run dev-app-v1 --image=
meurepositorio.com.br/dev-app --replicas=4

Algo não tá funcionando direito, pois to tendo erros, devido a sintaxe
talvez aplicada incorretamente, poderiam me ajudar ?

Obrigado!
--
Atenciosamente,

Julio Ferraz

Mobile:+55 21 9 6689-9207
'Julio C. S. Ferraz' julio.ferraz@gmail.com [shell-script]
2018-10-06 01:40:26 UTC
Permalink
*Eu consegui fazer isso aqui:*

*for i in $(kubectl get deployment --all-namespaces | grep "deployment");
if [ -gt ""] ; then kubectl delete deployment --namespace=$i --all;fi *

deployment.extensions "*deployment*" deleted
No resources found
No resources found
No resources found
No resources found
No resources found
No resources found


- Dai então, eu consegui remover meu deployment !!! Essa é a maneira
correta? Eu percebi que ele removeu o que eu queria, porém, ficou ainda
"rodando" conforme acima, depois ele parou. Agora, preciso de ajuda para
após a condição a cima, eu possa criar novamente meu deployment.

Obrigado gente!

No aguardo!



Em sex, 5 de out de 2018 às 22:13, Julio C. S. Ferraz <
Post by 'Julio C. S. Ferraz' ***@gmail.com [shell-script]
Pessoal,
Boa noite ?! Pessoal!
Como vão?
- Estou tentando desenvolver algo pra usar com for i in ... pra remover
meus pods no kubernetes. Não estou conseguindo.
Como tratam-se de containers, o melhor pro meu cenário é remover o
deployment assim, tenho certeza q todos os pods (containers) dentro do
kubernetes para um namespace em exclusivo serão de fato removidos.
$ kubectl get deployment --all-namespaces
NAMESPACE NAME DESIRED CURRENT UP-TO-DATE
AVAILABLE AGE
deployment app-test 4 4 4 4 42m
kube-system kube-dns 1 1 1
- Se o namespace "deployment" existir, quero removê-lo e rodar um novo
comando para criar o mesmo namespace onde ele irá baixar uma imagem docker
mais atualizada apartir do meu repositório no dockerhub, dai o deployment
namespace já nasce criando pods (containers).
for i in $(kubectl get deployment --all-namespaces | grep "deployment");
if [[ $i -gt 0 ]];then kubectl delete deployment --namespace deployment
--all ; kubectl --namespace=deployment run dev-app-v1 --image=
meurepositorio.com.br/dev-app --replicas=4
Algo não tá funcionando direito, pois to tendo erros, devido a sintaxe
talvez aplicada incorretamente, poderiam me ajudar ?
Obrigado!
--
Atenciosamente,
Julio Ferraz
Mobile:+55 21 9 6689-9207
--
Atenciosamente,

Julio Ferraz

Mobile:+55 21 9 6689-9207
itamarnet@yahoo.com.br [shell-script]
2018-10-06 11:26:20 UTC
Permalink
Caro Júlio


Me baseando no seu comando:
$ kubectl get deployment --all-namespaces
NAMESPACE NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
deployment app-test 4 4 4 4 42m
kube-system kube-dns 1 1 1


O for que vc usou vai fazer um loop por cada elemento da linha que filtra no grep, então o que na verdade está fazendo é:
kubectl delete deployment --namespace=deployment --all
kubectl delete deployment --namespace=app-test --all
kubectl delete deployment --namespace=4 --all
...



E assim por diante.
O que poderia fazer é mudar o IFS ou usar while no lugar do for, e selecionar namespace usando cut, sed ou awk, se mudar o IFS, ou pegar pela variavel definida se usar o while.


O lance do if [[ $1 -gt 0 ]] ou [ -gt "" ] não faz sentido nenhum para mim, poie é uma comparação numérica, então suponho que esteja avaliando do terceiro ao sétimo campo para determinar qual apagar, mas do jeito que usou não sei identificar qual seria para essa comparação.
Então da linha exemplo:
deployment app-test 4 4 4 4 42m
qual a condição para apagar? se for sempre o namespace deployment, então não precisa estar no loop, mas se o deployment for apenas referência a forma de apagar precisa ser reescrita.


E qual o critério para criar o deployment de novo? Não ficou muito claro.


Se puder exiba 2 casos distintos de comando manuais nesse processo de apagar e criar descrevendo os passos.


[]'s
Itamar
'Julio C. S. Ferraz' julio.ferraz@gmail.com [shell-script]
2018-10-06 12:52:48 UTC
Permalink
Olá! Itamar!

Bom dia!

Respondendo as suas perguntas:

*- Meu critério é apenas e exclusivamente apagar o namespace "deployment".
Sempre.*

- O kubernetes é um orquestrador de containers, onde o termo "pod" é a
menor unidade dentro de um container.

- O processo( o comando ) que uso para criar um deployment é:
$ kubectl create namespace deployment

ou posso usar um arquivo *.json para criação com o seguinte conteúdo:










*{ "kind": "Namespace", "apiVersion": "v1", "metadata": { "name":
"deployment", "labels": { "name": "dev" } }}*

*- Dai então para usar esse arquivo acima, o comando que irei usar é
diferente seria criado o mesmo namespace da seguinte maneira (com o
comando):*

$ kubectl create -f deployment.json

*- Para ver se foi criado, eu uso o comando:*

$ kubectl get namespaces
NAME STATUS AGE
default Active 2d
*deployment* Active 13h
kube-public Active 2d
kube-system Active 2d

*O nome "app-test" seria a nomenclatura que eu dei ao meu container no
momento da criação desse container no namespace exclusivo que eu quero
usar, ou seja o namespace deployment*

*Para criar um namespace junto com o nome do container e com o número de
réplicas que eu desejo para esse container eu uso o comando:*

$ kubectl --namespace=deployment run app-test --image=
meurepositorio.dkr.ecr.us-east-1.amazonaws.com/nomedaminhaimagem
--replicas=4
Post by ***@yahoo.com.br [shell-script]
Caro Júlio
$ kubectl get deployment --all-namespaces
NAMESPACE NAME DESIRED CURRENT UP-TO-DATE
AVAILABLE AGE
deployment app-test 4 4 4 4 42m
kube-system kube-dns 1 1 1
O for que vc usou vai fazer um loop por cada elemento da linha que filtra
*kubectl delete deployment --namespace=deployment --all*
*kubectl delete deployment --namespace=app-test --all*
*kubectl delete deployment --namespace=4 --all*
...
E assim por diante.
O que poderia fazer é mudar o IFS ou usar while no lugar do for, e
selecionar namespace usando cut, sed ou awk, se mudar o IFS, ou pegar pela
variavel definida se usar o while.
O lance do if [[ $1 -gt 0 ]] ou [ -gt "" ] não faz sentido nenhum para
mim, poie é uma comparação numérica, então suponho que esteja avaliando do
terceiro ao sétimo campo para determinar qual apagar, mas do jeito que usou
não sei identificar qual seria para essa comparação.
deployment app-test 4 4 4 4 42m
qual a condição para apagar? se for sempre o namespace deployment, então
não precisa estar no loop, mas se o deployment for apenas referência a
forma de apagar precisa ser reescrita.
E qual o critério para criar o deployment de novo? Não ficou muito claro.
Se puder exiba 2 casos distintos de comando manuais nesse processo de
apagar e criar descrevendo os passos.
[]'s
Itamar
--
Atenciosamente,

Julio Ferraz

Mobile:+55 21 9 6689-9207
itamarnet@yahoo.com.br [shell-script]
2018-10-06 14:58:44 UTC
Permalink
Caro Júlio


Então qual a necessidade de fazer um loop para apagar esse container?
O comando:
kubectl delete deployment --namespace deployment --all


não apagaria todos os containers com o namespace deployment?


Se não é o caso, por exemplo havendo vários namespaces com a descrição deployment talvez pudesse usar:


total=$(kubectl get deployment --all-namespaces | -c grep "deployment")
for ((i=1; i<=$total; i++)); do kubectl delete deployment --namespace deployment --all; done



e depois colocaria o comando: kubectl --namespace=deployment run app-test --image=meurepositorio.dkr.ecr.us-east-1.amazonaws.com/nomedaminhaimagem http://meurepositorio.dkr.ecr.us-east-1.amazonaws.com/nomedaminhaimagem --replicas=4


para recriar o container na sequência.


Esse foi meu entendimento, mas confesso que aida não mexi com kubernetes, então talvez alguns conceitos estejam errado da forma que interpretei.


[]'s
Itamar
'Julio C. S. Ferraz' julio.ferraz@gmail.com [shell-script]
2018-10-06 15:44:48 UTC
Permalink
Acabei de usar o seu exemplo:

$ * total=$(kubectl get namespaces | -c grep "deployment") for ((i=1;
i<=$total; i++)); do kubectl delete --namespace deployment --all; done*
*Mas deu o erro:*

*bash: ((: i<=: syntax error: operand expected (error token is "<=")*

Desculpe, mas não entendi esso erro.. poderia me ajudar? Há algo q não fiz
aqui ?

Sim! Sua compreensão em cima de como o kubernetes funciona tá correta. A
Apenas levando mais além o "deployment" servem para dizer ao cluster o
estado desejado de um objeto a ser implantado. Por exemplo, posso informar
nesse arquivo yaml que quero subir três réplicas da minha aplicação Nginx
no cluster e que esse estado seja mantido caso um Pod morra e fique apenas
dois no cluster.

Obrigado!
Post by ***@yahoo.com.br [shell-script]
Caro Júlio
Então qual a necessidade de fazer um loop para apagar esse container?
O comando*:*
kubectl delete deployment --namespace deployment --all
não apagaria todos os containers com o namespace deployment?
Se não é o caso, por exemplo havendo vários namespaces com a descrição
total=$(kubectl get deployment --all-namespaces | -c grep "deployment")
for ((i=1; i<=$total; i++)); do kubectl delete deployment --namespace
deployment --all; done
e depois colocaria o comando: kubectl --namespace=deployment run
app-test --image=
meurepositorio.dkr.ecr.us-east-1.amazonaws.com/nomedaminhaimagem
--replicas=4
para recriar o container na sequência.
Esse foi meu entendimento, mas confesso que aida não mexi com kubernetes,
então talvez alguns conceitos estejam errado da forma que interpretei.
[]'s
Itamar
--
Atenciosamente,

Julio Ferraz

Mobile:+55 21 9 6689-9207
itamarnet@yahoo.com.br [shell-script]
2018-10-06 16:01:08 UTC
Permalink
Claro que sim Julio.


Há duas coisas a considerar,
1 - eu reenviei o e-mail, pois acidentamelmente escrevi errado o grep:
onde está -c grep, na verdade é grep -c


2 - o erro pode ser por conta da versão do seu shell, então talvez a construção
for ((i=1; i<=$total; i++)); do kubectl delete --namespace deployment --all; done


não tenhoa suporte para a forma como o for foi construído, então pode ser reescrita:



for i in $(seq $total); do kubectl delete --namespace deployment --all; done


Acredito ser um desses o motivo do erro.


[]'s
Itamar
'Julio C. S. Ferraz' julio.ferraz@gmail.com [shell-script]
2018-10-06 16:13:20 UTC
Permalink
*FIz aqui:*

*Porém ainda tenho erros:*


$
*total=$(kubectl get deployment --all-namespaces | grep -c "deployment")
for i in $(seq $total); do kubectl delete --namespace deployment --all;
donebash: syntax error near unexpected token `do'*
Post by ***@yahoo.com.br [shell-script]
Claro que sim Julio.
Há duas coisas a considerar,
onde está -c grep, na verdade é grep -c
2 - o erro pode ser por conta da versão do seu shell, então talvez a construção
*for ((i=1; i<=$total; i++)); do kubectl delete --namespace deployment
--all; done*
não tenhoa suporte para a forma como o for foi construído, então pode ser
*for i in $(seq $total); do kubectl delete --namespace deployment --all;
done*
Acredito ser um desses o motivo do erro.
[]'s
Itamar
--
Atenciosamente,

Julio Ferraz

Mobile:+55 21 9 6689-9207
'Julio C. Neves' julio.neves@gmail.com [shell-script]
2018-10-06 18:01:33 UTC
Permalink
Falta um ponto e vírgula antes do for
Post by 'Julio C. S. Ferraz' ***@gmail.com [shell-script]
*FIz aqui:*
*Porém ainda tenho erros:*
$
*total=$(kubectl get deployment --all-namespaces | grep -c "deployment")
for i in $(seq $total); do kubectl delete --namespace deployment --all;
donebash: syntax error near unexpected token `do'*
Post by ***@yahoo.com.br [shell-script]
Claro que sim Julio.
Há duas coisas a considerar,
onde está -c grep, na verdade é grep -c
2 - o erro pode ser por conta da versão do seu shell, então talvez a
construção
*for ((i=1; i<=$total; i++)); do kubectl delete --namespace deployment
--all; done*
não tenhoa suporte para a forma como o for foi construído, então pode
*for i in $(seq $total); do kubectl delete --namespace deployment --all;
done*
Acredito ser um desses o motivo do erro.
[]'s
Itamar
--
Atenciosamente,
Julio Ferraz
Mobile:+55 21 9 6689-9207
'Julio C. S. Ferraz' julio.ferraz@gmail.com [shell-script]
2018-10-06 18:32:13 UTC
Permalink
Obrigado !!! Itamar!!!!

Muito Agradecido!!! Mesmo!

Obrigado Galera!

Bom fim de semana a todos!!!!

Usei assim a expressão regular anterior passado por passo, e descobri que
não era versão aqui no meu sistema e sim um erro que eu mesmo estava
provocando, Rsrsrs, Obrigado Itamar!

:: O que funcionou pra mim foi esse aqui:

*total=$(kubectl get namespaces | grep -c "deployment");for ((i=1;
i<=$total; i++)); do kubectl delete namespaces deployment ;done *

*:: Vou usar a outra opção também com o final: for i in $(seq $total); do
kubectl delete namespaces deployment --all; done*
Post by 'Julio C. Neves' ***@gmail.com [shell-script]
Falta um ponto e vírgula antes do for
Em sáb, 6 de out de 2018 13:34, 'Julio C. S. Ferraz'
Post by 'Julio C. S. Ferraz' ***@gmail.com [shell-script]
*FIz aqui:*
*Porém ainda tenho erros:*
$
*total=$(kubectl get deployment --all-namespaces | grep -c "deployment")
for i in $(seq $total); do kubectl delete --namespace deployment --all;
donebash: syntax error near unexpected token `do'*
Post by ***@yahoo.com.br [shell-script]
Claro que sim Julio.
Há duas coisas a considerar,
onde está -c grep, na verdade é grep -c
2 - o erro pode ser por conta da versão do seu shell, então talvez a
construção
*for ((i=1; i<=$total; i++)); do kubectl delete --namespace deployment
--all; done*
não tenhoa suporte para a forma como o for foi construído, então pode
*for i in $(seq $total); do kubectl delete --namespace deployment --all;
done*
Acredito ser um desses o motivo do erro.
[]'s
Itamar
--
Atenciosamente,
Julio Ferraz
Mobile:+55 21 9 6689-9207
--
Atenciosamente,

Julio Ferraz

Mobile:+55 21 9 6689-9207
'Julio C. S. Ferraz' julio.ferraz@gmail.com [shell-script]
2018-10-06 16:08:00 UTC
Permalink
- Quando usei:

*for i in total=$(kubectl get namespaces|grep -c "development") for
i=$(i=1; i<=$total;i++);do kubectl delete namespace deveploment ;done *

bash: =$total: ambiguous redirect


Em sáb, 6 de out de 2018 às 12:44, Julio C. S. Ferraz <
Post by 'Julio C. S. Ferraz' ***@gmail.com [shell-script]
$ * total=$(kubectl get namespaces | -c grep "deployment") for ((i=1;
i<=$total; i++)); do kubectl delete --namespace deployment --all; done*
*Mas deu o erro:*
*bash: ((: i<=: syntax error: operand expected (error token is "<=")*
- Porém foi removido o "deployment"
Desculpe, mas não entendi esso erro.. poderia me ajudar? Há algo q não fiz
aqui ?
Sim! Sua compreensão em cima de como o kubernetes funciona tá correta. A
Apenas levando mais além o "deployment" servem para dizer ao cluster o
estado desejado de um objeto a ser implantado. Por exemplo, posso informar
nesse arquivo yaml que quero subir três réplicas da minha aplicação Nginx
no cluster e que esse estado seja mantido caso um Pod morra e fique apenas
dois no cluster.
Obrigado!
Post by ***@yahoo.com.br [shell-script]
Caro Júlio
Então qual a necessidade de fazer um loop para apagar esse container?
O comando*:*
kubectl delete deployment --namespace deployment --all
não apagaria todos os containers com o namespace deployment?
Se não é o caso, por exemplo havendo vários namespaces com a descrição
total=$(kubectl get deployment --all-namespaces | -c grep "deployment")
for ((i=1; i<=$total; i++)); do kubectl delete deployment --namespace
deployment --all; done
e depois colocaria o comando: kubectl --namespace=deployment run
app-test --image=
meurepositorio.dkr.ecr.us-east-1.amazonaws.com/nomedaminhaimagem
--replicas=4
para recriar o container na sequência.
Esse foi meu entendimento, mas confesso que aida não mexi com kubernetes,
então talvez alguns conceitos estejam errado da forma que interpretei.
[]'s
Itamar
--
Atenciosamente,
Julio Ferraz
Mobile:+55 21 9 6689-9207
--
Atenciosamente,

Julio Ferraz

Mobile:+55 21 9 6689-9207
itamarnet@yahoo.com.br [shell-script]
2018-10-06 14:59:40 UTC
Permalink
Caro Júlio


Então qual a necessidade de fazer um loop para apagar esse container?
O comando:
kubectl delete deployment --namespace deployment --all


não apagaria todos os containers com o namespace deployment?


Se não é o caso, por exemplo havendo vários namespaces com a descrição deployment talvez pudesse usar:


total=$(kubectl get deployment --all-namespaces | grep -c "deployment")
for ((i=1; i<=$total; i++)); do kubectl delete deployment --namespace deployment --all; done



e depois colocaria o comando: kubectl --namespace=deployment run app-test --image=meurepositorio.dkr.ecr.us-east-1.amazonaws.com/nomedaminhaimagem http://meurepositorio.dkr.ecr.us-east-1.amazonaws.com/nomedaminhaimagem --replicas=4


para recriar o container na sequência.


Esse foi meu entendimento, mas confesso que aida não mexi com kubernetes, então talvez alguns conceitos estejam errado da forma que interpretei.


[]'s
Itamar
Loading...