본문 바로가기
IT/Kubernetes

[Kubernetes] Work node 추가 및 Version Upgrade

by 깅지수 2022. 5. 16.

 

Worker node 추가

 

1. Vagrantfile VM 추가 (cpu:2, mem:2G)

2. Docker 설치

3. kubeadm, kubectl, kubelet 설치 (1.22.8 ver.)

4. kubeadm join xxx (worker에서 실행)

5. kubeadm get nodes (master에서 실행)

 

 

worker VM 생성

config.vm.define "worker" do |ubuntu|
                ubuntu.vm.box = "ubuntu/focal64"
                ubuntu.vm.hostname = "worker"
                ubuntu.vm.network "private_network", ip: "192.168.100.101"
                ubuntu.vm.provider "virtualbox" do |vb|
                        vb.name = "worker"
                        vb.cpus = 2
                        vb.memory = 2048
                end
        end
vagrant up worker
vagrant ssh worker

 

worker VM에 docker 설치

sudo apt-get update

sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

 

docker의 GPG key 추가

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

 

저장소 추가

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

 

docker 그룹에 추가

sudo usermod -aG docker vagrant

 

 

kubeadm, kubectl, kubelet 설치 (1.22.8 ver.)

sudo apt-get install -y apt-transport-https ca-certificates curl

 

GPG key 추가

sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg

 

저장소 추가

echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install kubeadm=1.22.8-00 kubelet=1.22.8-00 kubectl=1.22.8-00 -y

 

 

k8s cluster join

sudo kubeadm join --token <token> <control-plane-host>:<control-plane-port> \
--discovery-token-ca-cert-hash sha256:<hash>

 

 

* 참고 : Creating a cluster with kubeadm | Kubernetes

 

Creating a cluster with kubeadm

Using kubeadm, you can create a minimum viable Kubernetes cluster that conforms to best practices. In fact, you can use kubeadm to set up a cluster that will pass the Kubernetes Conformance tests. kubeadm also supports other cluster lifecycle functions, su

kubernetes.io

 

 

 

 


 

 

쿠버네티스 클러스터 업그레이드

 

* 참고 : 버전 차이(skew) 정책 | Kubernetes

 

버전 차이(skew) 정책

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

kubernetes.io

각각의 component들은 각각 version을 갖고 있음

 

* version을 upgrade 한다 = image를 교체한다 (*kubelet을 제외한 components는 container로 구성되어있기 때문에)

  = image만 교체하는 방법이 없기 때문에 기존 container를 지우고 새로운 version의 image를 가진 container를 생성해야 함 → downtime 발생

 

** kubelet은 kube-apiserver보다 최신일 수 x (=kubelet 보다 kube-apiserver를 먼저 upgrade 필요) & 2단계 낮은 version까지만 허용

 

 

upgrade 우선순위

 

1. kube-apiserver
2. kube-controller-manager, kube-cloud-controller-manage, kube-scheduler
3. kubelet (Control Plane → Worker Node)
4. kube-proxy (Control Plane → Worker Node)

 

Control Plane (api → cm, ccm, sched → let,proxy) → Work Node (let, proxy)

 

 

Ubuntu 패키지 저장소 변경 (더 빠른 네트워크 연결을 위해)
> sed -i 's/security.ubuntu.com/mirror.kakao.com/g' /etc/apt/sources.list
> sed -i 's/archive.ubuntu.com/mirror.kakao.com/g' /etc/apt/sources.list
> sudo apt update

 

kubeadm 업그레이드

 

1. Control Plane의 kubeadm 업그레이드
2. Control Plane의 kubeadm으로 api, cm, sched 업그레이드
3. Control Plane의 kubelet, kubectl 업그레이드
4. Work Node의 kubeadm 업그레이드
5. Work Node의 kubeadm으로 업그레이드
6. Work Node의 kubelet, kubectl 업그레이드

 

 

  • Control Plane

kubeadm upgrade

sudo apt-mark unhold kubeadm
sudo apt update
sudo apt upgrade kubeadm=1.22.9-00 -y
kubeadm version
sudo apt-mark hold kubeadm
sudo kubeadm upgrade plan
sudo kubeadm upgrade apply v1.22.9

 

kubelet, kubectl upgrade

sudo apt-mark unhold kubelet kubectl
sudo apt upgrade kubectl=1.22.9-00 kubelet=1.22.9-00 -y
sudo apt-mark hold kubelet kubectl
kubelet --version
kubectl version

 

 

drain 작업 (원래는 진행하는데 지금은 필요없으니 생략)

 

sudo systemctl daemon-reload
sudo systemctl restart kubelet

 

uncordon (온라인 상태로 전환) 작업 (원래는 진행하는데 지금은 필요없으니 생략)

 

systemctl status kubelet

 

 

  • Work Node

kubeadm upgrade

sudo apt-mark unhold kubeadm
sudo apt update
sudo apt upgrade kubeadm=1.22.9-00 -y
kubeadm version
sudo apt-mark hold kubeadm
sudo kubeadm upgrade node


 drain 작업

 

 

kubelet, kubectl upgrade

sudo apt-mark unhold kubelet kubectl
sudo apt upgrade kubectl=1.22.9-00 kubelet=1.22.9-00 -y
sudo apt-mark hold kubelet kubectl 
kubelet --version
kubectl version 
sudo systemctl daemon-reload
sudo systemctl restart kubelet


 uncordon 작업

 

 

 

 

 

* 참고 : kubeadm 클러스터 업그레이드 | Kubernetes

 

kubeadm 클러스터 업그레이드

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

kubernetes.io