본문 바로가기
네트워크/k8s

[k8s] 2. 쿠버네티스 설치

by Lauren X Ming 2021. 1. 31.

쿠버네티스 구성

Usecase

Case 1

  • 집에 안 쓰는 노트북에 CentOS를 깔고 KVM을 설치

Case 2

  • 현재 쓰는 노트북에 VirtualBox로 VM 3개

Case 3

  • 구글클라우드를 이용해서 사용

Case 2로 ㄱㄱ

Case 2 구성

  • Host OS: Windows
  • 메모리 12G, CPU 4 Core, Disk 500GB로 가정
  • Guest OS는 4G, 2 Core, 150GB 구성
  • Guest에 설정 좀 하고 Kubernetes, Docker를 설치
  • 위 Guest OS를 2개 복사 --> 총 3개의 node, 12G, 6 Core, 450GB
  • 마지막으로 필수 네트워킹 관련 내용과 대시보드 설치

1. Virtualbox, CentOS, MobaXterm 설치

Virtualbox
CentOS --> Minimal로 다운
MobaXterm --> Installer editon로 다운

MobaXterm 설정

- Sessions > SSH > Remote host : 192.168.35.30 > [Bookmark settings] Session name : master-192.168.35.30 > [ok]
- Sessions > SSH > Remote host : 192.168.35.31 > [Bookmark settings] Session name : node1-192.168.35.31 > [ok]
- Sessions > SSH > Remote host : 192.168.35.32 > [Bookmark settings] Session name : node2-192.168.35.32 > [ok]

192.168.0.30으로 설정한 흑우 없제?

  • 무선 공유기 IP 대역에 맞게 192.168.35.30, 31, 32 요렇게 설정해라

2. VM 설정 및 CentOS 설치

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 탭 > 다음에 연결됨 [어댑터에 브리지] 선택
   - IP를 할당 받을 수 없는 경우  [NAT 네트워크] 
8. 시작

