Orientação - Configurar container Kubernete da Wiki Redome

De Redome
Revisão de 22h44min de 17 de dezembro de 2017 por Tgmoraes (discussão | contribs)
Ir para: navegação, pesquisa

Toda a documentação da plataforma Redome é mantida no presente portal, o qual é uma instância de um pacote de software livre e código aberto (escrito em PHP) para wikis denominado MediaWiki. Este ambiente de documentação opera dentro de um container Linux que é gerenciado com tecnologia Kubernetes, o qual é uma plataforma open source que automatiza as operações dos containers. Kubernetes implementa todos os mecanismos de alta disponibilidade, isolamento e alta performance de clusters tradicionais.

Comandos básicos

Iniciar cluster:

  bx cs init

Configurar variável de ambiente:

  export KUBECONFIG=/root/.bluemix/plugins/container-service/clusters/mycluster/kube-config-dal10-mycluster.yml

Listar os clusters disponíveis

  bx cs clusters

Obter informação detalhada da configuração de um cluster

  bx cs cluster-get [cluster name]

Listar as images de containers docker disponíveis para uso

  bx cr images

Listar os deployments publicados em um cluster

  kubectl get deployments [cluster name]

Listar os pods publicados em um cluster

  kubectl get pods [cluster name]

Listar os serviços publicados em cluster

  bx cs cluster-services [cluster name]

Acessar a configuracao do volume de armazenamento da wiki

  kubectl describe pvc fcancer-pvc-file-bronze

Criar/Atualizar a configuração de um deployment/pod/serviço/volume

  kubectl apply -f [arquivo.yaml]

Remover a configuração de um deployment/pod/serviço/volume

  kubectl delete -f [arquivo.yaml]

Acessar via FTP os locais de armazenamento da wiki

Todo conteúdo publicado nesta wiki é armazenado em um sistema de arquivos NFS. A rigor, o conteúdo das páginas são gravados em um bando de dados (SQLite). O SQLite é software livre de domínio público e multiplataforma que implementa um mecanismo de armazenamento seguro com transações ACID. Este SGBD suporta bases de dados de até 2 terabytes.

Os arquivos do SQLite estão armazenados no seguinte diretório:

  /data/

Os arquivos carregados na wiki por meio do processo de upload (ex. imagens) também são armazenados no sistema de arquivos NFS, no entanto, no seguinte diretório:

  /images/

Para ter acesso ao sistema de arquivos NFS, é necessário utilizar um cliente FTP, em modo ativo. Utilize as credenciais a seguir:

Servidor: 169.60.198.125 
Login: admin
Password: passw0rd


Acessar via Shell o container operacional da wiki

Para abrir um shell para o container aonde estão os arquivos de instalação da wiki, basta executar o comando a seguir:

  kubectl exec -it <pod-name> -- /bin/bash


Atualizar a imagem do logo da wiki

Por padrão, o mediawiki mostra como logo a imagem que está localizada dentro do diretório de instalação da wiki. Na instalação deste portal, o caminho para esta imagem é o seguinte:

  /var/www/mediawiki/resources/assets/wiki.png

Caso seja preciso recriar/atualizar o container com a imagem docker do mediawiki (wiki-deployment.yaml), então será necessário atualizar a logo do Redome na wiki. A imagem do logo do Redome fica amazenada no seguinte diretório do sistema de arquivos NFS:

  /images/wiki.png

Para informar a wiki que esta é imagem que deve ser colocada no logo, basta criar um link simbólico entre a imagem padrão e a imagem do logo do Redome. Para isso, acesse o container utilizando o seguinte comando:

  kubectl exec -it <pod-name> -- /bin/bash

E para criar o link simbólico, execute o comando a seguir:

 ln -sf /images/wiki.png /var/www/mediawiki/resources/assets/wiki.png


Arquivos YAML para configuração da wiki no Kubernete

Criar o volume para armazenamento de dados (SQLLite)

Nome do arquivo: wiki-data-persistentvolumeclaim.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: wiki-claim-data
  labels:
    app: mediawiki
    io.kompose.service: wiki-claim-data
  annotations:
    volume.beta.kubernetes.io/storage-class: "ibmc-file-bronze"
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 20Gi

Criar o volume para armazenamento das imagens

Nome do arquivo: wiki-images-persistentvolumeclaim.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: wiki-claim-images
  labels:
    app: mediawiki
    io.kompose.service: wiki-claim-images
  annotations:
    volume.beta.kubernetes.io/storage-class: "ibmc-file-bronze"
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 20Gi


Ativar o serviço FTP no container

Nome do arquivo: wiki-ftp.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    app: ftp
  name: ftp
