Criação de um DaemonSet
Cenário
O CCE fornece recursos de implementação e gerenciamento para vários tipos de contêineres e oferece suporte a recursos de cargas de trabalho de contêiner, incluindo criação, configuração, monitoramento, escalabilidade, atualização, desinstalação, descoberta de serviços e balanceamento de carga.
DaemonSet garante que apenas um pod seja executado em todos ou em alguns nós. Quando um nó é adicionado a um cluster, um novo pod também é adicionado para o nó. Quando um nó é removido de um cluster, o pod também é recuperado. Se um DaemonSet for excluído, todos os pods criados por ele serão excluídos.
Os cenários de aplicação típicos de um DaemonSet são os seguintes:
- Execute o daemon de armazenamento de cluster, como glusterd ou Ceph, em cada nó.
- Execute o daemon de coleta de logs, como Fluentd ou Logstash, em cada nó.
- Execute o daemon de monitoramento, como Prometheus Node Exporter, Collectd, Datadog Agent, New Relic Agent ou Ganglia (gmond), em cada nó.
Você pode implementar um DaemonSet para cada tipo de daemons em todos os nós ou implementar vários DaemonSets para o mesmo tipo de daemons. No segundo caso, os DaemonSets têm diferentes flags e diferentes requisitos de memória e CPU para diferentes tipos de hardware.
Pré-requisitos
Antes de criar um DaemonSet, é necessário ter um cluster disponível. Para obter detalhes sobre como criar um cluster, consulte Compra de um cluster do CCE.
Usar o console do CCE
- Efetue logon no console do CCE.
- Clique no nome do cluster para acessar o console do cluster, escolha Workloads no painel de navegação e clique em Create Workload no canto superior direito.
- Defina informações básicas sobre a carga de trabalho.
Basic Info
- Workload Type: selecione DaemonSet. Para obter detalhes sobre os tipos de carga de trabalho, consulte Visão geral.
- Workload Name: insira o nome da carga de trabalho. Digite de 1 a 63 caracteres começando com uma letra minúscula e terminando com uma letra minúscula ou dígito. Somente letras minúsculas, dígitos e hifens (-) são permitidos.
- Namespace: selecione o namespace da carga de trabalho. O valor padrão é default. Você também pode clicar em Create Namespace para criar um. Para mais detalhes, consulte Criação de um namespace.
- Container Runtime: um cluster do CCE usa runC por padrão, enquanto um cluster do CCE Turbo suporta runC e Kata. Para obter detalhes sobre as diferenças, consulte Tempo de execução do Kata e tempo de execução comum.
- Time Zone Synchronization: especifique se deseja ativar a sincronização de fuso horário. Depois que a sincronização de fuso horário estiver ativada, o contêiner e o nó usarão o mesmo fuso horário. A função de sincronização de fuso horário depende do disco local montado no contêiner. Não modifique nem exclua o fuso horário. Para mais detalhes, consulte Configuração da sincronização de fuso horário.
Container Settings- Informações sobre o contêiner
Vários contêineres podem ser configurados em um pod. Você pode clicar em Add Container à direita para configurar vários contêineres para o pod.
- Basic Info: configure informações básicas sobre o contêiner.
Parâmetro
Descrição
Container Name
Nomeie o contêiner.
Pull Policy
Política de atualização ou extração de imagem. Se você selecionar Always, a imagem será extraída do repositório de imagens a cada vez. Se você não selecionar Always, a imagem existente do nó é usada preferencialmente. Se a imagem não existir, a imagem será extraída do repositório de imagens.
Image Name
Clique em Select Image e selecione a imagem usada pelo contêiner.
Para usar uma imagem de terceiros, consulte Uso de imagens de terceiros.
Image Tag
Selecione a tag de imagem a ser implementada.
CPU Quota
- Request: número mínimo de núcleos de CPU exigidos por um contêiner. O valor padrão é 0,25 núcleos.
- Limit: número máximo de núcleos de CPU disponíveis para um contêiner. Não deixe Limit não especificado. Caso contrário, ocorrerá um uso intensivo de recursos de contêiner e sua carga de trabalho poderá exibir um comportamento inesperado.
Se Request e Limit não forem especificados, a cota não é limitada. Para obter mais informações e sugestões sobre Request e Limit, consulte Configuração de especificações do contêiner.
Memory Quota
- Request: quantidade mínima de memória requerida por um contêiner. O valor padrão é 512 MiB.
- Limit: quantidade máxima de memória disponível para um contêiner. Quando o uso de memória exceder o limite de memória especificado, o contêiner será encerrado.
Se Request e Limit não forem especificados, a cota não é limitada. Para obter mais informações e sugestões sobre Request e Limit, consulte Configuração de especificações do contêiner.
(Optional) GPU Quota
Configurável somente quando o cluster contém nós de GPU e o complemento Suíte IA do CCE (GPU NVIDIA) está instalado.
- All: nenhuma GPU será usada.
- Dedicated: os recursos da GPU são dedicados ao contêiner.
- Shared: porcentagem de recursos de GPU usados pelo contêiner. Por exemplo, se esse parâmetro for definido como 10%, o contêiner usará 10% dos recursos da GPU.
Para obter detalhes sobre como usar GPUs no cluster, consulte Agendamento de GPU padrão no Kubernetes.
(Optional) NPU Quota
Número de chips de Ascend 310 necessários para o contêiner. O valor deve ser um número inteiro e o complemento Suíte de IA do CCE (Ascend NPU) deve ser instalado.
Para obter detalhes sobre como usar NPUs no cluster, consulte Agendamento de NPU.
(Optional) Privileged Container
Programas em um contêiner privilegiado têm certos privilégios.
Se Privileged Container estiver habilitado, os privilégios serão atribuídos ao contêiner. Por exemplo, contêineres privilegiados podem manipular dispositivos de rede na máquina host e modificar parâmetros do kernel.
(Optional) Init Container
Se usar o contêiner como um contêiner init. Um contêiner init não suporta verificação de integridade.
Um contêiner init é um contêiner especial que é executado antes que outros contêineres de aplicações em um pod sejam iniciados. Cada pod pode conter vários contêineres. Além disso, um pod pode conter um ou mais contêineres init. Os contêineres de aplicações em um pod são iniciados e executados somente após a conclusão da execução de todos os contêineres init. Para obter detalhes, consulte Contêineres init.
- (Opcional) Lifecycle: configure as operações a serem executadas em uma fase específica do ciclo de vida do contêiner, como Startup Command, Post-Start e Pre-Stop. Para mais detalhes, consulte Definição dos parâmetros do ciclo de vida do contêiner.
- (Opcional) Health Check: configure a sonda de vivacidade, a sonda pronta e a sonda de inicialização conforme necessário. Para mais detalhes, consulte Configuração da verificação de integridade para um contêiner.
- (Opcional) Environment Variables: configure variáveis para o ambiente em execução do contêiner usando pares chave-valor. Essas variáveis transferem informações externas para contêineres executados em pods e podem ser modificadas de forma flexível após a implementação da aplicação. Para mais detalhes, consulte Configuração de uma variável de ambiente.
- (Opcional) Data Storage: monte armazenamento local ou armazenamento em nuvem no contêiner. Os cenários de aplicações e os modos de montagem variam de acordo com o tipo de armazenamento. Para mais detalhes, consulte Armazenamento.
- (Opcional) Security Context: atribua permissões de contêiner para proteger o sistema e outros contêineres de serem afetados. Insira o ID do usuário para atribuir permissões de contêiner e impedir que sistemas e outros contêineres sejam afetados.
- (Opcional) Logging: relate os logs de saída de contêiner padrão para o AOM por padrão, sem a necessidade de configurações manuais. Você pode configurar manualmente o caminho da coleção de logs. Para mais detalhes, consulte Uso do ICAgent para coletar logs de contêiner.
Para desativar a saída padrão da carga de trabalho atual, adicione a anotação kubernetes.AOM.log.stdout: [] em Rótulos e anotações. Para obter detalhes sobre como usar essa anotação, consulte Tabela 1.
- Basic Info: configure informações básicas sobre o contêiner.
- Image Access Credential: selecione a credencial usada para acessar o repositório de imagens. O valor padrão é default-secret. Você pode usar default-secret para acessar imagens no SWR. Para obter detalhes sobre default-secret, consulte default-secret.
- (Opcional) GPU: All é selecionado por padrão. A instância da carga de trabalho será agendada para o nó do tipo de GPU especificado.
(Opcional) Service Settings
Um Serviço fornece acesso externo para pods. Com um endereço IP estático, um Serviço encaminha o tráfego de acesso aos pods e equilibra automaticamente a carga desses pods.
Você também pode criar um Serviço depois de criar uma carga de trabalho. Para obter detalhes sobre Serviços de diferentes tipos, consulte Visão geral.
(Opcional) Advanced Settings- Upgrade: especifique o modo de atualizar e os parâmetros de upgrade da carga de trabalho. Rolling upgrade e Replace upgrade são suportados. Para mais detalhes, consulte Configuração da política de atualização da carga de trabalho.
- Scheduling: configure políticas de afinidade e antiafinidade para agendamento flexível de carga de trabalho. Afinidade de nó, afinidade de pod e antiafinidade de pod são suportadas. Para mais detalhes, consulte Política de agendamento (afinidade/antiafinidade).
- Toleration: o uso de ambas manchas e tolerâncias permite (não forçosamente) que o pod seja agendado para um nó com as manchas correspondentes e controla as políticas de despejo de pod depois que o nó onde o pod está localizado é manchado. Para mais detalhes, consulte Manchas e tolerâncias.
- Labels and Annotations: adicione rótulos ou anotações para pods usando pares chave-valor. Depois de inserir a chave e o valor, clique em Confirm. Para obter detalhes sobre como usar e configurar rótulos e anotações, consulte Rótulos e anotações.
- DNS: configure uma política DNS separada para a carga de trabalho. Para mais detalhes, consulte Configuração de DNS.
- APM Settings: use o Application Performance Management (APM) para fornecer uma análise de problemas e localização mais precisas para programas Java. Para mais detalhes, consulte Configuração de configurações de APM para análise de gargalo de desempenho.
- Network configuration:
- limitação de largura de banda de entrada/saída do pod: Você pode definir a limitação de largura de banda de entrada/saída para pods. Para mais detalhes, consulte Configuração da limitação da taxa de QoS para acesso entre pods.
- Clique em Create Workload no canto inferior direito.
Usar o kubectl
O procedimento a seguir usa o Nginx como exemplo para descrever como criar uma carga de trabalho usando o kubectl.
- Use o kubectl para se conectar ao cluster. Para mais detalhes, consulte Conexão a um cluster usando o kubectl.
- Crie e edite o arquivo nginx-daemonset.yaml. nginx-daemonset.yaml é um nome de arquivo de exemplo, e você pode alterá-lo conforme necessário.
vi nginx-daemonset.yaml
O conteúdo do arquivo de descrição é o seguinte: o seguinte fornece um exemplo. Para obter mais informações sobre DaemonSets, consulte Documentos do Kubernetes.
apiVersion: apps/v1 kind: DaemonSet metadata: name: nginx-daemonset labels: app: nginx-daemonset spec: selector: matchLabels: app: nginx-daemonset template: metadata: labels: app: nginx-daemonset spec: nodeSelector: # Node selection. A pod is created on a node only when the node meets daemon=need. daemon: need containers: - name: nginx-daemonset image: nginx:alpine resources: limits: cpu: 250m memory: 512Mi requests: cpu: 250m memory: 512Mi imagePullSecrets: - name: default-secret
O parâmetro replicas usado na definição de uma Implementação ou StatefulSet não existe na configuração acima para um DaemonSet porque cada nó tem apenas uma réplica. Ele é fixo.
O nodeSelector no modelo de pod anterior especifica que um pod é criado somente nos nós que atendem a daemon=need, conforme mostrado na figura a seguir. Se você quiser criar um pod em cada nó, exclua o rótulo.
- Crie um DaemonSet.
kubectl create -f nginx-daemonset.yaml
Se as informações a seguir forem exibidas, o DaemonSet está sendo criado.
daemonset.apps/nginx-daemonset created
- Consulte o status do DaemonSet.
kubectl get ds
$ kubectl get ds NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE nginx-daemonset 1 1 0 1 0 daemon=need 116s
- Se a carga de trabalho for acessada por meio de um Serviço ClusterIP ou NodePort, defina o tipo de acesso à carga de trabalho correspondente. Para mais detalhes, consulte Rede.