VM 시작 시 에러(E_FAIL (0x80004005) 해결 방법

FASOO DRM 삭제

정상 부팅

CentOS 설치

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.35.30, 넷마스크 : 255.255.255.0, 게이트웨이: 192.168.35.1, DNS 서버 : 8.8.8.8
      - [저장][완료]      
 5. 설치시작
6. [설정 > 사용자 설정] ROOT 암호 설정 
7. 설치 완료 후 [재부팅]

32비트로 설정해논 흑우는 이 화면에서 안 넘어감 ㅋㅋ

네트워크 IPv4 설정

192.168.0.30으로 설정한 흑우 없제?

  • 무선 공유기 IP 대역에 맞게 192.168.35.30, 31, 32 요렇게 설정해라

부팅 완료

편하게 사용하기 위해 VirtualBox는 실행만 하고 MobaXTerm으로 접속

3. Pre-Setting

SELinux 설정, 방화벽 해제, Swap 비활성화 쭉쭉 복붙 ㄱㄱ

SELinux permissive로 변경

setenforce 0

위 설정 영구적으로 설정

sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

Current mode:permissive인지 확인

sestatus

firewalld 비활성화

systemctl stop firewalld && systemctl disable firewalld

NetworkManager 비활성화

systemctl stop NetworkManager && systemctl disable NetworkManager

Swap 비활성화

swapoff -a && sed -i '/ swap / s/^/#/' /etc/fstab

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

쿠버네티스 YUM Repository 설정

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

Centos Update

yum update -y

Hosts 등록

cat << EOF >> /etc/hosts
192.168.35.30 k8s-master
192.168.35.31 k8s-node1
192.168.35.32 k8s-node2
EOF

192.168.0.30으로 설정한 흑우 없제?

  • 무선 공유기 IP 대역에 맞게 192.168.35.30, 31, 32 요렇게 설정해라

Docker & Kubernets 설치

도커 설치 전 필요 패키지 설치

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 docker-ce-18.06.2.ce
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

Kubernetes 설치 (1.15를 설치해부렀네...)

yum install -y --disableexcludes=kubernetes kubeadm-1.15.5-0.x86_64 kubectl-1.15.5-0.x86_64 kubelet-1.15.5-0.x86_64

4. Clone VM

Master shutdown

shutdown now

VM 복사, Master 선택 후 마우스 우클릭

1.  이름 : k8s-node1, MAC 주소정책 : 모든 네트워크 어댑터의 새 MAC 주소 생성
2.  복제방식 : 완전한 복제  

Config Node

Network 변경하기

  • node1, node2 똑같이 반복(ip는 바꿔서)
vi /etc/sysconfig/network-scripts/ifcfg-eth0
...
DEVICE="etho0"  
ONBOOT="yes"  
IPADDR="192.168.35.31"  
...
hostnamectl set-hostname k8s-node1

5. Initialize Master and Join Node

Master 설정

도커 및 쿠버네티스 실행

systemctl daemon-reload
systemctl enable --now docker

도커 설치 확인

[root@k8s-master ~]# docker run hello-world  
Unable to find image 'ello-world:latest' locally  
latest: Pulling from library/hello-world  
0e03bdcc26d7: Pull complete  
Digest: sha256:31b9c7d48790f0d8c50ab433d9c3b7e17666d6993084c002c2ff1ca09b96391d  
Status: Downloaded newer image for hello-world:latest

Hello from Docker!  
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:

1.  The Docker client contacted the Docker daemon.
2.  The Docker daemon pulled the "hello-world" image from the Docker Hub.  
    (amd64)
3.  The Docker daemon created a new container from that image which runs the  
    executable that produces the output you are currently reading.
4.  The Docker daemon streamed that output to the Docker client, which sent it  
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:  
$ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:  
[https://hub.docker.com/](https://hub.docker.com/)

For more examples and ideas, visit:  
[https://docs.docker.com/get-started/](https://docs.docker.com/get-started/)
  • Hello from Docker!가 보이면 됨

쿠버네티스 실행

systemctl enable --now kubelet

쿠버네티스 초기화 명령 실행

Pod의 IP가 자동으로 생성될 때 사용하는 대역 설정

kubeadm init --pod-network-cidr=20.96.0.0/12 --apiserver-advertise-address=192.168.35.30
  • 20.96.0.0/12 대역으로 설정한 것
  • Default: 10.96.0.0/12

아래 내용 기억

kubeadm join 192.168.35.30:6443 --token 4cbjc8.90bimhz2as526eob  
\--discovery-token-ca-cert-hash sha256:8e50db8c01c936718797880b3acd3619e07dc0188d8def5cd4a2e7b443f7bc95

환경변수 설정

mkdir -p $HOME/.kube  
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config  
sudo chown $(id -u):$(id -g) $HOME/.kube/config

Kubectl 자동완성 기능 설치

yum install bash-completion -y  
source <(kubectl completion bash)  
echo "source <(kubectl completion bash)" >> ~/.bashrc
  • 와 이거 하면 kubectl 사용 시 tab 버튼으로 다음에 올 명령어 조회가 가능하대!

Node1, 2 설정

도커 및 쿠버네티스 실행

도커 실행

systemctl daemon-reload
systemctl enable --now docker

쿠버네티스 실행

systemctl enable --now kubelet

Node 연결

kubeadm join 192.168.35.30:6443 --token 4cbjc8.90bimhz2as526eob  
\--discovery-token-ca-cert-hash sha256:8e50db8c01c936718797880b3acd3619e07dc0188d8def5cd4a2e7b443f7bc95
  • 아래 내용 기억 이라는 제목에 있는 그 내용임

Master에서 Node 연결 확인

kubectl get nodes

6. Add Plugin

Calico 설치

curl -O https://docs.projectcalico.org/v3.9/manifests/calico.yaml
sed s/192.168.0.0\\/16/20.96.0.0\\/12/g -i calico.yaml
kubectl apply -f calico.yaml

calico와 coredns관련 Pod의 status가 running인지 확인

[root@k8s-master ~\] kubectl get pods --all-namespaces  
NAMESPACE NAME READY STATUS RESTARTS AGE  
kube-system calico-kube-controllers-75dbcbbf8b-mxj5k 1/1 Running 0 109s  
kube-system calico-node-6v29g 1/1 Running 0 109s  
kube-system calico-node-76fss 1/1 Running 0 109s  
kube-system calico-node-qwj5m 1/1 Running 0 109s  
kube-system coredns-5c98db65d4-8bkfz 1/1 Running 0 23m  
kube-system coredns-5c98db65d4-mw97g 1/1 Running 0 23m  
kube-system etcd-k8s-master 1/1 Running 0 23m  
kube-system kube-apiserver-k8s-master 1/1 Running 0 22m  
kube-system kube-controller-manager-k8s-master 1/1 Running 0 23m  
kube-system kube-proxy-gwf8x 1/1 Running 0 8m34s  
kube-system kube-proxy-kt8kh 1/1 Running 0 23m  
kube-system kube-proxy-ncfqh 1/1 Running 0 8m38s  
kube-system kube-scheduler-k8s-master 1/1 Running 0 23m

Dashboard

Dashboard 설치

kubectl apply -f https://kubetm.github.io/documents/appendix/kubetm-dashboard-v1.10.1.yaml

백그라운드로 Proxy 띄우기

이거 말고

nohup kubectl proxy --port=8001 --address=192.168.35.30 --accept-hosts='^\*$' >/dev/null 2>&1 &

이걸로

nohup kubectl proxy --disable-filter=true --port=8001 --address=192.168.35.30 --accept-hosts='^\*$' >/dev/null 2>&1 &
  • --disable-filter=true 안 하면 나중에 껐다 다시키면 forbidden 에러남

접속 URL

(http://192.168.35.30:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/)

  • SKIP

출처

인프런 - 대세는 쿠버네티스 설치 강의