※ 참고로 편의상 kubectl = k 로 alias 해놨다.
정보 확인
쿠버네티스는 네임스페이스끼리 통신할 때 텍스트 주소로 통신하기 때문에 coreDNS가 필수다.
다음 명령어로 coreDNS의 주소가 어디에 있는 지 확인할 수 있다.
k cluster-info
coreDNS가 정상 실행running되고 있는 것을 확인하기 위해 아래 명령어를 쓴다.
kubectl get all -n kube-system
특정 노드에 대한 정보를 확인해 보자.
cpu, memory 등의 용량을 볼 수 있고 kubelet과 kube-proxy 등의 버전을 볼 수 있다.
k describe node master.labs.local
노드 스케쥴러
노드 스케쥴러의 진행상황을 실시간으로 볼 수 있다.
이 창을 따로 왼쪽에 띄워놓고 실시간 상황을 보자
watch kubectl get pods -o wide
watch kubectl get pods,networkpolicy,statefulset,service -o wide
nginx 이미지로 webserver 라는 컨테이너를 만들어보겠다.
k run webserver --image=nginx
매번 저 watch 실시간 화면을 보면서 ip를 알아낼 순 없기도 하고 목록이 많으면 찾기 어려우니까
awk를 써서 원하는 ip 부분만 표시시켜보자.
k get pods -o wide | awk '{print $1,$6}'
실행
메타데이터 이름은 무조건 소문자 사용
k run WEB1 --image=nginx:1.14
접속
webserver 컨테이너에도 이런식으로 도커처럼 접속이 가능하다.
(cat이나 ls 는 쉘에 접속 안해도 쓸 수 있는 명령어라 -it 옵션을 주진 않았다)
k exec webserver -- cat /etc/hosts
k exec webserver -- ls /
쉘로 접속하면 nginx가 데몬실행이라 다음과 같이 -it 옵션을 줘야하고
도커처럼 왼쪽 hostname 부분 모양이 바뀐다 /#
k exec webserver -it -- /bin/bash
다음과 같이 nginx 웹페이지의 내용을 바꿔보자
cd /usr/share/nginx/html/
echo "My name is Nirah" > index.html
cat index.html
빠져나올 때는 도커랑 다르게 exit를 써도 쉘밖으로 나가서 exited 되거나 하지 않는다.
(ctrl+p+q 빠이 빠이)
elinks http://172.16.220.70
웹페이지 내용 확인 elinks
다음과같이 webserver 접속시 띄우는 내용을 텍스트로 확인가능
curl http://172.16.220.70
yum -y install elinks
커멘드 기반의 웹브라우저를 볼 수 있는 프로그램이다.
curl은 완전이 텍스트 기반인 데 반해 이것은 그래픽을 조금 볼 수 있다.
elinks http://172.16.220.70
port-forward
포트포워딩 (편의상 죽일수 있게 백그라운드로 실행 &)
k port-forward web 80:80 &
localhost = master node
deployment
deployment는 컨테이너를 대량으로 만들 때 쓴다.
run VS create
아래와 같이 run을 써서 webserver 이름으로 컨테이너를 만들면 기존에 이미 존재해서 안 만들어진다.
이런 일 때문에 대량으로 컨테이너를 만들 때 이름을 하나하나 지정해 주는 것은 매우 번거로운 일일 것이다.
하지만 deployment를 쓰면 replicas만 지정해주면 인스턴트하고 빠르게 컨테이너들을 대량생상할 수가 있다.
node 정보를 보면 자동으로 밸런싱이 되어서 컨테이너가 node1~3에 골고루 배치된 것이 보인다.
k create deployment web-apaches --image=httpd:latest --replicas=3
다음과 같이 watch 창에 3개의 복제 컨테이너가 생성되어 올라왔다.
각각의 컨테이너들을 구분하기 위해서 이름옆에 해쉬태그가 랜덤하게 자동으로 붙어서 생성된다.
개별삭제나 지정 시에는 이 해쉬태그를 이용하면 되겠다.
k get deployments
웹 아파치에 대한 자세한 정보를 얻고 싶으면 이렇게 한다.
3개를 요구 했고, 3개가 업데이트됐다는 정보가 레플리카스에 남아있다.
k describe deployments web-apaches
3개는 어떤 것에 접근하던 간에 동일한 정보라는 것을 알 수 있다.
세 쌍둥이!
elinks http://172.16.153.132
elinks http://172.16.51.69
elinks http://172.16.220.69
k edit deployment web-apaches
레플리카 3→ 5로 수정
자동으로 5개로 스케일 아웃 되었다!
지우는 방법은 이거 하나면 5개 다 싹 사라진다
k delete deployments web-apaches
메니페스토 파일 저장
나중에 원하는 메니페스토 파일을 만들 때 컨테이너를 yaml이나 json의 파일 형식으로 저장해야 한다.
우선 wedserver 컨테이너를 yaml 파일로 출력해서 확인해 보겠다.
아래와 같이 각종 용량이나 정보 등을 띄워준다.
k get pods webserver -o yaml
(제이슨의 경우 k get pods web -o json)
위 출력 내용이 원하는 것이 확인 됐다면 바로 다음과 같이 파일로 저장한다.
k get pods webserver -o yaml > webserver.yaml
cat webserver.yaml |more -10
컨테이너 사전 시뮬레이션 (--dry-run)
회사에서 만든 컨테이너를 서버에 바로 올리는 것은 리소스를 차지하기도 하고 잘못 될 가능성이 있다.
그래서 컨테이너가 잘 작동할 지 올리기 전에 간단하게 사전 시뮬레이션 해보는 명령어가 있다.
새로 컨테이너 'web'을 하나 만들어보자.
k run web --image=nginx:1.14 --port=80 --dry-run
이것은 테스트므로 실행된 상태는 아니라는 점을 명심해라.
실행 전 시뮬레이션한 컨테이너의 야믈 코드 조회 (-o yaml)
k run web --image=nginx:1.14 --port=80 --dry-run -o yaml
이를 yaml 파일로 안전하게 따로 저장해서 백업하거나 수정할 수도 있다.
k run web --image=nginx:1.14 --port=80 --dry-run -o yaml > webserver.yaml
cat webserver.yaml
yaml 코드 파일로 컨테이너 실행
서버에 올린 컨테이너를 수정하고 적용하려면 이런식으로 yaml 파일을 수정해서 테스트한 뒤
그 yaml 파일(또는 json)을 올리는 과정이 필요하다.
yaml파일 작성에는 주의사항이 있는데, 들여쓰기 칸수가 정해져있고 이게 중요하게 작용한다는 점이다.
이렇게 두칸씩 스페이스를 누른 상태의 들여쓰기 방식으로 계층구조를 나타낼 수 있다.
들여쓰기를 해서 안으로 들어간 부분은 하위 아이템이 되는 것인데
여기서 앞 창문의 색상은 vehicle -> car -> window -> front -> color 를 타고 들어갔음을 알 수 있다.
https://blog.naver.com/rodpold/222756434024
YAML, YML 이란?
YAML은 공식 홈페이지의 말을 따르면 YAML Ain't Markup Language™ 의 줄임말이다. 이것...
blog.naver.com
우선 원본인 web 컨테이너를 삭제해버린다.
k delete pods web
이름 수정
삭제한 web이 남기고 간 yaml 코드의 이름 등을 다소 수정하여 실행
vi webserver.yaml
원본
수정 후
해당 yaml 파일로 컨테이너를 실행하려면 -f 파일 옵션을 붙여서 만들면 된다.
k create -f webserver.yaml
이름이 수정한 대로 web2로 바뀌어서 잘 실행되고 있는 것을 확인 가능하다.
node name 수정
원래 노드 네임은 스케쥴러가 확인하여 자동으로 배정하는데 수동으로 yaml에서 지정해줄 수 있다
(원래 수동으로 설정하면 실수할 수도있으니 자동이 더 좋긴하다)
컨테이너포트의 프로토콜 지정 (디폴트값 TCP)
초기화
k delete pods webserver
k delete deployments web-apaches
'Kubernetes' 카테고리의 다른 글
kubectl config 명령어 (클러스터 context 변경) (0) | 2022.12.27 |
---|---|
Namespace (0) | 2022.12.26 |
Kubernetes Resource 관리 (0) | 2022.12.22 |
Kubernetes image pull error (0) | 2022.12.20 |
Kubernetes 개념 /설치 /조인 (0) | 2022.12.19 |