티스토리 뷰

● containerd : runc 를 생성하고 제어

 docker engine : 도커 이미지를 관리하고 컨테이너 실행

 

 

 쿠버네티스는 OCI 만 준수하면 다양하게 사용할 수 있다

 CRI ( container runtime interface )

 

 

 

#  쿠버네티스 버전이 올라가면서 docker 가 빠졌다 ( 도커가 CRI 를 준수 안됨 )

#  컨테이너d 내부에서도 버전이 바뀌면서 더 단순화 되었다 

 

 

#  쿠버네티스가 1.24 에서 1.29로 올라가면서 cri-dockerd 를 개발했다 ( cri-dockerd는 CRI 준수 )

# 도커의 생태환경이 podman  보다 더 낫기 때문에 docker 를 다시 쓸 수 있게 됐다

## podman : docker 대체할 수 있고 컨테이너 실행 관리 가능

 

● 쿠버네티스란 리눅스 컨테이너 작업을 자동화해주는 오픈소스 플랫폼

>> 마스터 ( Master ) : 노드 제어 + 전체 클러스터 관리하는 컨트롤러 + 전체적인 제어 관리를 위한 서버

>> 파드 ( pod ) :  1개 이상의 컨테이너의 그룹 ( 컨테이너의 집합 ) + 여러 개의 컨테이너를 묶어서 파드 단위로 관리한다

>> 노드 ( nod ) : 컨테이너가 배포될 물리 서버 또는 가상머신 worker node 라고도 한다

# 쿠버네티스는 파드를 묶어서 관리한다?

 

# 일반적으로 Master 는 2개로 두고 리더 마스터 서버 + 후보 마스터 서버로 둔다 >> 고가용성 유지

 

 

 

● 파드 네트워크 대역은 10.244.0.0 ~ 10.244.255.255 사이로 설정파일이 정해졌다

[vagrant@ms ~]$ kubectl get pods -o wide
NAME      READY   STATUS    RESTARTS   AGE    IP           NODE              NOMINATED NODE   READINESS GATES
apache    1/1     Running   0          129m   10.244.2.2   wk2.example.com   <none>           <none>
apache2   1/1     Running   0          128m   10.244.1.2   wk1.example.com   <none>           <none>

 

# run_in_master.sh 설정 파일에 해당 사항이 입력되었다

#! /bin/bash
# This script is only needed in master node
pod_network="10.244.0.0/16"
apiserver_network=$(hostname -i)
# configure pod network and for save token for cluster join
kubeadm init --pod-network-cidr=$pod_network --apiserver-advertise-address=$apiserver_network | tee /home/vagrant/kubeadm_init_output
grep -A 2 'kubeadm join' /home/vagrant/kubeadm_init_output > /home/vagrant/token

 

 

▷ 파드 삭제

[vagrant@ms ~]$ kubectl delete pod --all
pod "apache" deleted
pod "apache2" deleted

[vagrant@ms ~]$ kubectl get pod
poddisruptionbudgets.policy  pods                         podtemplates

[vagrant@ms ~]$ kubectl get pods
No resources found in default namespace.

 

 

 

■ 파드 생성시 과정

 

● kubelet 은 주기적으로 apiserver 에 계속 파드 정보를 알려주고 apiserver 가 etcd 에 계속 정보를 제공하여 etcd 가 파드의 최신 상태를 기록한다

# etcd 는 일종의 데이터베이스라고 생각하자

● 파드가 생성되면 kube-scheduler 가 apiserver 에 상태를 물어보고 apiserver 가 etcd 에 물어보고 다시 apiserver 에  전달하고 apiserver 가 다시 scheduler 에 전달하여 적절하게 node 를 선택한다

 

 

▶ kube-proxy / kubelet / containerd-shim 3가지 중 한가지가 작동을 안하면,

>> kubectl get nodes >> NotReady 가 떠서 사용 불가하다

# kube-proxy 가 방화벽 기능

[vagrant@ms ~]$ pgrep -fl proxy
9412 kube-apiserver
9470 kube-controller
10288 kube-proxy
[vagrant@ms ~]$ pgrep -fl container
9246 containerd-shim
9251 containerd-shim
9292 containerd-shim
9308 containerd-shim
9554 kubelet
10201 containerd-shim
10227 containerd-shim
11035 containerd-shim
11046 containerd-shim
18599 containerd

 

 

 kube-controller-manager
컨트롤러 프로세스를 실행하고 클러스터의 실제 상태를 원하는 사양으로 조정한다.
아래의 컨트롤러들을 구동하는 컴포넌트이다.
- Node Controller : 노드가 다운되었을 때 알림와 대응에 관한 역할을 한다.
- Replication Controller : 지정된 수의 파드들을 유지시켜 주는 역할을 한다.
- Endpoints Controller: 서비스와 파드를 연결시켜 엔드포인트 오브젝트를 만든다.
- Service Account & Token Controllers: 새로운 네임스페이스에 대한 기본 계정과 
API 접근 토큰을 생성한다

 

 

# 객체는 사용자가 쿠버네티스에 바라는 상태

# 컨트롤러는 객체가 쓸 수 있게 하는 역할

객체는 사용자가 쿠버네티스에 바라는 상태(desired state)를 의미한다.
컨트롤러는 객체가 원래 설정된 상태를 잘 유지할수있게 관리하는 역할
객체에는 포드(pod), 서비스(service), 볼륨(volume), 네임스페이스(namespace)등이 있다

 

 

 

 

명령어

 

 

 

>> alias 뒤에 옵션 자동완성을 위한 명령어

