Azure에서 Kubernetes 클러스터 설정

6810 단어 kubernetesazure
모든 주요 클라우드 공급자는 요즘 프로덕션 환경에 적합한 관리형 Kubernetes 서비스를 제공합니다. 클러스터 설정의 메커니즘이 궁금했기 때문에 학습 목적으로 Kubeadm 도구를 사용하여 Azure에서 작은 2노드 클러스터를 만들었습니다. 신뢰할 수 있는 정보 출처는 물론 Kubernetes documentation이지만 여기에 몇 가지 간단한 참고 사항이 있습니다.

Azure에서 VM 만들기


  • 하나의 리소스 그룹 아래에 모든 Azure 리소스를 만드는 것이 좋습니다. 그런 다음 RG 삭제를 완료하면 한 번에 모든 항목을 삭제할 수 있습니다.

  • Azure에서 SSH 키를 생성하고 이를 사용하여 다른 VM에 로그인하면 작업이 훨씬 쉬워집니다. 방법은 다음과 같습니다. 아래 스크린샷과 같이 선택한 이름(이 게시물의 azureuser)으로 만듭니다.


    생성 후 Azure는 생성된 개인 키 파일을 저장하라는 메시지를 표시합니다. 다운로드하여 컴퓨터의 알려진 위치에 보관하십시오. ~/.ssh/azureuser.pem . 권한 변경 - chmod 400 azureuser.pem .
  • 필요한 주소 범위로 가상 네트워크를 만듭니다. 예: 10.100.0.0/24 ( 10.100.0.0 - 10.100.0.255 ). IPv4 CIDR Calculator은 CIDR IP 범위를 계산하는 편리한 도구입니다.
  • 가상 네트워크 아래의 default 서브넷 IP 범위를 10.100.0.0/25 ( 10.100.0.0 - 10.100.0.127 )로 조정합니다. Kubernetes 클러스터에 대해 이 서브넷을 사용합니다.
  • 네트워크 보안 그룹을 생성하고 기본 서브넷과 연결합니다. 즉시 제공되는 인바운드 및 아웃바운드 규칙은 충분합니다.

  • VM이 인터넷에 노출되지 않도록 항상 배스천 서비스를 사용합니다. 기존 배스천을 연결하거나 VNET을 만드는 동안 새 배스천을 만들 수 있습니다. Azure Portal에서는 아래 스크린샷과 같이 보안 탭에서 VNET을 만드는 동안 새 배스천을 만들 수 있습니다.
  • 요새에 원하는 이름을 지정합니다.
  • 10.100.0.128/27 (10.100.0.128 - 10.100.0.159)AzureBastionSubnet 주소 공간으로 사용합니다. Azure에는 배스천에 사용할 서브넷의 정확한 이름AzureBastionSubnet이 필요합니다.
  • 공용 IP 주소 필드에 대해 새로 만들기를 선택하고 이름을 지정합니다.



  • 두 개의 가상 머신을 만듭니다. 하나는 Kubernetes 마스터 노드로 사용하고 다른 하나는 작업자 노드로 사용합니다.
  • 최신 Ubuntu Server LTS 이미지를 사용하십시오.

  • 2개의 vcpus, 8GiB 메모리 및 30GiB 디스크가 있는 Standard_B2ms 크기는 학습자의 클러스터에 충분합니다.
  • azureuser와 함께 SSH 공개 키 인증 옵션을 사용자 이름으로 사용하고 이전에 생성한 SSH 키를 Azure에 저장된 기존 키 사용 옵션의 값으로 사용합니다.
  • 공용 인바운드 포트에 대해 없음을 선택합니다.
  • 네트워킹 옵션에서 이전에 만든 가상 네트워크 및 기본 서브넷을 사용합니다. 공용 IP를 없음으로 설정합니다. NIC 네트워크 보안 그룹에 대해 없음을 선택합니다.

  • VM을 시작하고 Bastion 옵션을 사용하여 연결합니다. azureuser를 사용자 이름으로, 로컬 파일의 SSH 개인 키를 인증 유형으로 사용하고 로컬 파일 옵션을 통해 이전에 저장한 pem 파일을 선택합니다.

  • Kubernetes 클러스터 설정



    설치



    마스터 및 작업자 노드 VM 모두에 필요한 소프트웨어를 설치합니다.

    컨테이너 런타임을 설치합니다. 우리는 CRI-O를 사용할 것입니다.

    cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
    overlay
    br_netfilter
    EOF
    
    sudo modprobe overlay
    sudo modprobe br_netfilter
    
    # Setup required sysctl params, these persist across reboots.
    cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
    net.bridge.bridge-nf-call-iptables = 1
    net.ipv4.ip_forward = 1
    net.bridge.bridge-nf-call-ip6tables = 1
    EOF
    
    # Apply sysctl params without reboot
    sudo sysctl --system
    
    # Install CRI-O
    OS=xUbuntu_20.04
    VERSION=1.22
    cat <<EOF | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
    deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/ /
    EOF
    cat <<EOF | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cri-o:$VERSION.list
    deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/$VERSION/$OS/ /
    EOF
    
    curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/Release.key | sudo apt-key --keyring /etc/apt/trusted.gpg.d/libcontainers.gpg add -
    curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/Release.key | sudo apt-key --keyring /etc/apt/trusted.gpg.d/libcontainers.gpg add -
    
    sudo apt-get update
    sudo apt-get install cri-o cri-o-runc
    
    # Start CRI-O
    sudo systemctl daemon-reload
    sudo systemctl enable crio --now
    
    


    Kubernetes 패키지를 설치합니다.

    sudo apt-get update
    sudo apt-get install -y apt-transport-https ca-certificates curl
    # Download the Google Cloud public signing key
    sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
    
    # Add the Kubernetes apt repository
    echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
    
    sudo apt-get update
    # install kubeadm, kubelet, and kubectl
    sudo apt-get install -y kubelet kubeadm kubectl
    # Pin the installed packages at their installed versions
    sudo apt-mark hold kubelet kubeadm kubectl
    
    


    클러스터 만들기



    마스터 노드 VM에서 다음 단계를 실행합니다.

    # Make sure that your Pod network does not overlap with any of the host networks
    sudo kubeadm init --pod-network-cidr 192.168.0.0/16
    
    # Copy the join command printed in the output. We'll need it later on worker.
    
    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
    # Use Calico networking plugin
    kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
    
    


    마스터 노드가 실행 중인지 확인합니다: kubectl get node .

    작업자 노드 VM에서 다음 명령을 실행합니다.

    # Run the join command coped from master
    sudo kubeadm join 10.100.0.4:6443 --token w5ukck.qhuw0s86gd7dsxv5 --discovery-token-ca-cert-hash sha256:31401ee3712a958829d846cf9d1417325f9c1508a8113549ef1a41a7ce2eee7d
    
    


    If you forget to copy the join command, it can be regenerated on the master node using: kubeadm token create --print-join-command.



    마스터에서 kubectl get nodes를 다시 실행하여 작업자가 클러스터에 가입했는지 확인합니다.

    클러스터를 중지하려면 작업자 노드를 먼저 중지한 다음 마스터 노드를 중지하고 다른 방법으로 시작하는 동안 중지합니다.

    오늘은 그게 다야. 즐거운 코딩하세요! À bientôt 🙋‍♂️!

    좋은 웹페이지 즐겨찾기