{"id":542,"date":"2020-08-18T16:22:52","date_gmt":"2020-08-18T16:22:52","guid":{"rendered":"https:\/\/demo.creativethemes.com\/blocksy\/business\/?p=542"},"modified":"2023-09-29T15:02:39","modified_gmt":"2023-09-29T18:02:39","slug":"adipiscing-elit-pellentesque-habitant-morbi","status":"publish","type":"post","link":"https:\/\/www.scttic.com\/?p=542","title":{"rendered":"Scheduler"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">No Kubernetes, o scheduler \u00e9 um componente essencial para atribuir tarefas aos n\u00f3s dispon\u00edveis dentro de um cluster. Ele desempenha um papel fundamental no gerenciamento da distribui\u00e7\u00e3o de carga e na utiliza\u00e7\u00e3o eficiente dos recursos.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"funcionalidade-do-scheduler\">Funcionalidade do Scheduler<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Tomada de decis\u00e3o: O scheduler toma decis\u00f5es com base em v\u00e1rios fatores, como requisitos de recursos, restri\u00e7\u00f5es de afinidade, limita\u00e7\u00f5es de hardware, pol\u00edticas de seguran\u00e7a e prefer\u00eancias de balanceamento de carga.<\/li>\n\n\n\n<li>Encontrar n\u00f3s adequados: O objetivo do scheduler \u00e9 encontrar um n\u00f3 adequado para executar cada tarefa, levando em considera\u00e7\u00e3o os recursos necess\u00e1rios e as pol\u00edticas de agendamento.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"processo-de-agendamento\">Processo de Agendamento<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Consulta do estado do cluster: O scheduler consulta o estado atual do cluster para obter informa\u00e7\u00f5es sobre os recursos dispon\u00edveis e as restri\u00e7\u00f5es definidas.<\/li>\n\n\n\n<li>Atribui\u00e7\u00e3o da tarefa: Com base nas informa\u00e7\u00f5es obtidas, o scheduler atribui a tarefa ao n\u00f3 mais apropriado, levando em considera\u00e7\u00e3o requisitos, restri\u00e7\u00f5es e prefer\u00eancias.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"otimiza\u00e7\u00e3o-e-personaliza\u00e7\u00e3o\">Otimiza\u00e7\u00e3o e Personaliza\u00e7\u00e3o<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Otimiza\u00e7\u00e3o da distribui\u00e7\u00e3o de carga: O scheduler pode equilibrar a carga de trabalho entre os n\u00f3s existentes, garantindo a utiliza\u00e7\u00e3o eficiente dos recursos do cluster.<\/li>\n\n\n\n<li>Personaliza\u00e7\u00e3o e extensibilidade: O scheduler pode ser personalizado de acordo com as necessidades do ambiente, permitindo a defini\u00e7\u00e3o de pol\u00edticas de agendamento personalizadas, implementa\u00e7\u00e3o de algoritmos de balanceamento de carga espec\u00edficos ou utiliza\u00e7\u00e3o de recursos adicionais para a tomada de decis\u00f5es.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"scheduling-manual\">Scheduling Manual<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Para criar um pod em um n\u00f3 especifico \u00e9 necess\u00e1rio informar ao scheduler. Vamos come\u00e7ar com um simples arquivo de defini\u00e7\u00e3o de pods. Cada pod tem um campo chamado nodeName que, por padr\u00e3o, n\u00e3o est\u00e1 definido.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kubectl explain pods.spec.nodeName<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Normalmente n\u00e3o se especifica este campo quando se cria o arquivo de manifesto da pod. O Kubernetes adiciona-o automaticamente. Para atribuir manualmente os pods aos n\u00f3s sem um scheduler, a maneira mais f\u00e1cil \u00e9 simplesmente definir o campo nodeName em seu arquivo de especifica\u00e7\u00e3o do pod enquanto cria o pod.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>apiVersion: v1\nkind: Pod\nmetadata:\n  name: mypod-app\n  labels:\n    app: mypod\nspec:\n  containers:\n  - name: nginx\n    image: nginx\n    ports:\n      - containerPort: 80\n  nodeName: node01 <\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"labels-e-selectors\">Labels e Selectors<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">As labels e selectors s\u00e3o m\u00e9todos padr\u00e3o para agrupar as coisas. Os labels s\u00e3o propriedades anexadas a cada item, portanto voc\u00ea adiciona propriedades a cada item para sua classe e tipo. Os selectors ajudam a filtrar estes itens.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Criamos muitos tipos diferentes de objetos em Kubernetes, pods, services, replicaset, deployments, etc. Para o Kubernetes, todos estes s\u00e3o objetos diferentes. Com o tempo, voc\u00ea pode acabar tendo centenas ou milhares desses objetos em seu cluster. Ent\u00e3o voc\u00ea precisar\u00e1 de uma maneira de filtrar e visualizar diferentes objetos por diferentes categorias, tais como agrupar objetos por seu tipo ou visualizar objetos por aplica\u00e7\u00e3o ou por sua funcionalidade. Seja o que for, voc\u00ea pode agrupar e selecionar objetos usando labels e selectors.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para cada objeto, anexe labels conforme suas necessidades, como app, function e etc. Depois, ao selecionar, especifique uma condi\u00e7\u00e3o para filtrar objetos espec\u00edficos. Por exemplo,&nbsp;<em>app=myapp<\/em>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>apiVersion: v1\nkind: Pod\nmetadata:\n  name: myapp-pod\n  labels:\n    app: myapp \n    function: font-end \nspec:\n  containers:\n  - name: nginx\n    image: nginx\n    ports:\n      - containerPort: 80<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Em um arquivo de defini\u00e7\u00e3o de pods, em metadados, criar uma se\u00e7\u00e3o chamada labels. e acrescente as labels em um formato de chave\/valor conforme exemplo abaixo. Voc\u00ea pode adicionar quantas labels quiser. Uma vez criado o pod, para selecionar o pod com as labels, use o comando kubectl get pods junto com a op\u00e7\u00e3o selector e especifique a condi\u00e7\u00e3o como app=myapp.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kubectl get pods --selector app=myapp<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"exercicos-nodename-labels-e-selectors\"><a href=\"#exercicos-nodename-labels-e-selectors\"><\/a>Praticando nodeName, Labels e Selectors<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Exemplos pr\u00e1ticos de como voc\u00ea pode usar os recursos de&nbsp;<code>nodename<\/code>,&nbsp;<code>labels<\/code>&nbsp;e&nbsp;<code>selectors<\/code>&nbsp;no Kubernetes:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Atividade 1: Usando nodename para implantar um pod em um n\u00f3 espec\u00edfico:<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Passo 1.1:<\/strong> Voc\u00ea pode usar o campo\u00a0<code>spec.nodeName<\/code>\u00a0no manifesto do pod para definir em qual n\u00f3 o pod deve ser implantado. Por exemplo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>apiVersion: v1\nkind: Pod\nmetadata:\n  name: meu-pod\nspec:\n  nodeName: nome-do-no\n  containers:\n    - name: meu-container\n      image: nginx<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Isso garante que o pod ser\u00e1 implantado apenas no n\u00f3 com o nome especificado.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Atividade 2: Usando labels e selectors para implantar um conjunto de pods:<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Passo 2.1.<\/strong> Voc\u00ea pode atribuir labels aos seus pods e, em seguida, usar os selectors para implantar conjuntos de pods com base nessas labels. Por exemplo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>apiVersion: v1\nkind: Pod\nmetadata:\n  name: meu-pod-1\n  labels:\n    app: minha-aplicacao\nspec:\n  containers:\n    - name: meu-container\n      image: nginx\n<strong>---<\/strong>\napiVersion: v1\nkind: Pod\nmetadata:\n  name: meu-pod-2\n  labels:\n    app: minha-aplicacao\nspec:\n  containers:\n    - name: meu-container\n      image: nginx<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Passo 2.2.<\/strong> Verifique se os dois pods foram criados, depois escolha qualquer um e remova-o.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kubectl delete pod meu-pod-1<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Passo 2.3.<\/strong> Confirme se o pod foi removido e recrie utilizando aplicando o arquivo yaml criado na atividade 2 passo 1.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kubectl get pods<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Atividade 3: Criando um Replication controller para gerenciar os pods.<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Passo 3.1.<\/strong> Agora, voc\u00ea pode usar um seletor para implantar todos os pods com a label\u00a0<code>app: minha-aplicacao<\/code>. Por exemplo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>apiVersion: v1\nkind: ReplicationController\nmetadata:\n  name: meu-rc\nspec:\n  replicas: 2\n  selector:\n    matchLabels:\n      app: minha-aplicacao\n  template:\n    metadata:\n      labels:\n        app: minha-aplicacao\n    spec:\n      containers:\n        - name: meu-container\n          image: nginx<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Passo 3.2.<\/strong> Verifique se os dois pods continuam em execu\u00e7\u00e3o, depois escolha qualquer um e remova-o.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kubectl delete pod meu-pod-1<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dessa forma, o Replication Controller ir\u00e1 garantir que sempre haja dois pods com a label&nbsp;<code>app: minha-aplicacao<\/code>&nbsp;em execu\u00e7\u00e3o.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><\/td><td>Esses s\u00e3o apenas alguns exemplos de como voc\u00ea pode usar&nbsp;<code>nodename<\/code>,&nbsp;<code>labels<\/code>&nbsp;e&nbsp;<code>selectors<\/code>&nbsp;no Kubernetes. Esses recursos s\u00e3o poderosos para controlar a implanta\u00e7\u00e3o e a sele\u00e7\u00e3o de recursos dentro do seu cluster Kubernetes.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>No Kubernetes, o scheduler \u00e9 um componente essencial para atribuir tarefas aos n\u00f3s dispon\u00edveis dentro de um cluster. Ele desempenha um papel fundamental no gerenciamento da distribui\u00e7\u00e3o de carga e na utiliza\u00e7\u00e3o eficiente dos recursos. Funcionalidade do Scheduler Processo de Agendamento Otimiza\u00e7\u00e3o e Personaliza\u00e7\u00e3o Scheduling Manual Para criar um pod em um n\u00f3 especifico \u00e9 [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":742,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_eb_attr":"","footnotes":""},"categories":[4],"tags":[],"class_list":["post-542","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-noticias"],"blocksy_meta":[],"_links":{"self":[{"href":"https:\/\/www.scttic.com\/index.php?rest_route=\/wp\/v2\/posts\/542","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.scttic.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.scttic.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.scttic.com\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.scttic.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=542"}],"version-history":[{"count":2,"href":"https:\/\/www.scttic.com\/index.php?rest_route=\/wp\/v2\/posts\/542\/revisions"}],"predecessor-version":[{"id":740,"href":"https:\/\/www.scttic.com\/index.php?rest_route=\/wp\/v2\/posts\/542\/revisions\/740"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.scttic.com\/index.php?rest_route=\/wp\/v2\/media\/742"}],"wp:attachment":[{"href":"https:\/\/www.scttic.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=542"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.scttic.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=542"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.scttic.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=542"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}