Configurando o Block Storage for Classic
O IBM Cloud Block Storage for Classic é um armazenamento iSCSI persistente e de alto desempenho que pode ser incluído em seus apps usando volumes persistentes (PVs) do Kubernetes. É possível escolher entre camadas de armazenamento predefinidas com tamanhos de GB e IOPS que atendam aos requisitos de suas cargas de trabalho. Para saber se o site IBM Cloud Block Storage for Classic é a opção de armazenamento correta para você, consulte Escolha de uma solução de armazenamento.
Tenha em mente os requisitos a seguir ao usar o plug-in do IBM Cloud Block Storage for Classic.
O plug-in do IBM Cloud Block Storage for Classic está disponível apenas para clusters padrão do IBM Cloud Kubernetes Service provisionados na infraestrutura clássica. Se você tiver um cluster de VPC, consulte Configurando o Block Storage for Classic.
Se o cluster não puder acessar a rede pública, como um cluster privado atrás de um firewall ou um cluster apenas com o terminal em serviço de nuvem privada ativado, certifique-se de ter instalado o plug-in IBM Cloud Block Storage for Classic versão 1.3.0 ou mais recente para se conectar à instância do Block Storage for Classic na rede privada.
As instâncias de Block Storage for Classic são específicas de uma região de campus único com várias zonas. Se você tiver um cluster de múltiplas zonas, considere as opções de armazenamento persistente multizona.
Infraestrutura clássica
As etapas desta página aplicam-se apenas aos clusters clássicos. Nos clusters VPC, o complemento de cluster “ Block Storage for VPC ” é instalado por padrão. Para obter mais informações, consulte Configurando Block Storage for VPC.
Iniciação rápida para IBM Cloud Block Storage for Classic
Neste guia de início rápido, você criará um volume do tipo “ Block Storage for Classic ” do nível Silver do 24Gi em seu cluster, criando um PVC para provisionar dinamicamente o volume. Em seguida, você cria uma implementação de app que monta o seu PVC.
Primeira vez usando o Block Storage for Classic em seu cluster? Volte aqui depois que você tiver instalado o plug-in do Block Storage for Classic.
-
Salve a configuração de reclamação de volume persistente (PVC) a seguir em um arquivo chamado
pvc.yaml.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: block-storage-pvc labels: billingType: "hourly" region: us-east zone: wdc07 spec: accessModes: - ReadWriteOnce resources: requests: storage: 45Gi storageClassName: ibmc-block-silver -
Aplique a configuração no cluster para criar a PVC.
kubectl apply -f pvc.yaml -
Aguarde até que a PVC esteja no status
Bound. É possível verificar o status executando o comando a seguir.kubectl get pvc -
Após a PVC ser
Bound, crie uma implementação de app que use a PVC. Salve a configuração de implementação a seguir em um arquivo chamadodeployment.yaml.apiVersion: apps/v1 kind: Deployment metadata: name: my-deployment labels: app: my-app spec: selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - image: nginx # Use the nginx image, or your own containerized app image. name: my-container command: ["/bin/sh"] args: ["-c", "while true; do date \"+%Y-%m-%d %H:%M:%S\"; sleep 3600; done"] # This app prints the timestamp, then sleeps. workingDir: /home imagePullPolicy: Always ports: - containerPort: 80 volumeMounts: - name: my-volume mountPath: /mount-path volumes: - name: my-volume persistentVolumeClaim: claimName: block-storage-pvc -
Crie a implementação em seu cluster.
kubectl apply -f deployment.yaml -
Aguarde até que a implementação seja
Ready. Verifique o status da implementação executando o seguinte comando.kubectl get deploymentsSaída de exemplo
NAME READY UP-TO-DATE AVAILABLE AGE my-deployment 1/1 1 1 3m19s -
Liste os pods e verifique se o pod
my-deploymentestá em execução.kubectl get podsSaída de exemplo
NAME READY STATUS RESTARTS AGE my-deployment-ccdf87dfb-vzn95 1/1 Running 0 5m27s -
Obtenha os logs de pods para verificar se o registro de data e hora está gravado.
kubectl logsSaída de exemplo
2022-01-21 14:18:59
Você criou com sucesso uma implementação que usa Block Storage for Classic! Para obter mais informações, veja os links a seguir.
Instalando o IBM Cloud Block Storage for Classic plug-in em seu cluster
Instale o plug-in do IBM Cloud Block Storage for Classic com um gráfico Helm para configurar classes de armazenamento predefinidas para o Block Storage for Classic. É possível usar essas classes de armazenamento para criar um PVC para provisionar o Block Storage for Classic para seus apps.
Os clusters clássicos que executam o IBM Cloud Kubernetes Service versão 1.24 ou mais recente não precisam instalar o plug-in do IBM Cloud Block Storage for Classic. O driver e o plug-in são instalados nesses clusters por padrão.
Antes de iniciar: efetue login na sua conta. If applicable, target the appropriate resource group. Configure o contexto para o seu cluster.
-
Certifique-se de que o nó do trabalhador aplique a correção mais recente para sua versão secundária para executar seu nó do trabalhador com as configurações de segurança mais recentes. A versão de correção também assegura que a senha raiz no nó do trabalhador seja renovada.
Se você não aplicou atualizações ou recarregou seu nó do trabalhador dentro dos últimos 90 dias, sua senha raiz no nó do trabalhador expirará e a instalação do plug-in de armazenamento poderá falhar.
- Liste a versão de correção atual de seus nós do trabalhador.
ibmcloud ks worker ls --cluster CLUSTER_NAME_OR_ID ``` Saída de exemplo ```sh {: screen} OK ID Public IP Private IP Machine Type State Status Zone Version kube-dal10-crb1a23b456789ac1b20b2nc1e12b345ab-w26 169.xx.xxx.xxx 10.xxx.xx.xxx b3c.4x16.encrypted normal Ready dal10 1.35_1523* ``` Se o nó do trabalhador não aplicar a versão de correção mais recente, você verá um asterisco (`*`) na coluna **Versão** da saída da CLI. 2. Revise as [informações de versão doKubernetes](/docs/containers?topic=containers-cs_versions) para localizar as mudanças mais recentes 3. Aplique a versão de correção mais recente recarregando seu nó do trabalhador. Siga as instruções do [comando `ibmcloud ks worker reload](/docs/containers?topic=containers-kubernetes-service-cli#worker-reload-cli) ` para reprogramar com segurança quaisquer pods em execução no seu nó de trabalho antes de reinicializá-lo. Observe que durante o recarregamento, a máquina do nó do trabalhador será atualizada com a imagem mais recente e os dados serão excluídos se não forem [armazenados fora do nó do trabalhador](/docs/containers?topic=containers-storage-plan). -
Siga as instruções para instalar o cliente do Helm versão 3 em sua máquina local.
-
Inclua o repositório de gráfico do Helm do IBM Cloud no cluster no qual você deseja usar o plug-in do IBM Cloud Block Storage for Classic.
Se você tiver ativado o VRF e os terminais em serviço em sua conta do IBM Cloud, será possível usar o repositório do Helm do IBM Cloud privado para manter o seu tráfego de extração de imagem na rede privada. Se não for possível ativar terminais de VRF ou serviço na conta, use o domínio de registro público:
helm repo add iks-charts https://icr.io/helm/iks-charts.helm repo add iks-charts https://icr.io/helm/iks-charts -
Atualize o repositório Helm para recuperar a versão mais recente de todos os gráficos Helm nesse repositório.
helm repo update -
Instale o plug-in IBM Cloud Block Storage for Classic e dê um nome à sua instalação, por exemplo:
block-storage-plugin. Quando você instala o plug-in, classes de armazenamento de bloco predefinidas são incluídas no cluster.helm install <name> iks-charts/ibmcloud-block-storage-plugin -n <namespace>Saída de exemplo
NAME: <name> LAST DEPLOYED: Wed Apr 18 10:02:55 2018 NAMESPACE: default STATUS: DEPLOYED RESOURCES: ==> v1beta1/DaemonSet NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE ibmcloud-block-storage-driver 0 0 0 0 0 <none> 0s ==> v1beta1/Deployment NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE ibmcloud-block-storage-plugin 1 0 0 0 0s ==> v1/StorageClass NAME PROVISIONER AGE ibmc-block-bronze ibm.io/ibmc-block 0s ibmc-block-custom ibm.io/ibmc-block 0s ibmc-block-gold ibm.io/ibmc-block 0s ibmc-block-retain-bronze ibm.io/ibmc-block 0s ibmc-block-retain-custom ibm.io/ibmc-block 0s ibmc-block-retain-gold ibm.io/ibmc-block 0s ibmc-block-retain-silver ibm.io/ibmc-block 0s ibmc-block-silver ibm.io/ibmc-block 0s ==> v1/ServiceAccount NAME SECRETS AGE ibmcloud-block-storage-plugin 1 0s ==> v1beta1/ClusterRole NAME AGE ibmcloud-block-storage-plugin 0s ==> v1beta1/ClusterRoleBinding NAME AGE ibmcloud-block-storage-plugin 0s NOTES: Thank you for installing: ibmcloud-block-storage-plugin. Your release is named: <name> -
Verifique a instalação.
kubectl get pod -n <namespace> | grep blockSaída de exemplo
ibmcloud-block-storage-driver-kh4mt 1/1 Running 0 27d 10.118.98.19 10.118.98.19 ibmcloud-block-storage-plugin-58c5f9dc86-pbl4t 1/1 Running 0 14d 172.21.0.204 10.118.98.19A instalação é bem-sucedida quando você vê um pod
ibmcloud-block-storage-plugine um ou mais podsibmcloud-block-storage-driver. O número de podsibmcloud-block-storage-driveré igual ao número de nós do trabalhador em seu cluster. Todos os pods devem estar em um estado Executando. -
Verifique se as classes de armazenamento para Block Storage for Classic foram incluídas no cluster.
kubectl get sc | grep blockSaída de exemplo
ibmc-block-bronze ibm.io/ibmc-block Delete Immediate true 148m ibmc-block-custom ibm.io/ibmc-block Delete Immediate true 148m ibmc-block-gold ibm.io/ibmc-block Delete Immediate true 148m ibmc-block-retain-bronze ibm.io/ibmc-block Retain Immediate true 148m ibmc-block-retain-custom ibm.io/ibmc-block Retain Immediate true 148m ibmc-block-retain-gold ibm.io/ibmc-block Retain Immediate true 148m ibmc-block-retain-silver ibm.io/ibmc-block Retain Immediate true 148m ibmc-block-silver ibm.io/ibmc-block Delete Immediate true 148m -
Repita essas etapas para cada cluster no qual você deseja provisionar armazenamento de bloco.
Agora é possível continuar a criar um PVC para provisionar armazenamento de bloco para seu app.
Atualizando o plug-in do IBM Cloud Block Storage
É possível fazer upgrade do plug-in existente do IBM Cloud Block Storage para a versão mais recente.
Antes de iniciar: efetue login na sua conta. If applicable, target the appropriate resource group. Configure o contexto para o seu cluster.
-
Atualize o repositório Helm para recuperar a versão mais recente de todos os gráficos Helm nesse repositório.
helm repo update -
Opcional: faça download do gráfico Helm mais recente em sua máquina local. Em seguida, extraia o pacote e revise o arquivo
release.mdpara localizar as informações de liberação mais recentes.helm pull iks-charts/ibmcloud-block-storage-plugin --untar -
Encontre o nome de liberação e o namespace do gráfico do Helm de armazenamento de blocos que você instalou em seu cluster.
helm ls -ASaída de exemplo
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION block-plugin default 1 2022-01-21 09:02:46.11622 -0500 EST deployed bmcloud-block-storage-plugin-v2.1.5 -
Faça upgrade do plug-in do IBM Cloud Block Storage para a versão mais recente. Inclua o nome da liberação e o namespace que você recuperou anteriormente.
helm upgrade RELEASE-NAME iks-charts/ibmcloud-block-storage-plugin -n NAMESPACE -
Opcional: quando você atualiza o plug-in, a classe de armazenamento
defaultestá desconfigurada. Para configurar a classe de armazenamento padrão para uma classe de armazenamento de sua escolha, execute o comando a seguir.kubectl patch storageclass STORAGECLASS -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
Removendo o plug-in do IBM Cloud Block Storage
Se não quiser provisionar e usar o IBM Cloud Block Storage no cluster, será possível desinstalar o gráfico Helm.
A remoção do plug-in não remove os PVCs, PVs ou dados existentes. Quando você remove o plug-in, todos os pods e conjuntos de daemon relacionados são removidos do cluster. Não é possível provisionar um novo armazenamento de bloco para o cluster ou usar PVCs e PVs de armazenamento de blocos existentes após remover o plug-in.
Antes de Iniciar:
- Efetue login na sua conta. If applicable, target the appropriate resource group. Configure o contexto para o seu cluster.
- Certifique-se de que não haja PVCs ou PVs no cluster utilizando armazenamento de bloco.
Para remover o plug-in:
-
Encontre o nome do release e o namespace do gráfico de armazenamento de blocos que você instalou em seu cluster.
helm ls -ASaída de exemplo
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION block-plugin default 1 2022-01-21 09:02:46.11622 -0500 EST deployed ibmcloud-block-storage-plugin-v2.1.5 -
Exclua o plug-in do IBM Cloud Block Storage.
helm uninstall NAME -n kube-system -
Verifique se os pods de armazenamento de bloco foram removidos.
kubectl get pods -n kube-system | grep blockA remoção dos pods será bem-sucedida se nenhum pod for exibido na saída da CLI.
-
Verifique se as classes de armazenamento de bloco foram removidas. A remoção das classes de armazenamento será bem-sucedida se nenhuma classe de armazenamento for exibida na saída da CLI.
kubectl get sc | grep block
Decidindo sobre a configuração de armazenamento de bloco
O IBM Cloud Kubernetes Service fornece classes de armazenamento predefinidas para armazenamento de bloco que podem ser usadas para provisionar armazenamento de bloco com uma configuração específica.
Cada classe de armazenamento especifica o tipo de armazenamento de bloco que você provisiona, incluindo o tamanho disponível, o IOPS, o sistema de arquivos e a política de retenção.
Certifique-se de escolher a configuração de armazenamento com cuidado para ter capacidade suficiente para armazenar seus dados. Depois de provisionar um tipo específico de armazenamento usando uma classe de armazenamento, você não poderá mudar a política de tipo ou retenção para o dispositivo de armazenamento. No entanto, é possível mudar o tamanho e o IOPS se você desejar aumentar a capacidade de armazenamento e o desempenho. Para alterar o tipo e a política de retenção do seu armazenamento, é necessário criar uma nova instância de armazenamento e copiar os dados da instância antiga para a nova.
-
Liste as classes de armazenamento disponíveis no IBM Cloud® Kubernetes Service.
kubectl get sc | grep blockSaída de exemplo
ibmc-block-bronze ibm.io/ibmc-block Delete Immediate true 148m ibmc-block-custom ibm.io/ibmc-block Delete Immediate true 148m ibmc-block-gold ibm.io/ibmc-block Delete Immediate true 148m ibmc-block-retain-bronze ibm.io/ibmc-block Retain Immediate true 148m ibmc-block-retain-custom ibm.io/ibmc-block Retain Immediate true 148m ibmc-block-retain-gold ibm.io/ibmc-block Retain Immediate true 148m ibmc-block-retain-silver ibm.io/ibmc-block Retain Immediate true 148m ibmc-block-silver ibm.io/ibmc-block Delete Immediate true 148m -
Revise a configuração de uma classe de armazenamento.
kubectl describe storageclass STORAGECLASSPara obter mais informações sobre cada classe de armazenamento, consulte a referência de classe de armazenamento. Se não localizar o que está procurando, considere criar sua própria classe de armazenamento customizada. Para iniciar, consulte as amostras de classe de armazenamento customizadas.
-
Escolha o tipo de armazenamento de bloco que você deseja provisionar.
- Classes de armazenamento bronze, prata e ouro: essas classes de armazenamento provisionam o armazenamento do Endurance. Com o armazenamento Endurance, é possível escolher o tamanho do armazenamento em gigabytes em camadas de IOPS predefinidas.
- Classe de armazenamento customizada: essa classe de armazenamento provisiona o armazenamento do Desempenho. Com o armazenamento de desempenho, você tem mais controle sobre o tamanho do armazenamento e do IOPS.
-
Escolha o tamanho e o IOPS para seu armazenamento de bloco. O tamanho e o número de IOPS definem o número total de IOPS (operações de entrada/saída por segundo) que serve como um indicador de quão rápido o seu armazenamento é. Quanto mais total de IOPS o seu armazenamento tiver, mais rápido ele processará operações de leitura e gravação.
- Classes de armazenamento bronze, prata e ouro: essas classes de armazenamento vêm com um número fixo de IOPS por gigabyte e são provisionadas em discos rígidos SSD. O número total de IOPS depende do tamanho do armazenamento que você escolher. É possível selecionar qualquer número inteiro de gigabyte dentro do intervalo de tamanho permitido, como 20 Gi, 256 Gi ou 11854 Gi. Para determinar o número total de IOPS, deve-se multiplicar o IOPS com o tamanho selecionado. Por exemplo, se você selecionar um tamanho de armazenamento de bloco de 1000Gi na classe de armazenamento prata que é fornecida com 4 IOPS por GB, seu armazenamento terá um total de 4.000 IOPS.
Tabela de intervalos de tamanho de classe de armazenamento e IOPS por gigabyte Classe de armazenamento IOPS por gigabyte Intervalo de tamanho em gigabytes Bronze 2 IOPS/GB 20-12.000 Gi Prata 4 IOPS/GB 20-12.000 Gi Ouro 10 IOPS/GB 20-4000 Gi - Classe de armazenamento customizada: quando você escolhe essa classe de armazenamento, tem mais controle sobre o tamanho e o IOPS desejados. Para o tamanho, é possível selecionar qualquer número inteiro de gigabytes dentro do intervalo de tamanho permitido. O tamanho que você escolher determinará o intervalo de IOPS que estará disponível para você. É possível escolher um IOPS que seja um múltiplo de 100 dentro do intervalo especificado. O IOPS que você escolhe é estático e não escala com o tamanho do armazenamento. Por exemplo, se você escolher 40 Gi com 100 IOPS, o seu IOPS total permanecerá 100. A razão de IOPS para gigabytes também determina o tipo de disco rígido provisionado para você. Por exemplo, se estiver usando 500Gi a 100 IOPS, sua proporção de IOPS para gigabyte será de 0,2. O armazenamento com uma razão menor ou igual a 0,3 é provisionado em discos rígidos SATA. Se a sua razão for maior que 0,3, o armazenamento será provisionado em discos rígidos SSD.
Table class size ranges and IOPS Intervalo de tamanho em gigabytes Intervalo de IOPS em diversos de 100 20-39 Gi 100-1000 IOPS 40-79 Gi 100-2000 IOPS 80-99 Gi 100-4000 IOPS 100-499 Gi 100-6000 IOPS 500-999 Gi 100-10000 IOPS 1000-1999 Gi 100-20000 IOPS 2000-2999 Gi 200-40000 IOPS 3000-3999 Gi 200-48000 IOPS 4000-7999 Gi 300-48000 IOPS 8000-9999 Gi 500-48000 IOPS 10000-12000 Gi 1000-48000 IOPS -
Escolha se você deseja manter os seus dados após o cluster ou a solicitação de volume persistente (PVC) ser excluída.
- Para manter seus dados, escolha uma classe de armazenamento
retain. Quando você exclui o PVC, somente ele é excluído. O PV, o dispositivo de armazenamento físico em sua conta de infraestrutura da IBM Cloud e seus dados ainda existem. Para recuperar o armazenamento e usá-lo em seu cluster novamente, deve-se remover o PV e seguir as etapas para usar armazenamento de bloco existente. - Se desejar que o PV, os dados e seu dispositivo de armazenamento de bloco físico sejam excluídos quando você excluir o PVC, escolha uma classe de armazenamento sem
retain.
- Para manter seus dados, escolha uma classe de armazenamento
-
Escolha se você deseja ser faturado por hora ou mensalmente. A configuração padrão é faturamento por hora.
Configurando a criptografia para o Block Storage for Classic
É possível configurar a criptografia para o Block Storage for Classic usando o IBM Key Protect.
O exemplo a seguir explica como criar um ID de serviço com as funções de acesso necessárias para o Key Protect e seu cluster. As credenciais desse ID de serviço são usadas para ativar a criptografia para seus volumes do Block Storage for Classic.
É possível ativar a criptografia criando um segredo do Kubernetes que usa a sua chave de API pessoal, desde que você tenha a função de acesso ao serviço Leitor para sua instância do Key Protect, assim como a função de acesso à plataforma Visualizador e a função de acesso ao serviço Gravador para o seu cluster.
-
Certifique-se de que você esteja designado para a função de acesso à plataforma Editor e para a função de acesso ao serviço Gravador para o Key Protect para que seja possível criar sua própria chave raiz a ser usada para criptografar sua instância do Block Storage for Classic. É possível revisar suas funções de acesso do IAM no Console do IAM. Para obter mais informações sobre as funções do IAM, consulte Acesso do IAM.
-
Se você não tiver uma instância do Key Protect, forneça uma.
-
Crie uma chave raiz. Por padrão, a chave raiz é criada sem uma data de expiração.
-
Crie um ID de serviço do IAM. Substitua
<service_ID_name>pelo nome que deseja designar ao ID de serviço. Esse ID de serviço é usado para acessar a sua instância do Key Protect por meio de seu volume do Block Storage for Classic.ibmcloud iam service-id-create <service_ID_name>Saída de exemplo
OK Service ID test-id is created successfully ID ServiceId-a1a11111-bb11-1111-a11b-1111111a11ba Name test-id Description CRN crn:v1:bluemix:public:iam-identity::a/1a1111aa2b11111aaa1a1111aa2aa111::serviceid:ServiceId-a1a11111-bb11-1111-a11b-1111111a11bb Version 1-bb11aa11a0aa1a11a011a1aaaa11a1bb Locked false -
Crie uma chave de API para seu ID de serviço. Substitua
<api-key-name>por um nome para a chave de API e substitua<service_ID_name>pelo nome do ID de serviço que você criou. Certifique-se de salvar a chave de API já que ela não pode ser recuperada posteriormente. Essa chave de API é armazenada em um segredo do Kubernetes em seu cluster em uma etapa posterior.ibmcloud iam service-api-key-create <api_key_name> <service_ID_name> -
Recupere uma lista de serviços ativados pelo IAM em sua conta e anote o nome da instância do Key Protect que você criou.
ibmcloud resource service-instances -
Recupere o GUID de sua instância do Key Protect. O ID é usado para criar uma política de serviço do IAM para o seu ID de serviço.
ibmcloud resource service-instance "<instance_name>" | grep GUID -
Crie uma política de serviço do IAM para conceder seu acesso de ID de serviço à sua instância do Key Protect. O comando a seguir concede ao seu ID de serviço acesso
Readerpara a sua instância do Key Protect. A função de acesso Leitor é a função de acesso ao serviço mínima que seu ID de serviço deve ter para recuperar as chaves do Key Protect. Para obter mais informações, consulte Gerenciando o acesso do usuário para o Key Protect.ibmcloud iam service-policy-create <service_ID_name> --roles Reader --service-name kms --service-instance <service_instance_GUID> -
Crie outra política de acesso ao serviço do IAM para dar ao seu ID de serviço acesse ao seu cluster. O comando a seguir concede a função de acesso à plataforma Visualizador e a função de acesso ao serviço Gravador ao seu ID de serviço para o seu cluster. É possível recuperar o ID de cluster executando
ibmcloud ks cluster get <cluster_name>.ibmcloud iam service-policy-create <service_ID_name> --roles Writer,Viewer --service-name containers-kubernetes --service-instance <cluster_ID> -
Se você já tiver o gráfico do Helm
ibmcloud-block-storage-plugininstalado, ele deverá ser removido e uma nova versão deverá ser instalada.Se você tiver instalado o plug-in sem usar o Helm, a implementação do plug-in de armazenamento de bloco e todos os recursos associados deverão ser removidos manualmente antes da instalação de uma nova versão.
helm uninstall <name> <namespace> -
Instale o gráfico do Helm
ibmcloud-block-storage-plugin.helm install <name> iks-charts/ibmcloud-block-storage-plugin -
Crie um namespace
ibm-block-secrets.kubectl create ns ibm-block-secrets -
Crie uma ligação de função no namespace
ibm-block-secretspara o plug-in de armazenamento de bloco.kubectl create rolebinding ibmcloud-block-storage-plugin-byok --clusterrole=ibmcloud-block-storage-plugin-byok --serviceaccount=kube-system:ibmcloud-block-storage-plugin --group system:nodes --namespace=ibm-block-secrets -
Crie um segredo de Kubernetes chamado
secret.yamle que inclua as credenciais para acessar a chave raiz na instância de serviço Key Protect.- Crie um arquivo de configuração para o segredo.
apiVersion: v1 kind: Secret metadata: labels: kmsConfig: kpc-secretLabel name: <secret_name> # Enter a name for your secret. Example: my_secret namespace: <namespace> # Enter the name of the namespace where you want to create the secret. The secret must be in same namespace where your app is deployed. Example: default stringData: config: |- { "api_key":"<service_id_api_key>", # Enter the API key for the service ID that you created. Example: "AA1aAAaA1a21AAaA1aAAaAa-AA-1AAaaA1aA1aAaaaAA" "iam_endpoint":"https://iam.cloud.ibm.com", "key_protect_endpoint":"https://<region>.kms.cloud.ibm.com", # Example: "https://us-east.kms.cloud.ibm.com" "root_key_crn":"<rook_key_crn>", # Example: "crn:v1:bluemix:public:kms:<region>:a/1ab011ab2b11111aaa1a1111aa1aa111:11aa111a-1111-11a1-a111-a11a111aa111:key:11a11111-1a1a-111a-111a-11111a1a1aa1", "version":"" } type: ibm.io/kms-config ``` `stringData.config.key_protect_endpoint` : Insira o terminal regional de sua instância do Key Protect. Para obter uma lista de terminais do Key Protect, consulte [Regiões e terminais](/docs/key-protect?topic=key-protect-regions). `stringData.config.root_key_crn` : Insira o CRN da chave raiz que você criou. Para recuperar seu CRN de chave-raiz, conclua as etapas a seguir. 1. Navegue até a lista de recursos no [Console da IBM Cloud](https://cloud.ibm.com/resources){: external}. 2. Clique em **Serviços**, em seguida, clique em sua instância do Key Protect. 3. Localize a sua chave raiz no **Menu Ações**, em seguida, clique em **Visualizar CRN**. 4. Clique no botão **Copiar** para copiar o CRN. 1. Crie o segredo em seu cluster. ```sh {: pre} kubectl apply -f secret.yaml ``` 1. Verifique se o seu segredo foi criado. ```sh {: pre} kubectl get secrets ``` -
Escolha entre as opções a seguir para criar uma instância do Block Storage for Classic que criptografe os dados com sua chave raiz.
Criptografia de dados de volume usando sua própria classe de armazenamento
É possível implantar aplicativos que utilizam volumes criptografados criando, primeiro, sua própria classe de armazenamento.
As etapas a seguir explicam como criar uma classe de armazenamento customizado e criptografado que pode ser usada para criar diversas instâncias de armazenamento de bloco criptografado com a mesma configuração. Se você desejar criar um PVC criptografado usando uma das classes de armazenamento fornecidas pela IBM, será possível fazer isso referenciando as credenciais do Key Protect diretamente em seu PVC.
-
Crie sua própria classe de armazenamento que provisiona uma instância de armazenamento em bloco criptografada, utilizando como base uma das classes de armazenamento fornecidas pelo IBM. É possível recuperar os detalhes uma classe de armazenamento executando
kubectl get sc <storageclass_name> -o yaml. O exemplo a seguir é baseado na classe de armazenamentoibmc-block-retain-bronze.apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: <name> # Enter the name of the storage class. Example: my_custom_storageclass parameters: billingType: hourly classVersion: "2" fsType: ext4 iopsPerGB: "2" sizeRange: '[20-12000]Gi' type: Endurance encrypted: "true" # Enter "true" to enable encryption. encryptionKeySecret: <secret_name> # # #nter the name of the secret that you created earlier.Example: my_secret encryptionKeyNamespace: <namespace> # # #nter the namespace where you created your secret. Example: default provisioner: ibm.io/ibmc-block reclaimPolicy: Delete volumeBindingMode: Immediate -
Crie a classe de armazenamento em seu cluster.
kubectl apply -f storageclass.yaml -
Verifique a criptografia de seus volumes do Block Storage for Classic.
Crie um PVC que referencie seu segredo do Block Storage for Classic
É possível provisionar o Block Storage for Classic criptografado criando um PVC que especifique o segredo do Kubernetes que retém suas credenciais do Key Protect.
As etapas a seguir mostram como é possível referenciar suas credenciais do Key Protect em seu PVC para criar uma instância do Block Storage for Classic criptografada. Para criar diversos volumes criptografados sem especificar as credenciais do Key Protect em cada PVC, é possível criar uma classe de armazenamento customizado e criptografado.
-
Revise as classes de armazenamento do Block Storage for Classic fornecidas para determinar qual classe de armazenamento melhor atende aos seus requisitos de app. Se as classes de armazenamento fornecidas não atenderem aos seus requisitos de app, será possível criar sua própria classe de armazenamento customizada.
-
Crie um arquivo de configuração do PVC denominado
pvc.yamle que referencie o segredo do Kubernetes no qual você armazenou as credenciais de serviço do Key Protect. Para criar esse segredo, consulte Configurando a criptografia para o Block Storage for Classic.kind: PersistentVolumeClaim apiVersion: v1 metadata: name: <pvc_name> # Enter a name for your PVC. annotations: volume.beta.kubernetes.io/storage-class: "<storage_class>" # Enter a storage class. To see a list of storageclasses run `kubectl get storageclasses`. labels: encrypted: "true" encryptionKeyNamespace: <namespace> # Enter the namespace where your secret was created. encryptionKeySecret: <secret_name> # Enter the name of the secret you created. spec: accessModes: - ReadWriteOnce resources: requests: storage: 20Gi -
Crie o PVC em seu cluster.
kubectl apply -f pvc.yaml -
Verifique o status de seu PVC.
kubectl get pvc -
Aguarde até que seu PVC seja ligado, em seguida, crie uma implementação que use o seu PVC.
-
Verifique a criptografia de seus volumes do Block Storage for Classic.
Verificando a criptografia de seus volumes do Block Storage for Classic
É possível verificar a criptografia de seus volumes verificando o caminho de montagem do volume.
-
Efetue login em seu pod de app. Substitua
<pod_name>pelo nome do pod que monta o seu volume criptografado do Block Storage for Classic.kubectl exec <pod_name> -it bash -
Liste o sistema de arquivos de seu pod.
df -h -
Revise o caminho do sistema de arquivos para o seu volume criptografado do Block Storage for Classic.
- Os volumes criptografados possuem uma estrutura de caminho de
/dev/mapper/<pvc-ID_encrypted>. Neste exemplo, o volume criptografado é montado no caminho do arquivo/testno pod.
Filesystem Size Used Avail Use% Mounted on overlay 98G 8.2G 85G 9% / tmpfs 64M 0 64M 0% /dev tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup /dev/mapper/pvc-a011a111-1111-1111-111a-aaa1a1111a11_encrypted 20G 45M 20G 1% /test ``` * Os volumes não criptografados têm uma estrutura de caminho de `dev/mapper/<random_string>`. ```sh {: screen} Filesystem Size Used Avail Use% Mounted on overlay 98G 16G 78G 17% / tmpfs 64M 0 64M 0% /dev tmpfs 7.9G 0 7.9G 0% /sys/fs/cgroup /dev/mapper/3600a09803830476e733f4e477370716e 24G 45M 24G 1% /test ``` - Os volumes criptografados possuem uma estrutura de caminho de
Remover o segredo do Kubernetes não revoga o acesso aos dados do volume. Se você tiver criado uma implementação somente de pod, o pod deverá ser excluído. Se você tiver criado uma implementação, ela deverá ser excluída.
Incluindo armazenamento de bloco em apps
Crie uma reivindicação de volume persistente (PVC) para provisionar dinamicamente armazenamento em bloco para o seu cluster. O provisionamento dinâmico cria automaticamente o volume persistente correspondente (PV) e pede o dispositivo de armazenamento real em sua conta de infraestrutura da IBM Cloud.
O armazenamento de bloco é fornecido com um modo de acesso ReadWriteOnce. Só é possível montá-lo em um pod em um nó do trabalhador no cluster de cada vez.
Antes de Iniciar:
- Se você tiver um firewall, permita acesso de saída para os intervalos de IP da infraestrutura do IBM Cloud das zonas em que seus clusters estão para que seja possível criar PVCs.
- Instale o plug-in de armazenamento de bloco do IBM Cloud.
- Decida sobre uma classe de armazenamento predefinida ou crie uma classe de armazenamento customizada.
Procurando implementar armazenamento de bloco em um conjunto stateful? Para obter mais informações, consulte Usando armazenamento de bloco em um conjunto stateful.
Para incluir o armazenamento de bloco:
-
Crie um arquivo de configuração para definir a sua solicitação de volume persistente (PVC) e salve a configuração como um arquivo
.yaml.- Exemplo para as classes de armazenamento bronze, prata e ouro: O arquivo
.yamla seguir cria uma reclamação denominadablock-storage-pvcda classe de armazenamento"ibmc-block-silver", faturada por hora, com um tamanho gigabyte de24Gi.
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: block-storage-pvc labels: billingType: "hourly" region: us-south zone: dal13 spec: accessModes: - ReadWriteOnce resources: requests: storage: 24Gi storageClassName: ibmc-block-silver ``` - **Exemplo para usar sua própria classe de armazenamento**: O arquivo `.yaml` a seguir cria uma reclamação denominada `block-storage-pvc` da classe de armazenamento `ibmc-block-retain-custom`, faturada por hora, com um tamanho gigabyte de `45Gi` e IOPS de `"300"`. ```yaml {: codeblock} apiVersion: v1 kind: PersistentVolumeClaim metadata: name: block-storage-pvc labels: billingType: "hourly" region: us-south zone: dal13 spec: accessModes: - ReadWriteOnce resources: requests: storage: 45Gi iops: "300" storageClassName: ibmc-block-retain-custom ``` `name` : Insira o nome do PVC. `billingType` : Na seção de rótulos de metadados, especifique a frequência para a qual sua conta de armazenamento é calculada, "mensal" ou "horária". O padrão é "horária". `region` : Na seção de rótulos de metadados, especifique a região na qual você deseja provisionar seu armazenamento de blocos. Se você especifica a região, deve-se também especificar uma zona. Se você não especificar uma região, ou se a região especificada não for localizada, o armazenamento será criado na mesma região do cluster. Essa opção é suportada somente com o plug-in do IBM Cloud Block Storage versão 1.0.1 ou superior. Para versões de plug-in mais antigas, se você tiver um cluster de diversas zonas, a zona na qual o seu armazenamento for provisionado será selecionada em uma base round-robin para balancear as solicitações de volume uniformemente em todas as zonas. Para especificar a zona para seu armazenamento, é possível criar uma [classe de armazenamento customizada](#block_multizone_yaml) primeiro. Em seguida, crie um PVC com a sua classe de armazenamento customizada. `zone` : Na seção de rótulos de metadados, especifique a zona na qual você deseja provisionar o seu armazenamento de blocos. Se você especifica a zona, deve-se também especificar uma região. Se você não especificar uma zona ou se a zona especificada não for localizada em um cluster multizona, a zona será selecionada em uma base round-robin. Essa opção é suportada somente com o plug-in do IBM Cloud Block Storage versão 1.0.1 ou superior. Para versões de plug-in mais antigas, se você tiver um cluster de diversas zonas, a zona na qual o seu armazenamento for provisionado será selecionada em uma base round-robin para balancear as solicitações de volume uniformemente em todas as zonas. Para especificar a zona para seu armazenamento, é possível criar uma [classe de armazenamento customizada](#block_multizone_yaml) primeiro. Em seguida, crie um PVC com a sua classe de armazenamento customizada. `storage` : Na seção de solicitações de recursos spec, digite o tamanho do armazenamento de blocos, em gigabytes (Gi). Depois que o armazenamento for provisionado, você não poderá mudar o tamanho do armazenamento de blocos. Certifique-se de especificar um tamanho que corresponda à quantia de dados que você deseja armazenar. `iops` : Essa opção está disponível apenas para suas próprias classes de armazenamento personalizadas (`ibmc-block-custom / ibmc-block-retain-custom`). Na seção “Solicitações de recursos” da especificação, especifique o total de IOPS para o armazenamento, selecionando um múltiplo de 100 dentro do intervalo permitido. Se você escolher um IOPS diferente de um que esteja listado, o IOPS será arredondado para cima. `storageClassName` : Na seção especificação, digite o nome da classe de armazenamento que você deseja usar para provisionar o armazenamento de blocos. É possível optar por usar uma das [classes de armazenamento fornecidas pela IBM](#block_storageclass_reference) ou [criar sua própria classe de armazenamento](#block_custom_storageclass). Se você não especificar uma classe de armazenamento, o PV será criado com a classe de armazenamento padrão `ibmc-file-bronze`. Para usar uma classe de armazenamento customizada, crie seu PVC com o nome da classe de armazenamento correspondente, um IOPS válido e o tamanho. {: tip} - Exemplo para as classes de armazenamento bronze, prata e ouro: O arquivo
-
Crie o PVC.
kubectl apply -f block-storage.yaml -
Verifique se o PVC foi criado e ligado ao PV. Esse processo pode levar alguns minutos.
kubectl get pvcSaída de exemplo
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE block-storage-pvc Bound pvc-1aa1aaaa-11a1-48d1-ab11-11b11111f3bc 45Gi RWO ibmc-block-silver 150m -
Para montar o PV para a implementação, crie um arquivo
.yamlde configuração e especifique a PVC que é ligada ao PV.apiVersion: apps/v1 kind: Deployment metadata: name: <deployment_name> labels: app: <deployment_label> spec: selector: matchLabels: app: <app_name> template: metadata: labels: app: <app_name> spec: containers: - image: <image_name> name: <container_name> volumeMounts: - name: <volume_name> mountPath: /<file_path> volumes: - name: <volume_name> persistentVolumeClaim: claimName: <pvc_name>app- Nos metadados, digite um rótulo para a implementação.
matchLabels.appelabels.app- No seletor de especificação e nos metadados do modelo, digite um rótulo para o seu app.
image- O nome da imagem de contêiner que você deseja usar. Para listar as imagens disponíveis em sua conta do IBM Cloud Container Registry, execute
ibmcloud cr image-list. name- O nome do contêiner que você deseja implementar em seu cluster.
mountPath- Na seção de montagens de volume do contêiner, insira o caminho absoluto do diretório para onde o volume é montado dentro do contêiner. Os dados gravados no caminho de montagem são armazenados sob o diretório raiz na instância de armazenamento de blocos físicos. Para compartilhar um volume entre diferentes apps, é possível especificar subcaminhos de volume para cada um dos apps.
name- Na seção de montagens de volume de contêineres, insira o nome do volume para montar em seu pod.
name- Na seção volumes, insira o nome do volume para montar em seu pod. Geralmente, esse nome é o mesmo que
volumeMounts/name. claimName- Na seção de solicitação de volume persistente de volumes, insira o nome da PVC que liga o PV que você deseja usar.
-
Crie a implementação.
kubectl apply -f <local_yaml_path> -
Verifique se o PV foi montado com êxito.
kubectl describe deployment <deployment_name>O ponto de montagem está no campo Montagens de volume e o volume está no campo Volumes.
Volume Mounts: /var/run/secrets/kubernetes.io/serviceaccount from default-token-tqp61 (ro) /volumemount from myvol (rw) ... Volumes: myvol: Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace) ClaimName: block-storage-pvc ReadOnly: false
Usando o armazenamento de bloco existente em seu cluster
Se você já possui um dispositivo de armazenamento físico que deseja utilizar em seu cluster, é possível criar manualmente o PV e o PVC para provisionar o armazenamento de forma estática.
Para que seja possível iniciar a montagem de seu armazenamento existente em um app, deve-se recuperar todas as informações necessárias para o seu PV.
Recuperando as informações do armazenamento de blocos existente
-
Recupere ou gere uma chave de API para sua conta de infraestrutura da IBM Cloud.
- Efetue login no Portal de infraestrutura IBM Cloud.
- Selecione Conta, depois Usuários e, em seguida, Lista de usuários.
- Localize o ID de usuário.
- Na coluna CHAVE API, clique em Gerar para gerar uma chave API ou em Visualizar para visualizar a chave API existente.
-
Recupere o nome de usuário da API para sua conta de infraestrutura da IBM Cloud.
- No menu Lista de usuários, selecione seu ID de usuário.
- Na seção Informações de acesso da API, localize o seu Nome do usuário da API.
-
Efetue login no plug-in da CLI da infraestrutura da IBM Cloud.
ibmcloud sl init -
Escolha autenticar usando o nome de usuário e a chave de API para sua conta de infraestrutura da IBM Cloud.
-
Insira o nome de usuário e a chave de API que você recuperou nas etapas anteriores.
-
Liste os dispositivos de armazenamento de bloco disponíveis.
ibmcloud sl block volume-listSaída de exemplo
id username datacenter storage_type capacity_gb bytes_used lunId 11111111 IBM01AAA1111111-1 wdc07 endurance_block_storage 45 - 2 -
Recupere os detalhes do volume. Substitua
<volume_ID>pelo ID do volume do Block storage recuperado na etapa 6.ibmcloud sl block volume-detail <volume_ID>Saída de exemplo
ID 11111111 User name IBM01AAA1111111-1 Type endurance_block_storage Capacity (GB) 45 LUN Id 2 IOPs 100 Datacenter wdc07 Target IP 10.XXX.XX.XXX # of Active Transactions 0 Replicant Count 0 -
Anote o
ID,Capacity,LUN Id, oDatacentereTarget IPdo volume que você deseja montar para o cluster. Nota: para montar o armazenamento existente em um cluster, deve-se ter um nó do trabalhador na mesma zona que seu armazenamento. Para verificar a zona do nó do trabalhador, executeibmcloud ks worker ls --cluster <cluster_name_or_ID>.
Criando um volume persistente (PV) e uma reclamação de volume persistente (PVC) correspondente
-
Opcional: se você tiver um armazenamento que provisionou com uma classe de armazenamento
retain, ao remover a PVC, o PV e o dispositivo de armazenamento físico não serão removidos. Para reutilizar o armazenamento em seu cluster, deve-se remover o PV primeiro. Liste os PVs existentes e procure o PV que pertence ao seu armazenamento persistente. O PV está em um estadoreleased.kubectl get pv -
Remova o PV.
kubectl delete pv <pv_name> -
Verificar se o PV é removido.
kubectl get pv -
Crie um arquivo de configuração para seu PV. Inclua os parâmetros que você recuperou anteriormente.
apiVersion: v1 kind: PersistentVolume metadata: name: "block-storage-pv" # Enter a name for your PV. For example, my-static-pv. labels: failure-domain.beta.kubernetes.io/region: "<region>" # Example us-east. failure-domain.beta.kubernetes.io/zone: "<zone>" # Example: wdc04. See /docs/containers?topic=containers-regions-and-zones#zones-sz spec: capacity: storage: "<storage>" accessModes: - ReadWriteOnce flexVolume: driver: "ibm/ibmc-block" fsType: "<fs_type>" # Enter ext or xfs options: "Lun": "<Lun_ID>" "TargetPortal": "<TargetPortal>" "VolumeID": "<VolumeID>" "volumeName": "block-storage-pv" # Enter the same value as your PV name from metadata.namename- Dê um nome ao PV. Por exemplo,
block-storage-pv. Note que esse valor também deve ser inserido emspec.FlexVolume.optionscomo ovolumeName. labels- Insira a região e a zona que você recuperou anteriormente. Deve-se ter pelo menos um nó do trabalhador na mesma região e zona que o seu armazenamento persistente para montar o armazenamento em seu cluster. Para recuperar detalhes do
volume, execute
ibmcloud sl block volume-listpara obter o ID do volume. Em seguida, executeibmcloud sl block volume-detail <volume_ID>para obter os detalhes do seu volume. region- Entre na região na qual o Block Storage está localizado. Note que o cluster e o Block Storage devem estar na mesma região. Para localizar o local do cluster, execute
ibmcloud ks cluster ls. Para obter mais informações sobre as regiões e zonas disponíveis, consulte regiões e zonas. Por exemplo,us-east. zone- Entre na zona na qual o volume de armazenamento está localizado. Para recuperar detalhes do volume, execute
ibmcloud sl block volume-listpara obter o ID do volume. Em seguida, executeibmcloud sl block volume-detail <volume_ID>para obter os detalhes do seu volume. Note que para anexar o Block Storage ao cluster, deve-se ter um nó do trabalhador disponível na mesma zona do volume que você deseja anexar. Para localizar as zonas dos nós do trabalhador, executeibmcloud ks worker ls -c <cluster>. Por exemplo,wdc04. storage- Insira o tamanho de armazenamento do volume do Block Storage existente que você deseja anexar ao cluster. O tamanho do armazenamento deve ser gravado em gigabytes, por exemplo, 20 Gi (20 GB) ou 1000 Gi (1 TB). Para recuperar detalhes
do volume, execute
ibmcloud sl block volume-listpara obter o ID do volume. Em seguida, executeibmcloud sl block volume-detail <volume_ID>para obter os detalhes do seu volume. fsType- Insira o tipo de sistema de arquivos que está configurado para seu armazenamento de bloco existente. Escolha entre
ext4ouxfs. Se você não especificar essa opção, o PV será padronizado paraext4. Quando ofsTypeerrado for definido, a criação do PV será bem-sucedida, mas a montagem do PV em um pod falhará. Para recuperar detalhes do volume, executeibmcloud sl block volume-listpara obter o ID do volume. Em seguida, executeibmcloud sl block volume-detail <volume_ID>para obter os detalhes do seu volume. Lun- Insira o ID de LUN do volume do Block Storage. Para recuperar detalhes do volume, execute
ibmcloud sl block volume-listpara obter o ID do volume. Em seguida, executeibmcloud sl block volume-detail <volume_ID>para obter os detalhes do seu volume. TargetPortal- Insira o endereço IP do Block Storage. Para recuperar o parâmetro
TargetPortal, executeibmcloud sl block volume-listpara obter o ID de volume e, em seguida, executeibmcloud sl block volume-detail <volume_ID>e anote oTarget IPna saída. VolumeId- Insira o ID do Block Storage. Para recuperar os detalhes do volume, execute
ibmcloud sl block volume-list. volumeName- Insira o mesmo valor do nome do PV. Por exemplo,
block-storage-pv.
-
Crie o PV em seu cluster.
kubectl apply -f pv.yaml -
Verifique se o PV é criado.
kubectl get pv -
Crie outro arquivo de configuração para criar seu PVC. Para que o PVC corresponda ao PV criado anteriormente, deve-se escolher o mesmo valor para
storageeaccessMode. O campostorage-classdeve ser uma sequência de caracteres vazia. Se algum desses campos não corresponder ao PV, um novo PV será criado automaticamente no lugar.kind: PersistentVolumeClaim apiVersion: v1 metadata: name: block-storage-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: "20Gi" storageClassName: "" -
Crie a PVC.
kubectl apply -f static-pvc.yaml -
Verifique se o PVC foi criado e está ligado ao PV criado anteriormente. Esse processo pode levar alguns minutos.
kubectl describe pvc static-pvcSaída de exemplo
Name: static-pvc Namespace: default StorageClass: Status: Bound -
Opcional Salve a configuração de pod de exemplo a seguir como um arquivo chamado
pod.yaml.apiVersion: v1 kind: Pod metadata: name: block-storage labels: app: block-storage spec: containers: - name: block-storage image: nginx command: ["/bin/sh"] args: ["-c", "while true; do date \"+%Y-%m-%d %H:%M:%S\"; sleep 3600; done"] workingDir: /home imagePullPolicy: Always ports: - containerPort: 80 volumeMounts: - name: block-storage-pv mountPath: /home volumes: - name: block-storage-pv persistentVolumeClaim: claimName: block-storage-pvc -
Crie o pod em seu cluster.
kubectl create -f pod.yaml -
Depois que o pod estiver no status
Running, obtenha os logs.kubectl logsSaída de exemplo
2022-01-21 16:11:00
Você criou com êxito um PV e ligou-o a um PVC. Então você implementou um app que usa Block Storage. Agora os usuários de cluster podem montar a PVC para suas implementações e começar a ler e a gravar no volume persistente.
Usando o armazenamento de bloco em um conjunto stateful
Se você tiver um app stateful como um banco de dados, será possível criar conjuntos stateful que usam armazenamento de bloco para armazenar os dados de seu app. Como alternativa, é possível usar um banco de dados como um serviço do IBM Cloud e armazenar seus dados na nuvem.
- O que preciso levar em consideração ao adicionar armazenamento em bloco a um stateful set?
- Para incluir armazenamento em um conjunto stateful, especifique sua configuração de armazenamento na seção
volumeClaimTemplatesdo YAML do conjunto stateful. OvolumeClaimTemplatesé a base para seu PVC e pode incluir a classe de armazenamento e o tamanho ou IOPS do armazenamento de bloco que você deseja provisionar. No entanto, se você desejar incluir rótulos nosvolumeClaimTemplates, os Kubernetes não incluirão esses rótulos ao criar o PVC. Em vez disso, deve-se incluir os rótulos diretamente no conjunto stateful.
Não é possível implementar dois conjuntos stateful ao mesmo tempo. Se você tentar criar um conjunto stateful antes que um diferente seja totalmente implementado, a implementação do conjunto stateful poderá levar a resultados inesperados.
- Como posso criar meu stateful set em uma zona específica?
- Em um cluster com várias zonas, é possível especificar a zona e a região na qual você deseja criar seu conjunto stateful nas seções
spec.selector.matchLabelsespec.template.metadata.labelsdo YAML do conjunto stateful. Como alternativa, é possível incluir esses rótulos em uma classe de armazenamento customizada e usar essa classe de armazenamento na seçãovolumeClaimTemplatesde seu conjunto stateful. - Posso adiar a vinculação de um PV ao meu pod com estado até que o pod esteja pronto?
- Sim, é possível criar sua própria classe de armazenamento para o seu PVC que inclui o campo
volumeBindingMode: WaitForFirstConsumer - Quais são as opções disponíveis para adicionar armazenamento em bloco a um stateful set?
- Para criar automaticamente seu PVC ao criar o conjunto stateful, use o fornecimento dinâmico. Também é possível optar por pré-provisionar os PVCs ou usar PVCs existentes com o conjunto stateful.
Criando a PVC usando fornecimento dinâmico ao criar um conjunto stateful
Use essa opção se desejar criar automaticamente o PVC ao criar o conjunto stateful.
Antes de iniciar: efetue login na sua conta. If applicable, target the appropriate resource group. Configure o contexto para o seu cluster.
Conclua as etapas a seguir para verificar se todos os conjuntos stateful existentes em seu cluster estão totalmente implementados Se um conjunto stateful ainda estiver sendo implementado, não será possível começar a criar o conjunto stateful. Deve-se aguardar até que todos os conjuntos stateful no cluster estejam totalmente implementados para evitar resultados inesperados.
-
Liste os conjuntos stateful existentes em seu cluster.
kubectl get statefulset --all-namespacesSaída de exemplo
NAME DESIRED CURRENT AGE mystatefulset 3 3 6s -
Visualize o Status dos pods de cada conjunto stateful para assegurar-se de que a implementação do conjunto stateful esteja concluída.
kubectl describe statefulset <statefulset_name>Saída de exemplo
Name: nginx Namespace: default CreationTimestamp: Fri, 05 Oct 2022 13:22:41 -0400 Selector: app=nginx,billingType=hourly,region=us-south,zone=dal10 Labels: app=nginx billingType=hourly region=us-south zone=dal10 Annotations: kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"apps/v1","kind":"StatefulSet","metadata":{"annotations":{},"name":"nginx","namespace":"default"},"spec":{"podManagementPolicy":"Par..." Replicas: 3 desired | 3 total Pods Status: 0 Running / 3 Waiting / 0 Succeeded / 0 Failed Pod Template: Labels: app=nginx billingType=hourly region=us-south zone=dal10 ...Um conjunto stateful é totalmente implementado quando o número de réplicas localizadas na seção Réplicas de sua saída da CLI é igual ao número de pods Em execução na seção Status dos pods. Se um conjunto stateful ainda não estiver totalmente implementado, aguarde até que a implementação seja concluída antes de continuar.
-
Crie um arquivo de configuração para seu conjunto stateful e o serviço usado para expor o conjunto stateful. O exemplo a seguir mostra como implementar NGINX como um conjunto stateful com três réplicas. Para cada réplica, um dispositivo de armazenamento de bloco de 20 gigabyte é provisionado com base nas especificações que são definidas na classe de armazenamento
ibmc-block-retain-bronze. Todos os dispositivos de armazenamento são provisionados na zonadal10. Como o Block Storage não pode ser acessado de outras zonas, todas as réplicas do conjunto stateful também serão implementadas em nós do trabalhador localizados emdal10.apiVersion: v1 kind: Service metadata: name: nginx labels: app: nginx spec: ports: - port: 80 name: web clusterIP: None selector: app: nginx --- apiVersion: apps/v1 kind: StatefulSet metadata: name: nginx spec: serviceName: "nginx" replicas: 3 podManagementPolicy: Parallel selector: matchLabels: app: nginx billingType: "hourly" region: "us-south" # Enter the region where your cluster is located. zone: "dal10" template: metadata: labels: app: nginx billingType: "hourly" region: "us-south" zone: "dal10" spec: containers: - name: nginx image: nginx ports: - containerPort: 80 name: web volumeMounts: - name: myvol mountPath: /usr/share/nginx/html volumeClaimTemplates: - metadata: name: myvol spec: accessModes: - ReadWriteOnce resources: requests: storage: 20Gi iops: "300" #required only for performance storage storageClassName: ibmc-block-retain-bronzeO exemplo a seguir mostra como implementar NGINX como um conjunto stateful com três réplicas. O conjunto stateful não especifica a região e a zona em que o armazenamento de bloco é criado. Em vez disso, o conjunto stateful usa uma regra de antiafinidade para assegurar que os pods sejam distribuídos entre os nós do trabalhador e as zonas. Ao definir
topologykey: failure-domain.beta.kubernetes.io/zone, o planejador de Kubernetes não poderá planejar um pod em um nó do trabalhador se o nó do trabalhador estiver na mesma zona que um pod com o rótuloapp: nginx. Para cada pod do conjunto stateful, dois PVCs são criados conforme definido na seçãovolumeClaimTemplates, mas a criação das instâncias de armazenamento de bloco é atrasada até que um pod do conjunto stateful que use o armazenamento seja planejado. Essa configuração é referida como planejamento de volume com reconhecimento de topologia.apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: ibmc-block-bronze-delayed parameters: billingType: hourly classVersion: "2" fsType: ext4 iopsPerGB: "2" sizeRange: '[20-12000]Gi' type: Endurance provisioner: ibm.io/ibmc-block reclaimPolicy: Delete volumeBindingMode: WaitForFirstConsumer --- apiVersion: v1 kind: Service metadata: name: nginx labels: app: nginx spec: ports: - port: 80 name: web clusterIP: None selector: app: nginx --- apiVersion: apps/v1 kind: StatefulSet metadata: name: web spec: serviceName: "nginx" replicas: 3 podManagementPolicy: "Parallel" selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 podAffinityTerm: labelSelector: matchExpressions: - key: app operator: In values: - nginx topologyKey: failure-domain.beta.kubernetes.io/zone containers: - name: nginx image: registry.k8s.io/nginx-slim:0.8 ports: - containerPort: 80 name: web volumeMounts: - name: myvol1 mountPath: /usr/share/nginx/html - name: myvol2 mountPath: /tmp1 volumeClaimTemplates: - metadata: name: myvol1 spec: accessModes: - ReadWriteOnce # access mode resources: requests: storage: 20Gi storageClassName: ibmc-block-bronze-delayed - metadata: name: myvol2 spec: accessModes: - ReadWriteOnce # access mode resources: requests: storage: 20Gi storageClassName: ibmc-block-bronze-delayedname- Insira um nome para seu conjunto stateful. O nome inserido é usado para criar o nome da PVC no formato:
<volume_name>-<statefulset_name>-<replica_number>. serviceName- Insira o nome do serviço que deseja usar para expor o conjunto stateful.
replicas- Insira o número de réplicas para seu conjunto stateful.
podManagementPolicy- Insira a política de gerenciamento de pod que deseja usar para o conjunto stateful.
- OrderedReady: Com essa opção, as réplicas do conjunto stateful são implementadas uma após a outra. Por exemplo, se você especificou três réplicas, o Kubernetes criará o PVC para a sua primeira réplica, esperará até
que o PVC seja ligado, implementará a réplica do conjunto stateful e montará o PVC na réplica. Depois que a implementação é concluída, a segunda réplica é implementada. Para obter mais informações sobre esta opção, consulte
Gerenciamento de pod
OrderedReady - Parallel: com esta opção, a implementação de todas as réplicas do conjunto stateful é iniciada ao mesmo tempo. Se o seu app suportar a implementação paralela de réplicas, use essa opção para economizar tempo de implementação para seus PVCs e réplicas do conjunto stateful.
- OrderedReady: Com essa opção, as réplicas do conjunto stateful são implementadas uma após a outra. Por exemplo, se você especificou três réplicas, o Kubernetes criará o PVC para a sua primeira réplica, esperará até
que o PVC seja ligado, implementará a réplica do conjunto stateful e montará o PVC na réplica. Depois que a implementação é concluída, a segunda réplica é implementada. Para obter mais informações sobre esta opção, consulte
Gerenciamento de pod
matchLabels- Na seção de seletor de especificação, insira todos os rótulos que você deseja incluir em seu conjunto stateful e seu PVC. Os rótulos incluídos no
volumeClaimTemplatesde seu conjunto stateful não são reconhecidos pelo Kubernetes. Os rótulos de amostra que é possível que você queira incluir são:- região e zona: se quiser que todas as réplicas de conjunto stateful e PVCs sejam criadas em uma zona específica, inclua ambos os rótulos. Também é possível especificar a zona e a região na classe de armazenamento usada. Se você não especificar uma zona e região e tiver um cluster multizona, a zona na qual o armazenamento é provisionado será selecionada em uma base round-robin para equilibrar as solicitações de volume uniformemente em todas as zonas.
billingType: Insira o tipo de cobrança que você deseja usar para seus PVCs. Escolha entrehourlyoumonthly. Se você não especificar esse rótulo, todas as PVCs serão criadas com um tipo de faturamento por hora.
labels- Na seção de metadados do modelo de especificação, insira os mesmos rótulos que os incluídos na seção
spec.selector.matchLabels. affinity- Na seção de especificação de modelo de especificação, especifique sua regra de antiafinidade para garantir que seus pods de conjunto stateful sejam distribuídos em nós e zonas do trabalhador. O exemplo mostra uma regra de antiafinidade
na qual o pod do conjunto stateful prefere não ser planejado em um nó do trabalhador no qual um pod que tem o rótulo
app: nginxé executado. Otopologykey: failure-domain.beta.kubernetes.io/zonerestringe essa regra de antiafinidade ainda mais e evita que o pod seja planejado em um nó trabalhador se o nó do trabalhador estiver na mesma zona que um pod que possui o rótuloapp: nginx. Usando essa regra de antiafinidade, é possível alcançar a antiafinidade entre os nós do trabalhador e as zonas. name- Na seção de metadados de modelos de solicitação de volume de especificação, insira um nome para o seu volume. Use o mesmo nome definido na seção
spec.containers.volumeMount.name. O nome inserido aqui é usado para criar o nome para a PVC no formato:<volume_name>-<statefulset_name>-<replica_number>. storage- Na seção de solicitações de recursos de especificação de modelos de solicitação de volume de especificação, digite o tamanho do armazenamento de blocos em gigabytes (Gi).
iops- Na seção de solicitações de recursos de especificação de modelos de solicitação de volume de especificação, se você desejar provisionar o armazenamento de desempenho, digite o número de IOPS. Se você usar uma classe de armazenamento do Endurance e especificar vários IOPS, o número de IOPS será ignorado. Em vez disso, o IOPS especificado em sua classe de armazenamento é usado.
storageClassName- Na seção de especificação de modelos de solicitação de volume de especificação, insira a classe de armazenamento que você deseja usar. Para listar as classes de armazenamento existentes, execute o comando
kubectl get sc | grep block``. Se você não especificar uma classe de armazenamento, a PVC será criada com a classe de armazenamento padrão que está configurada no cluster. Certifique-se de que a classe de armazenamento padrão use o provisionadoribm.io/ibmc-blockpara que seu conjunto stateful seja provisionado com armazenamento de bloco.
-
Crie seu conjunto stateful.
kubectl apply -f statefulset.yaml -
Aguarde o seu conjunto stateful ser implementado.
kubectl describe statefulset <statefulset_name>Para ver o status atual de seus PVCs, execute
kubectl get pvc. O nome da PVC é formatado como<volume_name>-<statefulset_name>-<replica_number>.
Provisionamento estático utilizando PVCs existentes com um conjunto com estado
É possível pré-provisionar seus PVCs antes de criar seu conjunto stateful ou usar PVCs existentes com esse conjunto.
Quando você provisionar dinamicamente seus PVCs ao criar o conjunto stateful, o nome do PVC será designado com base nos valores usados no arquivo YAML do conjunto stateful. Para que o conjunto stateful use PVCs existentes, o nome dos PVCs deve corresponder ao nome que seria criado automaticamente ao usar o fornecimento dinâmico.
Antes de iniciar: efetue login na sua conta. If applicable, target the appropriate resource group. Configure o contexto para o seu cluster.
- Para pré-fornecer o PVC para seu conjunto stateful antes de criar o conjunto stateful, siga as etapas de 1 a 3 em Incluindo armazenamento de bloco em apps para criar um PVC para cada réplica do conjunto stateful.
Certifique-se de criar a PVC com um nome que siga o seguinte formato:
<volume_name>-<statefulset_name>-<replica_number>.
volume_name-
Use o nome que deseja especificar na seção
spec.volumeClaimTemplates.metadata.namedo conjunto stateful, comonginxvol. statefulset_name-
Use o nome que deseja especificar na seção
metadata.namedo conjunto stateful, comonginx_statefulset. replica_number-
Insira o número da réplica, começando com 0.
Por exemplo, se três réplicas de conjunto stateful devem ser criadas, crie três PVCs com nomes a seguir:
nginxvol-nginx_statefulset-0,nginxvol-nginx_statefulset-1enginxvol-nginx_statefulset-2.Procurando criar um PVC e um PV para um dispositivo de armazenamento existente? Crie seu PVC e PV usando o fornecimento estático.
- Siga as etapas em Fornecimento dinâmico: criando o PVC ao criar um conjunto stateful para criar seu conjunto stateful. O nome da PVC segue o formato
<volume_name>-<statefulset_name>-<replica_number>. Certifique-se de usar os valores a seguir de seu nome do PVC na especificação do conjunto stateful:spec.volumeClaimTemplates.metadata.name: Insira o<volume_name>do nome da PVC.
metadata.name-
Insira o
<statefulset_name>do nome da PVC. spec.replicas-
Insira o número de réplicas que deseja criar para o conjunto stateful. O número de réplicas deve ser igual ao número de PVCs criados anteriormente.
Se as PVCs estiverem em zonas diferentes, não inclua um rótulo de região ou zona no conjunto stateful.
-
Verifique se as PVCs são usadas nos pods de réplica do conjunto stateful listando os pods em seu cluster. Identifique os pods que pertencem ao conjunto stateful.
kubectl get pods -
Verifique se o PVC existente está montado na réplica do conjunto stateful. Revise o
ClaimNamena seçãoVolumesde sua saída da CLI.kubectl describe pod <pod_name>Saída de exemplo
Name: nginx-0 Namespace: default Node: 10.xxx.xx.xxx/10.xxx.xx.xxx Start Time: Fri, 05 Oct 2022 13:24:59 -0400 ... Volumes: myvol: Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace) ClaimName: myvol-nginx-0 ...
Mudando o tamanho e o IOPS de seu dispositivo de armazenamento existente
Se você desejar aumentar a capacidade de armazenamento ou o desempenho, será possível modificar seu volume existente.
Para perguntas sobre faturamento e para localizar as etapas de como usar o console do IBM Cloud para modificar seu armazenamento, consulte Expandindo a capacidade do Block Storage e Ajustando o IOPS. As atualizações que você faz por meio do console não são refletidas no volume persistente (PV). Para incluir essas informações no PV, execute kubectl patch pv <pv_name> e atualize manualmente o tamanho e IOPS na seção Rótulos e Anotação do PV.
-
Liste os PVCs em seu cluster e anote o nome do PV associado na coluna VOLUME.
kubectl get pvcSaída de exemplo
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE myvol Bound pvc-01ac123a-123b-12c3-abcd-0a1234cb12d3 20Gi RWO ibmc-block-bronze 147d -
Para mudar o IOPS e o tamanho para seu armazenamento de bloco, edite o IOPS na seção
metadata.labels.IOPSde seu PV primeiro. É possível aumentar ou diminuir o valor de IOPS Certifique-se de inserir um IOPS que seja suportado para o tipo de armazenamento que você tem. Por exemplo, se você tiver armazenamento de bloco do Endurance com 4 IOPS, será possível mudar o IOPS para 2 ou 10. Para obter mais valores de IOPS suportados, consulte Decidindo sobre a configuração de armazenamento de bloco.kubectl edit pv <pv_name>Para mudar o IOPS por meio da CLI, deve-se também mudar o tamanho do seu armazenamento de bloco. Se você deseja mudar somente o IOPS, mas não o tamanho, deve-se solicitar a mudança de IOPS por meio do console.
-
Edite a PVC e inclua o novo tamanho na seção
spec.resources.requests.storagede sua PVC. É possível mudar para um tamanho maior somente até a capacidade máxima que é configurada por sua classe de armazenamento. Não é possível reduzir o armazenamento existente. Para ver os tamanhos disponíveis para sua classe de armazenamento, consulte Decidindo sobre a configuração de armazenamento de bloco.kubectl edit pvc <pvc_name> -
Verifique se a expansão de volume foi solicitada. A expansão de volume foi solicitada com êxito quando você vê uma mensagem
FileSystemResizePendingna seção Condições de sua saída da CLI.kubectl describe pvc <pvc_name>Saída de exemplo
... Conditions: Type Status LastProbeTime LastTransitionTime Reason Message ---- ------ ----------------- ------------------ ------ ------- FileSystemResizePending True Mon, 01 Jan 0001 00:00:00 +0000 Thu, 25 Apr 2022 15:52:49 -0400 Waiting for user to (re-)start a pod to finish file system resize of volume on node. -
Liste todos os pods que montam a PVC. Se a PVC for montada por um pod, a expansão de volume será processada automaticamente. Se a sua PVC não for montada por um pod, a PVC deverá ser montada em um pod para que a expansão de volume possa ser processada.
kubectl get pods --all-namespaces -o=jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.volumes[*]}{.persistentVolumeClaim.claimName}{" "}{end}{end}' | grep "<pvc_name>"Os pods montados são retornados no formato:
<pod_name>: <pvc_name>. -
Se a PVC não for montada por um pod, crie um pod ou uma implementação e monte a PVC. Se a PVC for montada por um pod, continue com a próxima etapa.
-
Verifique se o tamanho e o IOPS são mudados na seção Rótulos de sua saída da CLI. Esse processo pode levar alguns minutos para ser concluído.
kubectl describe pv <pv_name>Saída de exemplo
... Labels: CapacityGb=50 Datacenter=dal10 IOPS=500 -
Efetue login no pod que monta o PVC.
kubectl exec <pod-name> -it -- bash -
Execute o seguinte comando para usar binários do host.
chroot /host -
Redimensione o sistema de arquivos.
sudo resize2fs <filesystem-path>Exemplo de comando
sudo resize2fs /dev/vdg -
Verifique se o sistema de arquivos está redimensionado.
df -h
Fazendo backup e restaurando dados
O armazenamento de bloco é provisionado no mesmo local que os nós do trabalhador em seu cluster. O armazenamento é hospedado em servidores em cluster pela IBM para fornecer disponibilidade no caso de um servidor ficar inativo. No entanto, o armazenamento de bloco não será submetido a backup automaticamente e poderá estar inacessível se o local inteiro falhar. Para proteger seus dados contra perda ou danos, será possível configurar backups periódicos que poderão ser usados para restaurar seus dados quando necessário.
Revise as opções de backup e restauração a seguir para seu armazenamento de bloco:
Configurar capturas instantâneas periódicas
É possível configurar capturas instantâneas periódicas para o seu armazenamento de bloco, que é uma imagem somente leitura que captura o estado da instância em um momento.
Para armazenar a captura instantânea, deve-se solicitar espaço de captura instantânea em seu armazenamento de bloco. As capturas instantâneas são armazenadas na instância de armazenamento existente dentro da mesma zona. Será possível restaurar dados de uma captura instantânea se um usuário remover dados importantes acidentalmente do volume. \n \n **Para criar uma captura instantânea para o volume, conclua as etapas a seguir.
-
Efetue login na CLI
ibmcloud sl.ibmcloud sl init -
PVs de Lista existente em seu cluster.
kubectl get pv -
Obtenha os detalhes para o PV para o qual você deseja criar espaço de captura instantânea e anote o ID do volume, o tamanho e o IOPS. O tamanho e o IOPS são mostrados na seção Labels de sua saída da CLI.
kubectl describe pv <pv_name> -
Para localizar o ID do volume, revise a anotação
ibm.io/network-storage-idde sua saída da CLI. -
Crie o tamanho da captura instantânea para o volume existente com os parâmetros que você recuperou na etapa anterior.
ibmcloud sl block snapshot-order <volume_ID> --size <size> --tier <iops> -
Espere o tamanho da captura instantânea para criar. O tamanho da captura instantânea é provisionado com êxito quando o Tamanho da captura instantânea (GB) na saída da CLI muda de 0 para o tamanho solicitado.
ibmcloud sl block volume-detail <volume_ID> -
Crie a captura instantânea para o volume e anote o ID da captura instantânea que é criado para você.
ibmcloud sl block snapshot-create <volume_ID> -
Verifique se a captura instantânea foi criada com êxito.
ibmcloud sl block snapshot-list <volume_ID> -
Configure o planejamento de capturas instantâneas Para obter mais informações sobre as opções disponíveis para seu planejamento de captura instantânea, consulte a documentação da CLI.
ibmcloud sl block snapshot-enable VOLUME_ID <OPTIONS> -
Para restaurar dados de uma captura instantânea para um volume existente, execute o comando a seguir.
ibmcloud sl block snapshot-restore <volume_ID> <snapshot_ID>
Replicando capturas instantâneas para outra zona
Para proteger seus dados de uma falha de zona, é possível replicar capturas instantâneas para uma instância de armazenamento de bloco que está configurada em outra zona.
Os dados podem ser replicados do armazenamento primário para o armazenamento de backup somente. Não é possível montar uma instância replicada do Block Storage para um cluster. Quando seu armazenamento primário falha, é possível configurar manualmente o armazenamento de backup replicado para ser o primário. Em seguida, é possível montá-lo para seu cluster. Depois que o armazenamento primário é restaurado, é possível restaurar os dados do armazenamento de backup.
Duplicar o armazenamento
É possível duplicar sua instância de armazenamento de bloco na mesma zona que a instância de armazenamento original.
Uma duplicata tem os mesmos dados que a instância de armazenamento original no momento em que é criada. Diferentemente de réplicas, use a duplicata como uma instância de armazenamento independente da original. Para duplicar, primeiramente configure capturas instantâneas para o volume.
Fazendo backup dos dados para o IBM Cloud® Object Storage
É possível usar o gráfico do Helm ibm-backup-restore para acelerar um pod de backup e restauração no cluster.
Esse pod contém um script para executar um backup único ou periódico para qualquer persistent volume claim (PVC) em seu cluster. Os dados são armazenados em sua instância do IBM Cloud® Object Storage que você configurou em uma zona.
O armazenamento de bloco é montado com um modo de acesso RWO. This access allows only one pod to be mounted to the block storage at a time. Para fazer backup de seus dados, deve-se desmontar o pod do aplicativo do armazenamento, montá-lo em seu pod de backup, fazer backup dos dados e remontar o armazenamento para o pod do aplicativo.
Para tornar os seus dados ainda mais altamente disponíveis e proteger o seu app de uma falha de zona, configure uma segunda instância do Object Storage e replique dados entre as zonas. Se você precisar restaurar dados de sua instância do Object Storage, use o pod de restauração fornecido com o gráfico do Helm.
Copiando dados de e para pods e contêineres
É possível usar o comando kubectl cp para copiar arquivos e diretórios para/de pods ou contêineres específicos
no cluster.
Ao executar o comando kubectl cp, se você não especificar um contêiner com -c, o comando usará o primeiro contêiner disponível no pod.
Copiar dados de sua máquina local para um pod em seu cluster.
kubectl cp <local_filepath>/<filename> <namespace>/<pod>:<pod_filepath>
Copiar dados de um pod em seu cluster para a sua máquina local.
kubectl cp <namespace>/<pod>:<pod_filepath>/<filename> <local_filepath>/<filename>
Copiar dados de sua máquina local para um contêiner específico que é executado em um pod em seu cluster.
kubectl cp <local_filepath>/<filename> <namespace>/<pod>:<pod_filepath> -c CONTAINER
Referência de classe de armazenamento
Bronze
- Nome
ibmc-block-bronzeibmc-block-retain-bronze- Tipo
- Armazenamento de resistência
- Sistema de arquivos
ext4- IOPS por gigabyte
- 2
- Intervalo de tamanho em gigabytes
- 20-12.000 Gi
- Disco rígido
- SSD
- Política de recuperação
ibmc-block-bronze: Excluiribmc-block-retain-bronze: Reter
Prata
- Nome
ibmc-block-silveribmc-block-retain-silver- Tipo
- Armazenamento de resistência
- Sistema de arquivos
ext4- IOPS por gigabyte
- 4
- Intervalo de tamanho em gigabytes
- 20-12.000 Gi
- Disco rígido
- SSD
- Política de recuperação
ibmc-block-silver: Excluiribmc-block-retain-silver: Reter
Ouro
- Nome
ibmc-block-goldibmc-block-retain-gold- Tipo
- Armazenamento de resistência
- Sistema de arquivos
ext4- IOPS por gigabyte
- 10
- Intervalo de tamanho em gigabytes
- 20-4000 Gi
- Disco rígido
- SSD
- Política de recuperação
ibmc-block-gold: Excluiribmc-block-retain-gold: Reter
Customizado
- Nome
ibmc-block-customibmc-block-retain-custom- Tipo
- Sistema PerformanceFile
ext4- IOPS e tamanho
- Faixa de tamanho em gigabytes/intervalo de IOPS em múltiplos de 100
- 20-39 Gi / 100-1000 IOPS
- 40-79 Gi / 100-2000 IOPS
- 80-99 Gi / 100-4000 IOPS
- 100-499 Gi / 100-6000 IOPS
- 500-999 Gi / 100-10000 IOPS
- 1000-1999 Gi / 100-20000 IOPS
- 2000-2999 Gi / 200-40000 IOPS
- 3000-3999 Gi / 200-48000 IOPS
- 4000-7999 Gi / 300-48000 IOPS
- 8000-9999 Gi / 500-48000 IOPS
- 10000-12000 Gi / 1000-48000 IOPS
- Disco rígido
- A razão de IOPS para gigabyte determina o tipo de disco rígido que é provisionado. Para determinar a sua razão de IOPS para gigabyte, você divide o IOPS pelo tamanho de seu armazenamento.
- Exemplo: você escolheu 500Gi de armazenamento com 100 IOPS. A sua razão é 0,2 (100 IOPS/500 Gi).
- Visão geral dos tipos de disco rígido por proporção:
- Menor ou igual a 0,3: SATA
- Maior que 0,3: SSD
- Política de recuperação
ibmc-block-custom: Excluiribmc-block-retain-custom: Reter
Classes de armazenamento customizado de amostra
É possível criar uma classe de armazenamento customizada e usar a classe de armazenamento no PVC.
O IBM Cloud Kubernetes Service fornece classes de armazenamento predefinidas para provisionar armazenamento de bloco com uma camada e configuração específicas. Às vezes você pode querer provisionar armazenamento com uma configuração diferente que não seja coberta nas classes de armazenamento predefinidas. É possível usar os exemplos neste tópico para localizar classes de armazenamento customizadas de amostra.
Para criar sua classe de armazenamento customizada, consulte Customizando uma classe de armazenamento. Em seguida, use a sua classe de armazenamento customizada em seu PVC.
Criando armazenamento de reconhecimento de topologia
Para usar o armazenamento de bloco em um cluster com diversas zonas, seu pod deve ser planejado na mesma zona que a sua instância de armazenamento de bloco para que seja possível ler e gravar no volume. Antes da introdução do planejamento de volume com reconhecimento de topologia pelo Kubernetes, o fornecimento dinâmico de seu armazenamento criava automaticamente a instância de armazenamento de bloco quando um PVC era criado. Em seguida, quando você criou sua pod, o planejador Kubernetes tentou implementar o pod no mesmo centro de dados que sua instância de armazenamento de bloco.
A criação da instância de armazenamento de bloco sem saber as restrições do pod pode levar a resultados indesejados. Por exemplo, seu pod pode não estar apto a ser planejado para o mesmo nó do trabalhador que seu armazenamento porque o nó do trabalhador tem recursos insuficientes ou o nó do trabalhador está contaminado e não permite que o pod seja planejado. Com o planejamento de volume de reconhecimento de topologia, a instância de armazenamento de bloco é atrasada até que o primeiro pod que usa o armazenamento seja criado.
Para usar o planejamento de volume direcionado à topologia, certifique-se de ter instalado o plug-in do IBM Cloud Block Storage versão 1.2.0 ou mais recente.
Os exemplos a seguir mostram como criar classes de armazenamento que atrasem a criação da instância de armazenamento de bloco até que o primeiro pod que usa esse armazenamento esteja pronto para ser planejado. Para atrasar a criação, deve-se
incluir a opção volumeBindingMode: WaitForFirstConsumer. Se você não incluir essa opção, o volumeBindingMode será configurado automaticamente como Immediate e a instância do Block Storage será criada
na criação da PVC.
Exemplo para o armazenamento de bloco de resistência.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ibmc-block-bronze-delayed
parameters:
billingType: hourly
classVersion: "2"
fsType: ext4
iopsPerGB: "2"
sizeRange: '[20-12000]Gi'
type: Endurance
provisioner: ibm.io/ibmc-block
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
Exemplo para o armazenamento de bloco de desempenho.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ibmc-block-performance-storageclass
labels:
kubernetes.io/cluster-service: "true"
provisioner: ibm.io/ibmc-block
parameters:
billingType: "hourly"
classVersion: "2"
sizeIOPSRange: |-
"[20-39]Gi:[100-1000]"
"[40-79]Gi:[100-2000]"
"[80-99]Gi:[100-4000]"
"[100-499]Gi:[100-6000]"
"[500-999]Gi:[100-10000]"
"[1000-1999]Gi:[100-20000]"
"[2000-2999]Gi:[200-40000]"
"[3000-3999]Gi:[200-48000]"
"[4000-7999]Gi:[300-48000]"
"[8000-9999]Gi:[500-48000]"
"[10000-12000]Gi:[1000-48000]"
type: "Performance"
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
Especificando a zona e a região
Se você deseja criar seu armazenamento de bloco em uma zona específica, será possível especificar a zona e a região em uma classe de armazenamento customizada.
Use a classe de armazenamento customizada se você usar o plug-in IBM Cloud Block Storage versão 1.0.0 ou se você desejar provisionar estaticamente o armazenamento de bloco em uma zona específica. Em todos os outros casos, especifique a zona diretamente em seu PVC.
O arquivo .yaml a seguir customiza uma classe de armazenamento que é baseada na classe de armazenamento sem retenção ibm-block-silver: o type é "Endurance", o iopsPerGB é 4, o sizeRange é "[20-12000]Gi" e o reclaimPolicy é configurado para "Delete". A zona é especificada como dal12. Para usar uma classe de
armazenamento diferente como sua base, consulte a referência de classe de armazenamento.
Crie a classe de armazenamento na mesma região e zona que os nós do cluster e do trabalhador. Para obter a região do cluster, execute ibmcloud ks cluster get --cluster <cluster_name_or_ID> e procure o prefixo da região na
URL principal, como eu-de em https://c2.eu-de.containers.cloud.ibm.com:11111. Para obter a zona do nó do trabalhador, execute ibmcloud ks worker ls --cluster <cluster_name_or_ID>.
Exemplo para o armazenamento de bloco de resistência.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ibmc-block-silver-mycustom-storageclass
labels:
kubernetes.io/cluster-service: "true"
provisioner: ibm.io/ibmc-block
parameters:
zone: "dal12"
region: "us-south"
type: "Endurance"
iopsPerGB: "4"
sizeRange: "[20-12000]Gi"
reclaimPolicy: "Delete"
Exemplo para o armazenamento de bloco de desempenho.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ibmc-block-performance-storageclass
labels:
kubernetes.io/cluster-service: "true"
provisioner: ibm.io/ibmc-block
parameters:
zone: "dal12"
region: "us-south"
type: "Performance"
sizeIOPSRange: |-
"[20-39]Gi:[100-1000]"
"[40-79]Gi:[100-2000]"
"[80-99]Gi:[100-4000]"
"[100-499]Gi:[100-6000]"
"[500-999]Gi:[100-10000]"
"[1000-1999]Gi:[100-20000]"
"[2000-2999]Gi:[200-40000]"
"[3000-3999]Gi:[200-48000]"
"[4000-7999]Gi:[300-48000]"
"[8000-9999]Gi:[500-48000]"
"[10000-12000]Gi:[1000-48000]"
reclaimPolicy: "Delete"
Montando o armazenamento de bloco com um sistema de arquivos XFS
Os exemplos a seguir criam uma classe de armazenamento que provisiona armazenamento de bloco com um sistema de arquivos XFS.
Exemplo para o armazenamento de bloco de resistência.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ibmc-block-custom-xfs
labels:
addonmanager.kubernetes.io/mode: Reconcile
provisioner: ibm.io/ibmc-block
parameters:
type: "Endurance"
iopsPerGB: "4"
sizeRange: "[20-12000]Gi"
fsType: "xfs"
reclaimPolicy: "Delete"
Exemplo para o armazenamento de bloco de desempenho.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ibmc-block-custom-xfs
labels:
addonmanager.kubernetes.io/mode: Reconcile
provisioner: ibm.io/ibmc-block
parameters:
classVersion: "2"
type: "Performance"
sizeIOPSRange: |-
[20-39]Gi:[100-1000]
[40-79]Gi:[100-2000]
[80-99]Gi:[100-4000]
[100-499]Gi:[100-6000]
[500-999]Gi:[100-10000]
[1000-1999]Gi:[100-20000]
[2000-2999]Gi:[200-40000]
[3000-3999]Gi:[200-48000]
[4000-7999]Gi:[300-48000]
[8000-9999]Gi:[500-48000]
[10000-12000]Gi:[1000-48000]
fsType: "xfs"
reclaimPolicy: "Delete"
Removendo o armazenamento persistente de um cluster
Ao configurar o armazenamento persistente em seu cluster, você tem três componentes principais: a solicitação de volume persistente do Kubernetes (PVC) que solicita armazenamento, o volume persistente do Kubernetes (PV) que é montado em um pod e descrito no PVC e a instância de infraestrutura da IBM Cloud, como um arquivo clássico ou armazenamento de bloco. Dependendo de como você criou seu armazenamento, pode ser necessário excluir todos os três componentes separadamente.
Entendendo suas opções de remoção de armazenamento
A remoção do armazenamento persistente de sua conta do IBM Cloud varia dependendo de como você provisionou o armazenamento e quais componentes você já removeu.
- Meu armazenamento persistente é excluído quando eu excluo meu cluster?
- Durante a exclusão do cluster, você tem a opção de remover seu armazenamento persistente. No entanto, dependendo de como seu armazenamento foi provisionado, a remoção de seu armazenamento pode não incluir todos os componentes de armazenamento.
Se você provisionou dinamicamente o armazenamento com uma classe de armazenamento que define a opção “
reclaimPolicy: Delete”, seu PVC, PV e a instância de armazenamento serão excluídos automaticamente quando você excluir o cluster. No caso de armazenamento provisionado estaticamente ou de armazenamento provisionado com uma classe de armazenamento que define a opção “reclaimPolicy: Retain”, o PVC e o PV são removidos quando você exclui o cluster, mas sua instância de armazenamento e seus dados permanecem. Você ainda é cobrado por sua instância de armazenamento. Além disso, se você excluiu seu cluster em um estado não funcional, o armazenamento ainda poderá existir mesmo se você escolheu removê-lo. - Como faço para excluir o armazenamento se quiser manter meu cluster?
- Ao provisionar dinamicamente o armazenamento com uma classe de armazenamento que configura
reclaimPolicy: Delete, é possível remover o PVC para iniciar o processo de exclusão de seu armazenamento persistente. O PVC, o PV e a instância de armazenamento são removidos automaticamente. No caso de armazenamento provisionado estaticamente ou de armazenamento provisionado com uma classe de armazenamento que defina a opção “reclaimPolicy: Retain”, é necessário remover manualmente o PVC, o PV e a instância de armazenamento para evitar cobranças adicionais. - Como a cobrança é interrompida depois que eu excluir meu espaço de armazenamento?
- Dependendo de quais componentes de armazenamento você excluir e quando, o ciclo de faturamento pode não parar imediatamente. Se você excluir o PVC e o PV, mas não a instância de armazenamento em sua conta do IBM Cloud, essa instância ainda existirá e você será cobrado por ela.
Se você excluir o PVC, o PV e a instância de armazenamento, o ciclo de faturamento parará, dependendo do billingType que você escolheu ao provisionar seu armazenamento e de como escolheu excluir o armazenamento.
-
Quando você cancela manualmente a instância de armazenamento persistente pelo console do IBM Cloud ou pela CLI, o faturamento é interrompido da seguinte forma:
- Armazenamento por hora: o faturamento é parado imediatamente. Depois que seu armazenamento for cancelado, você ainda poderá ver sua instância de armazenamento no console por até 72 horas.
- Armazenamento mensal: é possível escolher entre cancelamento imediato ou cancelamento na data do aniversário. Em ambos os casos, você é faturado até o término do ciclo de faturamento atual e as paradas de faturamento para o próximo ciclo de faturamento. Depois que seu armazenamento for cancelado, você ainda poderá ver sua instância de armazenamento no console ou na CLI por até 72 horas.
- Cancelamento imediato: escolha essa opção para remover imediatamente seu armazenamento. Nem você nem seus usuários poderão mais usar o armazenamento ou recuperar os dados.
- Data do aniversário: escolha essa opção para cancelar seu armazenamento na data do próximo aniversário. Suas instâncias de armazenamento permanecem ativas até a data do próximo aniversário e é possível continuar a usá-las até essa data para que a sua equipe tenha tempo para fazer backups dos dados.
-
Ao provisionar dinamicamente o armazenamento com uma classe de armazenamento que configura
reclaimPolicy: Deletee você optar por remover o PVC, o PV e a instância de armazenamento serão removidos imediatamente. Para armazenamento em faturamento por hora, o faturamento é parado imediatamente. Para o armazenamento faturado mensal, você ainda é cobrado pelo restante do mês. Depois que seu armazenamento for removido e o faturamento for interrompido, você ainda poderá ver sua instância de armazenamento no console ou na CLI por até 72 horas.
- O que preciso saber antes de excluir o armazenamento persistente?
- Ao limpar o armazenamento persistente, você exclui todos os dados que estão armazenados nele. Se precisar de uma cópia dos dados, faça um backup.
- Apaguei minha instância de armazenamento. Por que ainda consigo ver minha instância?
- Depois de remover o armazenamento persistente, ele pode levar até 72 horas para que a remoção seja totalmente processada e para que o armazenamento desapareça do console ou da CLI do IBM Cloud.
Limpando o armazenamento persistente
Remova o PVC, o PV e a instância de armazenamento de sua conta do IBM Cloud para evitar encargos adicionais para seu armazenamento persistente.
Antes de Iniciar:
- Certifique-se de ter feito backup de todos os dados que deseja manter.
- Efetue login na sua conta. If applicable, target the appropriate resource group. Configure o contexto para o seu cluster.
Para limpar os dados persistentes:
-
Liste os PVCs em seu cluster e anote o
NAMEdo PVC, oSTORAGECLASSe o nome do PV que está ligado ao PVC e mostrado comoVOLUME.kubectl get pvcSaída de exemplo
NAME STATUS VOLUME CAPACITY ACCESSMODES STORAGECLASS AGE claim1 Bound pvc-06886b77-102b-11e8-968a-f6612bb731fb 20Gi RWO class 78d claim2 Bound pvc-457a2b96-fafc-11e7-8ff9-b6c8f770356c 4Gi RWX class 105d claim3 Bound pvc-1efef0ba-0c48-11e8-968a-f6612bb731fb 24Gi RWX class 83d -
Revise o
ReclaimPolicye obillingTypepara a classe de armazenamento.kubectl describe storageclass <storageclass_name>Se a política de recuperação indicar
Delete, seu PV e o armazenamento físico serão removidos quando você remover o PVC. Se a política de recuperação indicarRetainou se você provisionar o armazenamento sem uma classe de armazenamento, o PV e o armazenamento físico não serão removidos quando o PVC for removido. Deve-se remover o PVC, o PV e o armazenamento físico separadamente.Se o seu armazenamento for cobrado mensalmente, você ainda será cobrado pelo mês inteiro, mesmo se remover o armazenamento antes do término do ciclo de faturamento.
-
Remova quaisquer pods que montam o PVC. Liste os pods que montam o PVC. Se nenhum pod for retornado na saída da CLI, você não tem um pod que usa PVC.
kubectl get pods --all-namespaces -o=jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.volumes[*]}{.persistentVolumeClaim.claimName}{" "}{end}{end}' | grep "<pvc_name>"Saída de exemplo
depl-12345-prz7b: claim1 -
Remova o pod que usa o PVC. Se o pod fizer parte de uma implementação, remova a implementação.
kubectl delete pod <pod_name> -
Verifique se o pod foi removido.
kubectl get pods -
Remova a PVC.
kubectl delete pvc <pvc_name> -
Revise o status de seu PV. Use o nome do PV que você recuperou anteriormente como
VOLUME. Quando você remove o PVC, o PV que está ligado ao PVC é liberado. Dependendo de como você provisionou seu armazenamento, seu PV entrará em um estadoDeletingse o PV for excluído automaticamente ou em um estadoReleasedse o PV deverá ser excluído manualmente. Nota: para PVs que são excluídos automaticamente, o status pode indicar brevementeReleasedantes de ser excluído. Execute novamente o comando após alguns minutos para ver se o PV foi removido.kubectl get pv <pv_name> -
Se o seu PV não for excluído, remova-o manualmente.
kubectl delete pv <pv_name> -
Verifique se o PV foi removido.
kubectl get pv -
Liste a instância de armazenamento físico para a qual o PV apontou e observe o
idda instância de armazenamento físico.ibmcloud sl block volume-list --columns id --columns notes | grep <pv_name>Saída de exemplo
12345678 {"plugin":"ibmcloud-block-storage-plugin-689df949d6-4n9qg","region":"us-south","cluster":"aa1a11a1a11b2b2bb22b22222c3c3333","type":"Endurance","ns":"default","pvc":"block-storage-pvc","pv":"pvc-d979977d-d79d-77d9-9d7d-d7d97ddd99d7","storageclass":"ibmc-block-silver","reclaim":"Delete"}Entendendo as informações do campo do Notas:
"plugin":"ibm-file-plugin-5b55b7b77b-55bb7"- O plug-in de armazenamento que o cluster usa.
"region":"us-south"- A região em que seu cluster está.
"cluster":"aa1a11a1a11b2b2bb22b22222c3c3333"- O ID do cluster que está associado à instância de armazenamento.
"type":"Endurance"- O tipo de arquivo ou armazenamento de blocos, seja
EnduranceouPerformance. "ns":"default"- O espaço de nomes em que a instância de armazenamento está implementada.
"pvc":"block-storage-pvc"- O nome da PVC associada à instância de armazenamento.
"pv":"pvc-d979977d-d79d-77d9-9d7d-d7d97ddd99d7"- A PV associada à instância de armazenamento.
"storageclass":"ibmc-file-gold"- O tipo de classe de armazenamento: bronze, prata, ouro ou customizado.
-
Remova a instância de armazenamento físico.
ibmcloud sl block volume-cancel <classic_block_id> -
Verifique se a instância de armazenamento físico foi removida.
O processo de exclusão pode levar até 72 horas para ser concluído.
ibmcloud sl block volume-list
Configurando o monitoramento para PVs de conectividade do limited
Ao criar um pod e um PVC que usam Block Storage for Classic, duas portas de destino são designadas ao volume persistente subjacente (PV) no qual o armazenamento é montado. Várias portas de destino permitem o failover no caso de uma porta ficar inativa
Em versões anteriores do driver Block Storage for Classic, a incapacidade de localizar 2 portas de destino ao montar um PV durante o lançamento causou uma falha de implementação..
No entanto, às vezes, como durante as janelas de manutenção do IaaS, você pode desejar que seus pods sejam implementados com sucesso com apenas uma porta de destino disponível no volume persistente.
A partir da versão 2.4.12 do driver Block Storage for Classic, os pods serão implementados com sucesso mesmo se apenas uma porta de destino puder ser designada pelo PV. Além dessa mudança de comportamento, os PVs agora incluem um
novo rótulo para indicar a disponibilidade da rede em que um rótulo de healthy significa que 2 portas de destinos foram designadas e limited significa que apenas 1 porta de destino poderia ser designada durante a
montagem.
Para monitorar as instâncias em que a conectividade do pod com o Block Storage for Classic é limitada, é possível configurar um alerta customizado que procura o rótulo limited. Em seguida, configure o limite de alerta para >0
-
No painel do IBM Cloud Monitoring, selecione Novo alerta > Métrica.
-
Selecione Consulta do Prom e insira
kube_persistentvolume_labels{label_ibm_io_pv_connectivity_status='limited'} -
Configure o limite como
>0e configure a gravidade que deseja usar para esse alerta. -
Selecione o seu canal de notificação e salve o alerta.
Atribuição de perfis confiáveis ao armazenamento em bloco
Você pode usar perfis confiáveis para conceder a diferentes identidades IBM Cloud acesso a recursos em sua conta, incluindo suas soluções de armazenamento. Os perfis confiáveis centralizam o controle de acesso, eliminam a necessidade de chaves de API de longa duração e permitem que você defina o escopo das permissões para o mínimo necessário para uma tarefa específica. Para obter mais informações, consulte Configuração de um perfil confiável para componentes de armazenamento.