calicoctl apply -f ipipmode.yaml
calicoctl get ippool -o wide
ssh cka1
ssh cka2
ssh cka3
으로 세 개의 EC2 인스턴스에 연결을 해준 뒤, 아래의 명령어로 hosts파일을 수정한다.
sudo -i
vi /etc/hosts
localhost 아래줄에 우리가 생성한 마스터, node1, node2의 private ip를 입력해준다.
private ip 는 아래에 저장되어있다.
서로 잘 연결되어있는지 보려면
master -> node1
master -> node2
node1 -> master
node1 -> node2
node2 -> master
node2 -> node1
로 핑을 찍어보면 된다.
ping node1 -c 2
이후 각각의 서버에서 아래명령어를 복붙하여 실행해준다.
# br_netfilter 모듈을 로드
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
modprobe overlay
modprobe br_netfilter
# bridge taffic 보게 커널 파라메터 수정
# 필요한 sysctl 파라미터를 /etc/sysctl.d/conf 파일에 설정하면, 재부팅 후에도 값이 유지된다.
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
# 재부팅하지 않고 sysctl 파라미터 적용하기
sysctl --system
도커엔진설치하기
apt update
apt install -y docker.io
systemctl status docker
이후 설치와 함께 실행되는데 컨트롤+C 로 빠져나오면 된다.
크리도커 cri-docker 를 설치해보자
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.0/cri-dockerd_0.3.0.3-0.ubuntu-bionic_amd64.deb
dpkg -i cri-dockerd_0.3.0.3-0.ubuntu-bionic_amd64.deb
systemctl status cri-docker
ls /var/run/cri-dockerd.sock
이후 컨트롤+C로 빠져나온다.
이제 kubeadm, kubelet, kubectl 을 설치해보도록 하겠다.
*fastcampus 선생님께서 정리해주신 각각의 명령어는 아래와 같다.
- kubeadm: 클러스터를 부트스트랩하는 명령이다.
- kubelet: 클러스터의 모든 머신에서 실행되는 파드와 컨테이너 시작과 같은 작업을 수행하는 컴포넌트이다.
- kubectl: 클러스터와 통신하기 위한 커맨드 라인 유틸리티이다.
이것들을 설치해보자
#Update the apt package index and install packages needed to use the Kubernetes apt repository:
apt update
apt install -y apt-transport-https ca-certificates curl
#Download the Google Cloud public signing key:
curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg \
https://packages.cloud.google.com/apt/doc/apt-key.gpg
#Add the Kubernetes apt repository:
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
#Update apt package index, install kubelet, kubeadm and kubectl, and pin their version:
apt update
apt install -y kubelet=1.26.0-00 kubeadm=1.26.0-00 kubectl=1.26.0-00
apt-mark hold kubelet kubeadm kubectl
위명령어를 하면 에러가난다.
찾은방법은 아래명령어를 수행해주는것이다
#꼭 아래 명령어 실행
curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-archive-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | tee /etc/apt/sources.list.d/kubernetes.list
#Update apt package index, install kubelet, kubeadm and kubectl, and pin their version:
apt update
apt install -y kubelet=1.26.0-00 kubeadm=1.26.0-00 kubectl=1.26.0-00
apt-mark hold kubelet kubeadm kubectl
다음으로는 마스터에서만 실행할 명령어이다.
# control-plaine 컴포넌트 구성
kubeadm init --pod-network-cidr=192.168.0.0/16 --cri-socket unix:///var/run/cri-dockerd.sock
첫번째 줄 만실행해서 노드 이미지를 가져온다.
설치가완료되면 마지막에 이 명령어를 치라고 나오는데, 복사해서 실행해준다.
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 172.31.10.149:6443 --token 02mret.tdnt7qpsjfmva3d0 \
--discovery-token-ca-cert-hash sha256:0fda580d7ec62cf0ed89ca4ae414a9d2c962089099efb4d3c51c64a7cb72e005 --cri-socket unix:///var/run/cri-dockerd.sock
--cri-socket unix:///var/run/cri-dockerd.sock 는 붙여넣기 해서 옆에 저장한다.(엔터치면 안된다!) 오류주의
그리고 토큰을 저장할 파일을 생성해준다.
vi token.join
붙여넣기 하고 저장한다.
이제 Calico를 설치해보도록 하자.
칼리코란?
컨테이너, 가상 머신 및 호스트 워크로드를 위한 오픈소스 네트워킹 및 네트워크 보안 솔루션이다.
기능은 주로 아래와 같다.
1.네트워크 통신
2.네트워크 정책
3.네트워크 성능 최적화
4.다중클라우드 및 베어메탈 지원
쿠버네티스와 같은 클라우드 네이티브 환경에서 매우 중요한 솔루션이라고 볼 수 있다.
설치방법
kubectl get nodes
노드를 먼저 확인해준다.
그리고 설치명령어를 실행한다.
# Calico 설치
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.24.1/manifests/tigera-operator.yaml
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.24.1/manifests/custom-resources.yaml
설치가 잘되고있는지 지켜보기 위해 아래 명령어를 통해 확인한다.
kubectl get pod -A
모두 Running상태로 바뀌면 성공이다.
cat token.join
으로 아까 저장한 명령어를 본다.
kubeadm join 172.31.10.149:6443 --token 02mret.tdnt7qpsjfmva3d0 \
--discovery-token-ca-cert-hash sha256:0fda580d7ec62cf0ed89ca4ae414a9d2c962089099efb4d3c51c64a7cb72e005 --cri-socket unix:///var/run/cri-dockerd.sock
복사 후 각각의 노드에 붙여넣기한다. (cka2, cka3 에)
*여기까지 잘실행이 안된다면 마스터 노드를 초기화해야한다.
sudo kubeadm reset
sudo apt purge kubectl kubeadm kubelet kubernetes-cni -y
sudo apt autoremove
sudo rm -fr /etc/kubernetes/; sudo rm -fr ~/.kube/; sudo rm -fr /var/lib/etcd; sudo rm -rf /var/lib/cni/
sudo systemctl daemon-reload
sudo iptables -F && sudo iptables -t nat -F && sudo iptables -t mangle -F && sudo iptables -X
# remove all running docker containers
docker rm -f `docker ps -a | grep "k8s_" | awk '{print $1}'`
위명령어로 삭제 후 kubeadm init 수행하였다.
Reset이 잘안먹을때는 아래처럼 옵션을 준다.
kubeadm reset --cri-socket unix:///var/run/cri-dockerd.sock
reset 했으면 yes 엔터치고 초기화
이후 위에 init 부터 다시 수행하면된다.
calico 설치까지
다시 본론으로 돌아와서, 진행.
cka2 와 cka3 노드에 조인을 다했으면 마스터에서
kubectl get nodes 를 해서 조인이 되었는지 확인한다.
이제 calico routing 기능을 다운받는다.
다운받고나서 chmod 줄의 명령어를 실행한다.
curl -L https://github.com/projectcalico/calico/releases/download/v3.24.1/calicoctl-linux-amd64 -o calicoctl
실행 후
chmod +x calicoctl
mv calicoctl /usr/bin
실행해주고,
calicoctl get ippool -o wide
실행해서 never 라고 뜬것확인 후 아래 명령어 복붙한다.
cat << END > ipipmode.yaml
apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
name: default-ipv4-ippool
spec:
blockSize: 26
cidr: 192.168.0.0/16
ipipMode: Always
natOutgoing: true
nodeSelector: all()
vxlanMode: Never
END
이후에 최종적으로 아래 명령어를 수행하면 정상적으로 always로 바뀐것을 확인할 수 있다.
다음시간에는 CKA에 맞게 시험 테스트 준비하는 방법에 대해 알아보겠다.
잊지말고 꼭 인스턴스를 종료해주도록 한다.
'ETC > CKA, CKAD, CKS' 카테고리의 다른 글
한번에 정리하는 CKA 시험환경 클러스터 구성하기 (0) | 2023.09.19 |
---|---|
CKA 자격증 준비 1 - 환경설정하기 (0) | 2023.09.13 |