IT/쿠버네티스 / / 2020. 1. 28.

[kubernetes-실습] kubeadm 을 이용한 설치 및 세팅

포스팅 목차

    설치를 위한 준비 사항

    kubeadm을 이용한 설치 기준

    • virtualbox 이용시
      • master : 3vCPU/4G memory/5G minimal OS
      • worker : 1vCPU/2G memory/5G minimal OS
    • gcp, aws 이용시
      • spec : 2 vCPU/ 7.5G memory
      • putty 이용 할 경우 .pem or .ppk file 요구
    • YAML 파일 작성시 유의 사항
      • TAB 사용 하면 안되고 white space로 사용

    VM 기준 사전 세팅

    1. DHCP IP를 static으로 설정

    # vi /etc/network/interfaces 
    auto ens33 
    iface ens33 inet static 
    address 172.20.0.150 
    netmask 255.255.255.0 
    broadcast 172.20.0.255 
    gateway 172.20.0.2 
    dns-nameservers 172.20.0.2

    2. Name resolution 설정

    # vi /etc/hosts에 등록 
    172.20.0.150 k8smaster 
    172.20.0.151 worker1

    3.swap disable

    cat /etc/fstab

    4. sudo 설정

    # vi /etc/sudoers
      %sudo ALL=(ALL:ALL) NOPASSWD: ALL

     

     

     


    쿠버네티스 클러스터 설치

    docker 설치 및 kubernetes repo 설정

    root@k8smaster1:~# apt-get update && apt-get upgrade -y
    
    # docker 설치 (참고, docker ce - edge:매월 업데이트, stable:3개월 마다 업데이트)
    root@k8smaster1:~# apt-get install -y docker.io
    
    # file 생성 후 main repo entry 추가
    root@k8smaster1:~# vi /etc/apt/sources.list.d/kubernetes.list
    deb http://apt.kubernetes.io/ kubernetes-xenial main
    
    #package를 위해 GPG key를 추가
    root@k8smaster1:~# curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
    
    # 새로운 repo 업데이트
    root@k8smaster1:~# apt-get update
    

     

    kube 관련 software 설치

    root@k8smaster1:~# apt-get install -y kubeadm=1.15.1-00 kubelet=1.15.1-00 kubectl=1.15.1-00

     

    calico network plugin 설치

    # calico plugin 설치를 위한 yaml 파일 다운로드
    # https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/rbac-kdd.yaml
    # https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml
    root@k8smaster1:~#  wget https://tinyurl.com/yb4xturm -O rbac-kdd.yaml
    root@k8smaster1:~#  wget https://tinyurl.com/y8lvqc9g -O calico.yaml
    
    # 컨테이너에 할당된 IPV4 pool
    #   CALICO_IPV$POOL_CIDR
    #   192.168.0.0./16
    # 해당 설정 값은 kubeadm init 시 주어진 값과 match되어야 함.
    root@k8smaster1:~# less calico.yaml
    
    # primary interface IP 확인
    # - ens4 inet 10.128.0.3/32 ....
    root@k8smaster1:~# ip addr show
    

     

     

     


    kubeadm 설정 및 초기화

    kubeadm init 중 에러 발생시 다시 설정하고 싶은 경우 kubeadm reset 후에 다시 아래 대로 해주면 된다.

    root@k8smaster1:~# vi kubeadm-config.yaml
    apiVersion: kubeadm.k8s.io/v1beta2
    kind: ClusterConfiguration
    kubernetesVersion: 1.15.1 # <-- Use the word stable for newest version
    controlPlaneEndpoint: "k8smaster:6443" # <-- hostname으로 아이피로 안하는 이유는 클러스터 구성 시 proxy를 사용하기 위해서
    networking:
      podSubnet: 192.168.0.0/16 # <-- podSubnet은 상단에 calico pool설정 값과 일치 해야 함
    
    # --upload-certs => master, slave 인증서
    # tee명령을 통해 output 로 남겨둠. 추후 worker node 추가시 사용
    root@k8smaster1:~# kubeadm init --config=kubeadm-config.yaml --upload-certs | tee kubeadm-init.out
    

     

    root 아닌 서브 계정으로 작업 하기 위해 서브계정에 권한 부여 (이후로는 서브 계정만 사용)

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

     

    자동 완성 기능 설정

    ps0107@k8smaster1:~$ source <(kubectl completion bash)
    ps0107@k8smaster1:~$ echo "source <(kubectl completion bash)" >> ~/.bashrc
    ps0107@k8smaster1:~$ source ~/.bashrc

     

    calico 및 rbac 적용

    ps0107@k8smaster1:~$ sudo cp /root/rbac-add.yaml .
    ps0107@k8smaster1:~$ sudo cp /root/calico.yaml .
    
    ps0107@k8smaster1:~$ kubectl apply -f rbac-add.yaml
    ps0107@k8smaster1:~$ kubectl apply -f calico.yaml
    
    # kubeadm-config.yaml file에 포함된 내용 확인 가능
    ps0107@k8smaster1:~$ sudo kubeadm config print init-defaults

     

     

     


    참조) CKA 대비 간단 실습

    01. kubeadm 을 이용한 설치 및 세팅
    02. kubernetes 클러스터 노드 확장 및 셋팅
    03. 간단한 application 배포, yaml템플릿, 서비스 expose 해보기
    04. deployment 의 CPU, Memory 제약
    05. namespace 를 위한 resource limit 설정
    06. 좀더 복잡한 deployment 배포해보기
    07. 기본 Node 의 maintenance (유지보수)
    08. API AND ACCESS
    09. API 객체
    10. Managing State with Deployments
    11. Service Resource
    12. Volumes and Data : ConfigMap 간단 테스트
    13. PV 와 PVC 생성
    14. ResourceQuota 사용 (PVC Count 와 Usage를 제한)
    15. ingress 간단 실습
    16. Scheduling - label 사용한 pod 할당
    17. Scheduling - Taint를 이용한 pod 배포 관리
    18. 로깅과 트러블슈팅 : 로그위치와 로그 출력 보기
    19. 로깅과 트러블슈팅 : Metrics와 DashBoard
    20. CRD (Custom Resource Definition)
    21. helm
    22. Security - TLS
    23. Security - Authentication, Authorization, Admission
    24. HA(High Availability) 구성 - master node


    • 네이버 블로그 공유
    • 네이버 밴드 공유
    • 페이스북 공유
    • 카카오스토리 공유