Ajudar a melhorar esta página
Quer contribuir para este guia do usuário? Escolha o link Editar esta página no GitHub, disponível no painel direito de cada página. Suas contribuições ajudarão a tornar nosso guia do usuário melhor para todos.
Implantar uma aplicação de amostra no Linux
Neste tópico, você implementa uma aplicação de amostra em seu cluster em nós Linux.
Pré-requisitos
-
Um cluster Kubernetes existente com pelo menos um nó. Se você não tiver um cluster do Amazon EKS existente, poderá implantar um usando um dos guias em Começar a usar o Amazon EKS.
-
O
Kubectl
instalado em seu computador. Para ter mais informações, consulte Configurar o kubectl e o eksctl. -
O
Kubectl
configurado para se comunicar com o cluster. Para ter mais informações, consulte Conectar o kubectl a um cluster do EKS criando um arquivo kubeconfig. -
Se você planeja implantar sua workload de exemplo no Fargate, deverá ter um perfil do Fargate que inclua o mesmo namespace criado neste tutorial, que será
eks-sample-app
, a menos que você altere o nome. Se você criou um cluster com um dos grupos no Começar a usar o Amazon EKS, será necessário criar um novo perfil ou adicionar o namespace ao perfil existente, pois o perfil criado nos guias de introdução não especifica o namespace usado neste tutorial. A VPC também deve conter pelo menos uma sub-rede privada.
Embora muitas variáveis possam ser alteradas nas etapas a seguir, recomendamos alterar apenas os valores das variáveis quando especificado. Depois que tiver entendido melhor os Pods, as implantações e os serviços do Kubernetes, você poderá experimentar alterar outros valores.
Crie um namespace
Um namespace permite agrupar recursos no Kubernetes. Para obter mais informações, consulte Namespacesnamespace
em Definir quais pods usam o AWS Fargate quando iniciados seja eks-sample-app
.
kubectl create namespace eks-sample-app
Crie uma implantação do Kubernetes
Crie um implantação do Kubernetes. Essa implantação de amostra extrai uma imagem de contêiner de um repositório público e implanta três réplicas (Pods individuais) dessa imagem no cluster. Para saber mais, consulte Deployments
-
Salve o conteúdo a seguir em um arquivo denominado
eks-sample-deployment.yaml
. Os contêineres da aplicação de exemplo não usam armazenamento em rede, mas pode haver aplicações que precisem. Para ter mais informações, consulte Armazenar dados de aplicações para seu cluster.-
Os
values
deamd64
ouarm64
na chavekubernetes.io/arch
significam que a aplicação pode ser implantada em qualquer arquitetura de hardware (se ambos estiverem no cluster). Isso é possível porque essa imagem é uma imagem multiarquitetura, mas nem todas são. É possível determinar a arquitetura de hardware em que há suporte para a imagem visualizando os detalhes da imagemno repositório do qual você está extraindo. Ao implantar imagens que não oferecem suporte a um tipo de arquitetura de hardware ou quando você não deseja que a imagem seja implantada, remova esse tipo do manifesto. Para obter mais informações, consulte Well-Known Labels, Annotations and Taints (Rótulos, anotações e taints conhecidos) na documentação do Kubernetes. -
O
nodeSelector
dokubernetes.io/os: linux
significa que se você tivesse (por exemplo) nós do Linux e do Windows no cluster, a imagem só seria implantada nos nós do Linux. Para obter mais informações, consulte Well-Known Labels, Annotations and Taints(Rótulos, anotações e taints conhecidos) na documentação do Kubernetes. apiVersion: apps/v1 kind: Deployment metadata: name: eks-sample-linux-deployment namespace: eks-sample-app labels: app: eks-sample-linux-app spec: replicas: 3 selector: matchLabels: app: eks-sample-linux-app template: metadata: labels: app: eks-sample-linux-app spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/arch operator: In values: - amd64 - arm64 containers: - name: nginx image: public.ecr.aws/nginx/nginx:1.23 ports: - name: http containerPort: 80 imagePullPolicy: IfNotPresent nodeSelector: kubernetes.io/os: linux
-
-
Aplique o manifesto de implantação ao seu cluster.
kubectl apply -f eks-sample-deployment.yaml
Criar um serviço
Um serviço permite que você acesse todas as réplicas por meio de um único endereço IP ou nome. Para obter mais informações, consulte Service
-
Salve o conteúdo a seguir no arquivo denominado
eks-sample-service.yaml
. O Kubernetes atribui ao serviço o seu próprio endereço IP que só pode ser acessado de dentro do cluster. Para acessar o serviço de fora do seu cluster, implante o AWS Load Balancer Controller para balancear a carga do tráfego de aplicações ou redes para o serviço.apiVersion: v1 kind: Service metadata: name: eks-sample-linux-service namespace: eks-sample-app labels: app: eks-sample-linux-app spec: selector: app: eks-sample-linux-app ports: - protocol: TCP port: 80 targetPort: 80
-
Aplique o manifesto de serviço ao seu cluster.
kubectl apply -f eks-sample-service.yaml
Revisar os recursos criados
-
Visualize todos os recursos no namespace
eks-sample-app
.kubectl get all -n eks-sample-app
Veja um exemplo de saída abaixo.
NAME READY STATUS RESTARTS AGE pod/eks-sample-linux-deployment-65b7669776-m6qxz 1/1 Running 0 27m pod/eks-sample-linux-deployment-65b7669776-mmxvd 1/1 Running 0 27m pod/eks-sample-linux-deployment-65b7669776-qzn22 1/1 Running 0 27m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/eks-sample-linux-service ClusterIP 10.100.74.8 <none> 80/TCP 32m NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/eks-sample-linux-deployment 3/3 3 3 27m NAME DESIRED CURRENT READY AGE replicaset.apps/eks-sample-linux-deployment-776d8f8fd8 3 3 3 27m
Na saída, você verá o serviço e a implantação especificados nos manifestos de exemplo implantados nas etapas anteriores. Você também vê três Pods. Isso ocorre porque
3
replicas
foram especificadas no manifesto de exemplo. Para obter mais informações sobre Pods, consulte Podna documentação do Kubernetes. O Kubernetes cria automaticamente o arquivo do recurso replicaset
, mesmo que não esteja especificado nos manifestos de exemplo. Para obter mais informações sobreReplicaSets
, consulte ReplicaSetna documentação do Kubernetes. nota
O Kubernetes mantém o número de réplicas especificado no manifesto. Se essa fosse uma implantação de produção e você quisesse que o Kubernetes dimensionasse horizontalmente o número de réplicas ou verticalmente os recursos de computação para o Pods, usaria as implantações de pods de escala com o Horizontal Pod Autoscaler e os recursos de pods de ajuste com o Vertical Pod Autoscaler para fazer isso.
-
Veja os detalhes do serviço implantado.
kubectl -n eks-sample-app describe service eks-sample-linux-service
Veja um exemplo de saída abaixo.
Name: eks-sample-linux-service Namespace: eks-sample-app Labels: app=eks-sample-linux-app Annotations: <none> Selector: app=eks-sample-linux-app Type: ClusterIP IP Families: <none> IP: 10.100.74.8 IPs: 10.100.74.8 Port: <unset> 80/TCP TargetPort: 80/TCP Endpoints: 192.168.24.212:80,192.168.50.185:80,192.168.63.93:80 Session Affinity: None Events: <none>
Na saída anterior, o valor para
IP:
é um endereço IP exclusivo que pode ser alcançado de qualquer nó ou Pod dentro do cluster, mas não pode ser alcançado de fora do cluster. Os valores paraEndpoints
são endereços IP atribuídos de dentro da VPC aos Pods que fazem parte do serviço. -
Visualize os detalhes de um dos Pods listados na saída quando você visualizou o namespace em uma etapa anterior. Substitua
776d8f8fd8-78w66
pelo valor retornado para um dos seus Pods.kubectl -n eks-sample-app describe pod eks-sample-linux-deployment-65b7669776-m6qxz
Exemplo abreviado de saída
Name: eks-sample-linux-deployment-65b7669776-m6qxz Namespace: eks-sample-app Priority: 0 Node: ip-192-168-45-132.us-west-2.compute.internal/192.168.45.132 [...] IP: 192.168.63.93 IPs: IP: 192.168.63.93 Controlled By: ReplicaSet/eks-sample-linux-deployment-65b7669776 [...] Conditions: Type Status Initialized True Ready True ContainersReady True PodScheduled True [...] Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 3m20s default-scheduler Successfully assigned eks-sample-app/eks-sample-linux-deployment-65b7669776-m6qxz to ip-192-168-45-132.us-west-2.compute.internal [...]
Na saída anterior, o valor de
IP:
é um IP exclusivo atribuído ao Pod do bloco CIDR atribuído à sub-rede em que está o nó. Se preferir atribuir aos Pods endereços IP de blocos CIDR diferentes, você pode alterar o comportamento padrão. Para ter mais informações, consulte Implementar Pods em sub-redes alternadas com rede personalizada. Você também pode ver que o agendador Kubernetes programou o Pod noNode
com o endereço IP192.168.45.132
.dica
Em vez de usar a linha de comando, você pode visualizar muitos detalhes sobre Pods, serviços, implantações e outros recursos do Kubernetes no AWS Management Console. Para ter mais informações, consulte Visualizar recursos do Kubernetes no AWS Management Console.
Executar um shell em um pod
-
Execute um shell no Pod que você descreveu na etapa anterior, substituindo
65b7669776-m6qxz
pelo ID de um dos seus Pods.kubectl exec -it eks-sample-linux-deployment-65b7669776-m6qxz -n eks-sample-app -- /bin/bash
-
No shell do Pod, visualize a saída do servidor da Web que foi instalado com a implantação em uma etapa anterior. Basta especificar o nome do serviço. Ele é resolvido para o endereço IP do serviço pelo CoreDNS, que é implantado com um cluster do Amazon EKS, por padrão.
curl eks-sample-linux-service
Veja um exemplo de saída abaixo.
<!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> [...]
-
No shell do Pod, visualize o servidor DNS para o Pod.
cat /etc/resolv.conf
Veja um exemplo de saída abaixo.
nameserver 10.100.0.10 search eks-sample-app.svc.cluster.local svc.cluster.local cluster.local us-west-2.compute.internal options ndots:5
Na saída anterior,
10.100.0.10
é atribuído automaticamente comonameserver
a todos os Pods implantados no cluster. -
Desconecte-se do Pod digitando
exit
. -
Ao terminar de usar a aplicação de exemplo, você poderá remover o namespace, o serviço e a implantação de exemplo com o comando a seguir.
kubectl delete namespace eks-sample-app
Próximas etapas
Após implantar a aplicação de exemplo, talvez você queira tentar alguns dos seguintes exercícios: