O Policy Controller inclui uma biblioteca predefinida de modelos de restrições que podem ser usados com o pacote de políticas de custos e fiabilidade que ajuda a adotar práticas recomendadas para executar clusters GKE rentáveis sem comprometer o desempenho nem a fiabilidade das respetivas cargas de trabalho.
Esta página contém instruções para aplicar manualmente um pacote de políticas. Em alternativa, pode aplicar pacotes de políticas diretamente.
Restrições do conjunto de políticas de custo e fiabilidade
Nome da restrição | Descrição da restrição |
---|---|
cost-reliability-v2023-pod-disruption-budget | Requer a configuração de PodDisruptionBudget para implementações, ReplicaSets, StatefulSets e ReplicationControllers. |
cost-reliability-v2023-pod-resources-best-practices | Requer que os contentores definam pedidos de recursos e sigam as práticas recomendadas. |
cost-reliability-v2023-required-labels | Exige que todos os pods e controladores (ReplicaSet, Deployment, StatefulSet e DaemonSet) tenham as etiquetas necessárias: environment, team e app. |
cost-reliability-v2023-restrict-repos | Restringe as imagens de contentores a uma lista de repositórios permitidos para usar o Artifact Registry e tirar partido do streaming de imagens. |
cost-reliability-v2023-spotvm-termination-grace | Requer terminationGracePeriodSeconds de 15 s ou menos para pods e modelos de pods com um nodeSelector ou nodeAfffinty para gke-spot. |
Antes de começar
- Instale e inicialize a CLI Google Cloud, que fornece os comandos
gcloud
ekubectl
usados nestas instruções. Se usar o Cloud Shell, a CLI do Google Cloud é pré-instalada. - Instale o Policy Controller no seu cluster com a biblioteca predefinida de modelos de restrições. Também tem de ativar o suporte para restrições referenciais, uma vez que este pacote contém restrições referenciais.
Configure o Policy Controller para restrições referenciais
Guarde o seguinte manifesto YAML num ficheiro como
policycontroller-config.yaml
. O manifesto configura o Policy Controller para monitorizar tipos específicos de objetos.apiVersion: config.gatekeeper.sh/v1alpha1 kind: Config metadata: name: config namespace: "gatekeeper-system" spec: sync: syncOnly: - group: "" version: "v1" kind: "Service" - group: "policy" version: "v1" kind: "PodDisruptionBudget"
Aplique o manifesto
policycontroller-config.yaml
:kubectl apply -f policycontroller-config.yaml
Configure o cluster e a carga de trabalho
- Qualquer
pod
selecionado por umservice
tem de incluir Readiness Probes. - Todos os
deployment
,replicaset
,statefulset
ereplicationcontroller
têm de incluir umpoddisruptionbudget
. - Todos os contentores devem incluir pedidos
cpu
ememory
, e o limitememory
deve ser igual aos pedidosmemory
, seguindo as práticas recomendadas. - Adicione etiquetas
environment
,team
eapp
a todos os agrupamentos e modelos de agrupamentos. - Alojamento de imagens de contentores através do Artifact Registry na mesma região que o cluster para ativar o streaming de imagens.
Permita o Artifact Registry relevante seguindo o exemplo em
cost-reliability-v2023-restrict-repos
. - Todos os grupos de anúncios e modelos de grupos de anúncios que usem
gke-spot
têm de incluir umterminationGracePeriodSeconds
de 15 segundos ou menos.
Pacote de políticas de fiabilidade e custos de auditoria
O Policy Controller permite-lhe aplicar políticas ao seu cluster do Kubernetes. Para ajudar a testar as suas cargas de trabalho e a respetiva conformidade relativamente às políticas de custo e fiabilidade descritas na tabela anterior, pode implementar estas restrições no modo de "auditoria" para revelar violações e, mais importante, dar-se a oportunidade de as corrigir antes de aplicar no seu cluster do Kubernetes.
Pode aplicar estas políticas com spec.enforcementAction
definido como dryrun
através de
kubectl,
kpt
ou
Config Sync
.
kubectl
(Opcional) Pré-visualize as restrições de políticas com o kubectl:
kubectl kustomize https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/cost-reliability-v2023
Aplique as restrições de políticas com o kubectl:
kubectl apply -k https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/cost-reliability-v2023
O resultado é o seguinte:
gkespotvmterminationgrace.constraints.gatekeeper.sh/cost-reliability-v2023-spotvm-termination-grace created k8sallowedrepos.constraints.gatekeeper.sh/cost-reliability-v2023-restrict-repos created k8spoddisruptionbudget.constraints.gatekeeper.sh/cost-reliability-v2023-pod-disruption-budget created k8spodresourcesbestpractices.constraints.gatekeeper.sh/cost-reliability-v2023-pod-resources-best-practices created k8srequiredlabels.constraints.gatekeeper.sh/cost-reliability-v2023-required-labels created
Confirme se as restrições de políticas foram instaladas e verifique se existem violações no cluster:
kubectl get constraints -l policycontroller.gke.io/bundleName=cost-reliability-v2023
O resultado é semelhante ao seguinte:
NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS gkespotvmterminationgrace.constraints.gatekeeper.sh/cost-reliability-v2023-spotvm-termination-grace dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spodresourcesbestpractices.constraints.gatekeeper.sh/cost-reliability-v2023-pod-resources-best-practices dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spoddisruptionbudget.constraints.gatekeeper.sh/cost-reliability-v2023-pod-disruption-budget dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8sallowedrepos.constraints.gatekeeper.sh/cost-reliability-v2023-restrict-repos dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequiredlabels.constraints.gatekeeper.sh/cost-reliability-v2023-required-labels dryrun 0
kpt
Instale e configure o kpt.
O kpt é usado nestas instruções para personalizar e implementar recursos do Kubernetes.
Transfira o pacote de políticas PCI-DSS v3.2.1 do GitHub através do kpt:
kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/cost-reliability-v2023
Execute a função
set-enforcement-action
kpt para definir a ação de aplicação das políticas comodryrun
:kpt fn eval cost-reliability-v2023 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 \ -- enforcementAction=dryrun
Inicialize o diretório de trabalho com o kpt, que cria um recurso para monitorizar as alterações:
cd cost-reliability-v2023 kpt live init
Aplique as restrições de políticas com o kpt:
kpt live apply
Confirme se as restrições de políticas foram instaladas e verifique se existem violações no cluster:
kpt live status --output table --poll-until current
O estado
CURRENT
confirma a instalação bem-sucedida das restrições.
Config Sync
Instale e configure o kpt.
O kpt é usado nestas instruções para personalizar e implementar recursos do Kubernetes.
Os operadores que usam o Config Sync para implementar políticas nos respetivos clusters podem usar as seguintes instruções:
Altere para o diretório de sincronização do Config Sync:
cd SYNC_ROOT_DIR
Para criar ou acrescentar
.gitignore
comresourcegroup.yaml
:echo resourcegroup.yaml >> .gitignore
Crie um diretório
policies
dedicado:mkdir -p policies
Transfira o pacote de políticas de custo e fiabilidade do GitHub através do kpt:
kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/cost-reliability-v2023 policies/cost-reliability-v2023
Execute a função
set-enforcement-action
kpt para definir a ação de aplicação das políticas comodryrun
:kpt fn eval policies/cost-reliability-v2023 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=dryrun
(Opcional) Pré-visualize as restrições de políticas a serem criadas:
kpt live init policies/cost-reliability-v2023 kpt live apply --dry-run policies/cost-reliability-v2023
Se o diretório de sincronização do Config Sync usar o Kustomize, adicione
policies/cost-reliability-v2023
aokustomization.yaml
raiz. Caso contrário, remova o ficheiropolicies/cost-reliability-v2023/kustomization.yaml
:rm SYNC_ROOT_DIR/policies/cost-reliability-v2023/kustomization.yaml
Envie as alterações para o repositório do Config Sync:
git add SYNC_ROOT_DIR/policies/cost-reliability-v2023 git commit -m 'Adding Cost and Reliability policy audit enforcement' git push
Valide o estado da instalação:
watch gcloud beta container fleet config-management status --project PROJECT_ID
O estado
SYNCED
confirma a instalação das políticas.
Veja as violações de políticas
Depois de instaladas no modo de auditoria, as restrições de políticas no cluster podem ser vistas na IU através do painel de controlo do Policy Controller.
Também pode usar kubectl
para ver violações no cluster através do seguinte comando:
kubectl get constraint -l policycontroller.gke.io/bundleName=cost-reliability-v2023 -o json | jq -cC '.items[]| [.metadata.name,.status.totalViolations]'
Se existirem violações, pode ver uma lista das mensagens de violação por restrição com:
kubectl get constraint -l policycontroller.gke.io/bundleName=cost-reliability-v2023 -o json | jq -C '.items[]| select(.status.totalViolations>0)| [.metadata.name,.status.violations[]?]'
Alterar a ação de aplicação do conjunto de políticas de custo e fiabilidade
Depois de rever as violações de políticas no seu cluster, pode considerar alterar o modo de aplicação para que o controlador de admissão warn
permita
ou até mesmo deny
impeça que o recurso não conforme seja aplicado ao cluster.
kubectl
Use o kubectl para definir a ação de aplicação das políticas como
warn
:kubectl get constraints -l policycontroller.gke.io/bundleName=cost-reliability-v2023 -o name | xargs -I {} kubectl patch {} --type='json' -p='[{"op":"replace","path":"/spec/enforcementAction","value":"warn"}]'
Verifique se a ação de aplicação das restrições de políticas foi atualizada:
kubectl get constraints -l policycontroller.gke.io/bundleName=cost-reliability-v2023
kpt
Execute a função
set-enforcement-action
kpt para definir a ação de aplicação das políticas comowarn
:kpt fn eval -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
Aplique as restrições de políticas:
kpt live apply
Config Sync
Os operadores que usam o Config Sync para implementar políticas nos respetivos clusters podem usar as seguintes instruções:
Altere para o diretório de sincronização do Config Sync:
cd SYNC_ROOT_DIR
Execute a função
set-enforcement-action
kpt para definir a ação de aplicação das políticas comowarn
:kpt fn eval policies/cost-reliability-v2023 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
Envie as alterações para o repositório do Config Sync:
git add SYNC_ROOT_DIR/policies/cost-reliability-v2023 git commit -m 'Adding Cost and Reliability policy bundle warn enforcement' git push
Valide o estado da instalação:
nomos status
O cluster deve apresentar o estado
SYNCED
com as políticas instaladas.
Teste a aplicação de políticas
Crie um recurso não compatível no cluster com o seguinte comando:
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
namespace: default
name: wp-non-compliant
labels:
app: wordpress
spec:
containers:
- image: wordpress
name: wordpress
ports:
- containerPort: 80
hostPort: 80
name: wordpress
EOF
O controlador de admissão deve produzir um aviso que liste as violações de políticas que este recurso viola, conforme mostrado no exemplo seguinte:
Warning: [cost-reliability-v2023-pod-resources-best-practices] Container <wordpress> must set <cpu> request. Warning: [cost-reliability-v2023-pod-resources-best-practices] Container <wordpress> must set <memory> request. Warning: [cost-reliability-v2023-required-labels] This app is missing one or more required labels: `environment`, `team`, and `app`. Warning: [cost-reliability-v2023-restrict-repos] container <wordpress> has an invalid image repo <wordpress>, allowed repos are ["gcr.io/gke-release/", "gcr.io/anthos-baremetal-release/", "gcr.io/config-management-release/", "gcr.io/kubebuilder/", "gcr.io/gkeconnect/", "gke.gcr.io/"] pod/wp-non-compliant created
Remova o pacote de políticas de custo e fiabilidade
Se necessário, o pacote de políticas de custo e fiabilidade pode ser removido do cluster.
kubectl
Use o kubectl para remover as políticas:
kubectl delete constraint -l policycontroller.gke.io/bundleName=cost-reliability-v2023
kpt
Remova as políticas:
kpt live destroy
Config Sync
Os operadores que usam o Config Sync para implementar políticas nos respetivos clusters podem usar as seguintes instruções:
Envie as alterações para o repositório do Config Sync:
git rm -r SYNC_ROOT_DIR/policies/cost-reliability-v2023 git commit -m 'Removing Cost and Reliability policies' git push
Valide o estado:
nomos status
O cluster deve apresentar o estado
SYNCED
com os recursos removidos.