쿠버네티스(kubernetes, k8s) 용어 정리


쿠버네티스에서 활용되는 용어를 정리합니다.



쿠버네티스

갓 구글 형님이 만드셨다.
업계 표준 컨테이너 기술입니다.
그리스어로 “조타수”라는 뜻입니다.
k8s라 쓰고 kubernetes라 읽습니다.

도커 Orchestration입니다.

데이터 센터 OS와 비슷하다. 데이터 센터는 컴퓨터의 집합입니다.
OS는?

여러 서버들의 자원을 할당시키고 조정하는 OS처럼 k8s는 여러 컨테이너를 관리합나디ㅏ.

CRI(Container Runtime Interface)통해 통신합니다.


서버를 바라보는 방식!

애완동물에서 가축으로 변했습니다.
애완동물처럼 서버 하나하나를 소중히 다뤘던 예전과 달리,
현재는 가축처럼 관리를 하게 되었습니다.
죽으면 죽는대로(?) 더 추가하고 빼고 기타 등등


네임스페이스


리소스


앱 정의서


Desired State


라벨 & 셀렉터


아키텍처


쿠버네티스의 장점


k3s

1. 설치가 쉽다.
쿠버네티스 클러스터를 처음부터 설치하기란 굉장히 어렵습니다. 퍼블릭 클라우드에서 제공해주는 managed 서비스가 아닌 이상 bare metal 서버부터 시작하는 것은 많은 시간과 노력이 듭니다. 물론 kubeadm과 같이 손쉽게 설치하는 툴이 있지만 그래도 k3s 만큼 설치가 쉬운 방법은 흔치 않습니다.

2. 가볍다.
k3s는 etcd, cloud manager 등 무겁지만 안정성 있는 컴포넌트들을 다 제거하고 프로덕션에는 맞진 않지만 가벼운 컴포넌트들로 대체하여 굉장히 적은 리소스 위에서도 클러스터를 구축할 수 있게 해줍니다.

3. 대부분의 기능이 다 들어 있다.
가볍다고 중요한 기능이 빠져있진 않습니다. 쿠버네티스 위에서 학습, 개발, 테스트시 필요한 모든 기능들은 다 탑재되어 있어 학습용으로 안성 맞춤입니다. 다만 몇몇 실습에서는 클라우드 플랫폼에서 제공하는 기능들이 필요한 경우가 있습니다. (autoscaling 등)


k3s 설치

https://k3s.io/

 sudo apt-get update
 curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--disable traefik  --disable metrics-server --node-name master --docker"  INSTALL_K3S_VERSION="v1.17.7+k3s1" sh -s -
 mkdir ~/.kube
 sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
 sudo chown -R $(id -u):$(id -g) ~/.kube
 echo "export KUBECONFIG=~/.kube/config" >> ~/.bashrc
 source ~/.bashrc
 
 # 설치 확인
 kubectl cluster-info
 # Kubernetes master is running at https://127.0.0.1:6443
 # CoreDNS is running at https://127.0.0.1:6443/api/v1/namespaces/ kube-system/services/kube-dns:dns/proxy
 # 
 # To further debug and diagnose cluster problems, use 'kubectl  cluster-info dump'.


kubectrl run

 kubectl run mynginx --image nginx --restart Never

mynginx라는 이름의 Pod를 nginx 라는 이미지를 이용하여 생성하라는 의미를 가집니다. 여기서 –restart Never라는 옵션이 궁금할 수 있는데 일단은 Pod를 만들기 위해서 사용하는 옵션이라고 이해하고 넘어가길 바랍니다.

도커 명령 비교: docker run


kubectl get

방금 실행한 Pod를 확인하기 위해서 get 명령을 사용합니다.

 kubectl get pod
 # NAME      READY   STATUS    RESTARTS   AGE
 # mynginx   1/1     Running   0          2s

실행한 nginx Pod가 정상적으로 동작하는 것을 확인할 수 있습니다.

도커 명령 비교: docker ps

도커 ps 명령과는 조금 다르게 해당 Pod의 상태 정보를 조금 더 자세히 보고 싶다면 -o yaml 옵션을 통해 더 자세히 확인할 수 있습니다.

 # kubectl get pod $POD_NMAE -o yaml
 kubectl get pod mynginx -o yaml


kubectl describe

describe명령도 get 명령과 유사하게 Pod의 상태 정보를 보여 줍니다.
get과는 조금 다르게 Event 기록을 확인할 수 있습니다.

 kubectl describe pod mynginx


kubectl logs

docker logs 마찬가지로 컨테이너의 로그 정보를 확인할 수 있습니다.

 kubectl logs -f mynginx


kubectl exec

마찬가지로 도커의 exec 명령과 동일합니다. 한가지 차이점이 있다면 컨테이너에게 파라미터를 넘길 때, – 로 구분합니다.

 kubectl exec mynginx -- apt-get update

