사이드카 컨테이너 패턴
아마도 사이드카 컨테이너의 가장 인기 있는 구현 중 하나는 Istio 서비스 메시에 있을 것입니다. 사이드카 컨테이너(Envoy 프록시)는 애플리케이션 컨테이너 옆에서 실행되며 인바운드 및 아웃바운드 요청을 가로챕니다. 이 시나리오에서 사이드카는 기존 컨테이너에 기능을 추가하고 운영자가 트래픽 라우팅, 장애 주입 및 기타 기능을 수행할 수 있도록 합니다.

더 간단한 아이디어는 응용 프로그램 컨테이너의 로그를 수집하고 저장하는 사이드카 컨테이너(
log-collector
)를 갖는 것입니다. 이렇게 하면 애플리케이션 개발자가 로그 수집 및 저장에 대해 걱정할 필요가 없습니다. 사이드카 컨테이너가 로그를 수집하고 추가 처리 또는 보관을 위해 보낼 수 있는 위치(컨테이너 간에 공유되는 볼륨)에 로그를 작성하기만 하면 됩니다.초기화 컨테이너에 사용한 예제를 계속 진행하면; 정기적으로 실행
git pull
을 업데이트하고 저장소를 업데이트하는 사이드카 컨테이너를 생성할 수 있습니다. 이것이 작동하려면 초기 복제를 수행하기 위한 초기화 컨테이너와 주기적으로(예: 60초마다) 리포지토리 변경 사항을 확인하고 가져오는 사이드카 컨테이너를 유지합니다.이를 시도하려면 original Github repository을 포크하고 아래 YAML에서 포크를 사용하십시오.
apiVersion: v1
kind: Pod
metadata:
name: website
spec:
initContainers:
- name: clone-repo
image: alpine/git
command:
- git
- clone
- --progress
- https://github.com/peterj/simple-http-page.git
- /usr/share/nginx/html
volumeMounts:
- name: web
mountPath: "/usr/share/nginx/html"
containers:
- name: nginx
image: nginx
ports:
- name: http
containerPort: 80
volumeMounts:
- name: web
mountPath: "/usr/share/nginx/html"
- name: refresh
image: alpine/git
command:
- sh
- -c
- watch -n 60 git pull
workingDir: /usr/share/nginx/html
volumeMounts:
- name: web
mountPath: "/usr/share/nginx/html"
volumes:
- name: web
emptyDir: {}
위의 YAML에
refresh
라는 컨테이너를 추가했습니다. 초기화 컨테이너와 동일한 이미지인 alpine/git
이미지를 사용하고 watch -n 60 git pull
명령을 실행합니다.The
watch
command periodically executes a command. In our case, it executesgit pull
command and updates the local repository every 60 seconds.
이전에 언급하지 않은 또 다른 필드는
workingDir
입니다. 이 필드는 컨테이너의 작업 디렉토리를 설정합니다. 초기 컨테이너를 사용하여 repo를 원래 복제한 위치이므로 /usr/share/nginx/html
로 설정합니다.위의 YAML을
sidecar-container.yaml
에 저장하고 kubectl apply -f sidecar-container.yaml
를 사용하여 포드를 생성합니다.초기화 컨테이너가 실행된 후
kubectl get pods
를 실행하면 이제 READY
열에 2/2
가 표시됩니다. 이 숫자는 이 포드에 총 2개의 컨테이너가 있고 둘 다 준비되었음을 즉시 알려줍니다.$ kubectl get po
NAME READY STATUS RESTARTS AGE
website 2/2 Running 0 3m39s
kubectl port-forward pod/website 8000:80
명령을 사용하여 Pod로 포트 포워드를 설정하고 http://localhost:8000
로 브라우저를 열면 이전과 동일한 웹 페이지가 표시됩니다.별도의 터미널 창을 열고
refresh
포드 내부의 website
컨테이너에서 로그를 볼 수 있습니다.$ kubectl logs website -c refresh -f
Every 60.0s: git pull
Already up to date.
watch
명령이 실행 중이고 마지막git pull
명령의 응답은 Already up to date
입니다. 포크한 저장소의 index.html
를 변경해 보겠습니다.<div>
요소를 추가했으며 업데이트된index.html
파일은 다음과 같습니다.<html>
<head>
<title>Hello from Simple-http-page</title>
</head>
<body>
<h1>Welcome to simple-http-page</h1>
<div>Hello!</div>
</body>
</html>
다음으로 이것을 준비하고
master
분기에 커밋해야 합니다. 가장 쉬운 방법은 Github의 웹 페이지에서 하는 것입니다. Github에서 index.html
를 엽니다(저는 https://github.com/peterj/simple-http-page/blob/master/index.html
를 엽니다. 하지만 내 사용자 이름peterj
을 사용자 이름 또는 저장소를 포크한 조직으로 바꿔야 합니다.) 연필 아이콘을 클릭하여 파일을 편집합니다(아래 그림 참조). ).
index.html
파일을 변경하고 변경 사항 커밋 버튼을 클릭하여 브랜치에 커밋합니다. 다음으로 refresh
컨테이너의 출력을 보면 다음과 같은 출력이 표시되어야 합니다.Every 60.0s: git pull
From https://github.com/peterj/simple-http-page
f804d4c..ad75286 master -> origin/master
Updating f804d4c..ad75286
Fast-forward
index.html | 1 +
1 file changed, 1 insertion(+)
위의 출력은 리포지토리에 대한 변경 사항을 나타냅니다. Git은 업데이트된 파일을 공유 볼륨으로 가져옵니다. 마지막으로
http://localhost:8000
를 연 브라우저를 새로 고침하면 페이지의 변경 사항을 확인할 수 있습니다.
더 많은 변경을 할 수 있으며 매번 페이지가 60초 이내에 업데이트됩니다.
kubectl delete po website
를 실행하여 포드를 삭제할 수 있습니다.
Reference
이 문제에 관하여(사이드카 컨테이너 패턴), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/peterj/sidecar-container-pattern-314텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)