|
| 1 | +[](https://travis-ci.org/IBM/Scalable-WordPress-deployment-on-Kubernetes) |
| 2 | + |
| 3 | +*Ler em outros idiomas: [한국어](README-ko.md).* |
| 4 | + |
| 5 | +# Implementação escalável do WordPress no Cluster Kubernetes |
| 6 | + |
| 7 | +Esta jornada apresenta toda a força dos clusters Kubernetes e mostra como podemos implementar a estrutura de website mais popular do mundo na plataforma de orquestração de contêineres mais popular do mundo. Fornecemos um roteiro completo para hospedar o WordPress em um Cluster Kubernetes. Cada componente é executado em um contêiner ou grupo de contêineres separado. |
| 8 | + |
| 9 | +O WordPress representa um aplicativo típico multicamada; cada componente terá seus próprios contêineres. Os contêineres do WordPress serão a camada de front-end; o contêiner do MySQL será a camada de banco de dados/backend para o WordPress. A |
| 10 | + |
| 11 | +lém da implementação no Kubernetes, mostraremos como é possível ajustar a escala da camada frontal do WordPress e como o MySQL pode ser utilizado como um serviço do Bluemix para uso pelo front-end do WordPress. |
| 12 | + |
| 13 | + |
| 14 | + |
| 15 | +## Componentes inclusos |
| 16 | +- [WordPress (mais recente)](https://hub.docker.com/_/wordpress/) |
| 17 | +- [MySQL (5.6)](https://hub.docker.com/_/mysql/) |
| 18 | +- [Clusters Kubernetes](https://console.ng.bluemix.net/docs/containers/cs_ov.html#cs_ov) |
| 19 | +- [Bluemix Container Service](https://console.ng.bluemix.net/catalog/?taxonomyNavigation=apps&category=containers) |
| 20 | +- [Bluemix Compose for MySQL](https://console.ng.bluemix.net/catalog/services/compose-for-mysql) |
| 21 | +- [Bluemix DevOps Toolchain Service](https://console.ng.bluemix.net/catalog/services/continuous-delivery) |
| 22 | + |
| 23 | +## Pré-requisito |
| 24 | + |
| 25 | +Crie um cluster Kubernetes com [Minikube](https://kubernetes.io/docs/getting-started-guides/minikube) para testes locais ou com o [IBM Bluemix Container Service](https://github.com/IBM/container-journey-template) para implementação na cloud. O código é testado regularmente com relação ao [Cluster Kubernetes do Bluemix Container Service](https://console.ng.bluemix.net/docs/containers/cs_ov.html#cs_ov) usando Travis. |
| 26 | + |
| 27 | +## Objetivos |
| 28 | + |
| 29 | +Este cenário fornece instruções para as tarefas a seguir: - Criar volumes persistentes locais para definir discos persistentes. - Criar um segredo para proteger dados sensíveis. - Criar e implementar o front-end do WordPress com um ou mais pods. - Criar e implementar o banco de dados do MySQL (em um contêiner ou usando o Bluemix MySQL como backend). |
| 30 | + |
| 31 | +## Implementar no Bluemix |
| 32 | + |
| 33 | +Se quiser implementar o WordPress diretamente no Bluemix, clique no botão 'Deploy to Bluemix' abaixo para criar uma cadeia de ferramentas de serviço do Bluemix DevOps e um canal para implementação da amostra do WordPress ou avance para [Etapas](##steps) |
| 34 | + |
| 35 | +[](https://console.ng.bluemix.net/devops/setup/deploy/) |
| 36 | + |
| 37 | +Siga as [instruções da cadeia de ferramentas](https://github.com/IBM/container-journey-template/blob/master/Toolchain_Instructions_new.md) para concluir a cadeia de ferramentas e o canal. |
| 38 | + |
| 39 | +## Etapas |
| 40 | +1. [Configurar segredos do MySQL](#1-setup-mysql-secrets) |
| 41 | +2. [Criar serviços e implementações para WordPress e MySQL](#2-create-services-and-deployments-for-wordpress-and-mysql) |
| 42 | +- 2.1 [Usando o MySQL no contêiner](#21-using-mysql-in-container) |
| 43 | +- 2.2 [Usando o Bluemix MySQL](#22-using-bluemix-mysql-as-backend) |
| 44 | +3. [Acessando o link externo do WordPress](#3-accessing-the-external-wordpress-link) |
| 45 | +4. [Usando o WordPress](#4-using-wordpress) |
| 46 | + |
| 47 | +# 1. Configurar segredos do MySQL |
| 48 | + |
| 49 | +> *Opção de iniciação rápida:* Neste repositório, execute `bash scripts/quickstart.sh`. |
| 50 | +
|
| 51 | +Crie um novo arquivo chamado `password.txt` no mesmo diretório e coloque a senha desejada do MySQL em `password.txt` (pode ser qualquer cadeia de caractere com caracteres ASCII). |
| 52 | + |
| 53 | +Precisamos ter certeza de que `password.txt` não contém nenhuma linha nova posterior. Utilize o comando a seguir para remover possíveis linhas novas. |
| 54 | +```bash |
| 55 | +tr -d '\n' <password.txt >.strippedpassword.txt && mv .strippedpassword.txt password.txt |
| 56 | +``` |
| 57 | + |
| 58 | +# 2. Criar serviços e implementações para WordPress e MySQL |
| 59 | + |
| 60 | +### 2.1 Usando o MySQL no contêiner |
| 61 | +> *Observação:* se quiser usar o Bluemix Compose-MySql como backend, acesse [Usando o Bluemix MySQL como backend](#22-using-bluemix-mysql-as-backend). |
| 62 | +
|
| 63 | +Instale o volume persistente no armazenamento local do cluster. Em seguida, crie o segredo e serviços para MySQL e WordPress. |
| 64 | + |
| 65 | +```bash |
| 66 | +kubectl create -f local-volumes.yaml kubectl create secret generic mysql-pass --from-file=password.txt kubectl create -f mysql-deployment.yaml kubectl create -f wordpress-deployment.yaml |
| 67 | +``` |
| 68 | + |
| 69 | +Quando todos os pods estiverem em execução, execute os comandos a seguir para verificar os nomes deles. |
| 70 | + |
| 71 | +```bash |
| 72 | +kubectl get pods |
| 73 | +``` |
| 74 | +Isso deve gerar uma lista de pods a partir do cluster Kubernetes. |
| 75 | +```bash |
| 76 | +NAME READY STATUS RESTARTS AGE wordpress-3772071710-58mmd 1/1 Running 0 17s wordpress-mysql-2569670970-bd07b 1/1 Running 0 1m |
| 77 | +``` |
| 78 | + Agora, prossiga para [Acessando o link externo](#3-accessing-the-external-link). |
| 79 | + |
| 80 | +### 2.2 Usando o Bluemix MySQL como backend |
| 81 | + |
| 82 | +Provision Compose for MySQL no Bluemix por meio de https://console.ng.bluemix.net/catalog/services/compose-for-mysql |
| 83 | + |
| 84 | + |
| 85 | +Acesse as credenciais de serviço e visualize suas credenciais. O nome do host, porta, usuário e senha do MySQL estão na URI da credencial e devem ter esta aparência: |
| 86 | + |
| 87 | + |
| 88 | + |
| 89 | +Modifique o arquivo `wordpress-deployment.yaml`, altere o valor WORDPRESS_DB_HOST para o nome do host e a porta do MySQL (ou seja, `value: <hostname>:<port>`), o valor WORDPRESS_DB_USER para o usuário do MySQL e o valor WORDPRESS_DB_PASSWORD para a senha do MySQL. |
| 90 | + |
| 91 | +As variáveis de ambiente devem ter esta aparência: |
| 92 | + |
| 93 | +```yaml |
| 94 | +spec: containers: - image: wordpress:4.7.3-apache name: wordpress env: - name: WORDPRESS_DB_HOST value: sl-us-dal-9-portal.7.dblayer.com:22412 - name: WORDPRESS_DB_USER value: admin - name: WORDPRESS_DB_PASSWORD value: XMRXTOXTDWOOPXEE |
| 95 | +``` |
| 96 | +Depois de modificar o `wordpress-deployment.yaml`, execute os comandos a seguir para implementar o WordPress. |
| 97 | + |
| 98 | +```bash |
| 99 | +kubectl create -f local-volumes.yaml kubectl create -f wordpress-deployment.yaml ``` Quando todos os pods estiverem em execução, execute os comandos a seguir para verificar os nomes deles. ```bash kubectl get pods |
| 100 | +``` |
| 101 | +Isso deve gerar uma lista de pods a partir do cluster Kubernetes. |
| 102 | +```bash |
| 103 | +NAME READY STATUS RESTARTS AGE wordpress-3772071710-58mmd 1/1 Running 0 17s |
| 104 | +``` |
| 105 | + |
| 106 | + |
| 107 | +# 3. Acessando o link externo do WordPress |
| 108 | + |
| 109 | +> Se tiver um cluster pago, será possível usar o LoadBalancer em vez do NodePort executando |
| 110 | +> >`kubectl edit services wordpress` |
| 111 | +
|
| 112 | +> > Em `spec`, altere `type: NodePort` para `type: LoadBalancer` |
| 113 | +
|
| 114 | +> > **Observação:** confira se `service "wordpress" edited` é exibido após a edição do arquivo yaml, porque isso significa que o arquivo yaml foi editado com sucesso, sem erros tipográficos ou de conexão. |
| 115 | +
|
| 116 | +Para obter o endereço IP do cluster, utilize |
| 117 | +```bash |
| 118 | + $ bx cs workers <your_cluster_name> |
| 119 | +OK |
| 120 | +ID Public IP Private IP Machine Type State Status |
| 121 | +kube-hou02-pa817264f1244245d38c4de72fffd527ca-w1 169.47.220.142 10.10.10.57 free normal Ready |
| 122 | +``` |
| 123 | + Você também precisará executar o comando a seguir para obter o número NodePort. |
| 124 | + ```bash |
| 125 | + $ kubectl get svc wordpress NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE wordpress 10.10.10.57 <nodes> 80:30180/TCP 2m |
| 126 | + ``` |
| 127 | + Parabéns. Agora, você pode usar o link **http://[IP]:[número da porta]** para acessar seu site no WordPress. |
| 128 | + > **Observação:** para o exemplo acima, o link seria http://169.47.220.142:30180 É possível verificar o status da implementação na interface com o usuário do Kubernetes. |
| 129 | +
|
| 130 | + Execute `kubectl proxy` e acesse a URL 'http://127.0.0.1:8001/ui' para verificar quando o contêiner do WordPress ficará pronto. |
| 131 | + |
| 132 | +  |
| 133 | + |
| 134 | + >**Observação:** os pods podem levar até cinco minutos para começar a funcionar por completo. |
| 135 | +
|
| 136 | + **(Opcional)** Se você tiver mais recursos no cluster e quiser aumentar a capacidade do website do WordPress, poderá executar os comandos a seguir para verificar as implementações atuais. |
| 137 | + ```bash |
| 138 | + $ kubectl get deployments |
| 139 | + NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE |
| 140 | + wordpress 1 1 1 1 23h wordpress-mysql 1 1 1 1 23h |
| 141 | + ``` |
| 142 | + Agora, é possível usar os comandos a seguir para aumentar a capacidade para o front-end do WordPress. |
| 143 | + ```bash |
| 144 | + $ kubectl scale deployments/wordpress --replicas=2 deployment "wordpress" scaled |
| 145 | + $ kubectl get deployments |
| 146 | + NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE |
| 147 | + wordpress 2 2 2 2 23h wordpress-mysql 1 1 1 1 23h |
| 148 | + ``` |
| 149 | + Como pode ser visto, temos dois pods que estão em execução no front-end do WordPress. > **Observação:** caso você seja um usuário de camada gratuita, recomendamos aumentar a capacidade para apenas 10 pods, uma vez que os usuários de camada gratuita têm recursos limitados. |
| 150 | + |
| 151 | +# 4. Usando o WordPress |
| 152 | +Com o WordPress em execução, é possível se inscrever como novo usuário e instalar o WordPress. |
| 153 | + |
| 154 | + |
| 155 | + |
| 156 | +Depois de instalar o WordPress, você poderá publicar novos comentários. |
| 157 | + |
| 158 | + |
| 159 | + |
| 160 | +# Resolução de problemas |
| 161 | +Caso tenha criado acidentalmente uma senha com linhas novas e não consiga autorizar o serviço do MySQL, você pode excluir o segredo atual usando |
| 162 | +```bash |
| 163 | +kubectl delete secret mysql-pass |
| 164 | +``` |
| 165 | +Se quiser excluir seus serviços, implementações e a solicitação de volume persistente, você poderá executar |
| 166 | +```bash |
| 167 | +kubectl delete deployment,service,pvc -l app=wordpress |
| 168 | +``` |
| 169 | +Para excluir seu volume persistente, é possível executar os comandos a seguir |
| 170 | +```bash |
| 171 | +kubectl delete -f local-volumes.yaml |
| 172 | +``` |
| 173 | + |
| 174 | + |
| 175 | +# Referências |
| 176 | +- Este exemplo do WordPress baseia-se no exemplo de software livre do Kubernetes [mysql-wordpress-pd](https://github.com/kubernetes/kubernetes/tree/master/examples/mysql-wordpress-pd) em https://github.com/kubernetes/kubernetes/tree/master/examples/mysql-wordpress-pd. |
| 177 | +# Licença |
| 178 | +[Apache 2.0](LICENÇA) |
0 commit comments