쿠버네티스도 마찬가지로 -it를 이용하여 컨테이너 안으로 접근이 가능합니다.

 kubectl exec -it mynginx -- bash
 # root@mynginx:/#

도커 명령 비교: docker exec


kubectl cp

해당 실습페이지를 복사해 보겠습니다.

 kubectl cp mynginx:/etc/passwd /tmp/passwd
 ls /tmp
 # passwd

도커 명령 비교: docker cp


kubectl edit

실행된 Pod의 정보를 수정합니다. nginx 이미지의 태그를 latest에서 1.17.9로 수정해 보겠습니다.

 kubectl edit pod mynginx
 # edit Pod YAML file
 # image: nginx --> image: nginx:1.17.9
 
 # 확인
 kubectl get pod mynginx -oyaml


kubectl delete

생성한 Pod를 삭제하기 위해 delete 명령을 이용합니다.

 kubectl delete pod mynginx
 # pod mynginx deleted
 kubectl get pod
 # No resources found in default namespace.

도커 명령 비교: docker rm


kubectl auto completion

kubectl 명령을 매번 일일이 입력하는 것이 귀찮게 느껴질 수도 있습니다.
쿠버네티스에서는 이를 해결하기 위해 자동으로 명령을 완성시켜주는 스크립트를 제공해 줍니다.
아래 사이트에 들어가셔서 사용하시는 shell에 맞게 스크립트를 세팅하시기 바랍니다.
https://kubernetes.io/docs/tasks/tools/install-kubectl/#enabling-shell-autocompletion

예를 들어, bash shell인 경우,

 echo 'source <(kubectl completion bash)' >>~/.bashrc
 source ~/.bashrc

이제 kubectl까지만 입력하고 키를 입력하면 명령이 자동 완성 되는 것을 확인할 수 있습니다.


Namespace

쿠버네티스에는 namespace라는 개념이 있습니다. 논리적으로 쿠버네티스 클러스터를 나누는 역할을 합니다. namespace 별로 User 및 Network 접근 정책을 다르게 가져갈 수 있으며 관리의 단위를 한정 시켜줍니다. 현재 클러스터의 namespace를 확인하려면 다음과 같은 명령을 입력하면 됩니다.

 kubectl get namespace
 # NAME              STATUS   AGE
 # default           Active   60m
 # kube-public       Active   60m
 # kube-system       Active   60m

새로운 namespace를 생성하려면 다음과 같이 입력합니다.

 kubectl create namespace myns
 # namespace/myns created
 
 kubectl get namespace
 # NAME              STATUS   AGE
 # default           Active   9m35s
 # kube-system       Active   9m35s
 # kube-public       Active   9m35s
 # kube-node-lease   Active   9m35s
 # myns              Active   6s

새로운 namespace에 Pod를 생성하려면 다음과 같이 입력합니다.

 kubectl run mynginx --image nginx --restart Never --namespace myns
 # pod/mynginx created
 
 kubectl get pod -n myns # 축약하여 -n으로도 사용 가능합니다.
 # NAME      READY   STATUS    RESTARTS   AGE
 # mynginx   1/1     Running   0          23s
 
 # default namespace와 비교합니다.
 kubectl get pod
 # No resources found in default namespace.


Clean up

 kubectl delete pod --all
 kubectl delete pod --all -n myns
 kubectl delete ns myns


Do it more #1

kubectl exec mynginx – curl localhost 라는 명령을 실행했을 때, 아래와 같은 html 파일이 응답되게 만들어 주세요.

 # curl localhost
 kubectl exec mynginx -- curl localhost
 <html>
     <body>
         <h1>Hello world!</h1>
     </body>
 </html>


Do it more #2

kubectl CLI를 이용하여 default namespace의 mynginx Pod의 아래 정보를 확인해 주세요.


##


##


##


##


##


##


##


##


##

