The Funtoo Linux project has transitioned to "Hobby Mode" and this wiki is now read-only.
Difference between revisions of "LXD/pt-br"
(Created page with "LXD") |
|||
(119 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
<languages/> | <languages/> | ||
{{Subpages|GPU Acceleration}} | {{Subpages|Laptop Network Setup,GPU Acceleration,GPU Acceleration (NVIDIA),What are subuids and subgids?,Administration Tutorial,Features and Concepts}} | ||
== | == Introdução == | ||
LXD | {{Important| Observe que, se você planeja usar o LXD em um laptop, provavelmente está usando WiFi e NetworkManager, e as etapas abaixo ''não'' funcionarão para a configuração da ponte. Consulte [[LXD/Laptop Network Setup]] para diferenças importantes para permitir que você use o LXD no 'modo de desenvolvimento' para uso local de contêineres para desenvolvimento.}} | ||
LXD | O LXD é um "hipervisor" de contêiner projetado para fornecer um conjunto fácil de ferramentas para gerenciar contêineres Linux, e seu desenvolvimento está sendo liderado por funcionários da Canonical. Você pode aprender mais sobre o projeto em geral em https://linuxcontainers.org/lxd/. | ||
Atualmente, o LXD é usado para infraestrutura de contêineres para [[Special: MyLanguage/Funtoo Containers|Funtoo Containers]] e também é muito bem suportado no Funtoo Linux. Por esse motivo, é recomendável que você verifique o LXD e veja o que ele pode fazer por você. | |||
== Configuração básica no Funtoo == | |||
As etapas a seguir mostrarão como configurar um ambiente LXD básico no Funtoo Linux. Esse ambiente usará essencialmente a configuração padrão do LXD -- será criado um chamado {{c|lxdbr0}} que usará NAT para fornecer acesso à Internet aos seus contêineres. Além disso, será criado um pool de armazenamento padrão que simplesmente usará o armazenamento do seu sistema de arquivos existente, criando um diretório em {{f|/var/lib/lxd/storage-pools/default}} para armazenar quaisquer contêineres que você criar. São possíveis configurações mais sofisticadas que usam pontes de rede dedicadas conectadas a interfaces físicas sem NAT, bem como pools de armazenamento dedicados que usam [[Special:MyLanguage/ZFS|ZFS]] e [[Special:MyLanguage/btrfs|btrfs]] -- no entanto, esses tipos de configurações são geralmente um exagero para uma estação de trabalho de desenvolvedor e devem ser tentados apenas por usuários avançados. Então não vamos cobri-los aqui. | |||
=== Requerimentos === | |||
Esta seção irá guiá-lo através da configuração dos requisitos básicos para a criação de um ambiente LXD. | |||
O primeiro passo é surgir o LXD e suas dependências. Faça o seguinte: | |||
{{console|body= | {{console|body= | ||
Line 21: | Line 23: | ||
}} | }} | ||
Quando o LXD terminar de emergir, desejamos permitir que ele inicie por padrão: | |||
{{console|body= | {{console|body= | ||
Line 27: | Line 29: | ||
}} | }} | ||
Além disso, queremos configurar os seguintes arquivos. O {{f | /etc/security/limits.conf}} deve ser modificado para ter as seguintes linhas: | |||
{{file|name=/etc/security/limits.conf|body= | {{file|name=/etc/security/limits.conf|body= | ||
Line 39: | Line 41: | ||
}} | }} | ||
Em seguida, chegamos ao conceito de "subuid" e "subgid". Normalmente, um usuário receberá um ID de usuário e um ID de grupo. Subids e subgids nos permitem atribuir UIDs e GIDs adicionais a um usuário para uso próprio. | |||
Por padrão, o LXD alocará subuids para o usuário root, o que equivale a criar os seguintes arquivos no sistema de arquivos root: | |||
{{file|name=/etc/subuid|body= | {{file|name=/etc/subuid|body= | ||
root: | root:1000000:10000000000 | ||
}} | }} | ||
{{file|name=/etc/subgid|body= | {{file|name=/etc/subgid|body= | ||
root: | root:1000000:10000000000 | ||
}} | }} | ||
O formato de ambos os arquivos é "user":"start":"count". Significando que o usuário {{c|root}} receberá IDs "count" começando na posição "start". A razão pela qual o LXD faz isso é porque esses IDs extras serão usados para isolar contêineres dos processos do host e, opcionalmente, uns dos outros, usando diferentes deslocamentos para que seus UID e GIDs não se sobreponham. Com o LXD 5, agora essas configurações já estão "prontas", esses arquivos não precisam ser criados e existem aqui apenas para referência e compreensão do comportamento padrão do LXD. Para obter mais informações sobre subids e subgids, consulte [[LXD/What are subuids and subgids?|What are subuids and subgids?]]. | |||
==== LXD-in-LXD ==== | |||
A única vez que você precisará definir {{f|/etc/subuid}} e {{f|/etc/subgid}} é agora, e se você estiver executando "LXD-in-LXD". Nesse caso, o LXD interno (dentro do contêiner) precisará reduzir esses mapeamentos subuid e subgid, pois o intervalo completo não estará disponível. Isso deve ser possível simplesmente usando as seguintes configurações em sua instância LXD em contêiner: | |||
{{file|name=/etc/subuid|body= | |||
root:65537:70000 | |||
}} | |||
{{file|name=/etc/subgid|body= | |||
root:65537:70000 | |||
}} | |||
Se você não estiver usando recursos avançados do LXD, sua instância LXD-in-LXD agora deve ter mapeamentos de id suficientes para isolar contêineres do contêiner do host. O único restante | |||
A etapa para LXD-in-LXD seria permitir que o contêiner do host aninhasse: | |||
{{console|body= | |||
# ##i##lxc config set host-container security.nesting true | |||
}} | |||
Isso permitirá que o próprio host-container contenha contêineres :) | |||
=== Inicialização === | |||
Para configurar o LXD, primeiro precisaremos iniciar o LXD. Isso pode ser feito da seguinte forma: | |||
{{console|body= | {{console|body= | ||
Line 60: | Line 83: | ||
}} | }} | ||
Neste ponto, podemos executar o {{c|lxd init}} para executar um assistente de configuração para configurar o LXD: | |||
{{console|body= | {{console|body= | ||
Line 67: | Line 90: | ||
Do you want to configure a new storage pool? (yes/no) [default=yes]: ##i##↵ | Do you want to configure a new storage pool? (yes/no) [default=yes]: ##i##↵ | ||
Name of the new storage pool [default=default]: ##i##↵ | Name of the new storage pool [default=default]: ##i##↵ | ||
Name of the storage backend to use (btrfs, dir, lvm) [default=btrfs]: ##i## | Name of the storage backend to use (btrfs, dir, lvm) [default=btrfs]: ##i##dir ↵ | ||
Would you like to connect to a MAAS server? (yes/no) [default=no]: ##i##↵ | Would you like to connect to a MAAS server? (yes/no) [default=no]: ##i##↵ | ||
Would you like to create a new local network bridge? (yes/no) [default=yes]: ##i##↵ | Would you like to create a new local network bridge? (yes/no) [default=yes]: ##i##↵ | ||
What should the new bridge be called? [default=lxdbr0]: ##i##↵ | What should the new bridge be called? [default=lxdbr0]: ##i##↵ | ||
What IPv4 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]: ##i##↵ | What IPv4 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]: ##i##↵ | ||
What IPv6 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]: ##i##↵ | What IPv6 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]: ##i##none ↵ | ||
Would you like LXD to be available over the network? (yes/no) [default=no]: ##i##↵ | Would you like LXD to be available over the network? (yes/no) [default=no]: ##i##↵ | ||
Would you like stale cached images to be updated automatically? (yes/no) [default=yes] ##i##↵ | Would you like stale cached images to be updated automatically? (yes/no) [default=yes] ##i##↵ | ||
Line 79: | Line 102: | ||
}} | }} | ||
Como você pode ver, escolhemos todos os padrões ''exceto'' para: | |||
;pool de armazenamento: Optamos por usar um armazenamento de contêiner baseado em diretório em vez de volumes [[Special:MyLanguage/btrfs|btrfs]]. Baseado em diretório pode ser a opção padrão durante a configuração do LXD -- depende se você tem o btrfs-tools instalado ou não. | |||
;Endereço IPv6: É recomendado que você desative isso, a menos que você queira especificamente usar IPv6 em seus contêineres. Isso pode fazer com que {{c|dhcpcd}} em seu contêiner recupere apenas um endereço IPv6 se você o deixar ativado. Isso é ótimo se você tiver o IPv6 funcionando - caso contrário, você obterá um endereço IPv6 inválido e nenhum endereço IPv4 e, portanto, nenhuma rede. | |||
{{Warning|Como explicado acima, desative o IPv6 NAT no LXD, a menos que você pretenda usá-lo especificamente! Isso pode confundir {{c|dhcpcd}}.}} | |||
Se você optar por gerar a configuração ''YAML lxd init preseed'' do comando {{c|lxd init}} acima, aqui está um exemplo de configuração: | |||
{{file|name=lxc_init_preseed.yaml|lang=YAML|desc=lxc init preseed config example|body= | |||
config: | |||
images.auto_update_interval: "0" | |||
networks: | |||
- config: | |||
ipv4.address: auto | |||
ipv6.address: none | |||
description: "" | |||
name: lxdbr0 | |||
type: "" | |||
project: default | |||
storage_pools: | |||
- config: {} | |||
description: "" | |||
name: default | |||
driver: dir | |||
profiles: | |||
- config: {} | |||
description: "" | |||
devices: | |||
eth0: | |||
name: eth0 | |||
network: lxdbr0 | |||
type: nic | |||
root: | |||
path: / | |||
pool: funtoo | |||
type: disk | |||
name: default | |||
projects: [] | |||
cluster: null | |||
}} | |||
Agora, devemos ser capazes de executar {{c|lxc image list}} e obter uma resposta do daemon LXD: | |||
{{console|body= | {{console|body= | ||
# ##i##lxc image list | # ##i##lxc image list | ||
+-------+-------------+--------+-------------+------+------+-------------+ | +-------+-------------+--------+-------------+------+------+-------------+ | ||
{{!}} | {{!}} ALIAS {{!}} FINGERPRINT {{!}} PUBLIC {{!}} DESCRIPTION {{!}} ARCH {{!}} SIZE {{!}} UPLOAD DATE {{!}} | ||
+-------+-------------+--------+-------------+------+------+-------------+ | +-------+-------------+--------+-------------+------+------+-------------+ | ||
# | # | ||
}} | }} | ||
Se você conseguir fazer isso, você configurou com sucesso as partes principais do LXD! Observe que usamos o comando {{c|lxc}} e não {{c|lxd}} como fizemos para {{c|lxd init}} -- deste ponto em diante, você usará o comando {{c|lxc }}. Não deixe isso confundir você -- o comando {{c|lxc}} é a principal ferramenta de linha de comando para trabalhar com contêineres LXD. | |||
Acima, você pode ver que nenhuma imagem está instalada. Imagens são instantâneos instaláveis de contêineres que podemos usar para criar novos contêineres. Então, como primeiro passo, vamos em frente e pegue uma imagem que possamos usar. Você deseja procurar em https://build.funtoo.org em busca de uma imagem LXD que funcione no hardware do seu computador. Por exemplo, eu consegui baixar o seguinte arquivo usando o {{c |wget}}: | |||
{{console|body= | {{console|body= | ||
# ##i##wget https://build.funtoo.org/1. | # ##i##wget https://build.funtoo.org/1.4-release-std/x86-64bit/amd64-zen2/2022-04-13/lxd-amd64-zen2-1.4-release-std-2022-04-13.tar.xz | ||
}} | }} | ||
Uma vez baixada, esta imagem pode ser instalada usando o seguinte comando: | |||
{{console|body= | {{console|body= | ||
# ##i##lxc image import lxd- | # ##i##lxc image import lxd-amd64-zen2-1.4-release-std-2022-04-13.tar.xz --alias funtoo | ||
Image imported with fingerprint: fe4d27fb31bfaf3bd4f470e0ea43d26a6c05991de2a504b9e0a3b1a266dddc69 | Image imported with fingerprint: fe4d27fb31bfaf3bd4f470e0ea43d26a6c05991de2a504b9e0a3b1a266dddc69 | ||
}} | }} | ||
Agora você verá a imagem disponível em nossa lista de imagens: | |||
{{console|body= | {{console|body= | ||
# ##i##lxc image list | # ##i##lxc image list | ||
+--------+--------------+--------+--------------------------------------------+--------+----------+------------------------------+ | +--------+--------------+--------+-----------------------------------------+--------------+-----------+----------+------------------------------+ | ||
| ALIAS | FINGERPRINT | PUBLIC | DESCRIPTION | ARCHITECTURE | TYPE | SIZE | UPLOAD DATE | | |||
+--------+--------------+--------+-----------------------------------------+--------------+-----------+----------+------------------------------+ | |||
+--------+--------------+--------+--------------------------------------------+--------+----------+------------------------------+ | | funtoo | b8eaa7e30c14 | no | 1.4 Release Zen2 64bit [std] 2022-04-13 | x86_64 | CONTAINER | 342.13MB | Apr 29, 2022 at 9:36pm (UTC) | | ||
+--------+--------------+--------+-----------------------------------------+--------------+-----------+----------+------------------------------+ | |||
+--------+--------------+--------+--------------------------------------------+--------+----------+------------------------------+ | |||
# | # | ||
}} | }} | ||
=== Primeiro Container === | |||
Agora é hora de lançar nosso primeiro contêiner. Isso pode ser feito da seguinte forma: | |||
{{console|body= | {{console|body= | ||
Line 132: | Line 189: | ||
}} | }} | ||
Agora podemos ver o contêiner sendo executado via {{c |lxc list}}: | |||
{{console|body= | {{console|body= | ||
# ##i##lxc list | # ##i##lxc list | ||
+---------------+---------+------+-----------------------------------------------+------------+-----------+ | +---------------+---------+------+-----------------------------------------------+------------+-----------+ | ||
{{!}} | {{!}} NAME {{!}} STATE {{!}} IPV4 {{!}} IPV6 {{!}} TYPE {{!}} SNAPSHOTS {{!}} | ||
+---------------+---------+------+-----------------------------------------------+------------+-----------+ | +---------------+---------+------+-----------------------------------------------+------------+-----------+ | ||
{{!}} | {{!}} testcontainer {{!}} RUNNING {{!}} {{!}} fd42:8063:81cb:988c:216:3eff:fe2a:f901 (eth0) {{!}} PERSISTENT {{!}} {{!}} | ||
+---------------+---------+------+-----------------------------------------------+------------+-----------+ | +---------------+---------+------+-----------------------------------------------+------------+-----------+ | ||
# | # | ||
}} | }} | ||
Por padrão, nosso novo contêiner {{c |testcontainer}} usará o perfil padrão, que conectará uma interface {{c |eth0}} no contêiner ao NAT e também usará nosso pool de armazenamento LXD baseado em diretório. Agora podemos entrar no contêiner da seguinte maneira: | |||
{{console|body= | {{console|body= | ||
Line 153: | Line 207: | ||
}} | }} | ||
Como você deve ter notado, ainda não temos nenhuma rede IPv4 configurada. Embora o LXD tenha configurado uma ponte e um NAT para nós, juntamente com um servidor DHCP para consulta, na verdade, precisamos usar o {{c |dhcpcd}} para procurar um endereço IP, então vamos configurá-lo: | |||
{{console|body= | {{console|body= | ||
Line 169: | Line 223: | ||
}} | }} | ||
Agora você pode ver que {{c | eth0}} tem um endereço IPv4 válido: | |||
{{console|body= | {{console|body= | ||
Line 184: | Line 238: | ||
}} | }} | ||
O que aconteceu é que o LXD configurou um servidor DHCP para nós (dnsmasq) rodando em nossa rede privada de containers, e automaticamente oferece endereços IP para nossos containers. Ele também configurou o iptables para NAT na conexão para que o acesso de saída à Internet funcione magicamente. | |||
Você também poderá ver esse endereço IPv4 listado na lista de contêineres quando digitar {{c|lxc list}} em seu sistema host. | |||
{{ | |||
}} | |||
=== Solução de problemas de rede === | |||
=== | |||
{{ | {{warning| Prossiga com cautela. Estes são comandos LXC avançados que podem modificar o estado da configuração da sua rede local LXD. Em cenários extremos, o roteamento NAT de todas as redes de seus contêineres LXD pode facilmente quebrar tudo se o valor da chave de configuração LXC errado for alterado}} | ||
}} | |||
Observe que, se você estiver tendo problemas com seu contêiner para obter um endereço IPv4 via DHCP, certifique-se de desativar o IPv6 no LXD. Fazemos isto executando: | |||
{{console|body= | {{console|body= | ||
###i## lxc network edit lxdbr0 | |||
}} | }} | ||
Em seguida, altere o valor da chave YAML {{c|ipv6.nat}} para {{c|"false"}} e reinicie o LXD e o contêiner de teste: | |||
{{console|body= | {{console|body= | ||
###i## /etc/init.d/lxd restart | |||
###i## lxc restart testcontainer | |||
}} | }} | ||
Isto deve resolver o problema. | |||
{{ | {{important| Se você inicializou seu cluster LXD desativando o IPv6 com a opção ''Qual endereço IPv6 deve ser usado?'' definida como {{c|none (nenhum)}}, então o {{c|ipv6.nat}} nem estará presente na interface de ponte {{c|lxdbr0}} da nossa rede local LXC. | ||
}} | |||
Tenha cuidado para não adulterar a configuração {{c|ipv4.nat}} ou todo o roteamento NAT do contêiner LXD será interrompido, significando que nenhum tráfego de rede em execução e novos contêineres LXD poderão ser roteados para Internet!}} | |||
Aqui está um exemplo de YAML de um dispositivo de ponte de rede local LXC padrão {{c|lxdbr0}} para referência: | |||
{{file|name=lxc_lxdbr0.yaml|lang=YAML|desc=lxc network edit lxdbr0|body= | |||
{{ | |||
config: | config: | ||
ipv4.address: 10.239.139.1/24 | |||
ipv4.nat: "true" | |||
ipv6.address: none | |||
description: "" | description: "" | ||
name: lxdbr0 | |||
type: bridge | |||
used_by: | |||
- /1.0/profiles/default | |||
- /1.0/instances/funtoo-livestream | |||
managed: true | |||
status: Created | |||
locations: | |||
- none | |||
}} | }} | ||
=== Finalizando === | |||
=== | |||
Supondo que sua rede esteja funcionando agora, você está pronto para começar a usar seu novo contêiner Funtoo. Hora de ter alguma diversão! Vá em frente e execute {{c|ego sync}} e, em seguida, emerja suas coisas favoritas: | |||
{{console|body= | {{console|body= | ||
### | %testcontainer% ##i##ego sync | ||
\##g##Syncing meta-repo | |||
Cloning into '/var/git/meta-repo'... | |||
}} | }} | ||
[[Category:Containers]] | |||
[[Category:LXD]] | |||
[[Category:Official Documentation]] | [[Category:Official Documentation]] | ||
[[Category:First Steps]] |
Latest revision as of 19:01, October 12, 2022
Introdução
Observe que, se você planeja usar o LXD em um laptop, provavelmente está usando WiFi e NetworkManager, e as etapas abaixo não funcionarão para a configuração da ponte. Consulte LXD/Laptop Network Setup para diferenças importantes para permitir que você use o LXD no 'modo de desenvolvimento' para uso local de contêineres para desenvolvimento.
O LXD é um "hipervisor" de contêiner projetado para fornecer um conjunto fácil de ferramentas para gerenciar contêineres Linux, e seu desenvolvimento está sendo liderado por funcionários da Canonical. Você pode aprender mais sobre o projeto em geral em https://linuxcontainers.org/lxd/.
Atualmente, o LXD é usado para infraestrutura de contêineres para Funtoo Containers e também é muito bem suportado no Funtoo Linux. Por esse motivo, é recomendável que você verifique o LXD e veja o que ele pode fazer por você.
Configuração básica no Funtoo
As etapas a seguir mostrarão como configurar um ambiente LXD básico no Funtoo Linux. Esse ambiente usará essencialmente a configuração padrão do LXD -- será criado um chamado lxdbr0
que usará NAT para fornecer acesso à Internet aos seus contêineres. Além disso, será criado um pool de armazenamento padrão que simplesmente usará o armazenamento do seu sistema de arquivos existente, criando um diretório em /var/lib/lxd/storage-pools/default
para armazenar quaisquer contêineres que você criar. São possíveis configurações mais sofisticadas que usam pontes de rede dedicadas conectadas a interfaces físicas sem NAT, bem como pools de armazenamento dedicados que usam ZFS e btrfs -- no entanto, esses tipos de configurações são geralmente um exagero para uma estação de trabalho de desenvolvedor e devem ser tentados apenas por usuários avançados. Então não vamos cobri-los aqui.
Requerimentos
Esta seção irá guiá-lo através da configuração dos requisitos básicos para a criação de um ambiente LXD.
O primeiro passo é surgir o LXD e suas dependências. Faça o seguinte:
root # emerge -a lxd
Quando o LXD terminar de emergir, desejamos permitir que ele inicie por padrão:
root # rc-update add lxd default
Além disso, queremos configurar os seguintes arquivos. O /etc/security/limits.conf
deve ser modificado para ter as seguintes linhas:
/etc/security/limits.conf
* soft nofile 1048576
* hard nofile 1048576
root soft nofile 1048576
root hard nofile 1048576
* soft memlock unlimited
* hard memlock unlimited
# End of file
Em seguida, chegamos ao conceito de "subuid" e "subgid". Normalmente, um usuário receberá um ID de usuário e um ID de grupo. Subids e subgids nos permitem atribuir UIDs e GIDs adicionais a um usuário para uso próprio. Por padrão, o LXD alocará subuids para o usuário root, o que equivale a criar os seguintes arquivos no sistema de arquivos root:
/etc/subuid
root:1000000:10000000000
/etc/subgid
root:1000000:10000000000
O formato de ambos os arquivos é "user":"start":"count". Significando que o usuário root
receberá IDs "count" começando na posição "start". A razão pela qual o LXD faz isso é porque esses IDs extras serão usados para isolar contêineres dos processos do host e, opcionalmente, uns dos outros, usando diferentes deslocamentos para que seus UID e GIDs não se sobreponham. Com o LXD 5, agora essas configurações já estão "prontas", esses arquivos não precisam ser criados e existem aqui apenas para referência e compreensão do comportamento padrão do LXD. Para obter mais informações sobre subids e subgids, consulte What are subuids and subgids?.
LXD-in-LXD
A única vez que você precisará definir /etc/subuid
e /etc/subgid
é agora, e se você estiver executando "LXD-in-LXD". Nesse caso, o LXD interno (dentro do contêiner) precisará reduzir esses mapeamentos subuid e subgid, pois o intervalo completo não estará disponível. Isso deve ser possível simplesmente usando as seguintes configurações em sua instância LXD em contêiner:
/etc/subuid
root:65537:70000
/etc/subgid
root:65537:70000
Se você não estiver usando recursos avançados do LXD, sua instância LXD-in-LXD agora deve ter mapeamentos de id suficientes para isolar contêineres do contêiner do host. O único restante A etapa para LXD-in-LXD seria permitir que o contêiner do host aninhasse:
root # lxc config set host-container security.nesting true
Isso permitirá que o próprio host-container contenha contêineres :)
Inicialização
Para configurar o LXD, primeiro precisaremos iniciar o LXD. Isso pode ser feito da seguinte forma:
root # /etc/init.d/lxd start
Neste ponto, podemos executar o lxd init
para executar um assistente de configuração para configurar o LXD:
root # lxd init Would you like to use LXD clustering? (yes/no) [default=no]: ↵ Do you want to configure a new storage pool? (yes/no) [default=yes]: ↵ Name of the new storage pool [default=default]: ↵ Name of the storage backend to use (btrfs, dir, lvm) [default=btrfs]: dir ↵ Would you like to connect to a MAAS server? (yes/no) [default=no]: ↵ Would you like to create a new local network bridge? (yes/no) [default=yes]: ↵ What should the new bridge be called? [default=lxdbr0]: ↵ What IPv4 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]: ↵ What IPv6 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]: none ↵ Would you like LXD to be available over the network? (yes/no) [default=no]: ↵ Would you like stale cached images to be updated automatically? (yes/no) [default=yes] ↵ Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]: ↵ root #
Como você pode ver, escolhemos todos os padrões exceto para:
- pool de armazenamento
- Optamos por usar um armazenamento de contêiner baseado em diretório em vez de volumes btrfs. Baseado em diretório pode ser a opção padrão durante a configuração do LXD -- depende se você tem o btrfs-tools instalado ou não.
- Endereço IPv6
- É recomendado que você desative isso, a menos que você queira especificamente usar IPv6 em seus contêineres. Isso pode fazer com que
dhcpcd
em seu contêiner recupere apenas um endereço IPv6 se você o deixar ativado. Isso é ótimo se você tiver o IPv6 funcionando - caso contrário, você obterá um endereço IPv6 inválido e nenhum endereço IPv4 e, portanto, nenhuma rede.
Como explicado acima, desative o IPv6 NAT no LXD, a menos que você pretenda usá-lo especificamente! Isso pode confundir dhcpcd
.
Se você optar por gerar a configuração YAML lxd init preseed do comando lxd init
acima, aqui está um exemplo de configuração:
lxc_init_preseed.yaml
(YAML source code) - lxc init preseed config exampleconfig:
images.auto_update_interval: "0"
networks:
- config:
ipv4.address: auto
ipv6.address: none
description: ""
name: lxdbr0
type: ""
project: default
storage_pools:
- config: {}
description: ""
name: default
driver: dir
profiles:
- config: {}
description: ""
devices:
eth0:
name: eth0
network: lxdbr0
type: nic
root:
path: /
pool: funtoo
type: disk
name: default
projects: []
cluster: null
Agora, devemos ser capazes de executar lxc image list
e obter uma resposta do daemon LXD:
root # lxc image list +-------+-------------+--------+-------------+------+------+-------------+ | ALIAS | FINGERPRINT | PUBLIC | DESCRIPTION | ARCH | SIZE | UPLOAD DATE | +-------+-------------+--------+-------------+------+------+-------------+ root #
Se você conseguir fazer isso, você configurou com sucesso as partes principais do LXD! Observe que usamos o comando lxc
e não lxd
como fizemos para lxd init
-- deste ponto em diante, você usará o comando lxc
. Não deixe isso confundir você -- o comando lxc
é a principal ferramenta de linha de comando para trabalhar com contêineres LXD.
Acima, você pode ver que nenhuma imagem está instalada. Imagens são instantâneos instaláveis de contêineres que podemos usar para criar novos contêineres. Então, como primeiro passo, vamos em frente e pegue uma imagem que possamos usar. Você deseja procurar em https://build.funtoo.org em busca de uma imagem LXD que funcione no hardware do seu computador. Por exemplo, eu consegui baixar o seguinte arquivo usando o wget
:
root # wget https://build.funtoo.org/1.4-release-std/x86-64bit/amd64-zen2/2022-04-13/lxd-amd64-zen2-1.4-release-std-2022-04-13.tar.xz
Uma vez baixada, esta imagem pode ser instalada usando o seguinte comando:
root # lxc image import lxd-amd64-zen2-1.4-release-std-2022-04-13.tar.xz --alias funtoo Image imported with fingerprint: fe4d27fb31bfaf3bd4f470e0ea43d26a6c05991de2a504b9e0a3b1a266dddc69
Agora você verá a imagem disponível em nossa lista de imagens:
root # lxc image list +--------+--------------+--------+-----------------------------------------+--------------+-----------+----------+------------------------------+
Primeiro Container
Agora é hora de lançar nosso primeiro contêiner. Isso pode ser feito da seguinte forma:
root # lxc launch funtoo testcontainer Creating testcontainer Starting testcontainer
Agora podemos ver o contêiner sendo executado via lxc list
:
root # lxc list +---------------+---------+------+-----------------------------------------------+------------+-----------+ | NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS | +---------------+---------+------+-----------------------------------------------+------------+-----------+ | testcontainer | RUNNING | | fd42:8063:81cb:988c:216:3eff:fe2a:f901 (eth0) | PERSISTENT | | +---------------+---------+------+-----------------------------------------------+------------+-----------+ root #
Por padrão, nosso novo contêiner testcontainer
usará o perfil padrão, que conectará uma interface eth0
no contêiner ao NAT e também usará nosso pool de armazenamento LXD baseado em diretório. Agora podemos entrar no contêiner da seguinte maneira:
root # lxc exec testcontainer -- su --login testcontainer #
Como você deve ter notado, ainda não temos nenhuma rede IPv4 configurada. Embora o LXD tenha configurado uma ponte e um NAT para nós, juntamente com um servidor DHCP para consulta, na verdade, precisamos usar o dhcpcd
para procurar um endereço IP, então vamos configurá-lo:
testcontainer # echo "template=dhcpcd" > /etc/conf.d/netif.eth0 testcontainer # cd /etc/init.d testcontainer # ln -s netif.tmpl netif.eth0 testcontainer # rc-update add netif.eth0 default * service netif.eth0 added to runlevel default testcontainer # rc * rc is deprecated, please use openrc instead. * Caching service dependencies ... [ ok ] * Starting DHCP Client Daemon ... [ ok ] * Network dhcpcd eth0 up ... [ ok ] testcontainer #
Agora você pode ver que eth0
tem um endereço IPv4 válido:
testcontainer # ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.212.194.17 netmask 255.255.255.0 broadcast 10.212.194.255 inet6 fd42:8063:81cb:988c:25ea:b5bd:603d:8b0d prefixlen 64 scopeid 0x0<global> inet6 fe80::216:3eff:fe2a:f901 prefixlen 64 scopeid 0x20<link> ether 00:16:3e:2a:f9:01 txqueuelen 1000 (Ethernet) RX packets 45 bytes 5385 (5.2 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 20 bytes 2232 (2.1 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
O que aconteceu é que o LXD configurou um servidor DHCP para nós (dnsmasq) rodando em nossa rede privada de containers, e automaticamente oferece endereços IP para nossos containers. Ele também configurou o iptables para NAT na conexão para que o acesso de saída à Internet funcione magicamente.
Você também poderá ver esse endereço IPv4 listado na lista de contêineres quando digitar lxc list
em seu sistema host.
Solução de problemas de rede
Prossiga com cautela. Estes são comandos LXC avançados que podem modificar o estado da configuração da sua rede local LXD. Em cenários extremos, o roteamento NAT de todas as redes de seus contêineres LXD pode facilmente quebrar tudo se o valor da chave de configuração LXC errado for alterado
Observe que, se você estiver tendo problemas com seu contêiner para obter um endereço IPv4 via DHCP, certifique-se de desativar o IPv6 no LXD. Fazemos isto executando:
root # lxc network edit lxdbr0
Em seguida, altere o valor da chave YAML ipv6.nat
para "false"
e reinicie o LXD e o contêiner de teste:
root # /etc/init.d/lxd restart root # lxc restart testcontainer
Isto deve resolver o problema.
Se você inicializou seu cluster LXD desativando o IPv6 com a opção Qual endereço IPv6 deve ser usado? definida comonone (nenhum)
, então oipv6.nat
nem estará presente na interface de pontelxdbr0
da nossa rede local LXC.
Tenha cuidado para não adulterar a configuração ipv4.nat
ou todo o roteamento NAT do contêiner LXD será interrompido, significando que nenhum tráfego de rede em execução e novos contêineres LXD poderão ser roteados para Internet!
Aqui está um exemplo de YAML de um dispositivo de ponte de rede local LXC padrão lxdbr0
para referência:
lxc_lxdbr0.yaml
(YAML source code) - lxc network edit lxdbr0config:
ipv4.address: 10.239.139.1/24
ipv4.nat: "true"
ipv6.address: none
description: ""
name: lxdbr0
type: bridge
used_by:
- /1.0/profiles/default
- /1.0/instances/funtoo-livestream
managed: true
status: Created
locations:
- none
Finalizando
Supondo que sua rede esteja funcionando agora, você está pronto para começar a usar seu novo contêiner Funtoo. Hora de ter alguma diversão! Vá em frente e execute ego sync
e, em seguida, emerja suas coisas favoritas:
testcontainer # ego sync Syncing meta-repo Cloning into '/var/git/meta-repo'...