🦁 쿠버네티스 초기 환경 구축하기
사전 준비사항 : VMWare 이용 " CentOs 8 " 가상머신 3대 ( IP 설정 ) 설치
➡ 이름 : master, worker01, worker02
➡ 메모리 및 CPU 설정 후 시작 ( 메모리 : 4GB, CPU : 2개 )
➡ 개인 컴퓨터 사양에 따라 다름
➡ 설정법 : " Edit virtual machine settings " 에서 설정 ( 가상머신 시작하기 전 )
✅ 가상머신 3대 공통 설정
1) 각 컴퓨터의 이름 지정 : vi /etc/hostname
➡ master / worker01 / worker02 로 각각 설정
2) 호스트 파일 설정 : vi /etc/hosts
[master IP 주소] master
[worker1 IP 주소] worker01
[worker2 IP 주소] worker02
3) 재부팅 실시 : init 6
➡ 정상적으로 설정이 되었다면, Putty로 접속했을 시 각 컴퓨터의 이름이 바뀌어있을
것이고, 컴퓨터의 이름으로 ping을 보내보면 정상적으로 보내질 것이다.
4) 방화벽 2개를 모두 해제
➡ systemctl stop firewalld
➡ 재부팅 시에도 꺼주는 설정 : systemctl disable firewalld
➡ setenforce 0
➡ 재부팅 시에도 꺼주는 설정 : sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
5) 네트워크 브리지 및 iptables 호출 활성화
➡ modprobe br_netfilter
➡ echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables
6) 도커 설치
➡ yum install -y yum-utils
➡ yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
➡ yum-config-manager --enable docker-ce-nightly
➡ yum-config-manager --enable docker-ce-test
➡ yum install -y docker-ce docker-ce-cli containerd.io --allowerasing
7) 도커 스토리지 설정파일 수정
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
8) 도커 설치를 끝내고, 실행
➡ systemctl daemon-reload
➡ systemctl restart docker
➡ systemctl enable docker
여기서부터 쿠버네티스 설치 시작
9) 쿠버네티스 클러스터를 구성할 때 필요한 네트워크 설정
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
➡ 설정이 추가되었는지 확인 : sysctl --system
10) 쿠버네티스 레포지토리 설치
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF
dnf install -y kubelet-1.22.5 kubeadm-1.22.5 kubectl-1.22.5 --disableexcludes=kubernetes
systemctl enable kubelet
systemctl start kubelet
11) 쿠버네티스 swap 비활성화
➡ 이유 : 쿠버네티스는 컨테이너를 메모리에서 동작시켜 효율적으로 관리하기 위해
사용하는 것인데, swap 메모리는 메모리가 부족할 시 디스크를 이용하여
부족한 메모리를 대체하도록 하는 것이다.
swap 메모리를 활성화 시켜놓으면, 메모리 부족 시 하드디스크에서
컨테이너가 동작토록 되는데 그렇게 되면 서비스의 성능이 저하될 것이다.
즉, 쿠버네티스를 사용하는 이유가 사라진다.
➡ swapoff -a
➡ 부팅 설정 파일에서 편집 : vi /etc/fstab
➡ /dev/mapper/cs-swap none swap defaults 0 0
주석 처리
12) 컴퓨터 종료 및 1차 스냅샷 찍기 : sudo poweroff
➡ 대시보드 설치 후 스냅샷을 찍으니, 대시보드 오류 시 재설치 시 처음부터 다시
설치해야되기 때문에, 여기서 한번 끊어주면서 스냅샷을 찍어주는게 좋은 것 같다.
✅ 여기까지 하면, 컴퓨터 3대의 공통 설정이 끝난다. 다음은 master 컴퓨터 설정
이다.
1) 쿠버네티스에서 사용할 가상의 네트워크 대역 설정(컴퓨터 IP와 다른 임의의 IP)
➡ kubeadm init --pod-network-cidr 100.100.100.0/24
➡ 제일 마지막 줄에서 나오는 kubeadm join ~~
부분을 복사해 놓는다.
2) 쿠버네티스 명령어를 편하게 사용하기 위한 설정
➡ mkdir -p $HOME/.kube
➡ cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
➡ chown $(id -u):$(id -g) $HOME/.kube/config
3) 설정이 제대로 됬는 지 확인 : kubectl get nodes
➡ 아래 사진처럼 출력되면 된 것이다.
✅ 이제부터는 worker01 / 02 컴퓨터에 대한 설정이다.
1) 위에서 복사해둔 kubeadm join ~~
을 붙여넣는다.
2) master 컴퓨터에서 설정이 잘 됬는지 확인한다.
➡ kubectl get pod -n kube-system
: 1, 2번째 빼고 모두 다 "Running" 이어야 함
➡ kubectl get nodes
: 컴퓨터 3대 모두 "NotReady" 상태
✅ 다시 master 컴퓨터에서의 설정이다.
1) 네트워크 CNI 설정 ( Calico )
➡ curl https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/calico.yaml -O
2) yml 파일 수정 : vi calico.yaml
➡ 줄번호 표시 : :set nu
➡ 4931번째 줄로 이동 : :4931
➡ 아래처럼 주석을 제거하고, 설정할 IP를 지정해준다.
( 주석 제거 시 : # 과 띄어쓰기 1칸까지 지워야함 )
# - name: CALICO_IPV4POOL_CIDR
# value: "192.168.0.0/16"
--------------위 부분을 아래 처럼 주석 제거---------------
- name: CALICO_IPV4POOL_CIDR
value: "200.200.200.0/24"
3) 설정한 야멜 파일 적용 : kubectl apply -f calico.yaml
4) 제대로 적용 됬는지 확인
➡ kubectl get pod -n kube-system
: 모든 컨테이너들이 "Running" 상태
➡ kubectl get nodes
: 컴퓨터 3대 모두 "Ready" 상태
5) 대시보드 설정
➡ wget 설치 : yum install -y wget
➡ 대시보드 설치 : wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
➡ 야멜 파일 편집 : vi recommended.yaml
➡ 45번째 줄에 type: NodePort
추가
6) 야멜 파일 적용 : kubectl apply -f recommended.yaml
7) 443번 포트와 연결된 포트번호 확인
➡ kubectl get services -n kubernetes-dashboard
8) 웹브라우저로 대시보드 접속 : https://master 컴퓨터 IP:확인한 포트번호
➡ 위처럼, 비공개 설정이 뜨면, 아무대나 마우스 클릭 후 키보드로
thisisunsafe
입력
➡ 그러면 아래처럼 로그인 창이 등장할 것이다.
9) 로그인하기 위한 토큰 생성
cat <<EOF | kubectl create -f -
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kube-system
EOF
cat <<EOF | kubectl create -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kube-system
EOF
10) 토큰 확인
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
11) 출력된 토큰을 입력하여 대시보드 로그인 ( 아래는 로그인 성공 화면 )
12) 모든 컨테이너들이 정상 작동 중인지 확인 : kubectl get pods --all-namespaces
13) 가상머신 컴퓨터를 완전히 종료하고 2차 스냅샷을 찍어둔다. ( 컴퓨터 3대 모두 )
( 나중에 문제발생 시 현 상태로 돌아가기 위해 )
14) 대시보드 토큰 타임아웃 설정 끄기 ( 선택 사항 )
➡ kubectl edit deployment kubernetes-dashboard -n kubernetes-dashboard
➡ 42번째 줄 - --token-ttl=0
추가 후 저장