정보통신공학과 노선변경기
Kubernetes 2일차 쿠버네티스 버전관리, Yaml파일 작성, 파드 생성 본문
*쿠버네티스 버전관리 (업그레이드..)
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.21 및 1.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