진짜 개발자
본문 바로가기

Infra/kubernetes

Kubernetes - kubernetes 설치 및 설정

728x90

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