웹사이트 검색

CentOS 8에 Kubernetes 클러스터를 설치하는 방법


CentOS 8Kubernetes 클러스터를 설치하는 과정은 CentOS 7의 과정과 거의 유사하지만(여기서 살펴볼 수 있음) 여기 프로세스에는 몇 가지 변경 사항이 있습니다. 이러한 변경 사항은 대부분 Docker 설치를 중심으로 이루어집니다.

CentOS 8(및 확장 RHEL 8)부터 docker는 이제 기본적으로 podman 및 < Redhat의 도구인 Strong>buildah입니다. 실제로 docker 패키지는 이제 기본 패키지 저장소에서 제거되었습니다.

이번 조치를 통해 Redhat 팀은 특별한 권한 없이 컨테이너를 생성하고 사용하는 프로세스를 단순화하는 동시에 도커 이미지와의 호환성을 유지하고 데몬 없이 이를 작동하는 것을 목표로 합니다. PodmanKubernetes 환경에서 실행할 때 더 많은 유연성을 제공할 것을 약속하지만 배심원단은 아직 남아 있습니다.

이 문서에서는 Docker-CE(커뮤니티)에서 실행되는 CentOS 8 플랫폼에 Kubernetes를 설치하는 과정을 살펴보겠습니다. 에디션). 이후 기사에서는 컨테이너에 podman을 사용하여 유사한 설치를 실행해 보겠습니다.

전제조건

  1. CentOS 8을 실행하는 서버 3개 – 마스터 노드 1개워커 노드 2개.
  2. 노드에는 머신당 2GB RAM 이상의 CPU가 2개 이상 있는 것이 좋습니다. 이는 엄격한 요구 사항은 아니지만 주로 실행하려는 응용 프로그램의 요구 사항에 따라 결정됩니다.
  3. 모든 노드의 인터넷 연결. 저장소에서 Kubernetesdocker 패키지를 가져옵니다. 마찬가지로 DNF 패키지 관리자가 기본적으로 설치되어 있고 패키지를 원격으로 가져올 수 있는지 확인해야 합니다.
  4. 또한 모든 노드는 개인 네트워크나 공용 네트워크 중 사용 가능한 네트워크에서 서로 연결할 수 있어야 합니다.
  5. 또한 sudo 또는 루트 권한이 있는 계정에 액세스해야 합니다. 이 튜토리얼에서는 루트 계정을 사용하겠습니다.

예방법

대부분의 노드에는 일반적으로 고유한 MAC 주소가 있지만, 일부 고유한 경우에는 일부 가상 머신이 동일한 MAC 주소를 가질 수 있습니다. 따라서 모든 노드에서 Product_UUIDMAC 주소가 동일하지 않은지 확인하는 것이 좋습니다.

Kubernetes는 이러한 값을 사용하여 클러스터의 노드를 고유하게 식별합니다. 이러한 값이 각 노드에 고유하지 않으면 설치 프로세스가 실패할 수 있습니다.

네트워크 인터페이스의 MAC 주소를 확인하고 비교합니다.

ip link

product_uuid를 확인하고 비교하려면 다음 명령을 실행하세요.

cat /sys/class/dmi/id/product_uuid 

논리적 아키텍처

우리 설치는 마스터 노드워커 노드를 제어하도록 설계되었습니다. 이 설치가 끝나면 논리적 아키텍처는 다음과 같습니다.

마스터 노드 – 이 머신은 일반적으로 제어 플레인 역할을 하며 클러스터 데이터베이스 및 API 서버(kubectl CLI와 통신)를 실행합니다.

3노드 Kubernetes 클러스터는 다음과 같습니다.

마스터 노드에 Kubernetes 클러스터 설치

Kubernetes가 작동하려면 컨테이너화 엔진이 필요합니다. 언급한 대로 우리는 Docker-CE를 사용할 것입니다.

CentOS 8 Master-Node에서는 다음과 같은 기관이 수행됩니다.

1단계: 호스트 이름, 방화벽 및 SELinux 준비

CentOS 8 마스터 노드/etc/hosts 파일에서 시스템 호스트 이름을 설정하고 DNS를 업데이트합니다.

hostnamectl set-hostname master-node
cat <<EOF>> /etc/hosts
192.168.0.47 master-node
192.168.0.48 node-1 worker-node-1
192.168.0.49 node-2 worker-node-2
EOF

그런 다음 worker-node-1worker-node-2를 핑하여 업데이트된 호스트 파일이 ping 명령을 사용하여 올바르게 작동하는지 확인합니다.

ping 192.168.0.48
ping 192.168.0.49

그런 다음 컨테이너가 포드 네트워크 및 기타 서비스에 필요한 호스트 파일 시스템에 액세스할 수 있도록 허용하는 데 필요하므로 Selinux를 비활성화합니다.

setenforce 0

