Kubernetes를 사용하여 하나의 yaml 파일에 여러 명령을 설정하는 방법은 무엇입니까?
이 공식 문서에서는 yaml 구성 파일에서 명령을 실행할 수 있습니다.
apiVersion: v1
kind: Pod
metadata:
name: hello-world
spec: # specification of the pod’s contents
restartPolicy: Never
containers:
- name: hello
image: "ubuntu:14.04"
env:
- name: MESSAGE
value: "hello world"
command: ["/bin/sh","-c"]
args: ["/bin/echo \"${MESSAGE}\""]
둘 이상의 명령을 실행하려면 어떻게해야합니까?
command: ["/bin/sh","-c"]
args: ["command one; command two && command three"]
설명 : (가) command ["/bin/sh", "-c"]
"쉘을 실행하고 다음 명령을 실행"말한다. 그런 다음 인수는 명령으로 쉘에 전달됩니다. 쉘 스크립팅에서 세미콜론은 명령을 분리 &&
하고 첫 번째 명령이 성공하면 조건부로 다음 명령을 실행합니다. 위의 예에서는 항상 command one
다음에 실행 되고 성공한 경우 command two
에만 실행 command three
됩니다 command two
.
대안 : 대부분의 경우 실행하려는 명령 중 일부는 실행할 최종 명령을 설정하는 것입니다. 이 경우 고유 한 Dockerfile을 빌드하는 것이 좋습니다 . 특히 RUN 지시문을 보십시오 .
내가 선호하는 것은 args를 여러 줄로 만드는 것입니다. 이것은 가장 간단하고 읽기 쉽습니다. 또한 이미지에 영향을주지 않고 스크립트를 변경할 수 있으며 포드를 다시 시작하기 만하면됩니다. 예를 들어 mysql 덤프의 경우 컨테이너 사양은 다음과 같을 수 있습니다.
containers:
- name: mysqldump
image: mysql
command: ["/bin/sh", "-c"]
args:
- echo starting;
ls -la /backups;
mysqldump --host=... -r /backups/file.sql db_name;
ls -la /backups;
echo done;
volumeMounts:
- ...
이것이 작동하는 이유는 yaml이 실제로 "-"뒤의 모든 행을 하나로 연결하고 sh는 하나의 긴 문자열 "echo starting; ls ...; echo done;"을 실행하기 때문입니다.
볼륨 및 ConfigMap을 사용하려는 경우 ConfigMap 데이터 를 스크립트로 마운트 한 다음 해당 스크립트를 실행할 수 있습니다.
---
apiVersion: v1
kind: ConfigMap
metadata:
name: my-configmap
data:
entrypoint.sh: |-
#!/bin/bash
echo "Do this"
echo "Do that"
---
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: "ubuntu:14.04"
command:
- /bin/entrypoint.sh
volumeMounts:
- name: configmap-volume
mountPath: /bin/entrypoint.sh
readOnly: true
subPath: entrypoint.sh
volumes:
- name: configmap-volume
configMap:
defaultMode: 0700
name: my-configmap
이렇게하면 포드 사양이 약간 정리되고 더 복잡한 스크립팅이 가능합니다.
$ kubectl logs my-pod
Do this
Do that
'programing' 카테고리의 다른 글
Xcode 7에서 프로젝트 및 cocoapods 종속성에 대한 비트 코드를 비활성화 하시겠습니까? (0) | 2021.01.16 |
---|---|
C에서 포인터가 가리키는 함수를 결정합니까? (0) | 2021.01.16 |
Ubuntu에서 사용자를 어떻게 추가합니까? (0) | 2021.01.16 |
Ubuntu에서 xdebug를 사용할 수 있습니까? (0) | 2021.01.16 |
YAML이 마크 업 언어가 아닌 경우 무엇입니까? (0) | 2021.01.16 |