Master node (Control plane), Worker node에 해당하는 서버 생성 (준비)
: Kubernetes 설치 가능 최소 사양 이상으로 구성 (필수 포트 번호 확인해서 포트 개방)
스왑의 비활성화 : kubelet이 제대로 작동하게 하려면 반드시 스왑 사용 X 설정
sudo swapoff -a : swap 기능 off
echo 0 > /proc/sys/vm/swappiness : 커널 속성의 swap disable, root 사용자로 전환 후 수행
sed -e '/swap/ s/^#*/#/' -i /etc/fstab : swap을 하는 파일시스템을 찾아 삭제
Master node (Control plane), Worker node에 container runtime 환경 구성
: Docker 설치
# 도커 설치 방법은 지난 TIL 2-4-3 참고, 이후
cat <<EOF | sudo tee /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
명령어 추가 실행
sudo systemctl enable --now docker
# apt 패키지 색인 업데이트 후 쿠버네티스 apt 레포지토리를 사용하는데 필요한 패키지 설치
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
# 구글 클라우드의 공개 샤이닝 키 다운로드
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
# 쿠버네티스 apt 레포지토리 추가
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
# apt 패키지 색인 업데이트 후 kubelet, kubeadm, kubectl 설치하고 해당 버전 고정
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
# 설치 확인
kubeadm version
kubelet --version
kubectl version
쿠버네티스 클러스터 구성
kubeadm init <args> : 관리자 권한으로 실행
[ 여담) kubeadm init 명령 실행시 에러 발생 해결 방안 ]
sudo rm /etc/containerd/config.toml
sudo systemctl restart containerd
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubeadm join 127.0.0.1:6443 --token 2yx1k0.f12wtr0v289s4rl9 \
--discovery-token-ca-cert-hash \
sha256:30087c0c2541d2287dc115fc18034349a517475042408f6841e4a1286b495799
cat > token.txt (+ shift+enter 후 위의 값 복붙으로 값 저장 권장)
kubectl apply <CNI 정보>
# weavenet plugin add-on
kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s.yaml
(에러나면 sudo systemctl daemon-reload , sudo systemctl restart kubelet 후 위 코드 재실행)
kubectl get nodes
더 자세한 정보를 얻고 싶다면
kubectl get nodes -o wide
sudo kubeadm join 127.0.0.1:6443 --token 2yx1k0.f12wtr0v289s4rl9 \
--discovery-token-ca-cert-hash \
sha256:30087c0c2541d2287dc115fc18034349a517475042408f6841e4a1286b495799
(이미 다운받았다는 등의 에러나면 sudo kudeadm reset 후 위 코드 재실행)
kubectl get nodes
kubectl get nodes -o wide
kubectl cluster-info
kubectl get pod --all-namespaces
https://labs.play-with-k8s.com/
https://kubernetes.io/docs/reference/setup-tools/kubeadm/
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
source <(kubeadm completion bash)
echo "source <(kubeadm completion bash)" >> ~/.bashrc
대규모 컨테이너를 운영하려면 워커 노드의 가용 리소스 현황을 고려하여 최적의 컨테이너 배치 및 모니터링, 컨테이너에 대한 효율적인 추적 관리 수행
각기 다른 목적과 기능으로 세분화된 컨테이너들이 실제 배치되는 노드
클러스터의 마스터 노드가 수행하는 각 컨테이너 및 워커 노드 관리는 Control Plane Component를 통해 수행
Pod를 어느 노드에 배치할지 결정하는 프로세스
클러스터 각 요소들을 모니터링하며 작업을 수행하도록 해주는 중앙 접근 포인트 역할
클러스터 안에서 구동되는 다양한 리소스들을 모니터링하며 이들이 원할하게 동작하도록 관리하는 프로세스
각 노드에서 Pod와 컨테이너를 구동시키고 관리하기 위해 필요한 요소
클러스터의 각 노드에서 Pod 內 컨테이너들이 정상 구동되도록 조율하는 agent
클러스터의 각 노드에서 구동되는 쿠버네티스 네트워크 프록시
클러스터 내부에 컨테이너 이미지를 가져오고 구동시키는 엔진
일반적으로 사용하는 CLI 명령
원하는 결과만 제시하고 시스템이 스스로 결과를 얻어주는 API