Container/kubenetes

kubernetes 설치 하기 (On-Premise) - CentOS 7.9

Dragonfog.net 2022. 4. 1. 11:43
반응형

###### CentOS 7.9 에 Kubernetes 설치 하기  (Kubeadm을 이용한 쿠버네티스 설치 - 온프레미스)

-  kubernetes를 설치 하기 위해서는 사전에 docker가 설치 되어 있어야 한다.

   여기에서는 Master node 1, worker node 2기로 구성을 진행 합니다.

   일반적으로 Master 노드의 경우 3,5 홀수로 구성하며 마스터 노드가 많다고 성능이 올라가지 않아

   클러스터 구성시에는 3~5 개 정도가  무난 합니다.

 

1. Docker Install
   Master01, Node01, Node02 서버에 Docker 설치 
   . https://docs.docker.com 참고

[ yum-utils  설치 및 도커 Repository 설정]

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

[docker 설치]

sudo yum install docker-ce docker-ce-cli containerd.io -y

 

# Kubernetes 실행시 cgroup가 맞지 않으면 기동시 오류가 나기에 cgroup를 맞춰 줘야 합니다.
  - Kubernetes 1.22버전부터는 systemd와 cgroup 맞춰줘야함

 [docker cgroup 변경] 

위에 이미지와 같이 ExecStart= .....에 추가
vi /usr/lib/systemd/system/docker.service 
 --exec-opt native.cgroupdriver=systemd

 

아니면 아래와 같이 파일 생성후 docker 재기동

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

[cgroup 변경 확인] - 서비스 재기동후 확인

docker info | grep -i cgroup



[docker 실행] - service 파일 수정시에는 daemon-reload를 해주고 서비스 재기동

sudo systemctl daemon-reload
sudo systemctl start docker
sudo systemctl enable docker

[일반계정도 docker 사용하도록 권한 부여]

sudo usermod -a -G docker dragonfog


    
[버전선택설치]

sudo yum list docker-ce --showduplicates | sort -r
sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io


[docker 설치후 확인]
docker version

 

 

 Kubernetes Install
 [설치전 환경설정]
   [kubernetes 설치전에 설치 대상 장비의 swap를 off해준다.]

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


   [Bridge Network 설정]

   cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
   br_netfilter
   EOF

   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


   [Firewall disable]

   systemctl stop firewalld
   systemctl disable firewalld

   [SELINUX Disable]

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

 

. kubeadm, kubectl, kubelet 설치
[Repository 등록]

cat <<EOF | tee /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=0
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


 ## Redhat계열에서는 repo_gpgcheck=1 로 설정 되어 있을 경우 Repository 오류 발생된다

(kubernetes 에서 Repository 등록시 repo_gpgcheck설정 변경)

yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
systemctl enable --now kubelet
systemctl start kubelet

 

 . control-plane 구성

- [MASTER에서만 실행] - master 컴퍼넌트 구성(api, controller, etcd, schduler, coredns 생성)
kubeadm init

- 구성 오류시 reset
kubeadm reset

 이후 토큰정보 저장
  아래 환경변수를 설정

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

[pod network구성]

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

 

. worker node 구성 (worker노드에서만 작업)
   [worker 조인]

# worker node에서 실행
   kubeadm join 172.30.1.111:6443 --token fdiwq5.1gv1l12if4dh9j7w \
        --discovery-token-ca-cert-hash sha256:7f0da5aa94c1611ea2479bd14a2bfb1c78098432ab370d886c78fa7de2c8c3b3


 . 설치 확인

   kubectl get nodes
   kubectl get nodes -o wide
   kubectl get pod --all-namespaces

[팁]   명령어 자동 완성 (bash)

   # bash-completion이 설치되어 있어야 함
   yum install bash-completion
   
   source <(kubectl completion bash)
   echo 'source <(kubectl completion bash)' >>~/.bashrc
   source <(kubeadm completion bash)
   echo 'source <(kubeadm completion bash)' >>~/.bashrc
반응형

'Container > kubenetes' 카테고리의 다른 글

Kubernetes 실습 환경 (미설치)  (0) 2022.04.01