정규표현식으로 시간 절약하기
당신의 하루에 몇 시간을 더하세요
WPF MVVM 패턴, 그리고 Binding
WPF(Windows Presentation Foundation) 시리즈
AWS SAA 준비 - (4) 비용에 최적화된 아키텍처 설계
(정리) Exam Readiness - AWS Solutions Architect Associate
AWS SAA 준비 - (3) 안전한 아키텍처
(정리) Exam Readiness - AWS Solutions Architect Associate
AWS SAA 준비 - (2) 성능이 뛰어난 아키텍처 설계
(정리) Exam Readiness - AWS Solutions Architect Associate
AWS SAA 준비 - (1) 복원력을 갖춘 아키텍처 설계
(정리) Exam Readiness - AWS Solutions Architect Associate
15분 안에 ToC를 구현해보자!
Vanilla JS로 Table of Contents 구현하기
모듈
모던 자바스크립트 Deep Dive | 48장 | 모듈
에러 처리
모던 자바스크립트 Deep Dive | 47장 | 에러 처리
제너레이터와 async/await
모던 자바스크립트 Deep Dive | 46장 | 제너레이터와 async/await
프로미스
모던 자바스크립트 Deep Dive | 45장 | 프로미스
REST API
모던 자바스크립트 Deep Dive | 44장 | REST API
Ajax
모던 자바스크립트 Deep Dive | 43장 | Ajax
비동기 프로그래밍
모던 자바스크립트 Deep Dive | 42장 | 비동기 프로그래밍
타이머
모던 자바스크립트 Deep Dive | 41장 | 타이머
Set과 Map
모던 자바스크립트 Deep Dive | 37장 | Set과 Map
디스트럭처링
모던 자바스크립트 Deep Dive | 36장 | 디스트럭처링
브라우저의 렌더링 과정
모던 자바스크립트 Deep Dive | 38장 | 브라우저의 렌더링 과정
스프레드 문법
모던 자바스크립트 Deep Dive | 35장 | 스프레드 문법
이터러블
모던 자바스크립트 Deep Dive | 34장 | 이터러블
7번째 데이터 타입 Symbol
모던 자바스크립트 Deep Dive | 33장 | 7번째 데이터 타입 Symbol
String
모던 자바스크립트 Deep Dive | 32장 | String
RegExp
모던 자바스크립트 Deep Dive | 31장 | RegExp
Date
모던 자바스크립트 Deep Dive | 30장 | Date
Math
모던 자바스크립트 Deep Dive | 29장 | Math
DOM
모던 자바스크립트 Deep Dive | 39장 | DOM
Number
모던 자바스크립트 Deep Dive | 28장 | Number
배열
모던 자바스크립트 Deep Dive | 27장 | 배열
이벤트
모던 자바스크립트 Deep Dive | 40장 | 이벤트
ES6 함수의 추가 기능
모던 자바스크립트 Deep Dive | 26장 | ES6 함수의 추가 기능
클래스
모던 자바스크립트 Deep Dive | 25장 | 클래스
this
모던 자바스크립트 Deep Dive | 22장 | this
빌트인 객체
모던 자바스크립트 Deep Dive | 21장 | 빌트인 객체
strict mode
모던 자바스크립트 Deep Dive | 20장 | strict mode
클로저
모던 자바스크립트 Deep Dive | 24장 | 클로저
프로토타입
모던 자바스크립트 Deep Dive | 19장 | 프로토타입
함수와 일급 객체
모던 자바스크립트 Deep Dive | 18장 | 함수와 일급 객체
실행 컨텍스트
모던 자바스크립트 Deep Dive | 23장 | 실행 컨텍스트
생성자 함수에 의한 객체 생성
모던 자바스크립트 Deep Dive | 17장 | 생성자 함수에 의한 객체 생성
프로퍼티 어트리뷰트
모던 자바스크립트 Deep Dive | 16장 | 프로퍼티 어트리뷰트
let, const 키워드와 블록 레벨 스코프
모던 자바스크립트 Deep Dive | 15장 | let, const 키워드와 블록 레벨 스코프
전역 변수의 문제점
모던 자바스크립트 Deep Dive | 14장 | 전역 변수의 문제점
스코프
모던 자바스크립트 Deep Dive | 13장 | 스코프
함수
모던 자바스크립트 Deep Dive | 12장 | 함수
원시 값과 객체의 비교
모던 자바스크립트 Deep Dive | 11장 | 원시 값과 객체의 비교
객체 리터럴
모던 자바스크립트 Deep Dive | 10장 | 객체 리터럴
타입 변환과 단축 평가
모던 자바스크립트 Deep Dive | 9장 | 타입 변환과 단축 평가
제어문
모던 자바스크립트 Deep Dive | 8장 | 제어문
연산자
모던 자바스크립트 Deep Dive | 7장 | 연산자
데이터 타입
모던 자바스크립트 Deep Dive | 6장 | 데이터 타입
표현식과 문
모던 자바스크립트 Deep Dive | 5장 | 표현식과 문
변수
모던 자바스크립트 Deep Dive | 4장 | 변수
Iteration와 Generator
코드스피츠 77 ES6+ 3화 참조
WHATWG 탄생 배경
WHATWG, W3C, HTML의 관련에 대한 역사
프론트엔드(FE) 면접 질문 정리
FE관련 면접 질문 및 답변 정리한 내용입니다.
쿠버네티스(kubernetes, k8s) 용어 정리
쿠버네티스(kubernetes, k8s) 용어 정리
젠킨스(Jenkins) 정리
젠킨스(Jenkins) 정리
Docker 용어 정리
Docker 용어 정리
Git 용어 정리
Git 용어 정리
반응형 웹 디자인(Responsive Web Design)
CSS responsive 에 대하여
JS this에 대하여
this에 대해 알아보자
SQL*PLUS에 대하여
SQL*PLUS 정의 및 사용방법
Oracle에서 SQL Plan 확인하기
Oracle에서 SQL Plan을 확인해보자