code

Kubernetes에서 컨테이너를 계속 가동하려면 어떻게 해야 합니까?

starcafe 2023. 9. 10. 12:26
반응형

Kubernetes에서 컨테이너를 계속 가동하려면 어떻게 해야 합니까?

이제 Kubernetes 클러스터에서 셸(/bin/bash)이 있는 간단한 컨테이너를 실행하려고 합니다.

도커 컨테이너에 컨테이너를 계속 가동시키는 방법이 있다고 생각했습니다.pseudo-ttyoption (리션및 )-td의 옵션docker run명령).

예를들면,

$ sudo docker run -td ubuntu:latest

쿠버네티스에 이런 옵션이 있습니까?

나는 컨테이너를 사용해서 실행해 보았습니다.kubectl run-container명령어:

kubectl run-container test_container ubuntu:latest --replicas=1

하지만 컨테이너는 몇 초 동안 빠져나갑니다. (마치 로 발사되는 것과 같습니다.docker run위에서 언급한 옵션이 없는 명령).Replication Controller 반복적으로 실행합니다 가 실행합니다 반복적으로 replic 가 ation contro ller 실행합니다 .

Kubernetes에 컨테이너를 계속 가동시킬 방법이 있나요?-td의의 docker run지휘?

용기는 완성될 때까지 작동하도록 되어 있습니다.결코 끝내지 못하는 작업을 컨테이너에 제공해야 합니다.이와 같은 것이 효과가 있을 것입니다.

apiVersion: v1
kind: Pod
metadata:
  name: ubuntu
spec:
  containers:
  - name: ubuntu
    image: ubuntu:latest
    # Just spin & wait forever
    command: [ "/bin/bash", "-c", "--" ]
    args: [ "while true; do sleep 30; done;" ]

이 는 본인의 「CMD」 「CMD」에서할 수 .Dockerfile:

CMD exec /bin/bash -c "trap : TERM INT; sleep infinity & wait"

그러면 중지하라는 지시가 있을 때까지 컨테이너가 계속해서 살아 있을 것입니다.트랩과 대기를 사용하면 컨테이너가 중지 요청에 즉시 반응합니다.트랩/대기 정지를 하지 않으면 몇 초 정도 걸립니다.

(알파인 기반 영상에 사용되는) 비지박스 기반 영상의 경우 수면은 무한대 인수를 알 수 없습니다.이 해결 방법을 통해 A에 대한 즉각적인 응답을 얻을 수 있습니다.docker stop위의 예와 같이:

CMD exec /bin/sh -c "trap : TERM INT; sleep 9999999999d & wait"

컨테이너는 주 프로세스가 종료되면 종료됩니다.다음과 같은 작업을 수행합니다.

docker run -itd debian

용기를 여는 것은 솔직히 빠른 테스트와 예제에만 사용되어야 하는 해킹입니다.단지 몇 분 동안 테스트를 위한 컨테이너를 원한다면 다음과 같이 하겠습니다.

docker run -d debian sleep 300

잊어 버리면 용기가 자동으로 빠져나간다는 장점이 있습니다.이런 면,런,을,다에 .while루프를 사용하여 영원히 실행되도록 유지하거나 다음과 같은 응용프로그램을 실행합니다.top 것들은 할 수 것입니다. 이 모든 것들은 쿠버네티스에서 쉽게 할 수 있을 것입니다.

진짜 질문은 왜 이런 짓을 하고 싶으냐는 겁니다.컨테이너는 서비스를 제공해야 하며, 서비스 프로세스를 통해 컨테이너를 백그라운드에서 실행할 수 있습니다.

  1. 도커 파일에서 다음 명령을 사용합니다.

    CMD ["sh", "-c", "tail -f /dev/null"]
    
  2. 도커 이미지를 만듭니다.

  3. 이미지를 사용할 수 있는지 확인하기 위해 클러스터 또는 유사한 장치로 푸시합니다.
  4. kubectl run debug-container -it --image=<your-image>
    

POD를 계속 실행하려면 특정 작업을 수행해야 합니다. 그렇지 않으면 Kubernetes가 불필요하다고 판단하여 중지합니다.POD를 계속 실행하는 데는 여러 가지 방법이 있습니다.

유용한 작업을 수행하지 않고 지속적으로 실행하기 위해 POD가 필요할 때도 비슷한 문제에 직면했습니다.다음은 저를 위해 일하는 두 가지 방법입니다.

  1. 컨테이너를 실행하는 동안 sleep 명령을 실행하고 있습니다.
  2. 컨테이너 내부에서 무한 루프를 실행하고 있습니다.