>> .bashrc 에 등록

alias k='kubectl'
complete -o default -F __start_kubectl k

 

 

 

>> pod 출력

[vagrant@ms ~]$ kubectl get pod nginx -o wide

 

 

● Namespace

[vagrant@ms ~]$ k get namespaces
NAME              STATUS   AGE
default           Active   3h35m
kube-flannel      Active   3h35m
kube-node-lease   Active   3h35m
kube-public       Active   3h35m
kube-system       Active   3h35m

 

 

○ ex> projcect 가 3개가 있다

project1 - 영희 철수 선희

project2 - 길동 호동 재석

project3 - .....

>>> 컨테이너를 볼 수는 있는데 다른 project 팀원은 수정 삭제 등 못한다

>>> 분류해놓을 수 있다

>>> 각각의 권한을 부여해서 사용자를 격리해준다

 

○ namespace 생성과 삭제

[vagrant@ms ~]$ kubectl create ns project1
namespace/project1 created
[vagrant@ms ~]$ kubectl create namespace projec2
namespace/projec2 created

[vagrant@ms ~]$ kubectl delete ns project1 projec2
namespace "project1" deleted
namespace "projec2" deleted

 

 

○ namespace 수정

[vagrant@ms ~]$ kubectl config set-context --current --namespace testns
Context "kubernetes-admin@kubernetes" modified.

 

>> namespace: testns 로 변경되었다

[vagrant@ms ~]$ kubectl config view
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://192.168.98.10:6443
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    namespace: testns
    user: kubernetes-admin
  name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
  user:
    client-certificate-data: DATA+OMITTED
    client-key-data: DATA+OMITTED

 

 

○ 서비스 계정 생성

[vagrant@ms ~]$ kubectl create serviceaccount younghee
serviceaccount/younghee created
[vagrant@ms ~]$ kubectl create serviceaccount chulsoo
serviceaccount/chulsoo created
[vagrant@ms ~]$ kubectl get sa
NAME       SECRETS   AGE
chulsoo    0         7s
default    0         3h40m
younghee   0         12s
[vagrant@ms ~]$ kubectl create sa sunhee
serviceaccount/sunhee created

 

 

 

● namespace 파일로 만들기

○ 파일로 만들어서 관리하는게 편하다

 

>> Namespace 의 버전 확인

[vagrant@ms work]$ kubectl api-resources | grep Namespace
namespaces                        ns           v1                                false        Namespace

 

 

>> metadata 식별자 >> name

[vagrant@ms work]$ cat ns.yml
apiVersion: v1
kind: Namespace
metadata:
  name: myns

 

[vagrant@ms work]$ kubectl apply -f ns.yml
namespace/myns created

[vagrant@ms work]$ kubectl get ns
NAME              STATUS   AGE
default           Active   3h52m
kube-flannel      Active   3h52m
kube-node-lease   Active   3h52m
kube-public       Active   3h52m
kube-system       Active   3h52m
myns              Active   5s

 

 

○ myns namespace 로 변경해서 작업하자

[vagrant@ms work]$ kubectl config set-context --current --namespace myns
Context "kubernetes-admin@kubernetes" modified.

[vagrant@ms work]$ kubectl config view | grep namespace
    namespace: myns

 

 

▷ namespace 를 수정하는 스크립트

더보기
#! /bin/bash
# simple script for emulate command kubens(included kubectx package)

if [ $# -eq 0 ]
then
	kubectl get ns
	exit
elif [ $# -ge 2 ] || [ "$1" == "--help" ] || [ "$1" == "-h" ]
then
	echo  -e "Usage: 
		   kubens		: list the namespace 
                   kubens <NAME>	: change the active namespace 
		   kubens -c		: show the current namespace
		   kubens -		: switch to the previous namespace (This option is not work)
		"
	exit
fi

if [ $1 == "-c" ]
then
	 ns_name=$(kubectl config view | grep namespace | awk '{print $2}')
	 if [ $ns_name == "" ]
	 then
		namespace="default"
	 fi
		echo "current namespace: $ns_name"
	exit
fi	

for ns_name in $(kubectl get ns|awk 'NR != 1 {print $1}')
do
	if [ "$1" == "$ns_name" ]
	then
		kubectl config set-context --current --namespace=$1
		exit
	else
		continue
	fi	
done
echo "namespace $1 not found"

 

◇ kubens 파일에 스크립트를 넣어서 /bin 으로 이동후 권한을 준다

[vagrant@ms work]$ vim kubens

[vagrant@ms work]$ sudo mv kubens /bin

[vagrant@ms work]$ sudo chmod 755 /bin/kubens

[vagrant@ms work]$ kubens default
Context "kubernetes-admin@kubernetes" modified.

[vagrant@ms work]$ kubens myns
Context "kubernetes-admin@kubernetes" modified.

 

 

◇ kubectx 를 다운받으면 스크립트 파일이 없어도 가능하다

>> 근데 repository 가 없어서 인터넷에서 받아와야 한다

[vagrant@ms work]$ yum list kubectx
CentOS Linux 8 - AppStream                                           15 MB/s | 8.4 MB     00:00
CentOS Linux 8 - BaseOS                                              11 MB/s | 4.6 MB     00:00
CentOS Linux 8 - Extras                                              82 kB/s |  10 kB     00:00
Docker CE Stable - x86_64                                           338 kB/s |  57 kB     00:00
Extra Packages for Enterprise Linux 8 - x86_64                       12 MB/s |  16 MB     00:01
Kubernetes                                                           13 kB/s | 9.9 kB     00:00
Error: No matching Packages to list

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함