Por padrão, todos os recursos no cluster do Kubernetes são criados em um namespace padrão. Um pod será executado com solicitações/limites ilimitados de CPU e memória. A Espaço de nomes do Kubernetes permite particionar os recursos criados em um grupo logicamente nomeado. Cada namespace fornece:
- um escopo exclusivo para recursos a fim de evitar colisões de nomes
- políticaspara garantir a autoridade adequada aos usuários confiáveis
- capacidade de especificar restrições para o consumo de recursos
Isso permite que um cluster Kubernetes compartilhe recursos por vários grupos e forneça diferentes níveis de QoS para cada grupo. Os recursos criados em um namespace ficam ocultos de outros namespaces. Vários namespaces podem ser criados, cada um potencialmente com restrições diferentes.
Namespace padrão do Kubernetes
Por padrão, cada recurso criado pelo usuário no cluster do Kubernetes é executado em um namespace padrão, chamado padrão
.
1 2 3 4 |
./kubernetes/agrupamento/kubectl.sh obter espaço de nome NOME RÓTULOS STATUS IDADE padrão Ativo 1m cubo-sistema Ativo 1m |
Qualquer pod, serviço ou controlador de replicação será criado nesse namespace. sistema kube
é reservado para recursos criados pelo cluster do Kubernetes. Mais detalhes sobre o namespace podem ser vistos:
1 2 3 4 5 6 7 8 9 10 11 |
./kubernetes/agrupamento/kubectl.sh descrever Espaços de nomes padrão Nome: padrão Rótulos: Status: Ativo Não recurso cota. Recursos Limites Tipo Recursos Mínimo Máximo Solicitação Limite Limite/Solicitação ---- -------- --- --- ------- ----- ------------- Contêineres CPU - - 100m - - |
Essa descrição mostra a cota de recursos (se houver), bem como os intervalos de limites de recursos. Portanto, vamos criar um controlador de replicação do Couchbase como:
1 |
./kubernetes/agrupamento/kubectl.sh executar couchbase --imagem=arungupta/couchbase |
Verifique o controlador de replicação existente:
1 2 3 |
./kubernetes/agrupamento/kubectl.sh obter rc CONTROLADOR CONTAINER(S) IMAGEM(S) SELETOR RÉPLICAS IDADE couchbase couchbase arungupta/couchbase executar=couchbase 1 5m |
Por padrão, somente os recursos no namespace do usuário são mostrados. Os recursos em todos os namespaces podem ser mostrados usando --todos os espaços de nome
opção:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
./kubernetes/agrupamento/kubectl.sh obter rc --todos-Espaços de nomes NAMESPACE CONTROLADOR CONTAINER(S) IMAGEM(S) SELETOR RÉPLICAS IDADE padrão couchbase couchbase arungupta/couchbase executar=couchbase 1 5m cubo-sistema heapster-v11 heapster gcr.io/contêineres do google/heapster:v0.18.4 k8s-aplicativo=heapster,versão=v11 1 6m cubo-sistema cubo-dns-v9 etcd gcr.io/contêineres do google/etcd:2.0.9 k8s-aplicativo=cubo-dns,versão=v9 1 6m kube2sky gcr.io/contêineres do google/kube2sky:1.11 skydns gcr.io/contêineres do google/skydns:2015-10-13-8c72f8c saúde gcr.io/contêineres do google/exechealthz:1.0 cubo-sistema cubo-ui-v4 cubo-ui gcr.io/contêineres do google/cubo-ui:v4 k8s-aplicativo=cubo-ui,versão=v4 1 6m cubo-sistema l7-lb-controlador-v0.5.2 padrão-http-backend gcr.io/contêineres do google/backend padrão:1.0 k8s-aplicativo=glbc,versão=v0.5.2 1 6m l7-lb-controlador gcr.io/contêineres do google/glbc:0.5.2 cubo-sistema monitoramento-influxodb-grafana-v2 influxodb gcr.io/contêineres do google/heapster_influxdb:v0.4 k8s-aplicativo=influxoGrafana,versão=v2 1 6m grafana beta.gcr.io/contêineres do google/heapster_grafana:v2.1.1 |
Como você pode ver, o arungupta/couchbase
A imagem é executada no padrão
namespace. Todos os outros recursos são executados no namespace sistema kube
namespace. Vamos verificar o contexto desse controlador de replicação:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
./kubernetes/agrupamento/kubectl.sh configuração visualização couchbase Versão da API: v1 agrupamentos: - agrupamento: certificado-autoridade-dados: REDUZIDO servidor: https://104.197.10.200 nome: couchbase-em-kubernetes_kubernetes contextos: - contexto: agrupamento: couchbase-em-kubernetes_kubernetes usuário: couchbase-em-kubernetes_kubernetes nome: couchbase-em-kubernetes_kubernetes atual-contexto: couchbase-em-kubernetes_kubernetes gentil: Configuração preferências: {} usuários: - nome: couchbase-em-kubernetes_kubernetes usuário: cliente-certificado-dados: REDUZIDO cliente-chave-dados: REDUZIDO token: 1RUrsvA5RDwwRNf0eOvz86elmniOK0oj - nome: couchbase-em-kubernetes_kubernetes-básico-autenticação usuário: senha: cZ9fZSuzIqq5kdnj nome de usuário: administrador |
Procure por contexts.context.name
para ver o contexto existente. Isso será manipulado posteriormente.
Criar um recurso em um novo espaço de nomes do Kubernetes
Primeiro, vamos criar um novo namespace. Isso pode ser feito usando o seguinte arquivo de configuração:
1 2 3 4 5 6 |
Versão da API: v1 gentil: Namespace metadados: nome: desenvolvimento rótulos: nome: desenvolvimento |
O espaço de nome é criado como:
1 2 |
./kubernetes/agrupamento/kubectl.sh criar -f myns.yaml espaço de nome "desenvolvimento" criado |
Em seguida, a consulta de todos os namespaces fornece:
1 2 3 4 5 |
./kubernetes/agrupamento/kubectl.sh obter espaço de nome NOME RÓTULOS STATUS IDADE padrão Ativo 9m desenvolvimento nome=desenvolvimento Ativo 13s cubo-sistema Ativo 8m |
Um novo controlador de replicação pode ser criado nesse novo namespace usando --namespace
opção:
1 2 |
./kubernetes/agrupamento/kubectl.sh --espaço de nome=desenvolvimento executar couchbase --imagem=arungupta/couchbase controlador de replicação "couchbase" criado |
A lista de recursos em todos os namespaces é semelhante:
1 2 3 4 5 6 |
./kubernetes/agrupamento/kubectl.sh obter rc --todos-Espaços de nomes NAMESPACE CONTROLADOR CONTAINER(S) IMAGEM(S) SELETOR RÉPLICAS IDADE padrão couchbase couchbase arungupta/couchbase executar=couchbase 1 4m desenvolvimento couchbase couchbase arungupta/couchbase executar=couchbase 1 2m cubo-sistema heapster-v11 heapster gcr.io/contêineres do google/heapster:v0.18.4 k8s-aplicativo=heapster,versão=v11 1 31m . . . |
Como visto, há dois controladores de replicação com arungupta/couchbase
imagem - uma em padrão
e outro no namespace desenvolvimento
namespace.
Definir o espaço de nome do Kubernetes para um recurso existente
Se um recurso já tiver sido criado, poderá ser atribuído a ele um namespace. Em um recurso criado anteriormente, um novo contexto pode ser definido no namespace:
1 2 |
./kubernetes/agrupamento/kubectl.sh configuração definir-contexto dev --espaço de nome=desenvolvimento --agrupamento=couchbase-em-kubernetes_kubernetes --usuário=couchbase-em-kubernetes_kubernetes contexto "dev" definir. |
A visualização do contexto agora mostra:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
./kubernetes/agrupamento/kubectl.sh configuração visualização couchbase Versão da API: v1 agrupamentos: - agrupamento: certificado-autoridade-dados: REDUZIDO servidor: https://104.197.10.200 nome: couchbase-em-kubernetes_kubernetes contextos: - contexto: agrupamento: couchbase-em-kubernetes_kubernetes usuário: couchbase-em-kubernetes_kubernetes nome: couchbase-em-kubernetes_kubernetes - contexto: agrupamento: couchbase-em-kubernetes_kubernetes espaço de nome: desenvolvimento usuário: couchbase-em-kubernetes_kubernetes nome: dev atual-contexto: couchbase-em-kubernetes_kubernetes gentil: Configuração preferências: {} usuários: - nome: couchbase-em-kubernetes_kubernetes usuário: cliente-certificado-dados: REDUZIDO cliente-chave-dados: REDUZIDO token: 1RUrsvA5RDwwRNf0eOvz86elmniOK0oj - nome: couchbase-em-kubernetes_kubernetes-básico-autenticação usuário: senha: cZ9fZSuzIqq5kdnj nome de usuário: administrador |
O segundo atributo em contextos.contexto
mostra que um novo contexto foi criado. Ele também mostra que o contexto atual ainda é couchbase-em-kubernetes_kubernetes
. Como nenhum namespace é especificado nesse contexto, ele pertence ao namespace padrão. Altere o contexto:
1 2 |
./kubernetes/agrupamento/kubectl.sh configuração uso-contexto dev trocado para contexto "dev". |
Consulte a lista de controladores de replicação:
1 2 |
./kubernetes/agrupamento/kubectl.sh obter rc CONTROLADOR CONTAINER(S) IMAGEM(S) SELETOR RÉPLICAS IDADE |
Obviamente, nenhum controlador de replicação está em execução nesse contexto. Vamos criar um novo controlador de replicação nesse novo namespace:
1 2 |
./kubernetes/agrupamento/kubectl.sh executar couchbase --imagem=arungupta/couchbase controlador de replicação "couchbase" criado |
E veja a lista de controladores de replicação em todos os namespaces:
1 2 3 4 5 6 |
./kubernetes/agrupamento/kubectl.sh obter rc --todos-Espaços de nomes NAMESPACE CONTROLADOR CONTAINER(S) IMAGEM(S) SELETOR RÉPLICAS IDADE padrão couchbase couchbase arungupta/couchbase executar=couchbase 1 16m desenvolvimento couchbase couchbase arungupta/couchbase executar=couchbase 1 4s cubo-sistema heapster-v11 heapster gcr.io/contêineres do google/heapster:v0.18.4 k8s-aplicativo=heapster,versão=v11 1 17m . . . |
Agora você pode ver dois arungupta/couchbase
controladores de replicação em execução em dois namespaces diferentes.
Excluir um recurso do Kubernetes no namespace
Um recurso pode ser excluído por meio da qualificação completa do nome do recurso:
1 2 |
./kubernetes/agrupamento/kubectl.sh --espaço de nome=padrão excluir rc couchbase controlador de replicação "couchbase" excluído |
Da mesma forma, o outro controlador de replicação pode ser excluído como:
1 2 |
./kubernetes/agrupamento/kubectl.sh --espaço de nome=desenvolvimento excluir rc couchbase controlador de replicação "couchbase" excluído |
Por fim, veja a lista de todos os controladores de replicação em todos os namespaces:
1 2 3 4 5 |
./kubernetes/agrupamento/kubectl.sh obter rc --todos-Espaços de nomes NAMESPACE CONTROLADOR CONTAINER(S) IMAGEM(S) SELETOR RÉPLICAS IDADE cubo-sistema heapster-v11 heapster gcr.io/contêineres do google/heapster:v0.18.4 k8s-aplicativo=heapster,versão=v11 1 3h cubo-sistema cubo-dns-v9 etcd gcr.io/contêineres do google/etcd:2.0.9 k8s-aplicativo=cubo-dns,versão=v9 1 3h . . . |
Isso confirma que todos os controladores de replicação criados pelo usuário foram excluídos.
Cota e limite de recursos usando o espaço de nomes do Kubernetes
A cada namespace pode ser atribuída uma cota de recursos. Por padrão, um pod será executado com solicitações/limites ilimitados de CPU e memória. Especificar a cota permite restringir a quantidade de recursos do cluster que pode ser consumida por todos os pods em um namespace. A cota de recursos pode ser especificada usando um arquivo de configuração:
1 2 3 4 5 6 7 8 9 10 11 12 |
Versão da API: v1 gentil: Cota de recursos metadados: nome: cota especificação: difícil: CPU: "20" memória: 1Gi cápsulas: "10" controladores de replicação: "20" recursosquotas: "1" serviços: "5" |
Os recursos a seguir são compatíveis com o sistema de cotas:
Recursos | Descrição |
---|---|
CPU |
Uso total da cpu solicitada |
memória |
Uso total da memória solicitada |
cápsulas |
Número total de pods ativos em que a fase está pendente ou ativa. |
serviços |
Número total de serviços |
controladores de replicação |
Número total de controladores de replicação |
recursosquotas |
Número total de cotas de recursos |
segredos |
Número total de segredos |
reivindicações de volume persistente |
Número total de reclamações de volume persistente |
Essa cota de recursos pode ser criada em um namespace:
1 2 |
./kubernetes/agrupamento/kubectl.sh --espaço de nome=desenvolvimento criar -f cota.yaml cota de recursos "quota" criado |
A cota criada pode ser vista como:
1 2 3 4 5 6 7 8 9 10 11 |
./kubernetes/agrupamento/kubectl.sh --espaço de nome=desenvolvimento descrever cota Nome: cota Namespace: desenvolvimento Recursos Usado Difícil -------- ---- ---- CPU 0 20 memória 0 1Gi cápsulas 0 10 controladores de replicação 0 20 recursosquotas 1 1 serviços 0 5 |
Agora, se você tentar criar o controlador de replicação, isso funcionará:
1 2 |
./kubernetes/agrupamento/kubectl.sh --espaço de nome=desenvolvimento executar couchbase --imagem=arungupta/couchbase controlador de replicação "couchbase" criado |
Mas a descrição da cota mostra novamente:
1 2 3 4 5 6 7 8 9 10 11 |
./kubernetes/agrupamento/kubectl.sh --espaço de nome=desenvolvimento descrever cota Nome: cota Namespace: desenvolvimento Recursos Usado Difícil -------- ---- ---- CPU 0 20 memória 0 1Gi cápsulas 0 10 controladores de replicação 1 20 recursosquotas 1 1 serviços 0 5 |
Esperávamos que um novo pod fosse criado como parte desse controlador de replicação, mas ele não está lá. Portanto, vamos descrever nosso controlador de replicação:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
./kubernetes/agrupamento/kubectl.sh --espaço de nome=desenvolvimento descrever rc Nome: couchbase Namespace: desenvolvimento Imagem(s): arungupta/couchbase Seletor: executar=couchbase Rótulos: executar=couchbase Réplicas: 0 atual / 1 desejado Pods Status: 0 Em execução / 0 Em espera / 0 Bem-sucedido / 0 Falha Não volumes. Eventos: FirstSeen Visto pela última vez Contagem De SubobjetoCaminho Motivo Mensagem ───────── ──────── ───── ──── ───────────── ────── ─────── 1m 24s 4 {replicação-controlador } FailedCreate Erro criando: Pod "couchbase-" é proibido: deve fazer a não-zero solicitação para memória desde ele é rastreados por cota. |
Por padrão, o pod consome toda a CPU e a memória disponíveis. Com cotas de recursos aplicadas, um valor explícito deve ser especificado. Como alternativa, um valor padrão para o pod pode ser especificado usando o seguinte arquivo de configuração:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Versão da API: v1 gentil: LimitRange metadados: nome: limites especificação: limites: - padrão: CPU: 200m memória: 512Mi defaultRequest: CPU: 100m memória: 256Mi tipo: Contêineres |
Isso restringe a CPU e a memória que podem ser consumidas por um pod. Vamos aplicar esses limites como:
1 2 |
./kubernetes/agrupamento/kubectl.sh --espaço de nome=desenvolvimento criar -f limites.yaml intervalo de limite "limites" criado |
Agora, quando você descreve o controlador de replicação novamente, ele é exibido:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
./kubernetes/agrupamento/kubectl.sh --espaço de nome=desenvolvimento descrever rc Nome: couchbase Namespace: desenvolvimento Imagem(s): arungupta/couchbase Seletor: executar=couchbase Rótulos: executar=couchbase Réplicas: 1 atual / 1 desejado Pods Status: 1 Em execução / 0 Em espera / 0 Bem-sucedido / 0 Falha Não volumes. Eventos: FirstSeen Visto pela última vez Contagem De SubobjetoCaminho Motivo Mensagem ───────── ──────── ───── ──── ───────────── ────── ─────── 8m 2m 14 {replicação-controlador } FailedCreate Erro criando: Pod "couchbase-" é proibido: deve fazer a não-zero solicitação para memória desde ele é rastreados por cota. 2m 2m 1 {replicação-controlador } SuccessfulCreate Criado cápsula: couchbase-gzk0l |
Isso mostra que a criação do pod foi bem-sucedida. E agora, quando você descreve a cota, ela também mostra os valores corretos:
1 2 3 4 5 6 7 8 9 10 11 |
./kubernetes/agrupamento/kubectl.sh --espaço de nome=desenvolvimento descrever cota Nome: cota Namespace: desenvolvimento Recursos Usado Difícil -------- ---- ---- CPU 100m 20 memória 268435456 1Gi cápsulas 1 10 controladores de replicação 1 20 recursosquotas 1 1 serviços 0 5 |
Cota de recursos fornecem mais detalhes sobre como definir/atualizar esses valores. A criação de outra cota apresenta o seguinte erro:
1 2 |
./kubernetes/agrupamento/kubectl.sh --espaço de nome=desenvolvimento criar -f cota.yaml Erro de servidor: erro quando criando "quota.yaml": Cota de recursos "quota" é proibido: limitado para 1 recursosquotas |
Especificação de limites durante a criação de pods
Os limites também podem ser especificados durante a criação do pod: Se o limite de memória para cada pod for restrito a 1g, uma definição de pod válida seria:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Versão da API: v1 gentil: Pod metadados: nome: couchbase-cápsula especificação: contêineres: - nome: couchbase imagem: couchbase portos: - containerPort: 8091 recursos: limites: CPU: "1" memória: 512Mi |
Isso ocorre porque o pod solicita apenas 0,5 G de memória. E uma definição de pod inválida seria:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Versão da API: v1 gentil: Pod metadados: nome: couchbase-cápsula especificação: contêineres: - nome: couchbase imagem: couchbase portos: - containerPort: 8091 recursos: limites: CPU: "1" memória: 2G |
Isso ocorre porque o pod solicita 2G de memória. A criação desse pod apresenta o seguinte erro:
1 2 |
./kubernetes/agrupamento/kubectl.sh --espaço de nome=desenvolvimento criar -f couchbase-cápsula.yaml Erro de servidor: erro quando criando "couchbase-pod.yaml": Pod "couchbase-pod" é proibido: incapaz para admitir cápsula sem excedente cota para recurso memória: limitado para 1Gi mas exigir 2805306368 para ter sucesso |
Espero que você possa aplicar namespaces, cotas de recursos e limites para compartilhar seus clusters em diferentes ambientes.