첫 번째 옵션이 두 번째 옵션보다 쉽고 요구 사항도 충분할 수 있지만 최선의 옵션은 아닙니다.따라서 sleep 명령에서 할당할 시간(초)에 제한이 있습니다.하지만 그 안에서 무한한 고리가 달린 컨테이너는 절대 빠져나가지 않습니다.

그러나 두 가지 방법을 모두 설명하겠습니다(비즈니스 박스 컨테이너를 실행 중임을 고려할 때).

1. 취침 명령

apiVersion: v1
kind: Pod
metadata:
  name: busybox
  labels:
    app: busybox
spec:
  containers:
  - name: busybox
    image: busybox
    ports:
    - containerPort: 80
    command: ["/bin/sh", "-ec", "sleep 1000"]

2. 무한 루프

apiVersion: v1
kind: Pod
metadata:
  name: busybox
  labels:
    app: busybox
spec:
  containers:
  - name: busybox
    image: busybox
    ports:
    - containerPort: 80
    command: ["/bin/sh", "-ec", "while :; do echo '.'; sleep 5 ; done"]

다음 명령을 실행하여 포드를 실행합니다.

kubectl apply -f <pod-yaml-file-name>.yaml

도움이 되길 바랍니다!

k8s 포드가 컨테이너를 영원히 실행할 수 있는 가장 간단한 명령어:

apiVersion: v1
kind: Pod
metadata:
  name: ubuntu
spec:
  containers:
  - name: ubuntu
    image: ubuntu:latest
    # Just sleep forever
    command: [ "sleep" ]
    args: [ "infinity" ]

그 주제에 대한 나의 몇센트.kubectl작동하고 있다면 질문에서 언급한 도커 명령과 동일한 가장 가까운 명령어는 이런 것입니다.

$ kubectl run ubuntu --image=ubuntu --restart=Never --command sleep infinity

의 을 이 됩니다 하면 됩니다 이 하면 의 을 Pod인에default and,스및다됩니다를 할 것입니다.sleepinfinity인수 이렇게 하면 컨테이너가 활성화된 상태로 포그라운드에서 실행되는 프로세스가 발생합니다.

나중에, 당신은 다음과 상호작용할 수 있습니다.Pod다를kubectl exec지휘.

$ kubectl exec ubuntu -it -- bash

이 기법은 포드 리소스 생성 및 애드혹 디버깅에 매우 유용합니다.

저는 이 일을 명령으로 해결할 수 있었습니다.sleep infinity컨테이너를 열어둘 쿠버네티스에 있어요효과가 없을 때는 이 답변을 참고하십시오.

K8s 클러스터에서 컨테이너를 계속 실행하려면 Docker 파일 내부에서 다음 명령을 사용합니다.

  • CMD 꼬리 -f/dev/null

컨테이너의 ->포트 및 컨테이너 포트 라인 다음에 템플릿에 추가합니다.

    command: ["/bin/sh", "-ec", "while :; do echo '.'; sleep 6 ; done"]

저의 경우 initContainer가 있는 pod가 초기화에 실패했습니다.실행중입니다.docker ps -a그리고 나서.docker logs exited-container-id-here나에게 로그 메시지를 줬습니다.kubectl logs podname표시되지 않았습니다.미스터리가 풀렸습니다 :-

이를 달성하기 위한 다양한 방법이 있지만 가장 우아한 방법 중 하나는 다음과 같습니다.

kubectl run -i --tty --image ubuntu:latest ubuntu-test --restart=Never --rm /bin/sh

나는 그것을 배경에 넣어서 해킹을 했습니다.

[root@localhost ~]# kubectl run hello -it --image ubuntu -- bash &
[2] 128461

포드에서 실행hello

[root@localhost ~]# kubectl exec -it hello -- whoami
root
[root@localhost ~]# kubectl exec -it hello -- hostname
hello

포탄 받기

[root@localhost ~]# kubectl exec -it hello -- bash
root@hello:/# ls
bin  boot  dev  etc  home  lib  lib32  lib64  libx32  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

이 명령은 도움이 될 수 있습니다.

CMD exec /bin/bash -c "trap : TERM INT; sleep i infinity & wait"

언급URL : https://stackoverflow.com/questions/31870222/how-can-i-keep-a-container-running-on-kubernetes

반응형