Introdução aos contêineres k8s

1. Introdução ao k8s

1. O que é um contêiner

Para reduzir o desperdício de recursos de host físico causado por máquinas virtuais, melhorar a taxa de utilização de hosts físicos e fornecer um ambiente de execução isolado para aplicativos tão bons quanto máquinas virtuais, as pessoas chamam essa máquina virtual leve de contêiner.

2. Ferramentas de gerenciamento de contêineres

Usado principalmente para criação, inicialização, desligamento, exclusão de contêineres, etc.
Ferramentas de gerenciamento:

  • janela de encaixe
  • bolsa
  • LXC、LXD、RKT

3. Ferramentas de implantação e orquestração de contêineres

As ferramentas de gerenciamento de contêineres podem concluir o gerenciamento básico e, para lidar com implantações de aplicativos mais complexos nas empresas, são necessárias ferramentas de gerenciamento de orquestração de contêineres.
Ferramentas de implantação de orquestração:

  • docker three swordsmen (docker machine, docker compose, docker swarm)
  • mesos + maratona
  • O Kubernetes
    é usado principalmente para gerenciar aplicativos em contêineres em vários hosts na plataforma de nuvem. O objetivo do k8s é tornar a implantação de aplicativos em contêineres simples e eficiente, fornecendo um mecanismo para implantação, planejamento, atualização e manutenção de aplicativos.

2. função e arquitetura do k8s

1. função k8s

Ele pode implantar, expandir e reduzir aplicativos automaticamente.

【1】Embalagem automática

Implantação automática de contêineres de aplicativos com base nos requisitos de configuração de recursos do ambiente operacional do aplicativo com base em contêineres

【2】Autocura (capacidade de autocura)

  • Quando o contêiner falhar, o contêiner será reiniciado
  • Quando houver um problema com o nó do nó implantado, o contêiner será reimplantado e reagendado
  • Desligar um contêiner quando ele falha em uma verificação de monitoramento
  • Os serviços externos não serão fornecidos até que o contêiner esteja funcionando normalmente

【4】 Expansão horizontal

Por meio de instruções simples, interface de usuário da interface do usuário ou uso de recursos com base na CPU, etc., expanda ou reduza a escala do aplicativo como um contêiner

[5] Descoberta de serviço

Os usuários podem realizar a descoberta de serviço e o balanceamento de carga com base nos próprios recursos do k8s sem usar mecanismos adicionais de descoberta de serviço

【6】Atualização contínua

De acordo com as alterações do aplicativo, atualizações únicas ou em lote podem ser executadas nos aplicativos em execução no contêiner do aplicativo

[7] Reversão de versão

De acordo com a implantação do aplicativo, o aplicativo pode ser executado no contêiner do aplicativo e a versão histórica pode ser revertida imediatamente

【8】Gerenciamento de chave e configuração

Chaves e configurações de aplicativos podem ser implantadas e atualizadas sem reconstruir a imagem, semelhante à implantação ativa

【9】Orquestração de armazenamento

  • Implementar automaticamente a montagem e o aplicativo do sistema de armazenamento, especialmente para aplicativos com estado, para obter persistência de dados é muito importante
  • O sistema de armazenamento pode vir de diretórios locais, redes de armazenamento (NFS, Gluster, Ceph, Cinder, etc.), serviços públicos de armazenamento em nuvem, etc.

2. Suporte a nós e pods

  • Suporte de número de nó (nó): início 100, agora 2000
  • Suporte de gerenciamento de POd: início 1000, agora 150000

3. implantação de cluster k8s

1. Classificação da arquitetura de implantação de aplicativos

  • Arquitetura de nó não central: GlusterFS
  • Arquitetura do nó central: HDFS, K8S

2. Funções de função dos nós de arquitetura de cluster

[1] Três componentes do nó mestre

  • O nó de controle k8s agenda e gerencia o cluster e aceita solicitações de usuários fora do cluster para operar o cluster
  • Composição do nó mestre (quatro componentes): plano de controle
  1. Servidor API: comunicação
  2. Kube-Scheduler: Scheduling distribui pods para nós (servidores) por meio de algoritmos de agendamento
  3. Armazenamento de estado do cluster (banco de dados ETCD) / armazenamento de valor-chave distribuído
  4. Servidor Gerenciador do Controlador: Recursos

[2] Três componentes do nó do trabalhador: plano do usuário

  • Nós de trabalho do cluster, executando o contêiner de aplicativo de negócios do usuário 1
  • Composição do nó de trabalho (três componentes)
    1. kubelet: uma ferramenta de gerenciamento do lado do trabalhador, responsável pelo ciclo de vida do pod, armazenamento e gerenciamento de rede
    2. kube proxy: proxy de rede, definindo o caminho de encaminhamento, responsável pela descoberta de serviços (aqui é a descoberta de serviços internos e a descoberta de serviços externos é a entrada), balanceamento de carga (carga de 4 camadas)
    3. Container Runtime: o software que cria o contêiner

