Notice
Recent Comments
Link
«   2025/05   »
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 31
Tags
more
Archives
Today
Total
관리 메뉴

정보통신공학과 노선변경기

Kubernetes 2일차 쿠버네티스 버전관리, Yaml파일 작성, 파드 생성 본문

Sub7_Kubernetes

Kubernetes 2일차 쿠버네티스 버전관리, Yaml파일 작성, 파드 생성

HEONPOLI 2021. 7. 19. 22:48

*쿠버네티스 버전관리 (업그레이드..)

1.18.19-00 ⇒ 1.19 버전대로

Control Plane도 node이기 때문에 kube-proxy가 있어야한다. 

필수 pods == apiserver, controller manager, scheduler

업그레이드 순서를 정리해야한다. 

https://kubernetes.io/ko/releases/version-skew-policy/#kubectl

<버전이 얼만큼 차이나도 되는지.. skew 확인>

API Server 가 가장 먼저 업그레이드 되어야한다..

kubelet

kubelet은 kube-apiserver보다 최신일 수 없으며, 2단계의 낮은 마이너 버전까지 지원한다.

따라서 kubelet upgrade 전에 apiserver를 먼저 업그레이드해줘야한다.

kube-controller-manager, kube-scheduler 그리고 cloud-controller-manager

kube-controller-manager, kube-scheduler 그리고 cloud-controller-manager는 그들과 통신하는 kube-apiserver 인스턴스보다 최신 버전이면 안 된다. kube-apiserver 마이너 버전과 일치할 것으로 예상하지만, 최대 한 단계 낮은 마이너 버전까지는 허용한다(실시간 업그레이드를 지원하기 위해서).

kubectl

kubectl은 kube-apiserver의 한 단계 마이너 버전(이전 또는 최신) 내에서 지원한다.

예:

  • kube-apiserver은 1.21 이다.
  • kubectl은 1.22, 1.211.20 을 지원한다.

API server -> kubeadm(kube-controller-manager, kube-scheduler, cloud-controller-manager) -> kublet,kubectl 순서로 업그레이드..

 

https://kubernetes.io/ko/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/

kubeadm 클러스터 업그레이드

**순서

control-plane

kubeadm (api, cm , ccm sche)

kubectl, kubelet

node

kubeadm (proxy)

kubectl/kubelet

1.18.19-00 -> 1.18.20-00



**control plane에서..

#kubeadm 설치에서 apt-mark hold 로 전체 업데이트시에 kubeadm, kubelet, kubectl 등을 같이 업그레이드 되지 않게 hold 해놨는데 held package의 업데이트를 허용한다의 명령어 수행

sudo apt-get update && sudo apt-get install -y --allow-change-held-packages kubeadm=1.18.20-00

 

sudo kubeadm upgrade plan

sudo kubeadm upgrade apply v1.18.20

 

sudo apt-get update && \

    sudo apt-get install -y --allow-change-held-packages kubelet=1.18.20-00 kubectl=1.18.20-00

   

sudo systemctl daemon-reload

sudo systemctl restart kubelet

 

**node 에서..

sudo apt-get update && \

sudo apt-get install -y --allow-change-held-packages kubeadm=1.18.20-00



sudo kubeadm upgrade node

 

sudo apt-get update && \

sudo apt-get install -y --allow-change-held-packages kubelet=1.18.20-00 kubectl=1.18.20-00



sudo systemctl daemon-reload &&\

sudo systemctl restart kubelet

 

kubectl get nodes 로 1.18.20 버전 확인



**node 삭제 

쿠버네티스의 작업 디렉토리 하위항목 다 삭제

kubeadm reset 을 통해 나온 디렉토리들 말하는거

apt remove kubeadm kubelet kubectl 삭제

kubctl delete node k-node3 





*애드온(쿠버네티스 클러스터에 추가할 수 있는 확장기능 제공) 

**Cluster dns(Kube dns)

클러스터 내부에서 사용하는 DNS 서버이다. 거의 필수적으로 사용

**대시보드

**컨테이너 리소스 모니터링

**클러스터 로깅

 

*버전 skew

https://kubernetes.io/ko/releases/version-skew-policy/

컨테이너마다 버전의 차이에 따른 통신이 가능하냐 마냐에 대한 확인이 가능함

 

1.18.20→ 1.19.12

**control plane에서..

sudo apt-get update && sudo apt-get install -y --allow-change-held-packages kubeadm=1.19.12-00

sudo kubeadm upgrade plan

sudo kubeadm upgrade apply v1.19.12

sudo apt-get update && \

    sudo apt-get install -y --allow-change-held-packages kubelet=1.19.12-00 kubectl=1.19.12-00

sudo systemctl daemon-reload

sudo systemctl restart kubelet

**node 에서..

sudo apt-get update && \

sudo apt-get install -y --allow-change-held-packages kubeadm=1.19.12-00

sudo kubeadm upgrade node

sudo apt-get update && \

sudo apt-get install -y --allow-change-held-packages kubelet=1.19.12-00 kubectl=1.19.12-00

sudo systemctl daemon-reload &&\

sudo systemctl restart kubelet

control plane 에서 kubectl get nodes 로 버전확인



*YAML

스칼라 리스트 해시로 데이터를 표현, 공백문자를 이용하여 들여쓰기로 계층구조를 구분함(tab키 사용하면 안됨..), 

 

**쿠버네티스 오브젝트(manifest) 작성

kubectl api-resources #클러스터에서 지원되는 api 리소스 확인
kubectl api-versions #클러스터에서 지원되는 api 버전확인

 

resource는 각각의  api group에 해당하는 api 만 사용가능하다

api group 란에 아무것도 없다면 core group 이다 

core group은 키값 없이 versions 명령어의 가장 마지막 항목에 해당하는 버전을 사용

ex) daemonsets 의 api group은 apps 이므로 apps/v1 api 버전만 사용가능

 

기본적, 강의중 사용될 리소스

 

API 는 알파버전, 베타버전 두가지가 

알파버전 - 위험성이 있다.



yaml 파일 작성시 

kubectl explain [리소스] 명령어를 참고하기

ex) kubectl explain pods

kubectl explain pods.spec

kubectl explain pods.spec.containers

kubectl explain pods.spec --recursive



*파드생성

리소스 중에서 생성,배포 가능한 가장 작은 기본 구성단위

위와같이 myapp-pod.yaml 파일을 작성해주고

 

kubectl create -f myapp-pod.yaml #파드 생성

 

-o wide 로 상세정보 확인가능

 

**describe sub command

kubectl describe pods myapp-pod 명령어의 마지막 Events: 항목의 로그들은

어플리케이션 로그가 아니라 파드라는 리소스에 대한 활동로그(이벤트로그)

 

kubectl delete -f myapp-pod.yaml # 해당 yaml 파일로 생성된 파드 




*Internal-ip 재설정

현재 host의 첫번째 랜카드를 인식하여 NAT 용 주소를 갖고있는 상태이므로 VM에 해당 IP를 다시 할당해주어야한다.

echo "KUBELET_EXTRA_ARGS='--node-ip 192.168.200.50'" | sudo tee /etc/default/kubelet

sudo systemctl daemon-reload

sudo systemctl restart kubelet



echo "KUBELET_EXTRA_ARGS='--node-ip 192.168.200.51'" | sudo tee /etc/default/kubelet