쿠버네티스(k8s) 시작 -1 (기본 설정)

2022. 3. 29. 15:54가상 머신/k8s

본격적으로 k8s를 공부하기 위해서는 설치하고 이것저것 설정할 것이 많았다.

생각보다 어려웠다.

 

Disable SELinux

Security-Enhanced Linux, 리눅스 커널 보안 모듈이며 2003년에 업스트림 Linux 커널로 통합됐다.

SELinux는 관리자가 시스템 액세스 권한을 효과적으로 제어할 수 있게 하는 Linux 시스템용 보안 아키텍쳐이다.

 

세가지 모드 설정 가능

  • enforce(Default) : SELinux의 보안 정책을 적용시킴
  • permissive : SELinux의 보안 정책에 어긋나도 동작은 허용
  • disable : SELinux 기능을 해제

개발 서버는 Permissive로 진행할 것이다.

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

아래 명령어를 통해 현재 모드를 확인한다.

$ sestatus
..생략..
Current mode:                   permissive
..생략..

 

방화벽 비활성화

방화벽을 끄지 않을 수 있지만, 개발 서버는 끄고 진행하도록 하겠다.

$ systemctl stop firewalld && systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

 

Network Manager 비활성화

Network Manager도 끄고 진행하도록 하겠다.

$ systemctl stop NetworkManager && systemctl disable NetworkManager
Removed symlink /etc/systemd/system/multi-user.target.wants/NetworkManager.service.
Removed symlink /etc/systemd/system/dbus-org.freedesktop.nm-dispatcher.service.
Removed symlink /etc/systemd/system/network-online.target.wants/NetworkManager-wait-online.service.

 

Swap 비활성화

k8s에서 Swap 비활성 관련해서 이슈가 있는 듯 싶다.

개발 서버는 비활성으로 하지만, 상용 서버를 구성할 때는 관련 이슈를 참고해야 겠다.

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

 

iptables 커널 옵션 활성화

레드헷 계열 커널 사용시 iptables가 무시되는 문제로 라우팅이 잘못되는 현상이 발생할 수 있다고한다.

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

 

k8s yum Repository 설정

yum repo를 설정하지 않으면 기본적으로 k8s를 설치할 수 없다.

k8s 설치할 때 ... not available 뜨면 yum repo가 설정되지 않은 것일 수 있다.

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=0
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF

 

hosts 등록

master와 node의 호스트 이름과 IP를 등록한다.

cat << EOF >> /etc/hosts
192.168.10.4 k8s-master
192.168.10.5 k8s-node1
192.168.10.6 k8s-node2
EOF

 

Docker 설치

도커 설치 전, 필요한 패키지 설치
yum install -y yum-utils device-mapper-persistent-data lvm2 

도커 설치를 위한 저장소 설정
yum install -y yum-utils device-mapper-persistent-data lvm2 

도커 설치
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

 

k8s 설치

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

 

Master Node 설정

docker 및 k8s 실행

docker 실행

systemctl daemon-reload

Hellofor Docker!가 출력되는 것을 확인한다.
systemctl enable --now docker

docker run hello-world

 

k8s 실행

systemctl enable --now kubelet

 

k8s 초기화 명령

cidr과 ip를 설정한다.
kubeadm init --pod-network-cidr=20.96.0.0/12 --apiserver-advertise-address=192.168.10.4

kubeadm join 192.168.10.4:6443 --token zhghkg.1g680zsb0eg0jai2 \
    --discovery-token-ca-cert-hash sha256:0140c3bd755d5dc9b1845e432828524e9e4142407f24a4883ecfa718d9461f7e
    위와 같은 문구가 출력되면 저장해둔다.

 

환경 변수 설정

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

 

Slave Node 설정

docker 및 k8s 실행

도커 실행

systemctl daemon-reload
systemctl enable --now docker

 

k8s 실행

systemctl enable --now kubelet

 

Master Node와 연결

Master Node init할 때 저장해뒀던 내용 붙여넣기를 한다.

kubeadm join 192.168.10.4:6443 --token zhghkg.1g680zsb0eg0jai2 \
    --discovery-token-ca-cert-hash sha256:0140c3bd755d5dc9b1845e432828524e9e4142407f24a4883ecfa718d9461f7e

 

Node 연결 확인

Master Node에서 아래 명령어를 통해 추가된 Node가 있는지 확인한다.

kubectl get nodes

NAME         STATUS     ROLES    AGE     VERSION
k8s-master   NotReady   master   6d18h   v1.15.5
k8s-node1    NotReady   <none>   11s     v1.15.5
k8s-node2    NotReady   <none>   10s     v1.15.5