정보보안 스터디 - 11주차 1일 - Kubernetes 쿠버네티스
☞ 쿠버네티스(Kubernetes)
파드는 컨테이너를 그룹화시켜서 관리해줍니다.
예를 들어 웹서버, 로그 수집기, DB서버, 모니터링 서버 등 하나의 시스템에 여러 서버가 필요하고
서로다른 4개의 서버를 파드라는 하나의 그룹에 담아서 이미지를 불러오고 관리합니다.
도커와 비슷해보이지만
한곳에 모아서 컨트롤 한다는 개념이 도커와는 조금 다릅니다.
master - node1,2,3
Ansible 노드 구성은 이렇게 됩니다.
저번시간에 Ansible 키배포를 하고 현재 연결한 상태입니다.
노드에 파드를 할당시키고 할당받은 노드를 변함없이 쭉 사용합니다.
만약 노드에 장애가 발생했을 경우 다른 노드로 변경할 수 있습니다.
kubectl get nodes -o wide master와 노드1,2,3 레디 상태를 확인합니다. master는 control-plane으로 뜹니다. 구글처럼 클라우드 서비스는 지역별로, 예를들어 아시아에 노드를 많이 깔아놓고 운영합니다. |
kubernetes 는 docker 이미지를 pull해 옵니다.
그렇기 때문에 받아오려는 서버(docker 허브)에 로그인해줘야합니다.
secret을 만들고, patch -n 패치해줍니다.
kubectl create secret docker-registry mysecret \ --docker-username=아이디 \ --docker-password=비밀번호 \ --docker-email=이메일 |
patch -n ~ |
☞ 파드 생성 방법
컨테이너 이미지를 실행시키는 방법,
즉 파드를 생성하는 방법은 두가지가 있습니다.
kubectl run web1-pod --image=nginx --port=80 |
여기서 run으로 생성하는 방법이며 현재 가장 빠른 노드에 할당됩니다.
랜덤순이나 분배순이 아닙니다.
yml 파일을 이용하여 파드를 생성하는 방법입니다.
컨테이너 이미지는 여러개 실행이 가능합니다.
kubectl run web --image=nginx --port=80 --dry-run -o yaml > web2-pod.yml |
kubectl create -f web2-pod.yml |
kubectl get pods (web2-pod) 파드에대한 설명을 봅니다. kubectl get pods -o wide ip 등 자세한 설명을 봅니다. kubectl get pods -o yaml pods설정이 yaml파일 형식으로 나오기 때문에 yml 파일로 출력시켜서 파드 생성 파일로 많이 사용됩니다. kubectl get pods -o json json형식으로 나오지만 지저분해서 자주 사용하지 않습니다. |
kubectl get pods -o wide --watch 이전에는 고정된 설정확인이였다면 rending 단계부터 > running > success/fail, 삭제 등 실시간으로 상태 확인이 가능합니다. |
kubectl get pods -n kube-system 시스템 네임스페이스인 파드를 확인합니다. -n default가 기본값입니다. |
kubectl describe pods web2-pod 현재 실행과정, 자세한 내용을 보는 명령어입니다. 오류가 나거나 환경 설정이 잘못 됐을 때 자주 사용합니다. |
☞ 배포기능
파드를 여러개 한번에 실행가능합니다.
kubectl create[apply] deployment webapi --image=httpd --replicas=3 3개를 생성합니다. |
kubectl get deployments.apps |
kubectl describe deployments.apps 로 확인하면 파드3개가 노드에 연결되어 webapi-이름으로 번호가 생성된 것을 볼 수 있습니다. |
쿠버네티스의 큰 장점은 vim 편집기로 갯수설정을 변경하면 바로 적용된다는 점입니다.
kubectl port-forward web 8080:80 8080포트로 외부에 포트 노출 > x윈도우에서 8080접속 |
kubectl exec web2-pod -c nginx-container -it -- /bin/bash 웹서버 컨테이너의 쉘로 들어갑니다. --이후로는 인자를 입력합니다. |
kubectl exec web2-pod -c centos-container -it -- /bin/bash curl http://localhost 컨테이너끼리는 ip를 공유하기 때문에 centos에서 localhost:80으로 자기 ip에 접속했을 때 웹이 뜹니다. |
또한 컨테이너를 생성하면서 커널을 공유중인 리눅스 본체에서도 ip가 생성되며
웹 접속이 가능합니다. 실제 pc에서는 네트워크 대역을 공유안해서 접속이 아직 불가능합니다.
☞ 네임스페이스
네임스페이스는 여러 환경에서 여러 사용자가 사용할 때 파드양이 많아지므로 구분하기 위해 사용합니다.
kubectl create namespace prodns |
kubectl get namespaces |
kubectl config view 노드 정보, context 확인 |
config 설정변경으로 기본 네임스페이스 변경이 가능합니다.
yaml 파일로 받아와서 생성이 가능합니다.
# kubectl create namespaces prodns --dry-run -o yaml > prodns.yml # vi prodns.yml # kubectl create -f prodns.yml |
파드는 라이프타임 설정을 할 수 있습니다.