Exercise 3.1: Install Kubernetes
CP로 SSH 접속
ssh root@CP_IP_ADDRESS
실습 환경에 필요한 라이브러리 설치
sudo apt update && sudo apt install -y \ curl apt-transport-https vim git wget gnupg2 net-tools \ software-properties-common lsb-release ca-certificates uidmap
컨테이너 런타임 구동에 필요한 overlay와 br_netfilter 커널 모듈 불러오기
{ cat <<EOF | sudo tee /etc/modules-load.d/kubernetes.conf overlay br_netfilter EOF sudo modprobe overlay sudo modprobe br_netfilter }
컨테이너 런타임 구동에 필요한 커널 파라미터 설정
{ cat <<EOF | sudo tee /etc/sysctl.d/kubernetes.conf net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1 EOF sudo sysctl --system }
컨테이너 런타임 설치
{ sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt update && apt install -y containerd.io sudo containerd config default | tee /etc/containerd/config.toml sudo sed -e 's/SystemdCgroup = false/SystemdCgroup = true/g' -i /etc/containerd/config.toml sudo systemctl restart containerd cat <<EOF | sudo tee /etc/crictl.yaml runtime-endpoint: unix:///run/containerd/containerd.sock EOF }
쿠버네티스 설치 및 구동에 필요한 바이너리 설치
{ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list sudo apt update && sudo apt install -y kubelet=1.27.1-00 kubeadm=1.27.1-00 kubectl=1.27.1-00 sudo apt-mark hold kubelet kubeadm kubectl }
클러스터 설정 파일 생성
cat << EOF | tee kubeadm-config.yaml apiVersion: kubeadm.k8s.io/v1beta3 kind: ClusterConfiguration kubernetesVersion: 1.27.1 controlPlaneEndpoint: "k8scp:6443" networking: podSubnet: 192.168.0.0/16 EOF
/etc/hosts
파일에 아래와 같은 라인 추가 - CP_IP_ADDRESS는 CP 노드 IP주소CP_IP_ADDRESS k8scp
예를들어 CP의 IP주소가 123.45.67.89라면 아래처럼 입력
123.45.67.89 k8scp
k8scp에 연결된 IP 주소 확인
nslookup k8scp
컨트롤 플레인 구성
kubeadm init --config=kubeadm-config.yaml --upload-certs | tee kubeadm-init.out
kubeconfig 파일 복사
{ mkdir -p $HOME/.kube sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config }
kubeconfig 파일 확인
cat ~/.kube/config
실행중인 Pod 확인
kubectl get pod --all-namespaces
Pending 상태의 Pod의 상세내용 확인
kubectl describe pod \ $(kubectl get pod -A --field-selector=status.phase=Pending -o=jsonpath='{.items[0].metadata.name}') \ -n $(kubectl get pod -A --field-selector=status.phase=Pending -o=jsonpath='{.items[0].metadata.namespace}')
노드 목록 확인
kubectl get node
CP 노드 상태 확인
kubectl describe node cp
kubelet 로그 확인
sudo journalctl -u kubelet -n 10 --no-pager
CNI 플러그인 설치
kubectl apply -f \ https://raw.githubusercontent.com/youngwjung/lf-training/main/LFS458/v1.28.1/SOLUTIONS/s_03/cilium-cni.yaml
실행중인 Pod 확인
kubectl get pod -A
CP 노드 상태 확인
kubectl describe node cp
kubectl 명령어에 대한 bash completion 설정
{ echo 'source <(kubectl completion bash)' >>~/.bashrc source <(kubectl completion bash) }
Last updated