본문 바로가기

프로젝트 & TIL/일별 공부 기록 (백엔드 스쿨)

69일차 - 쿠버네티스 마운트, 설치 및 사용

NCP에서 NAS 볼륨 생성

- Service > Storage > NAS > NAS 볼륨 생성

  

- 서버 모두 ACL 설정에 넣고 생성

  

NAS 마운트

아래의 명령어 실행(전체 서버)

yum install nfs-utils -y : nfs-utils 설치

mkdir -p /data/share : 마운트할 폴더 생성

mount -t nfs 마운트_정보 /data/share : 마운트

(mount -t nfs -o vers=3 마운트_정보 /data/share : 위 마운트 명령어가 에러날 경우)

  

영구적인 마운트 설정(전체 서버)

vim /etc/fstab > 기존 내용에 '마운트_정보 /data/share nfs defaults 0 0' 추가

(위에서 vers=3 적용한 경우 : 마운트_정보 /data/share nfs defaults,vers=3 0 0)

  

df -h : 마운트 정보 확인

  

개별 서버 디렉토리 생성

mkdir -p /data/k8s-1-001 : 서버1에 실행

mkdir -p /data/k8s-1-002 : 서버2에 실행

mkdir -p /data/k8s-1-003 : 서버3에 실행

도커, Containerd 설치(전체 서버)

- 빌드할 때는 도커가 편하므로 둘 다 설치

  

도커 설치 준비

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

  

도커, Containerd 설치

yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y

  

도커, Containerd 시작 및 활성화

systemctl start docker
systemctl enable docker
systemctl start containerd
systemctl enable containerd

쿠버네티스가 Containerd를 이용할 수 있도록 설정(전체 서버)

Containerd 기본 설정 파일 생성

containerd config default > /etc/containerd/config.toml

  

설정 파일 수정

vim /etc/containerd/config.toml

[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
  BinaryName = ""
  ...
  SystemdCgroup = true # false 에서 true로 변경

  

Containerd 재시작

systemctl restart containerd

쿠버네티스(kubeadm, kubelet, kubectl) 설치(전체 서버)

kubeadm, kubelet, kubectl 설치 준비

- kubeadm : 클러스터를 부트스트랩하는 명령

- kubelet : 클러스터의 모든 머신에서 실행되는 파드와 컨테이너 시작과 같은 작업을 수행하는 컴포넌트

- kubectl : 클러스터와 통신하기 위한 커맨드 라인 유틸리티

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
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

  

kubeadm, kubelet, kubectl 설치

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

  

kubeadm, kubelet, kubectl 활성화

systemctl enable --now kubelet

클러스터 구성

- NCP ACG 설정에서 IP : 0.0.0.0/0, 허용 포트 : 6443 추가하여 적용

- 아래 명령어 실행 : 서버1(마스터 서버)에서 실행

kubeadm init --control-plane-endpoint "공인IP:6443" --upload-certs --pod-network-cidr=10.10.0.0/16 -v=5

  

클러스터 구성 취소

kubeadm reset # y 입력
rm -rf $HOME/.kube
rm -rf /etc/cni/net.d
systemctl restart kubelet

 

현재 유저를 쿠버네티스 관리자 계정으로 지정

(클러스터 구성 명령어를 실행하면 아래의 내용들이 나온다.)

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

or

export KUBECONFIG=/etc/kubernetes/admin.conf

  

워커 노드 등록(서버2, 서버3에서 실행)

kubeadm join 공인IP:6443 --token 토큰1 \
        --discovery-token-ca-cert-hash sha256:토큰2

  

노드 확인 명령어

$ kubectl get nodes

$ kubectl get nodes -o wide

$ watch kubectl get nodes -A

칼리코(Container Network Interface 구현체) 설치

- 서버1에서 실행

kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.24.1/manifests/tigera-operator.yaml

mkdir /kube

cd /kube

vi calico-resources.yaml > 아래 내용 입력

# This section includes base Calico installation configuration.
# For more information, see: https://projectcalico.docs.tigera.io/master/reference/installation/api#operator.tigera.io/v1.Installation
apiVersion: operator.tigera.io/v1
kind: Installation
metadata:
  name: default
spec:
  calicoNetwork:
    bgp: Disabled
    ipPools:
    - cidr: 10.10.0.0/16
      encapsulation: VXLAN

---

# This section configures the Calico API server.
# For more information, see: https://projectcalico.docs.tigera.io/master/reference/installation/api#operator.tigera.io/v1.APIServer
apiVersion: operator.tigera.io/v1
kind: APIServer 
metadata: 
  name: default 
spec: {}

kubectl create -f calico-resources.yaml

systemctl restart containerd : Containerd 재시작(전체 서버에서 실행)

watch kubectl get nodes -A => 잠시 기다리면 전체 노드가 Ready 상태로 변경된다.

  

kubectl 명령어 자동 완성 기능 활성화(서버1에서 실행)

yum install bash-completion -y
source /usr/share/bash-completion/bash_completion
kubectl completion bash | tee /etc/bash_completion.d/kubectl > /dev/null
echo 'alias k=kubectl' >>~/.bashrc
echo 'complete -o default -F __start_kubectl k' >>~/.bashrc
source /usr/share/bash-completion/bash_completion

Pod 띄우기

kubectl run webserver --image=nginx : 이름이 webserver인 파드 띄우기

kubectl get pods -o wide : 파드의 자세한 정보 확인

(yum install curl -y : curl 명령어 사용 안 되는 경우 설치)

curl IP주소 : 파드의 자세한 정보에서 확인한 IP를 입력, 파드에서 서비스 중인 웹서버 접속 => Welcome to nginx!가 뜬다.

(위 명령어 또는 curl http://IP주소:80)