【3】Complementos

  • ser - dns
  • Controlador de ingresso: fornece entrada de rede externa para serviços (descoberta de serviços externos)
    insira a descrição da imagem aqui

3. implantação do k8s

Validação da disponibilidade do cluster

kubbectl get node   # 节点状态
kubbectl  get cs    # 集群状态

4. comando kubectl do cliente de cluster k8s

# 检查集群是否安装
rpm -qa | grep kubetctl
# 获取kubectl帮助
kubectl --help

Ambiente necessário para usar comandos kubectl: arquivo de configuração de link de cluster

Cinco, método de gravação de arquivo de lista de recursos de cluster k8s (yaml)

1. Formato de escrita do arquivo YAML

【1】Introdução do arquivo YAML

  • YAML ainda é uma linguagem de marcação
  • Para enfatizar que esta linguagem é centrada em dados em vez de focada em linguagem de marcação
  • YAML é um formato altamente legível para expressar sequências de dados

[2] Sintaxe básica do arquivo YAML

  • use espaços para recuo
  • O número de espaços de recuo não é importante, desde que os elementos do mesmo nível estejam alinhados à esquerda
  • O recuo da versão baixa não pode usar a tecla TAB, apenas espaços podem ser usados
  • Use # para marcar o comentário, deste caracter até o final da linha, será ignorado pelo interpretador

[3] Estruturas de dados suportadas por YAML

  • objeto
  1. coleção de pares chave-valor
  2. também conhecido como Mapa/Hash/Dicionário
  • variedade
  1. um grupo em ordem
  2. aka sequência/lista
  • Escalar
    Um valor único e indivisível: número, bool, nulo, hora e data.
    Em YMAL, as strings não usam aspas.Se houver espaços ou caracteres especiais na string, eles podem ser colocados entre aspas simples ou duplas.

2. Implemente o método de descrição da lista de recursos por meio do arquivo YAML

【1】Campos comuns

  • versão: versão, tipo str
  • tipo: tipo de recurso, tipo str
  • metadados: objeto de metadados/objeto de recurso, objeto
  • metadata.name: nome do objeto de recurso, str
  • metadata.namespace: namespace do objeto de recurso, str
  • Especificação: Definir objetos de recurso em detalhes, descrição do objeto de recurso, objeto

Seis, namespace do cluster k8s (namespace)

1. Introdução

  • Namespaces
  • Papel: no caso de multilocação, o isolamento de recursos é realizado
  • Pertence ao isolamento lógico
  • Pertence aos limites da administração
  • Não faz parte do limite da rede
  • Cotas de recursos podem ser feitas para cada namespace

2. Ver

kubect get namesapce

ilustrar:

  • padrão: pods criados por usuários estão neste namespace por padrão
  • kune-public : Acessível a todos os usuários. Incluir usuários não autenticados
  • kube-node-lease: status de concessão do nó do cluster kubernetes
  • kube-system: o cluster kubernetes está em uso

3. criar

【1】Criar por comando

kubectl create namespace test

输出: 
namespace/test created

[2] Criado através da lista de recursos

1.准备资源清单文件
cat 01-create-ns.yam1

apiVersion: V1
kind: Namespace
metadata:
  name;demons1
  
2. 应用资源清单文件
kubectl apply -f 01-create-ns.yam1

3. 验证是否创建成功
kubectl get namespace

4. excluir

[1] Excluir diretamente pelo kubectl (não recomendado)

kubectl get namespace
kubectl delete namespace test

【2】Use o comando kubectl para excluir o arquivo de lista de recursos do aplicativo (recomendação)

kubectl get namespace
cat 01-create-ns.yam1
kubectl delete -f 01-create-ns.yam1

Seven, pod de conceito de núcleo de cluster k8s

Os contêineres não podem ser gerenciados diretamente no k8s. A menor unidade de agendamento em um cluster k8s é o pod, portanto, os pods devem ser usados ​​para executar contêineres de aplicativos

1. Conceito

  • A menor unidade que pode ser agendada em k8s
  • Um pod é uma coleção de contêineres

2. Exibir pods

kubectl get pod
kubectl get pods
kubectl get pods --namespace default

3. Criar pods

[1] Escreva um arquivo para criar uma lista de recursos de pod

4. Acesso ao pod (não recomendado)

知道pod的IP地址
curl 172.xx.xx.xx

5. Método de exclusão do pod

[1] Excluir diretamente pelo kubectl (não recomendado)

 kubectl delete pods pod1

【2】Use o comando kubectl para excluir o arquivo de lista de recursos do aplicativo (recomendação)

kubectl delete -f 02-create-pod.yam1

Oito, controlador de conceito de núcleo de cluster k8s (controlador)

