프로비저닝시 클라우드 구성을 사용하여 lxd 컨테이너를 구성하는 방법이 있습니까?


10

특히 CLI 도구를 사용하면 openstack이 아닙니다.

lxd가있는 로컬 dev 설정이 어떻게 보일지 살펴보고 있지만 새로운 컨테이너 구성과 관련하여 빈손으로 나타납니다.

lxd 컨테이너를 구성하는 관용적 방법이 있습니까? 도커 이미지와 같이 더 불변의 것을보아야합니까?

감사. 모든 자원이나 조언을 부탁드립니다.

답변:


13

따라서 컨테이너에 대해 직접 수행 할 수있는 여러 가지 방법이 있습니다.

lxc init ubuntu: CONTAINER
lxc config set CONTAINER user.user-data - < cloud-init-config.yml
lxc start CONTAINER

또는 더 짧습니다.

lxc launch ubuntu: CONTAINER --config=user.user-data="$(cat cloud-init-config.yml)"

또는 프로필을 통해 :

lxc profile create dev
lxc profile set dev user.user-data - < cloud-init-config.yml
lxc launch ubuntu: CONTAINER -p default -p dev

.yml 대신 .sh 파일을 어떻게 사용할 수 있습니까? 이 주제에 대한 자습서가 이미 있습니까?
Greg

위의 내용은이 질문과 관련이 있습니다 : stackoverflow.com/questions/44456522
Greg

3

오늘 함께 갔던 라이너 하나,이 컨테이너는 새 컨테이너의 기본 프로파일로 설정합니다.

echo -e "#cloud-config\nssh_authorized_keys:\n - $(cat ~/.ssh/id_rsa.pub)" | lxc profile set default user.user-data -

이것은 기존 컨테이너에 설정하지만 SSH 키 항목이 첫 번째 부팅에서만 수행되므로 이미 부팅 된 컨테이너에서는 작동하지 않습니다.

echo -e "#cloud-config\nssh_authorized_keys:\n - $(cat ~/.ssh/id_rsa.pub)" | lxc config set CONTAINER_NAME user.user-data -


3

OP보다 약간 더 구체적인 질문이 있었지만 내가 잘못하고있는 것을 해결하는 데 시간이 걸렸습니다. 나는 다른 사람이 비슷하게 엉망이되는 것을 돕기 위해 여기에 게시 할 것이라고 생각했습니다.

Ubuntu 16.04에서 호스팅되는 LXC / LXD Ubuntu 16.04 컨테이너에 대한 정적 네트워킹 설정을 원했습니다. 나는 Stéphane이 것을 시도하면서 시작 했지만 작동하지 않았습니다. 내 구성에는 DHCP가 제공되지 않으므로 IPv6 링크 로컬을 사용하는 기본 DHCP 시도 컨테이너였습니다.

내 초기 YAML은 ( cloud-init 문서 에서 가져온) 다음과 같이 보입니다 .

network:
  version: 1
  config:
    - type: physical
      name: eth0
      subnets:
        - type: static
          address: 192.168.23.14/27
          gateway: 192.168.23.1
          dns_nameservers:
            - 192.168.23.2
            - 8.8.8.8
          dns_search:
            - exemplary.maas

그리고 user.user-data위에서 설명한대로 이것을로드했습니다 .

lxc config set CONTAINER user.user-data - < CONTAINER.cloud-init-config.yml

LXC / LXD 소스 에서 Stéphane의 문서를 찾을 때까지는 그 값을로로드해야한다는 것을 깨달았습니다 user.network-config.

그래서 최종 YAML은 다음과 같이 보입니다.

version: 1
config:
  - type: physical
    name: eth0
    subnets:
      - type: static
        address: 192.168.23.14/27
        gateway: 192.168.23.1
        dns_nameservers:
          - 192.168.23.2
          - 8.8.8.8
        dns_search:
          - exemplary.maas

그런 다음 user.network-config대신에 이것을로드했습니다 .

lxc config set CONTAINER user.network-config - < CONTAINER.network-config.yaml

컨테이너 당 두 개의 서로 다른 파일을 유지해야 할 것 같습니다. 하나는 네트워크 설정을로드하기위한 것입니다 user.network-config. user.user-data하나의 파일을 모두 사용하는 방법을 찾을 수 없다면 다른 구성을로드 할 수 있습니다.


내가 알지 못하는 또 다른 문제는 네트워크 이외의 구성 요소를 자동으로 구성하려고 시도하는 것입니다.

lxc config set CONTAINER user.user-data - < CONTAINER.user-data.yaml

위의 명령으로 적용된 다음 YAML (을 사용하여 올바르게 보이지만 lxc config show CONTAINER)은 컨테이너 안에 아무것도 만들지 않았습니다.

write_files:
  - content: |
    # My new /etc/foo.bar file

    Foo
    Bar

    path: /etc/foo.bar

이 실마리는 사용자 데이터 입력 형식, 항목 5 : Cloud Config 데이터에 다음과 같이 표시됩니다.

로 시작 "#cloud-config"또는 "Content-Type: text/cloud-config" 이 콘텐츠는 "cloud-config"데이터입니다. 지원되는 구성 형식에 대한 주석이 달린 예제는 예제를 참조하십시오.

이 문서가 명확하지 않다고 생각합니다. "Content-Type : text / cloud-config"양식을 사용하여 작업을 수행 할 수는 없지만 #cloud-config첫 번째 줄을 입력하면 YAML이 구문 분석됩니다. 내 이해 또는 누군가의 프로그래밍 중 하나가 옳지 않다고 가정 할 수 있습니다. 키 값으로 명시 적으로로드 한 YAML을 user.user-data클라우드 구성 데이터 이외의 다른 것으로 사용해야한다는 것은 이해가되지 않습니다 . 클라우드 구성이 아니었다면 다른 사람이 왜 그렇게 하겠습니까? 따라서 왜 주석 (일반적인 shebang 구문을 사용하지 않는)이 필요 합니까?

따라서 말도 안되는, 구문 user.user-data은 다음과 같습니다.

#cloud-config

write_files:
  - content: |
      # My new /etc/foo.bar file

      Foo
      Bar

    path: /etc/foo.bar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.