웹사이트 검색

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


이 페이지에서

  1. 전제 조건
  2. 무엇을 할 것인가?\n
  3. 1단계 - Kubernetes 설치
    1. - 호스트 구성\n
    2. - SELinux 비활성화\n
    3. - br_netfilter 커널 모듈 활성화\n
    4. - 스왑 비활성화\n
    5. - Docker CE 설치
    6. - Kubernetes 설치
    7. - cgroup 드라이버 변경

    Kubernetes는 Google에서 개발한 컨테이너화된 애플리케이션을 관리하기 위한 오픈 소스 플랫폼입니다. 이를 통해 클러스터 환경에서 컨테이너화된 애플리케이션을 관리, 확장 및 자동으로 배포할 수 있습니다. Kubernetes를 사용하면 여러 호스트에서 컨테이너를 오케스트레이션하고, 모든 리소스를 사용하여 컨테이너화된 애플리케이션을 즉시 확장하고, 중앙 집중식 컨테이너 관리 환경을 가질 수 있습니다.

    이 튜토리얼에서는 CentOS 7에서 Kubernetes를 설치하고 구성하는 방법을 단계별로 보여드리겠습니다. k8s-master 서버 1개를 Kubernetes 호스트 마스터로 사용하고 서버 2개를 Kubernetes 노드(node01 및 node02)로 사용합니다.

    전제 조건

    • 3개의 CentOS 7 서버
      • 10.0.15.10 k8s-마스터
      • 10.0.15.21 node01
      • 10.0.15.22 node02

      우리는 무엇을 할 것입니까?

      1. Kubernetes 설치
      2. Kubernetes 클러스터 초기화\n
      3. 클러스터에 node01 및 node02 추가
      4. 테스트 - 첫 번째 포드 만들기

      1단계 - 쿠버네티스 설치

      이 첫 번째 단계에서는 Kubernetes 설치를 위해 해당 3개의 서버를 준비하므로 마스터 및 노드 서버에서 모든 명령을 실행합니다.

      서버의 기존 구성을 변경하고 docker-ce 및 kubernetes 자체를 포함한 일부 패키지를 설치하여 Kubernetes 설치를 위해 모든 서버를 준비합니다.

      - 호스트 구성

      vim 편집기를 사용하여 모든 서버에서 호스트 파일을 수정합니다.

      vim /etc/hosts

      아래에 호스트 목록을 붙여넣으십시오.

      10.0.15.10      k8s-master
      10.0.15.21      node01
      10.0.15.22      node02

      저장 및 종료.

      - SELinux 비활성화

      이 자습서에서는 Docker에 대한 SELinux 구성에 대해 다루지 않으므로 비활성화합니다.

      SELinux를 비활성화하려면 아래 명령을 실행하십시오.

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

      - br_netfilter 커널 모듈 활성화

      br_netfilter 모듈은 kubernetes 설치에 필요합니다. 브리지를 통과하는 패킷이 필터링 및 포트 전달을 위해 iptables에 의해 처리되고 클러스터 전체의 kubernetes 포드가 서로 통신할 수 있도록 이 커널 모듈을 활성화합니다.

      아래 명령을 실행하여 br_netfilter 커널 모듈을 활성화하십시오.

      modprobe br_netfilter
      echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables

      - 스왑 비활성화

      다음 명령을 실행하여 kubernetes 설치용 SWAP를 비활성화합니다.

      swapoff -a

      그런 다음 /etc/fstab 파일을 편집합니다.

      vim /etc/fstab

      아래와 같이 스왑 라인 UUID를 주석 처리합니다.

      - 도커 CE 설치

      Docker 리포지토리에서 최신 버전의 Docker-ce를 설치합니다.

      docker-ce에 대한 패키지 종속성을 설치합니다.

      yum install -y yum-utils device-mapper-persistent-data lvm2

      docker 리포지토리를 시스템에 추가하고 yum 명령을 사용하여 docker-ce를 설치합니다.

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

      docker-ce 설치를 기다립니다.

      - 쿠버네티스 설치

      다음 명령을 실행하여 kubernetes 리포지토리를 centos 7 시스템에 추가합니다.

      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

      이제 아래 yum 명령을 사용하여 kubernetes 패키지 kubeadm, kubelet 및 kubectl을 설치합니다.

      yum install -y kubelet kubeadm kubectl

      설치가 완료되면 해당 서버를 모두 다시 시작하십시오.

      sudo reboot

      서버에 다시 로그인하고 docker 및 kubelet 서비스를 시작합니다.

      systemctl start docker && systemctl enable docker
      systemctl start kubelet && systemctl enable kubelet

      - cgroup 드라이버 변경

      docker-ce와 kubernetes가 동일한 cgroup을 사용하고 있는지 확인해야 합니다.

      docker info 명령을 사용하여 docker cgroup을 확인합니다.

      docker info | grep -i cgroup

      그리고 도커가 cgroupfs를 cgroup-driver로 사용하고 있음을 알 수 있습니다.

      이제 아래 명령을 실행하여 kuberetes cgroup-driver를 cgroupfs로 변경합니다.

      sed -i 's/cgroup-driver=systemd/cgroup-driver=cgroupfs/g' /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

      systemd 시스템을 다시 로드하고 kubelet 서비스를 다시 시작합니다.

      systemctl daemon-reload
      systemctl restart kubelet

      이제 Kubernetes 클러스터를 구성할 준비가 되었습니다.

      2단계 - Kubernetes 클러스터 초기화

      이 단계에서는 kubernetes 마스터 클러스터 구성을 초기화합니다.

      셸을 마스터 서버 k8s-master로 이동하고 아래 명령을 실행하여 kubernetes 마스터를 설정합니다.

      kubeadm init --apiserver-advertise-address=10.0.15.10 --pod-network-cidr=10.244.0.0/16

      메모:

      --apiserver-advertise-address = Kubernetes가 API 서버를 광고해야 하는 IP 주소를 결정합니다.

      --pod-network-cidr = 포드 네트워크의 IP 주소 범위를 지정합니다. 플란넬 가상 네트워크를 사용하고 있었습니다. weave-net이나 calico와 같은 다른 팟 네트워크를 사용하려면 범위 IP 주소를 변경하십시오.

      Kubernetes 초기화가 완료되면 아래와 같은 결과를 얻게 됩니다.

      메모:

      kubeadm join ... ... ... 명령을 텍스트 편집기에 복사합니다. 이 명령은 kubernetes 클러스터에 새 노드를 등록하는 데 사용됩니다.

      이제 Kubernetes를 사용하려면 결과에 따라 몇 가지 명령을 실행해야 합니다.

      새 .kube 구성 디렉터리를 생성하고 구성 admin.conf를 복사합니다.

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

      다음으로 kubectl 명령을 사용하여 kubernetes 클러스터에 flannel 네트워크를 배포합니다.

      kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

      플란넬 네트워크가 Kubernetes 클러스터에 배포되었습니다.

      잠시 기다린 다음 아래 명령을 사용하여 kubernetes 노드 및 포드를 확인합니다.

      kubectl get nodes
      kubectl get pods --all-namespaces

      그리고 k8s-master 노드가 준비 상태의 마스터 클러스터로 실행 중이라는 메시지가 표시되고 네트워크 포드 구성을 위한 kube-flannel-ds를 포함하여 클러스터에 필요한 모든 포드가 표시됩니다.

      모든 kube-system 포드 상태가 실행 중인지 확인합니다.

      Kubernetes 클러스터 마스터 초기화 및 구성이 완료되었습니다.

      3단계 - 클러스터에 node01 및 node02 추가

      이 단계에서는 k8s 클러스터에 가입하기 위해 node01 및 node02를 추가합니다.

      node01 서버에 연결하고 위에서 복사한 대로 kubeadm join 명령을 실행합니다.

      kubeadm join 10.0.15.10:6443 --token vzau5v.vjiqyxq26lzsf28e --discovery-token-ca-cert-hash sha256:e6d046ba34ee03e7d55e1f5ac6d2de09fd6d7e6959d16782ef0778794b94c61e

      node02 서버에 연결하고 위에서 복사한 대로 kubeadm join 명령을 실행합니다.

      kubeadm join 10.0.15.10:6443 --token vzau5v.vjiqyxq26lzsf28e --discovery-token-ca-cert-hash sha256:e6d046ba34ee03e7d55e1f5ac6d2de09fd6d7e6959d16782ef0778794b94c61e

      몇 분 정도 기다린 후 k8s-master 마스터 클러스터 서버로 돌아가서 다음 명령을 사용하여 모든 네임스페이스의 노드와 포드를 확인합니다.

      kubectl get nodes
      kubectl get pods --all-namespaces

      이제 node01이 표시되고 node02가 준비 상태의 클러스터에 추가되었습니다.

      node01 및 node02가 kubernetes 클러스터에 추가되었습니다.

      4단계 - 첫 번째 Pod 만들기 테스트

      이 단계에서는 Nginx 포드를 kubernetes 클러스터에 배포하여 테스트를 수행합니다. 포드는 Kubernetes에서 실행되는 공유 저장소 및 네트워크가 있는 하나 이상의 컨테이너 그룹입니다. Pod에는 Docker 컨테이너와 같은 하나 이상의 컨테이너가 포함됩니다.

      k8s-master 서버에 로그인하고 kubectl 명령을 사용하여 nginx라는 새 배포를 만듭니다.

      kubectl create deployment nginx --image=nginx

      nginx 배포 세부 정보를 보려면 다음 명령을 실행합니다.

      kubectl describe deployment nginx

      그러면 nginx 포드 배포 사양이 표시됩니다.

      다음으로 인터넷을 통해 액세스할 수 있는 nginx 포드를 노출합니다. 그리고 이를 위해 새로운 서비스 NodePort를 생성해야 합니다.

      아래 kubectl 명령을 실행합니다.

      kubectl create service nodeport nginx --tcp=80:80

      오류가 없는지 확인하십시오. 이제 아래의 kubectl 명령을 사용하여 nginx 서비스 노드 포트 및 IP를 확인하십시오.

      kubectl get pods
      kubectl get svc

      이제 nginx 포드가 클러스터 IP 주소 10.160.60.38 포트 80에서 실행되고 노드 기본 IP 주소 10.0.15.x는 포트 30691에서 실행됩니다.

      k8s-master 서버에서 아래 curl 명령어를 실행합니다.

      curl node01:30691
      curl node02:30691

      Nginx Pod는 이제 Kubernetes 클러스터 아래에 배포되었으며 인터넷을 통해 액세스할 수 있습니다.

      이제 웹 브라우저에서 액세스하십시오.

      http://10.0.15.10:30691/

      그러면 Nginx 기본 페이지가 표시됩니다.

      node02 서버에서 - http://10.0.15.11:30691/

      CentOS 7에서 Kubernetes 클러스터 설치 및 구성이 성공적으로 완료되었습니다.

      참조

      • https://kubernetes.io/docs/