spec:
  replicas: 1
  strategy:
    type: Recreate
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: ftp
    spec:
      containers:
      - env:
        - name: FTP_USER
          value: admin
        - name: FTP_PASS
          value: passw0rd
        - name: PASV_ADDRESS
          value: 169.60.198.125
        image: bogem/ftp
        name: ftp
        ports:
        - containerPort: 20
        - containerPort: 21
        resources: {}
        volumeMounts:
        - mountPath: /home/vsftpd/images
          name: wiki-claim-images
        - mountPath: /home/vsftpd/data
          name: wiki-claim-data
      restartPolicy: Always
      volumes:
      - name: wiki-claim-images
        persistentVolumeClaim:
          claimName: wiki-claim-images
      - name: wiki-claim-data
        persistentVolumeClaim:
          claimName: wiki-claim-data
status: {}
---
apiVersion: v1
kind: Service
metadata:
  name: ftp
spec:
  type: LoadBalancer
  ports:
  - name: "20"
    port: 20
    targetPort: 20
  - name: "21"
    port: 21
    targetPort: 21
  selector:
    app: ftp


Publicar o container com imagem docker do mediawiki

Nome do arquivo: wiki-deployment.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  annotations:
    kompose.cmd: kompose convert -f docker-compose.yml
    kompose.version: 1.5.0 ()
  creationTimestamp: null
  labels:
    io.kompose.service: wiki
  name: wiki
spec:
  replicas: 1
  strategy:
    type: Recreate
  template:
    metadata:
      creationTimestamp: null
      labels:
        io.kompose.service: wiki
    spec:
      containers:
      - env:
        - name: MEDIAWIKI_DB_NAME
          value: wikidb
        - name: MEDIAWIKI_DB_TYPE
          value: sqlite
        - name: MEDIAWIKI_DEBUG
          value: "1"
        - name: MEDIAWIKI_DEFAULT_SKIN
          value: vector
        - name: MEDIAWIKI_ENABLE_UPLOADS
          value: "1"
        - name: MEDIAWIKI_ENABLE_VISUAL_EDITOR
          value: "1"
        - name: MEDIAWIKI_LANGUAGE_CODE
          value: pt-br
        - name: MEDIAWIKI_SERVER
          value: http://mycluster-824593.us-south.containers.mybluemix.net
        - name: MEDIAWIKI_SITENAME
          value: Redome
        - name: MEDIAWIKI_SMTP
          value: "1"
        - name: MEDIAWIKI_SMTP_HOST
          value: "smtp.gmail.com"
        - name: MEDIAWIKI_SMTP_IDHOST
          value: "gmail.com"
        - name: MEDIAWIKI_SMTP_PORT
          value: "587"
        - name: MEDIAWIKI_SMTP_AUTH
          value: "1"          
        - name: MEDIAWIKI_SECRET_KEY
          value: "cef7f7518e429c9a91ab4800d7e1f6fd95e726a3769e9927b51719d2a87eebf3"          
        - name: MEDIAWIKI_SMTP_USERNAME
          value: "mod.redome@cancer.org.br"
        - name: MEDIAWIKI_SMTP_PASSWORD
          value: "C@ncer2017."
        image: kristophjunge/mediawiki
        name: wiki
        ports:
        - containerPort: 80
        resources: {}
        volumeMounts:
        - mountPath: /images
          name: wiki-claim-images
        - mountPath: /data
          name: wiki-claim-data
      restartPolicy: Always
      volumes:
      - name: wiki-claim-images
        persistentVolumeClaim:
         claimName: wiki-claim-images
      - name: wiki-claim-data
        persistentVolumeClaim:
          claimName: wiki-claim-data
status: {}

Ativar o serviço HTTP no container

Nome do arquivo: wiki-service.yaml

apiVersion: v1
kind: Service
metadata:
  annotations:
    kompose.cmd: kompose convert -f docker-compose.yml
    kompose.version: 1.5.0 ()
  creationTimestamp: null
  labels:
    io.kompose.service: wiki
  name: wiki
spec:
  ports:
  - name: "80"
    port: 80
    targetPort: 80
  selector:
    io.kompose.service: wiki
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: mediawiki-ingress
spec:
  rules:
  - host: mycluster-824593.us-south.containers.mybluemix.net
    http:
      paths:
      - path: /
        backend:
          serviceName: wiki
          servicePort: 80

Material Complementar

  1. [1], IBM Cloud - Configurando a CLI e API, 2017.
  2. [2],IBM Cloud - Configurando clusters, 2017.
  3. [3],IBM Cloud - Implementando apps em clusters, 2017.