새소식

인기 검색어

Kubernetes

7/7 kubeadm, kubelet, kubectl

  • -


대시보드 dns : 쿠버네티스를 웹인터페이스로 관리할 수 있다.

 

 

오픈스택은 3개월마다 마이너한 버전이 나옴

So 도커이미지 교체해줘야함. 패키지도 다시 설치해야함 -> 프로세스 다시 실행(서비스 다운타임 발생 할 수 밖에 없음 -> 그래서 고가용성 필요)

언플랜드 다운타임: 예상치 못한 장애 발생. 플랜드 다운타임과 반대(계획된 다운타임. 점검같은 것)

kube api 를 먼저 업그레이드 해야함. 그다음 kubelet 업그레이드(kube api 보다 높게 업그레이드 할 수 없으므로)

 

 

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

 

버전 차이(skew) 정책

다양한 쿠버네티스 구성 요소 간에 지원되는 최대 버전 차이

kubernetes.io

https://kubernetes.io/ko/releases/

 

릴리스

운영 수준의 컨테이너 오케스트레이션

kubernetes.io


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

 

kubeadm 클러스터 업그레이드

이 페이지는 kubeadm으로 생성된 쿠버네티스 클러스터를 1.20.x 버전에서 1.21.x 버전으로, 1.21.x 버전에서 1.21.y(여기서 y > x) 버전으로 업그레이드하는 방법을 설명한다. 업그레이드가 지원되지 않는

kubernetes.io

컨트롤 플레인 먼저 업글. 컨트롤 안에서도 api 먼저 업글. 그다음 노드 업글

 

# apt-get 버전 1.1부터 다음 방법을 사용할 수도 있다

apt-get update && \

apt-get install -y --allow-change-held-packages kubeadm=1.21.x-00  -> 홀드된 패키지를 업그레이드 하겠다는 의미

 

adm먼저업글해주고 let 업글하기

 

업그레이드 순서 참고

1.18.19 -> 1.18.20 으로 패치만 업글해보기

<컨트롤 플레인 업그레이드>
*kubeadm 업그레이드
sudo apt-cache madison kubeadm
sudo apt-get update && \
sudo apt-get install -y --allow-change-held-packages kubeadm=1.18.20-00
kubeadm version
kubeadm upgrade plan
sudo kubeadm upgrade apply v1.18.20

*kubelet과 kubectl 업그레이드
sudo apt-get update && \
sudo apt-get install -y --allow-change-held-packages kubelet=1.18.20-00 kubectl=1.18.20-00
kubelet --version
kubectl version
sudo systemctl daemon-reload
sudo systemctl restart kubelet



<노드 업그레이드>
*kubeadm 업그레이드
sudo apt-get update && \
sudo apt-get install -y --allow-change-held-packages kubeadm=1.18.20-00
sudo kubeadm upgrade node

*kubelet과 kubectl 업그레이드
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
kubectl get pods -A인        -> 러닝되는지 확인

노드3만 1.18.20 기존버전을 아래 사진들 참고하여 삭제 후 1.19.12 새로 설치

sudo rm -rf /var/lib/kubelet/

sudo rm -rf /etc/kubernetes/

sudo rm -rf /etc/cni/net.d

sudo rm -rf ~/.kube/

* 컨트롤 플레인에서 node3 삭제 후 1.19.12 새로 설치
sudo apt-get install -y --allow-change-held-packages kubeadm=1.19.12-00
sudo kubeadm upgrade apply v1.19.12
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
kubectl get nodes

*node1, 2 가서 1.19.12 다시 설치
sudo apt-get install -y --allow-change-held-packages kubeadm=1.19.12-00
sudo kubeadm upgrade node
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

*컨트롤로 가서 각 노드들 버전이 제대로 바뀌었는지 확인
kubectl get nodes

kubectl 실행파일중 가장 중요한 파일

kubectl 의 리소스의 종류

 

버전에 따라서 api 목록도 달라짐. 리소스의 목록이 달라질 수도 있음.

 

 

batch 버전 두가지 중 암거나 쓸수있음

v1 -> 코어그룹의 API 버전(grep -v \/ 슬러쉬를 제외한다는 의미)

 

*리소스들

bindings
configmaps
endpoints
limitranges
namespaces
nodes
persistentvolumeclaims
persistentvolumes
pods
replicationcontrollers
resourcequotas
secrets
serviceaccounts
services
daemonsets
deployments
replicasets
statefulsets
horizontalpodautoscalers
cronjobs
jobs
ingresses
ingresses
clusterrolebindings
clusterroles
rolebindings
roles
storageclasses

 

 

 

* 모든 리소스에 대한 정의 다 나와있음

kubectl explain pods

kubectl explain pods.spec

pod는 하나이상의 컨테이너를 가지고 있는 쿠버네티스 컨테이너의 모음이다

pod 를 정의할때 컨테이너를 무조건 정의해줘야함. 한번만들면 변경할수없음.

 

 


* 파드

vi myapp-pod.yaml 생성시 위와같이 빈칸도 정확하게 맞춰서 써야함. 오타 3번이나 나고 이제야 찾아서 지침....

kubectl create -f myapp-pod.yaml

kubectl get pods

출력을 yaml 버전으로 상세히 보여주는 명령어

 

wide 를 추가하면 더 상세하게 보여줌

 

*삭제명령어

kubectl delete -f myapp-pod.yaml

 

 ip 를 10.0.~ 이 아닌 192.~(enp0s8)로 바꿔주기 -> 포트포워딩시 오류가 날수있어서 아이피 바꿔줘야함

* 컨트롤(192.168.200.50), 노드1(x.x.x.51), 노드2(x.x.x.52)

ip a s
echo "KUBELET_EXTRA_ARGS='--node-ip 192.168.200.5x'" | sudo tee /etc/default/kubelet -> 컨트롤이랑 각 노드 전부 이것부터 먼저해주고 포트포워딩 명령어 쳐야함. 안그럼 오류뜸
sudo systemctl daemon-reload
sudo systemctl restart kubelet

kubectl get nodes -o wide

kubectl port-forward myapp-pod 8080:8080 -> 포트포워딩

 

*새 터미널 열어서 확인

vagrant@k-control:~$ curl http://localhost:8080
Hello World!
myapp-pod

 

 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.