Case 4. OS(windows) + Network(Bridge Mode) + 가상화(VirtualBox-CentOS) + k8s(v1.19.4)
VM 생성시 노트북에 연결되어 있는 공유기로부터 IP를 할당 받을 수 있을 경우의 설치 방법입니다.
1-1) Install Virtualbox
1-1-1) virtualbox 다운로드 및 설치
[윈도우10 버전으로 진행] 아래 경로에서 [Windows hosts] 클릭 하여 다운로드 후 설치 (별다른 변경없이 Next만 함)
https://www.virtualbox.org/wiki/Downloads
Mac 사용자 참고 URL
https://www.virtualbox.org/wiki/Mac%20OS%20X%20build%20instructions
1-1-2) CentOS Download
아래 경로로 들어가서 원하는 경로에서 Minimal 버전의 파일 다운로드
>http://isoredirect.centos.org/centos/7/isos/x86_64/
1-1-3) 원격접속 툴 MobaXterm 설치
꼭 MobaXterm이 아닌 각자 편한 원격접속 툴을 사용하셔도 되세요.
아래 예제는 MobaXterm를 설치하고 필요한 Host 등록 예제입니다.
- [GET MOBAXTERM NOW] 버튼 클릭
- Free 버전 [Download now]
- Installer editon 다운로드 및 실행
- Sessions > SSH > Remote host : 192.168.0.30 > [Bookmark settings] Session name : master-192.168.0.30 > [ok]
- Sessions > SSH > Remote host : 192.168.0.31 > [Bookmark settings] Session name : node1-192.168.0.31 > [ok]
- Sessions > SSH > Remote host : 192.168.0.32 > [Bookmark settings] Session name : node2-192.168.0.32 > [ok]
2-1) Setting VM
2-1-1) VM 스펙 설정
메모리 및 디스크는 각자 상황에 맞게 참고해서 VM 설정
1. [VM 생성 1단계] 머신 > 새로 만들기 클릭
2. [VM 생성 1단계] 이름 : k8s-master, 종류: Linux, 버전: Other Linux(64-bit)
3. [VM 생성 2단계] 메모리 : 4096 MB
4. [VM 생성 3단계] 하드디스크 : 지금 새 가상 하드 디스크 만들기 (VDI:VirtualBox 디크스 이미지, 동적할당, 150GB)
5. [VM 생성 후 시스템 설정] 프로세서 개수 : CPU 2개
6. [VM 생성 후 저장소 설정] 컨트롤러:IDE 하위에 있는 광학드라이브 클릭 > CentOS 이미지 선택 후 확인
7. [VM 생성 후 네트워크 설정] VM 선택 후 설정 버튼 클릭 > 네트워크 > 어댑터 1 탭 > 다음에 연결됨 [어댑터에 브리지] 선택
8. 시작
2-2) Install CentOS
2-2-1) CentOS 설치
4번 단계에서 8.8.8.8
는 Google DNS입니다. 원하는 DNS 쓰셔도 되요.
1. Test this media & install CentOS 7
2. Language : 한국어
3. Disk 설정 [시스템 > 설치 대상]
- [기타 저장소 옵션 > 파티션 설정] 파티션을 설정합니다. [체크] 후 [완료]
- 새로운 CentOS 설치 > 여기를 클릭하여 자동으로 생성합니다. [클릭]
- /home [클릭] 후 용량 5.12 GiB로 변경 [설정 업데이트 클릭]
- / [클릭] 후 140 GiB 변경 후 [설정 업데이트 클릭]
- [완료], [변경 사항 적용]
4. 네트워크 설정 [시스템 > 네트워크 및 호스트명 설정]
- 호스트 이름: k8s-master [적용]
- 이더넷 [설정]
[일반] 탭
- 사용 가능하면 자동으로 이 네트워크에 연결 [체크]
[IPv4 설정] 탭
- 방식: 수동으로 선택,
- [Add] -> 주소: 192.168.0.30, 넷마스크 : 255.255.255.0, 게이트웨이: 192.168.0.1, DNS 서버 : 8.8.8.8
- [저장][완료]
5. 설치시작
6. [설정 > 사용자 설정] ROOT 암호 설정
7. 설치 완료 후 [재부팅]
3-1) Pre-Setting
3-1-1) SELinux 설정
Ubuntu나 Debian등 다른 OS를 설치하시는 분들께서는 아래 경로에서 명령어 참고 바래요
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
https://kubernetes.io/docs/setup/production-environment/container-runtimes/#docker
쿠버네티스가 Pod Network에 필요한 호스트 파일 시스템에 액세스가 가능하도록 하기 위해서 필요한 설정이예요
아래 설정으로 SELinux을 permissive로 변경해야하고
setenforce 0
리부팅시 다시 원복되기 때문에 아래 명령을 통해서 영구적으로 변경 해야되요
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
아래 명령어를 실행해서 Current mode:permissive
내용 확인
sestatus
3-1-2) 방화벽 해제
firewalld 비활성화
systemctl stop firewalld && systemctl disable firewalld
NetworkManager 비활성화
systemctl stop NetworkManager && systemctl disable NetworkManager
3-1-3) Swap 비활성화
Swap 사용에 관련해서는 많은 의견이 있어요.
https://github.com/kubernetes/kubernetes/issues/53533
위 내용을 참고하셔서 swap 사용시의 고려해야할 점을 확인하시고 일단 여기선 사용하지 않도록 설정할께요.
swapoff -a && sed -i '/ swap / s/^/#/' /etc/fstab
3-1-4) iptables 커널 옵션 활성화
RHEL이나 CentOS7 사용시 iptables가 무시되서 트래픽이 잘못 라우팅되는 문제가 발생한다고 하여 아래 설정이 추가되요
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
3-1-5) 쿠버네티스 YUM Repository 설정
YUM에 대해서 좀더 상세한 내용이 궁금한 분께서는 아래 싸이트가 잘 정리되어 있는거 같아 링크 첨부했어요.
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
exclude=kubelet kubeadm kubectl
EOF
3-1-6) Centos Update
yum -y update
3-1-7) hosts 등록
계획된 master와 node의 호스트 이름과 IP를 모두 등록해주세요. 안하시면 추후 kubeadm init시 Host이름으로 IP를 찾을 수 없다고 에러가 나요.
cat << EOF >> /etc/hosts
192.168.0.30 k8s-master
192.168.0.31 k8s-node1
192.168.0.32 k8s-node2
EOF
3-2) Install
3-2-1) Docker 설치
도커 설치 전에 필요한 패키지 설치
yum install -y yum-utils device-mapper-persistent-data lvm2
도커 설치를 위한 저장소 를 설정
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
도커 패키지 설치
yum update -y && yum install -y containerd.io-1.2.13 docker-ce-19.03.11 docker-ce-cli-19.03.11
mkdir /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
]
}
EOF
mkdir -p /etc/systemd/system/docker.service.d
3-2-2) Kubernetes 설치
yum install -y --disableexcludes=kubernetes kubeadm-1.19.4-0.x86_64 kubectl-1.19.4-0.x86_64 kubelet-1.19.4-0.x86_64
4-1) Clone VM
4-1-1) 시스템 shutdown
여기까지 만든 이미지를 복사해 놓기 위해서 Master를 잠시 Shutdown 시켜요.
shutdown now
4-1-2) VM 복사
VirtualBox UI를 통해 Master 선택 후 마우스 우클릭을 해서 [복제] 버튼 클릭
1. 이름 : k8s-node1, MAC 주소정책 : 모든 네트워크 어댑터의 새 MAC 주소 생성
2. 복제방식 : 완전한 복제
node2도 반복
4-2) Config Node
4-2-1) Network 변경하기
VirtualBox UI에서 k8s-node1을 시작 시키면 뜨는 Console 창을 통해 아래 명령어 입력
Host의 Ip Address를 변경하기 위해 아래 명령어로 설정을 열고
vi /etc/sysconfig/network-scripts/ifcfg-eth0
IPADDR=
부분을 해당 Node의 IP (192.168.0.31)로 변경해주세요
...
DEVICE="etho0"
ONBOOT="yes"
IPADDR="192.168.0.31"
...
그리고 아래 명령어로 네트워크 재시작
systemctl restart network
4-2-2) Host Name 변경
해당 Node의 Host 이름을 변경해주세요
hostnamectl set-hostname k8s-node1
이와 같은 방식으로 k8s-node2(192.168.0.32) 도 설정합니다.
5-1) Master
5-1-1) 도커 및 쿠버네티스 실행
도커 실행
systemctl daemon-reload
systemctl enable --now docker
아래 명령어를 입력하면 image를 다운받는 내용이 나오면서 중간에 Hello for Docker!
가 보이면 설치 확인되면 설치가 잘 된거예요.
docker run hello-world
쿠버네티스 실행
systemctl enable --now kubelet
5-1-2) 쿠버네티스 초기화 명령 실행
kubeadm init 명령관련 해서 상세 내용이 궁금하신 분은 아래 싸이트 참고하세요.
https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-init/
pod-network-cidr
를 설정하면 Pod의 IP가 자동으로 생성될때 해당 network으로 생성되요
`service-cidr` 를 설정하면 Service의 IP가 자동으로 생성될때 해당 대역으로 생성되요 `Default: 10.96.0.0/12`
kubeadm init --pod-network-cidr=20.96.0.0/12 --apiserver-advertise-address=192.168.0.30
실행 후 [Your Kubernetes master has initialized successfully!]
문구를 확인하고 아래 내용 복사해서 별도로 저장해 둡니다.
kubeadm join 192.168.0.30:6443 –token ki4szr.t3wondaclij6d1a3
–discovery-token-ca-cert-hash sha256:2370f0451342c6e4bd0d38f6c2511bda5c50374c85e9c09da28e12dd666d5987
5-1-3) 환경변수 설정
root 계정을 이용해서 kubectl을 실행하기 위한 환경 변수를 설정
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
5-1-4) kubectl 자동완성 기능 설치
kubectl 사용시 [tab] 버튼을 이용해서 다음에 올 명령어 리스트를 조회 할 수 있어요.
명령 실행 후 바로 적용이 안되기 때문에 접속을 끊고 다시 연결 후에 사용 가능합니다.
yum install bash-completion -y
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
5-2) Node
5-2-1) 도커 및 쿠버네티스 실행
도커 실행
systemctl daemon-reload
systemctl enable --now docker
쿠버네티스 실행
systemctl enable --now kubelet
5-2-2) Node 연결
Master Init 후 복사 했었던 내용 붙여넣기
kubeadm join 192.168.0.30:6443 --token 7xd747.bfouwf64kz437sqs \
--discovery-token-ca-cert-hash sha256:ec75641cd258f2930a7f73abfe540bb484eb295ad4500ccdaa166208f97c5117
5-2-3) Node 연결 확인
Master 서버에 접속해서 아래 명령 입력 후 추가된 Node가 보이는지 확인 (Status는 NotReady)
kubectl get nodes
6-1) Networking
6-1-1) Calico 설치
Kubernetes Cluster Networking에는 많은 Plugin들이 있는데 그중 Calico 설치에 대한 내용 입니다.
https://docs.projectcalico.org/v3.9/getting-started/kubernetes/
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
calico와 coredns 관련 Pod의 Status가 Running인지 확인
kubectl get pods --all-namespaces
6-2) Dashboard
6-2-1) Dashboard 설치
해당 설정은 교육목적으로 권한 설정을 모두 해제하는 방법이기 때문에 프로젝트에서 사용하실때는 이점 유의바래요
kubectl apply -f https://kubetm.github.io/documents/appendix/kubetm-dashboard-v2.0.0.yaml
6-2-2) 권한 해지 설정
접속시 인증 Skip 설정
- updated 2021-08-26
위 kubetm-dashboard-v2.0.0.yaml에 해당 내용 포함되어 있습니다. 별도로 안하셔도 되세요.
6-2-3) 백그라운드로 proxy 띄우기
--address
에 자신의 Host IP 입력
nohup kubectl proxy --port=8001 --address=192.168.0.30 --accept-hosts='^*$' >/dev/null 2>&1 &
- 만약 Master 노드가 Restart 됐을 경우 이 부분은 다시 실행해 줘야 합니다.
6-2-4) 접속 URL
http://192.168.0.30:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/
6-2-5) 언어 설정변경
Chrome 설정 > 언어 > 언어(한국어) > 원하는 언어를 위로 추가