February 07, 2020
이 글은 윤준성의 개발꼬맹이 시절, 혼자 노션에 공부하며 정리해둔 것 중 괜찮은 것을 추려올린 글입니다. 기술블로그 글 기고 목적으로 작성되지 않아, 가독성이 좋지 않거나 알 수 없는 워딩이 있을 수 있습니다.
: 컨테이너 오케스트레이션 툴
스케쥴링
클러스터링
서비스 디스커버리
쿠버네티스 시작하기 - Kubernetes란 무엇인가?
한 개 이상의 컨테이너와 스토리지, 네트워크 속성으로 구성
클러스터는 마스터 + 노드
마스터
노드
#클러스터 정보 보기
kubectl cluster-info
#node들 정보 보기
kubectl get nodes쿠버네티스 Deployment 설정을 만들어야한다
#deployment 생성
#kubectl create deployment
kubectl create deployment kubernetes-bootcamp --image=gcr.io/googkle-samples/kubernetes-booycamp:v1
#deploymeny 확인
kubectl get deployments
#proxy 시작
#curl http://localhost:8001/version(예시)로 확인해보자!
kubectl proxy# pods 정보보기
kubectl get pods
# pods에 속한 container들 등 보기
kubectl describe pods
#$POD_NAME의 컨테이너 접속해서 명령실행하기
kubectl exec -it $POD_NAME bash# services 정보보기
kubectl get services
# 새로운 service 포트 할당하기
kubectl expose deploment/kubernetes-bootcamp --type="NodePort" --port 8080
# 열린 포트 번호 등 정보 보기
kubectl describe services
kubectl describe services/(서비스 이름)
# service로 필터링(run=kubernetes-bootcamp라는 라벨이 붙은 것)하기
kubectl get pods -l run=kubernetes-bootcamp
kubectl get services -l run=kubernetes-bootcamp
# (app=v1이라는)라벨링하기
kubectl label pod $POD_NAME app=v1
kubectl get pods -l app=v1
# 서비스 배포 중단하기
kubectl delete service -l run=kubernetes-bootcamp
# 외부에 공개되던 것이 중단될 뿐, 실제로 kubectl delete를 해도 pod에서 server는 계속 구동중이다
# curl $(ip):$NODE_PORT로 하면 접근이 거부되지만
# kubectl exec -it $POD_NAME curl localhost:8080으로는 server가 작동됨을 확인 가능비밀번호, 토큰, 키 등을 secret에 저장하자!
파드가 시크릿을 참조하는 방법은 3가지가 있다
# 각각 username, password 이라는 키명으로 username.txt, password.txt.에서 값 가져오기
kubectl create secret generic db-user-pass --from-file=username=./username.txt --from-file=password=./password.txt
# 생성된 시크릿 확인
kubectl get secrets
kubectl describe secrets/db-user-passecho -n 'admin' | base64
# YWRtaW4=
echo -n '1f2d1e2e67df' | base64
# MWYyZDFlMmU2N2Rm일 때 시크릿을 아래와 같이 작성하고
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
username: YWRtaW4=
password: MWYyZDFlMmU2N2Rmkubectl apply -f ./secret.yaml 로 시크릿을 생성할 수 있다. 하지만, 이 방법은 base64로 인코딩 하는 과정을 거치는 방법이다. base64로 인코딩되지 않은 문자열을 시크릿에 직접 넣을 수도 있다. 애플리케이션이 다음 구성 파일을 사용할 때,
apiUrl: "https://my.api.com/api/v1"
username: "user"
password: "password"