본문 바로가기
Infra & DevOps/Kubernetes

쿠버네티스 설치 방법

by Jordy-torvalds 2020. 6. 14.
반응형

개요

어떤 파일도 설치되어 있지 않은 CentOS 7에 쿠버네티스를 설치하는 방법에 대해 정리해보겠습니다.

공식 홈페이지의 가이드에 따라 설치했음에도 불구하고 알 수 없는 오류에 고심하시던 쿠버인들은 제 글을 읽고 찬찬히 따라하셔서 최대한 빨리 쿠버를 설치하시길 바랍니다.

글을 시작하기 앞서 아래 가이드를 정리해주신 익명의 스터디원께 감사드립니다.

설치 절차

CentOS 설정

  • 호스트 네임 설정: 쿠버네티스 설치 후에 보여졌으면 하는 Node의 이름으로 설정해주세요.

hostnamectl set-hostname [your node name]

  • 내부 DNS 서버 등록
vi /etc/hosts

# 위 명령어 실행 해보시면 127.0.0.1 아이피로 된 row가 보이실텐데,
# 그 뒤에 설정한 호스트 네임과 동일하게 입력해주세요
127.0.0.1 [your node name]

방화벽

방화벽을 중지하고 비활성화 하는 것은 보안 상 문제가 될 수 있으나, 이번 글에서는 최대한 빨리 쿠버네티스를 설치하는 것을 목표로 하고 있으므로 방화벽을 정지 및 비활성화 합니다.

방화벽을 정지하고 비활성화 하는 이유는 쿠버네티스 운영상 반드시 열려있어야 하는 필수 포트가 있는데, 이것이 닫겨 있을 경우 쿠버네티스 운영 및 설치에 장애가 될 수 있기 떄문입니다.

보안에 문제가 되지 않게 쿠버네티스를 설치하시고 싶으신 분은 별도로 firewalld를 학습하셔서 실습해보시길 추천 드립니다.

systemctl stop firewalld

systemctl disable firewalld

스왑

스왑 옵션이 켜져 있을 경우 쿠버네티스 클러스터를 설치 및 운영할 수 없으므로 비활성화하고 파일 시스템 마운트 목록에서도 제외합니다.

swapoff -a

sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

selinux

firewalld 와 동일하게 쿠버네티스 설치 및 운영에 걸리는 부분이 없도록 설정하실 수 있으시면 이 글의 가이드 대로 완전 비활성화를 할 필요가 없습니다.

setenforce 0

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

도커

컨테이너 생성 및 운영, 리포지토리로부터 이미지 다운로드, 노드 컴포넌트 생성 등 쿠버네티스 핵심 구성요소 입니다.

sudo yum install -y yum-utils

$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

sudo yum list docker-ce --showduplicates | sort -r

yum install -y docker-ce
sudo systemctl start docker

Docker 설치가 완료 되었으면, Docker 데몬이 사용하는 드라이버를 cgroupfs 대신 systemd를 사용하도록 설정한다.

왜냐하면 kubernetes에서 권장하는 Docker 데몬의 드라이버는 systemd 이기 때문이고, systemd를 사용하면 kubernetes가 클러스터 노드에서 사용 가능한 자원을 쉽게 알 수 있도록 해주기 때문이다.

sudo cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF

sudo mkdir -p /etc/systemd/system/docker.service.d
sudo systemctl daemon-reload

sudo systemctl restart docker

systemctl enable docker.service

쿠버네티스

이것은 일부 CNI 플러그인이 작동하기 위해서 아이피테이블 설정을 1로 변경합니다. 세부내용은 아래 링크를 참조바랍니다.

https://kubernetes.io/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/#network-plugin-requirements

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

sudo sysctl --system

쿠버네티스를 다운로드할 리포지토리 설정.

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
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

yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

systemctl enable --now kubelet

아래 명령어는 kubeadm을 사용해 쿠버네티스 클러스터를 초기화 하는 명령어로 세부 옵션은 공식 홈페이지를 참고해주세요.

kubeadm init --pod-network-cidr=10.244.0.0/16

쿠버네티스 클러스터 초기화가 성공하게 되면 아래와 같은 포맷의 명렁어가 출력됩니다. 아래 명령어는 다른 노드를 현재 설치한 쿠버네티스 클러스터에 참가시킬 수 있는 명령어 입니다.

kubeadm join [kubernetes-api-server`s ip:kubernetes-api-server`s port] --token [kubernetes install token] \
--discovery-token-ca-cert-hash [ca-cert-hash]

kubeadm join 100.200.220.100:6443 --token aqbw3.313g31g3g1g \
--discovery-token-ca-cert-hash qempfqekfmqepkfmpk13mpkr31kp13kp41331413413tg113g13g

루트 계정이 아닌 일반 계정으로 kubectl을 사용할 수 있게 설정.

su - [기존에 있던 일반 계정]

홈 디렉토리에 큐브 디렉토리 생성

mkdir -p $HOME/.kube

mkdir -p $HOME/.kube/config

기존에 있던 관리자 설정 정보를 복사\

클러스터에 참여하는 노드는 kubelet.conf로 변경

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

설정 정보 소유자 및 그룹 정보 수정

sudo chown $(id -u):$(id -g) $HOME/.kube/config

쿠버네티스 API 통신에 필요한 kube-proxy 설치

kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"

설치 완료 후 테스트. 정상 출력시 성공.

kubectl get nodes

참고자료

https://medium.com/finda-tech/overview-8d169b2a54ff

반응형