레이블이 kubeadm인 게시물을 표시합니다. 모든 게시물 표시
레이블이 kubeadm인 게시물을 표시합니다. 모든 게시물 표시

install kubernetes

# kubernetes(k8s) 는 물리적으로 master 와 worker 노드로 구성된다.(control plane 이라고 불린다.)

# k8s master 노드의 컴포넌트들
# kube-apiserver : kubectl, kubelet, kube-scheduler, kube-controller 등 의 api 요청을 처리하는 웹서버 역할
# etcd : key-value 저장소로 k8s 모든 정보가 저장되는 곳이다. kubectl 등의 리소스 명세서등도 여기 저장된다.
# kube-scheduler : 워커노드의 리소스 상태를 파악하고 pod 를 적절한 워커노드에 띄운다.
# kube-controller : pod 를 모니터링하며서 pod 가 특정 상태를 유지하도록 한다.(ex. replica 2 일때 pod 2개중 1개가 죽으면 pod 1개를 새로 띄운다.)

# k8s worker 노드 컴포넌트
# kubelet : master 의 kube-apiserver 와 통신하며 원하는 리소스(ex. pod)들을 관리하는 일종의 에이전트
# kube-proxy : network proxy 역할

# ubuntu 에서 kubernetes 설치

# apt 저장소 추가
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update

# master, worker 모두에 설치하자.
k8s_version="1.19.16-00"
sudo apt-get install -y kubelet=${k8s_version} kubeadm=${k8s_version} kubectl=${k8s_version}

# kubelet kubeadm kubectl 업데이트 되지 않도록 hold 설정
sudo apt-mark hold kubelet kubeadm kubectl

# kubeadm 으로 클러스터를 구성한다.
sudo kubeadm init \
 --apiserver-advertise-address=192.168.104.2 \
 --apiserver-cert-extra-sans=192.168.104.2 \
 --node-name=control-plane \
 --pod-network-cidr=10.224.0.0/16 \
 --service-cidr=10.225.0.0/16

# 설치가 완료되면 다음과 같은 메시지가 출력된다.
# kubectl 사용을 위한 kubeconfig 설정
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
... 생략 ...
# worker -> master 에 조인을 위해  worker 노드에서 실행한다.
... 생략 ...
kubeadm join 192.168.104.2:6443 --token aaaaa --discovery-token-ca-cert-hash sha256:aaaaa
... 생략 ...

# 참고로 kube-apiserver 에서 6443포트를 사용한다.

# master 에서 노드 상태 watching 하고
kubectl get nodes -w

# worker1, worker2 에서 다음 명령을 실행해 master 노드에 join 하도록 한다.
sudo kubeadm join 192.168.104.2:6443 --token aaaaa --discovery-token-ca-cert-hash sha256:aaaaa

# node 에서 돌고 있는 서비스
kubelet
kube-proxy

# master node 돌고 있는 서비스
kube-scheduler
kube-controller-manager
kube-apiserver


#####

# 노드 삭제시
kubectl delete node 노드명

# 노드에 접속해서 kubelet 서비스 비활성화 및 설정 파일 제거
ssh ysoftman@노드 "sudo kubeadm reset -f"

# 클러스터 정보 확인
kubectl cluster-info

# 노드 추가시 
# 노드에서 kubeadm, kubelet, kubectl 설치하고
# token 확인
sudo kubeadm token list

# hash 확인
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

# 마스터 노드에 조인
sudo kubeadm join 마스터노드IP:6443 --token 토큰 --discovery-token-ca-cert-hash sha256:해시