답변:
따라서 컨테이너에 대해 직접 수행 할 수있는 여러 가지 방법이 있습니다.
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
오늘 함께 갔던 라이너 하나,이 컨테이너는 새 컨테이너의 기본 프로파일로 설정합니다.
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 -
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