setenforce0으로 설정하면 SELinux가 허용으로 설정되어 다음 재부팅까지 SELinux가 효과적으로 비활성화됩니다. 완전히 비활성화하려면 아래 명령을 사용하고 재부팅하십시오.

sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
reboot

Kubernetes는 통신 및 액세스를 위해 다양한 포트를 사용하며 이러한 포트는 Kubernetes에서 액세스할 수 있어야 하며 방화벽에 의해 제한되지 않아야 합니다.

포트에 방화벽 규칙을 구성합니다.

firewall-cmd --permanent --add-port=6443/tcp
firewall-cmd --permanent --add-port=2379-2380/tcp
firewall-cmd --permanent --add-port=10250/tcp
firewall-cmd --permanent --add-port=10251/tcp
firewall-cmd --permanent --add-port=10252/tcp
firewall-cmd --permanent --add-port=10255/tcp
firewall-cmd --reload
modprobe br_netfilter
echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables

2단계: CentOS 8에 Docker-CE 설치

Docker 저장소는 더 이상 기본 패키지 목록에 없으므로 다음 dnf config-manager 명령을 사용하여 먼저 추가해야 합니다.

dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo

또한 이미지 전송 및 저장부터 컨테이너 실행 및 감독, 하위 수준 저장, 네트워크 연결 및 그 이상에 이르기까지 호스트 시스템의 전체 컨테이너 수명주기를 관리하는 데몬으로 사용할 수 있는 containerd.io 패키지를 설치하세요. .

dnf install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm

이제 docker-ce 패키지의 최신 버전을 설치하세요.

dnf install docker-ce

이제 docker 서비스를 활성화하고 시작할 수 있습니다.

systemctl enable docker
systemctl start docker

3단계: CentOS 8에 Kubernetes(Kubeadm) 설치

다음으로 Kubernetes 저장소는 CentOS 8에 기본적으로 설치되지 않으므로 수동으로 추가해야 합니다.

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
EOF

Kubeadm은 모범 사례를 준수하는 최소 실행 가능한 Kubernetes 클러스터를 부트스트랩하는 데 도움이 됩니다. kubeadm을 사용하면 클러스터가 Kubernetes 적합성 테스트를 통과해야 합니다.

Kubeadm은 업그레이드, 다운그레이드, 부트스트랩 토큰 관리와 같은 다른 클러스터 수명 주기 기능도 지원합니다. Kubeadm은 AnsibleTerraform과 같은 다른 조정 도구와도 통합하기 쉽습니다.

이제 패키지 저장소가 준비되었으므로 kubeadm 패키지를 설치할 수 있습니다.

dnf install kubeadm -y 

설치가 성공적으로 완료되면 서비스를 활성화하고 시작합니다.

systemctl enable kubelet
systemctl start kubelet

4단계: kubeadm을 사용하여 제어 영역 마스터 생성

클러스터의 제어 영역 역할을 하는 Kubernetes 마스터는 클러스터에 필요한 몇 가지 중요한 서비스를 실행합니다. 따라서 초기화 프로세스에서는 일련의 사전 확인을 수행하여 머신이 Kubernetes를 실행할 준비가 되었는지 확인합니다. 이러한 사전 확인은 경고를 노출하고 오류가 발생하면 종료됩니다. 그런 다음 kubeadm init는 클러스터 제어 영역 구성요소를 다운로드하고 설치합니다.

이제 Kubernetes 마스터를 초기화할 차례입니다. 하지만 그 전에 "kubeadm init" 명령을 실행하려면 스왑을 비활성화해야 합니다.

swapoff -a

Kubernetes 마스터 초기화는 표시된 대로 "kubeadm init" 명령으로 제어되는 완전히 자동화된 프로세스입니다.

kubeadm init

그런 다음 나중에 작업자 노드에서 이 명령을 실행해야 하므로 다음 명령을 복사하여 어딘가에 저장합니다.

kubeadm join 192.168.0.47:6443 --token nu06lu.xrsux0ss0ixtnms5  \ --discovery-token-ca-cert-hash ha256:f996ea35r4353d342fdea2997a1cf8caeddafd6d4360d606dbc82314683478hjmf7

: 경우에 따라 위 명령에서 전달된 인수에 대한 오류가 발생할 수 있으므로 오류를 방지하려면 '\' 문자를 제거해야 합니다. 최종 명령은 다음과 같습니다.

kubeadm join 192.168.0.47:6443 --token nu06lu.xrsux0ss0ixtnms5 –discovery token-ca-cert-hash sha256:f996ea35r4353d342fdea2997a1cf8caeddafd6d4360d606dbc82314683478hjmf7

Kubernetes가 성공적으로 초기화되면 사용자가 클러스터 사용을 시작할 수 있도록 해야 합니다. 이 시나리오에서는 루트 사용자를 사용합니다. 표시된 대로 sudo 사용자를 사용하여 클러스터를 시작할 수도 있습니다.

