Implantar um aplicativo sem estado do Kubernetes por meio do kubectl em seu dispositivo GPU do Azure Stack Edge Pro
APLICA-SE A: Azure Stack Edge Pro - GPUAzure Stack Edge Pro 2Azure Stack Edge Pro RAzure Stack Edge Mini R
Este artigo descreve como implantar um aplicativo sem estado usando comandos kubectl em um cluster do Kubernetes existente. Este artigo também orienta você pelo processo de criação e configuração de pods em seu aplicativo sem estado.
Pré-requisitos
Para poder criar um cluster do Kubernetes e usar a ferramenta de linha de comando kubectl
, você precisa garantir que:
Você tem credenciais de logon para um dispositivo Azure Stack Edge Pro de um nó.
O Windows PowerShell 5.0 ou posterior está instalado em um sistema cliente Windows para acessar o dispositivo Azure Stack Edge Pro. Você também pode usar qualquer outro cliente que tenha um Sistema operacional compatível. Este artigo descreve o procedimento usando um cliente Windows. Para baixar a versão mais recente do Windows PowerShell, vá para Instalar o Windows PowerShell.
A computação está habilitada no dispositivo do Azure Stack Edge Pro. Para habilitar a computação, vá para a página Computação na IU local do dispositivo. Em seguida, selecione a interface de rede que você deseja habilitar para a computação. Selecione Habilitar. Habilitar resultados de computação na criação de um comutador virtual em seu dispositivo nessa interface de rede. Para obter mais informações, consulte Habilitar a rede de computação em seu Azure Stack Edge Pro.
O dispositivo Azure Stack Edge Pro tem um servidor de cluster do Kubernetes em execução na versão v1.9 ou posterior. Para obter mais informações, consulte Criar e gerenciar um cluster do Kubernetes no dispositivo do Microsoft Azure Stack Edge Pro.
Você instalou o
kubectl
.
Implantar um aplicativo sem estado
Antes de começar, você deve ter:
- Criado um cluster do Kubernetes.
- Configurado um namespace.
- Associado um usuário com o namespace.
- Salvo a configuração do usuário para
C:\Users\<username>\.kube
. - Instalado o
kubectl
.
Agora você pode começar a executar e gerenciar implantações de aplicativo sem estado em um dispositivo do Azure Stack Edge Pro. Antes de começar a usar o kubectl
, você precisa verificar se tem a versão correta do kubectl
.
Verificar se você tem a versão correta do kubectl e ajustar a configuração
Para verificar a versão de kubectl
:
Verifique se a versão do
kubectl
é maior ou igual a 1.9:kubectl version
Um exemplo da saída é mostrado abaixo:
PS C:\WINDOWS\system32> C:\windows\system32\kubectl.exe version Client Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.2", GitCommit:"f6278300bebbb750328ac16ee6dd3aa7d3549568", GitTreeState:"clean", BuildDate:"2019-08-05T09:23:26Z", GoVersion:"go1.12.5", Compiler:"gc", Platform:"windows/amd64"} Server Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.1", GitCommit:"4485c6f18cee9a5d3c3b4e523bd27972b1b53892", GitTreeState:"clean", BuildDate:"2019-07-18T09:09:21Z", GoVersion:"go1.12.5", Compiler:"gc", Platform:"linux/amd64"}
Nesse caso, a versão de cliente do kubectl é v 1.15.2 e é compatível para continuar.
Obtenha uma lista de pods em execução no cluster de Kubernetes. Um pod é um contêiner de aplicativo, ou processo, em execução no cluster de Kubernetes.
kubectl get pods -n <namespace-string>
Um exemplo de uso de comando é mostrado abaixo:
PS C:\WINDOWS\system32> kubectl get pods -n "test1" No resources found. PS C:\WINDOWS\system32>
A saída deve indicar que nenhum recurso (pods) foi encontrado porque não há aplicativos em execução no cluster.
O comando preencherá a estrutura de diretório de “C:\Users\<username>\.kube” com arquivos de configuração. A ferramenta de linha de comando kubectl usará esses arquivos para criar e gerenciar aplicativos sem estado no cluster do Kubernetes.
Verifique manualmente a estrutura de diretórios de"C:\Users\<username>\.kube" para verificar se o kubectl foi preenchido com as seguintes subpastas:
PS C:\Users\username> ls .kube Directory: C:\Users\user\.kube Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 2/18/2020 11:05 AM cache d----- 2/18/2020 11:04 AM http-cache -a---- 2/18/2020 10:41 AM 5377 config
Observação
Para exibir uma lista de todos os comandos do kubectl, digite kubectl --help
.
Criar um aplicativo sem estado usando uma implantação
Agora que você verificou que a versão de linha de comando kubectl está correta e tem os arquivos de configuração necessários, você pode criar uma implantação de aplicativo sem estado.
Um pod é a unidade de execução básica de um aplicativo do Kubernetes, a menor e mais simples unidade no modelo de objeto do Kubernetes que você cria ou implanta. Um pod também encapsula recursos de armazenamento, um IP de rede exclusivo e opções que regem como os contêineres devem ser executados.
O tipo de aplicativo sem estado que você cria é uma implantação de servidor Web nginx.
Todos os comandos kubectl que você usa para criar e gerenciar implantações de aplicativo sem estado precisam especificar o namespace associado à configuração. Você criou o namespace enquanto estava conectado ao cluster no dispositivo Azure Stack Edge Pro no tutorial Criar e gerenciar um cluster do Kubernetes no dispositivo Microsoft Azure Stack Edge Pro com o New-HcsKubernetesNamespace
.
Para especificar o namespace em um comando kubectl, use kubectl <command> -n <namespace-string>
.
Siga estas etapas para criar uma implantação nginx:
Aplicar um aplicativo sem estado criando um objeto de implantação do Kubernetes:
kubectl apply -f <yaml-file> -n <namespace-string>
Neste exemplo, o caminho para o arquivo YAML do aplicativo é uma fonte externa.
Aqui está um exemplo de uso do comando e sua saída:
PS C:\WINDOWS\system32> kubectl apply -f https://k8s.io/examples/application/deployment.yaml -n "test1" deployment.apps/nginx-deployment created
Como alternativa, você pode salvar a seguinte redução no computador local e substituir o caminho e o nome do arquivo no parâmetro -f. Por exemplo, "C:\Kubernetes\deployment.yaml". A configuração para a implantação do aplicativo seria:
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2 kind: Deployment metadata: name: nginx-deployment spec: selector: matchLabels: app: nginx replicas: 2 # tells deployment to run 2 pods matching the template template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9 ports: - containerPort: 80
Este comando cria uma implantação nginx padrão que tem dois pods para executar seu aplicativo.
Obtenha a descrição da implantação nginx do Kubernetes que você criou:
kubectl describe deployment nginx-deployment -n <namespace-string>
Um exemplo de uso do comando, com saída, é mostrado abaixo:
PS C:\Users\user> kubectl describe deployment nginx-deployment -n "test1" Name: nginx-deployment Namespace: test1 CreationTimestamp: Tue, 18 Feb 2020 13:35:29 -0800 Labels: <none> Annotations: deployment.kubernetes.io/revision: 1 kubectl.kubernetes.io/last-applied-configuration: {"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":{},"name":"nginx-deployment","namespace":"test1"},"spec":{"repl... Selector: app=nginx Replicas: 2 desired | 2 updated | 2 total | 2 available | 0 unavailable StrategyType: RollingUpdate MinReadySeconds: 0 RollingUpdateStrategy: 25% max unavailable, 25% max surge Pod Template: Labels: app=nginx Containers: nginx: Image: nginx:1.7.9 Port: 80/TCP Host Port: 0/TCP Environment: <none> Mounts: <none> Volumes: <none> Conditions: Type Status Reason ---- ------ ------ Available True MinimumReplicasAvailable Progressing True NewReplicaSetAvailable OldReplicaSets: <none> NewReplicaSet: nginx-deployment-5754944d6c (2/2 replicas created) Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ScalingReplicaSet 2m22s deployment-controller Scaled up replica set nginx-deployment-5754944d6c to 2
Para a configuração de réplicas, você verá:
Replicas: 2 desired | 2 updated | 2 total | 2 available | 0 unavailable
A configuração de réplicas indica que sua especificação de implantação requer dois pods e que esses pods foram criados e atualizados e estão prontos para uso.
Observação
Um conjunto de réplicas substitui os pods que são excluídos ou encerrados por qualquer motivo, como no caso de falha de nó do dispositivo ou atualização de nó de interrupção. Por esse motivo, recomendamos que você use um conjunto de réplicas mesmo que seu aplicativo exija apenas um pod.
Para listar os pods em sua implantação:
kubectl get pods -l app=nginx -n <namespace-string>
Um exemplo de uso do comando, com saída, é mostrado abaixo:
PS C:\Users\user> kubectl get pods -l app=nginx -n "test1" NAME READY STATUS RESTARTS AGE nginx-deployment-5754944d6c-7wqjd 1/1 Running 0 3m13s nginx-deployment-5754944d6c-nfj2h 1/1 Running 0 3m13s
A saída verifica se temos dois pods com nomes exclusivos que podemos referenciar usando kubectl.
Para exibir informações sobre um pod individual em sua implantação:
kubectl describe pod <podname-string> -n <namespace-string>
Um exemplo de uso do comando, com saída, é mostrado abaixo:
PS C:\Users\user> kubectl describe pod "nginx-deployment-5754944d6c-7wqjd" -n "test1"
Name: nginx-deployment-5754944d6c-7wqjd
Namespace: test1
Priority: 0
Node: k8s-1d9qhq2cl-n1/10.128.46.184
Start Time: Tue, 18 Feb 2020 13:35:29 -0800
Labels: app=nginx
pod-template-hash=5754944d6c
Annotations: <none>
Status: Running
IP: 172.17.246.200
Controlled By: ReplicaSet/nginx-deployment-5754944d6c
Containers:
nginx:
Container ID: docker://280b0f76bfdc14cde481dc4f2b8180cf5fbfc90a084042f679d499f863c66979
Image: nginx:1.7.9
Image ID: docker-pullable://nginx@sha256:e3456c851a152494c3e4ff5fcc26f240206abac0c9d794affb40e0714846c451
Port: 80/TCP
Host Port: 0/TCP
State: Running
Started: Tue, 18 Feb 2020 13:35:35 -0800
Ready: True
Restart Count: 0
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-8gksw (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
default-token-8gksw:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-8gksw
Optional: false
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s
node.kubernetes.io/unreachable:NoExecute for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 4m58s default-scheduler Successfully assigned test1/nginx-deployment-5754944d6c-7wqjd to k8s-1d9qhq2cl-n1
Normal Pulling 4m57s kubelet, k8s-1d9qhq2cl-n1 Pulling image "nginx:1.7.9"
Normal Pulled 4m52s kubelet, k8s-1d9qhq2cl-n1 Successfully pulled image "nginx:1.7.9"
Normal Created 4m52s kubelet, k8s-1d9qhq2cl-n1 Created container nginx
Normal Started 4m52s kubelet, k8s-1d9qhq2cl-n1 Started container nginx
Redimensionar a implantação do aplicativo aumentando a contagem de réplicas
Cada pod destina-se a executar uma única instância de um determinado aplicativo. Se você quiser dimensionar seu aplicativo horizontalmente para executar várias instâncias, poderá aumentar o número de pods para um para cada instância. No Kubernetes, isso é conhecido como replicação. Você pode aumentar o número de pods em sua implantação de aplicativo aplicando um novo arquivo YAML. O arquivo YAML altera a configuração de réplicas para 4, o que aumenta o número de pods em sua implantação para quatro pods. Para aumentar o número de pods de 2 a 4:
PS C:\WINDOWS\system32> kubectl apply -f https://k8s.io/examples/application/deployment-scale.yaml -n "test1"
Como alternativa, você pode salvar a seguinte redução no computador local e substituir o caminho e o nome do arquivo para o parâmetro -f para kubectl apply
. Por exemplo, "C:\Kubernetes\deployment-scale.yaml". A configuração para a escala de implantação do aplicativo seria:
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 4 # Update the replicas from 2 to 4
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.8
ports:
- containerPort: 80
Para verificar se a implantação tem quatro pods:
kubectl get pods -l app=nginx
Exemplo de saída para uma implantação de redimensionamento de dois a quatro pods é mostrado abaixo:
PS C:\WINDOWS\system32> kubectl get pods -l app=nginx
NAME READY STATUS RESTARTS AGE
nginx-deployment-148880595-4zdqq 1/1 Running 0 25s
nginx-deployment-148880595-6zgi1 1/1 Running 0 25s
nginx-deployment-148880595-fxcez 1/1 Running 0 2m
nginx-deployment-148880595-rwovn 1/1 Running 0 2m
Como você pode ver na saída, agora você tem quatro pods em sua implantação que podem executar seu aplicativo.
Excluir uma implantação
Para excluir a implantação, incluindo todos os pods, você precisará executar kubectl delete deployment
especificando o nome da implantação nginx-deployment e o nome do namespace. Para excluir a implantação:
kubectl delete deployment nginx-deployment -n <namespace-string>
Um exemplo de uso de comando, com saída, é mostrado abaixo:
PS C:\Users\user> kubectl delete deployment nginx-deployment -n "test1"
deployment.extensions "nginx-deployment" deleted