Entenda o método de exclusão do pod e descubra que a exclusão do pod é muito simples e fácil de usar indevidamente. Portanto, outro conceito de controlador (controlador) é introduzido para monitorar o status do pod em um loop no cluster k8s. Se o pod for excluído , ele reiniciará Puxe um pod e mantenha o pod no estado que o usuário espera.

1. Função do controlador

  • controlador
  • Usado para monitorar os recursos em execução no aplicativo
  • Quando houver um problema com o pod, o pod será puxado novamente para atingir o estado esperado pelo usuário

2. Classificação do controlador

Controladores de pod comuns: macacões no tipo, chamados de controladores RC

  • Implantação: controlador de atualização declarativa para implantação de aplicativos sem estado . Um pacote de nível superior para RS. , fornecendo funções relacionadas à implantação mais avançadas.
    Vantagens: o back-end pode ser expandido infinitamente
  • ReplicaSet (RS): o controlador do conjunto de réplicas é usado para expandir ou reduzir o tamanho da réplica do pod e é usado para publicar aplicativos sem estado . Atualize dinamicamente o número de cópias do POD e selecione quais pods entrarão em vigor por meio do seletor.
  • StatefulSet: um conjunto de réplicas com estado, usado para publicar aplicativos com estado . Vantagens: estabilidade contínua, IP
    pode ser mantido inalterado . Principais características: armazenamento persistente estável, logotipo de rede estável, implantação ordenada e expansão ordenada, contração ordenada e exclusão ordenada Composição : Headless Service (gerenciamento de DNS para serviços com estado), volumeClaimTemplate (modelo para criar volumes persistentes)

  • DaemonSet: Execute uma cópia em cada nó do cluster k8s para publicar aplicativos como monitoramento ou coleta de log e instale-o
    em cada nó
  • Trabalho: Executar uma tarefa de trabalho único
  • CronJob: Executa tarefas de trabalho periódicas

3. O papel do controlador de implantação

  • Ele tem as funções de implantação online, atualização sem interrupção, criação de uma cópia, reversão para uma versão anterior (bem-sucedida/estável), etc.

4. Crie um método de aplicativo do tipo controlador de implantação

[1] Criado por meio da linha de comando kubectl (não recomendado)

[2] Crie um arquivo de lista de recursos por meio do comando kubectl (recomendado)

5. Exclua o método de aplicativo do tipo controlador de implantação

Não é recomendado excluir o POD com o tipo de controlador diretamente. Se for necessário excluir, exclua o nome do aplicativo do controlador. (Depois de excluir o pod diretamente, o POD será puxado novamente)

[1] Criado por meio da linha de comando kubectl

# 查看应用:
kubectl get depliyment.apps
# 删除应用;
kubectl delete depliyment.apps nginx-app

【2】Criar arquivo de lista de recursos do aplicativo por meio do comando kubectl

Nine, serviço de conceito de núcleo de cluster k8s

1. conceito de serviço

  • não é um serviço de entidade
  • É uma regra de encaminhamento iptables ou ipva

2. Papel do serviço

  • Forneça ao cliente do pod acesso ao método POD por meio do serviço, ou seja, o cliente acessa a entrada do pod
  • O serviço é associado ao pod por meio do rótulo do pod

3. tipo de serviço

  • ClusterIP: Por padrão, é atribuído um IP virtual que pode ser acessado dentro do cluster, que só pode ser acessado internamente
  • NodePort: atribui uma porta em cada Node como uma entrada de acesso externo
  • LoadBalancer: Trabalhe em um provedor de nuvem específico (por exemplo: Google Cloud, AWS, Openstack)
  • ExternalName: Indica que serviços fora do cluster são introduzidos no cluster, ou seja, pods dentro do cluster se comunicam com serviços fora do cluster

4. parâmetros de serviço

  • port: a porta usada para acessar o serviço
  • targetPort: porta do contêiner no pod
  • NodePort: Através do Node, os usuários da rede externa podem acessar serviços no cluster k8s

5. Método de criação de serviço

[1] Criado por meio da linha de comando kubectl (não recomendado)

O serviço criado por padrão é do tipo ClusterIP

# 1.创建Deploment类型应用
# 2.验证应用创建情况
get
# 3.创建service
kubectl expose deployment.apps nginx.app1 --typr=ClusterIP --tarrget-poet=80 --port=80
# 4. 查看service
kubectl get service

[2] Crie um arquivo de lista de recursos por meio do comando kubectl (recomendado)

6. Método de exclusão de serviço

[1] Criado por meio da linha de comando kubectl (não recomendado)

kubectl delete service nginx-app1

【2】Use o comando kubectl para criar um arquivo de lista de recursos (recomendado)

Acho que você gosta

Origin blog.csdn.net/weixin_46268244/article/details/131840382
Recomendado
Clasificación