본문 바로가기

Infra/kubernetes

Kubernetes - kubernetes 설치 및 설정

Kubernetes 설치 및 설정


시나리오

- 시나리오라고 할 것도 없다 아래 그림과 같이 두개의 노드에 각각 Master, Worker를 설치할 것이다.




조건

사양

Master

 RAM : 2GB

 CPU : 2개 이상


방화벽

Master


Worker

워커노드에 생성되는 각각의 서비스에 접근하기위한 port들이다

예를 들어 Kubernetes WorkerNode의 IP가 1.0.0.10 이고 생성된 서비스의 포트가 30001인 경우

외부에서는  1.0.0.10:30001 로 해당 서비스에 접근하게 된다.


Selinux

- /etc/sysconfig/selinux를 아래 그림과 같이 편집하여 selinux를 off한다 공식문서에는 다른 방법으로 했지만

 일단 설치 목적으로 다음과 같이 진행한다


- Master, Worker 양쪽 모두에서 진행


*공식문서


설치

Master, Worker 공통 작업

 - 이하 Master, Worker 모두에서 명령어 입력

1. /etc/hosts 편집 


2. Enable br_netfilter Kernel Module

modprobe br_netfilter

# echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables

# modprobe br_netfilter


3. Disable Swap

1) swapoff -a


2) vi /etc/fstab


4. Docker

1) # yum install -y docker


2) # systemctl start docker && systemctl enable docker


5. Kubernetes

  1) 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

  2) # yum install -y kubeadm

  3) # systemctl start kubelet && systemctl enable kubelet

6. Change the cgroup-driver

1) sed -i 's/cgroup-driver=systemd/cgroup-driver=cgroupfs/g' /etc/systemd/system/kubelet.service.d/10-kubeadm.conf


2) # systemctl daemon-reload


3) # systemctl restart kubelet



Master Node

 - 이하 Master Node에서 명령어 입력

1. 클러스터 구성

# kubeadm init --apiserver-advertise-address=1.0.0.100 --pod-network-cidr=10.244.0.0/16

 - advertise-address : Master Node의 Ip를 입력한다

 - pod-network : pod들이 사용할 내부 네트워크 대역을 입력한다. (무조건 10.244.0.0/16 이어야 함!)


*Cluster 가입 명령어

- 위의 kubeadm init 명령어를 입력하고 클러스터 구성이 완료되면 하단에 노드들이 가입하기 위해 사용할 명령어를 알려준다

  이것을 복사해 두어야 한다.

 

2. Non-root user Kubectl 사용가능 구성

- 공식 홈페이지 왈 kubectl 명령어를 root가 아닌 사용자가 이용할 수 있도록 하는 것이라고 나와있는데
  root user임에도 아래 그림과 같은 에러가 나타났다

$ mkdir -p $HOME/.kube

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



3. Pod 네트워크 구성

- Pod가 서로 통신할 수 있도록 Network Add-on을 설치한다

- # kubectl apply -f "add-on.yaml"

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml



Worker Node

 - 이하 Worker Node에서 명령어를 입력

1. Cluster 가입

- 위의 Cluster 생성시 알려주었던 명령어를 Worker Node에서 입력한다

kubeadm join 1.0.0.100:6443 --token 7itg3w.ap7wjrzdyrflhyi4 --discovery-token-ca-cert-hash sha256:0898748dce7b257fe15807b95a87f6aa19fd0303ff9ea0c21283567a5e34cf3c



Test

Master Node에서 아래 명령어를 입력하여 노드가 클러스터에 연결되었음을 확인한다

# kubectl get nodes



ERROR

1. localhost:8080 was refused

아래 명령어 입력시 해결

$ mkdir -p $HOME/.kube

$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config


2. worker Node NotReady에러


# kubectl describe nodes 를 입력하여 노드들의 자세한 정보를 확인한다

여러가지 원인이 있지만 필자의 경우 pod에서 사용할 network 설정을 해주지 않아 발생했다

=> kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml



참조

kubernetes 공식 - https://kubernetes.io/docs/setup/independent/install-kubeadm/

블로그 - https://likefree.tistory.com/12

  • 쿠버 2019.09.28 19:19 댓글주소 수정/삭제 댓글쓰기

    안녕하세요 쿠버네티스를 공부하기 시작한 학생입니다. 처음에 왜 swap off하나요??

    • 조금 시간이 지나서 기억은 안나지만, 필요에 의해서 진행했던것 같습니다.
      공식문서를 다시 확인해본 결과 꼭필요한 설정은 아닌것으로 보입니다.
      명쾌한 답변 못드려 죄송합니다.

    • kuber 2019.12.27 10:25 댓글주소 수정/삭제

      아마 swapoff 하는 이유가, 마스터 노드에서 swapoff를 해주는데, 노드 관리 역할만 해주기 위함입니다.

      이부분에서 swapoff 설정을 안할 시, 서비스 문제에 지장은 없지만, 연관된 서비스를 제공할 때, 컨테이너 생성이 되지 않는 오류가 발생하더라구요.