선 코드.
후 설명.
tip - Centos가 ubuntu보다 설정이 편하다!(내 기준..) ->이번 기회에는 ubuntu로 진행하고 싶지만, 내가 원하는대로 동작하지 않아서 Centos7을 선택했다. tip2 - aws 프리티어에서는 kubernetes를 사용할 수 없다. -> CPU 2개 이상을 선택하면 과금이 되기 때문. 따라서 kubernetes를 공부하고 싶다면, GCP를 이용하는 게 훨 낫다.
사용할 모든 노드(master, worker) 에 공통적으로 필요한 것들을 설치하고, 설정한다.
sudo su -
설치과정은 root 권한으로 진행된다!
swapoff -a
echo 0 > /proc/sys/vm/swappiness
sed -e '/swap/ s/^#*/#/' -i /etc/fstab
systemctl disable firewalld
systemctl stop firewalld
각 노드와의 통신을 원활하게 하기 위하여 방화벽을 멈춘다.
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
쿠버네티스에서 컨테이너가 호스트의 파일시스템에 접근할 수 있도록 SELinux라는 기능을 끈다.
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
RHEL 과 CentOS 7에서 iptables 관련 이슈가 있어, 커널 매개변수를 다음과 같이 적용한다.
modprobe br_netfilter
br_netfilter 모듈이 활성화되어 있어야 한다.
위의 명령어를 통해 해당 모듈을 명시적으로 추가.
lsmod | grep br_netfilter 명령어로 추가 여부를 확인 가능.
yum install docker -y
systemctl start docker.service
kubernetes의 컨테이너 실행환경 중 하나인 docker를 설치하고 실행한다.
쿠버네티스를 설치할 때 master노드와 worker노드의 설치과정이 조금 다르다. 어떤 노드든 공통 설치를 진행한 후에 노드에 맞는 설치를 진행해주면 되겠다. 이를 숙지하고 설치하기 바란다.
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=kube*
EOF
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
systemctl enable kubelet && systemctl start kubelet
우리는 kubeadm을 설치한다. 하지만 이 친구는 kubectl과 kubelet을 설치하지 않기 때문에 따로 설치를 해줘야한다.
kubeadm config images pull
설치 시 사용할 이미지 다운로드.
kubeadm init
마스터 노드를 초기화한다.
Your Kubernetes master has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
You can now join any number of machines by running the following on each node
as root:
kubeadm join 10.146.0.25:6443 --token yuaea3.d7m8hkpvazrbv5yw --discovery-token-ca-cert-hash sha256:c6a7121c5d5207179f67d913fa654441137f76027ad0f4e23724f0202b280eec
설치 후에는 이런식으로 로그를 출력한다.
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
여기서, 일반 사용자가 kubectl을 사용할 수 있도록 하게 해주는 명령어 라인이 있다. 이를 복사해서 실행해주자.
kubeadm join 10.146.0.25:6443 --token yuaea3.d7m8hkpvazrbv5yw --discovery-token-ca-cert-hash sha256:c6a7121c5d5207179f67d913fa654441137f76027ad0f4e23724f0202b280eec
맨 마지막 라인의 kubeadm join은 클러스터에 worker노드를 추가하는 명령어 라인이다. 복사해두자!
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
오버레이 네트워크 구성을 위하여 이를 지원하는 CNI 플러그인인, Weave를 다운로드 해주자.
kubeadm join 10.146.0.25:6443 --token yuaea3.d7m8hkpvazrbv5yw --discovery-token-ca-cert-hash sha256:c6a7121c5d5207179f67d913fa654441137f76027ad0f4e23724f0202b280eec
아까 저장해두었던 kubeadm join을 worker 노드에서 실행시켜주자.
그러면 클러스터 구성이 완성된다.
설치가 잘 되었는지 확인해보자!
kubectl get no
쿠버네티스 클러스터에 있는 모든 노드들의 상태가 나온다.
NotReady인 경우는 노드가 켜질 때 까지 시간이 필요한 경우일 수도 있다.
어느정도 시간이 지난 후에 다시 상태를 확인해보자.
kubectl get componentstatuses
쿠버네티스의 모든 구성요소가 잘 동작하는지 확인하는 것이다.
STATUS가 Healthy하고, MESSAGE가 ok라고 뜨면 정상이다.
systemctl start docker.service
systemctl enable kubelet && systemctl start kubelet
클라우드같은 경우는 클러스터를 종료할 때가 있다.
이럴 때는 docker와 쿠버네티스를 다시 시작해주면 된다.