루트를 사용하려면 다음을 실행하세요.

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

sudo 활성화된 사용자를 사용하려면 다음을 실행하세요.

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

이제 kubectl 명령이 활성화되었는지 확인하세요.

kubectl get nodes

이때 마스터 노드의 상태는 'NotReady'인 것을 확인할 수 있습니다. 이는 아직 포드 네트워크를 클러스터에 배포하지 않았기 때문입니다.

포드 네트워크는 현재 노드 네트워크 위에 배포되는 클러스터의 오버레이 네트워크입니다. 이는 포드 전체에 걸쳐 연결을 허용하도록 설계되었습니다.

5단계: 포드 네트워크 설정

네트워크 클러스터 배포는 필요에 따라 매우 유연한 프로세스이며 사용 가능한 옵션이 많습니다. 설치를 가능한 한 간단하게 유지하기 위해 구성이나 추가 코드가 필요하지 않고 포드당 하나의 IP 주소를 제공하는 Weavenet 플러그인을 사용하겠습니다. 더 많은 옵션을 보고 싶다면 여기를 확인하세요.

이러한 명령은 포드 네트워크를 설정하는 데 중요합니다.

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

이제 마스터 노드의 상태를 확인하면 '준비'여야 합니다.

kubectl get nodes

다음으로 클러스터에 워커 노드를 추가합니다.

Kubernetes 클러스터에 작업자 노드 추가

Kubernetes 클러스터에 참여할 때 각 워커 노드에서 다음 지침이 수행됩니다.

1단계: 호스트 이름, 방화벽 및 SELinux 준비

먼저 worker-node-1worker-node-2에 호스트 이름을 설정한 다음 /etc/hosts에 호스트 항목을 추가합니다. > 파일.

hostnamectl set-hostname 'node-1'
cat <<EOF>> /etc/hosts
192.168.0.47 master-node
192.168.0.48 node-1 worker-node-1
192.168.0.49 node-2 worker-node-2
EOF

다음으로, 워커 노드에서 마스터 노드를 핑하여 업데이트된 호스트 파일이 ping 명령을 사용하여 제대로 작동하는지 확인합니다.

192.168.0.47

그런 다음 SElinux를 비활성화하고 방화벽 규칙을 업데이트하세요.

setenforce 0
sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
firewall-cmd --permanent --add-port=6783/tcp
firewall-cmd --permanent --add-port=10250/tcp
firewall-cmd --permanent --add-port=10255/tcp
firewall-cmd --permanent --add-port=30000-32767/tcp
firewall-cmd --reload
echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables

2단계: Docker-CE 및 Kubernetes Repo 설정

먼저 DNF config-manager를 사용하여 Docker 저장소를 추가하세요.

dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo

다음으로 containerd.io 패키지를 추가합니다.

dnf install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm

이 두 패키지가 설치된 상태에서 최신 버전의 docker-ce를 설치하세요.

dnf install docker-ce

Docker 서비스를 활성화하고 시작합니다.

systemctl enable docker
systemctl start docker

Kubernetes 저장소는 CentOS 8에 사전 설치되어 있지 않으므로 수동으로 추가해야 합니다.

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
EOF

3단계: CentOS 8에 Kubeadm 설치

이제 패키지 저장소가 준비되었으므로 kubeadm을 설치할 수 있습니다.

dnf install kubeadm -y 

서비스를 시작하고 활성화합니다.

systemctl enable kubelet
systemctl start kubelet

4단계: 작업자 노드를 Kubernetes 클러스터에 가입

이제 클러스터에 참여하려면 kubeadm init이 생성한 토큰이 필요합니다. 어딘가에 복사한 경우 node-1node-2에 복사하여 붙여넣을 수 있습니다.

kubeadm join 192.168.0.47:6443 --token nu06lu.xrsux0ss0ixtnms5  --discovery-token-ca-cert-hash sha256:f996ea35r4353d342fdea2997a1cf8caeddafd6d4360d606dbc82314683478hjmf78

마지막 줄에서 제안한 대로 마스터 노드로 돌아가 작업자 노드-1워커 노드-2가 합류했는지 확인합니다. 다음 명령을 사용하여 클러스터링합니다.

kubectl get nodes

모든 단계가 성공적으로 실행되면 마스터 노드에 준비 상태인 node-1node-2가 표시됩니다. 이제 CentOS 8에 Kubernetes 클러스터가 성공적으로 배포되었습니다.

권장 읽기: Kubernetes 클러스터에 Nginx를 배포하는 방법

일부 제한 사항

여기서 생성한 클러스터에는 마스터 노드가 하나만 있으므로 마스터 노드에 장애가 발생하면 클러스터가 데이터를 잃을 수 있으며 처음부터 다시 생성해야 할 수도 있습니다.

이러한 이유로 저는 고가용성 설정을 권장합니다.