본문으로 바로가기

Kubernetes 설치 1/2

category KubernetesKuberenetes 설치 3년 전

쿠버네티스란? 

 컨테이너를 쉽고 빠르게 배포/확장하고 자동화 하는 오픈소스 플랫폼 입니다.

 

 도커 환경에서의 쿠버네티스 설치방법을 알아보자.

   * 기본 준비

    OS : CentOS7 3EA

    IP : 192.168.111.1  - MASTER

    IP : 192.168.111.2  - NODE1

    IP : 192.168.111.3  - NODE2

 

 1. 사전 준비

   1) 각 서버의 /etc/hosts에 IP와 HOSTNAME을 추가

       192.168.111.1 master

       192.168.111.2 node1

       192.168.111.3 node2

 

   2) SELinux 설정을 permissive 모드로 변경

       # setenforce 0

       # sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

 

   3) iptables 설정

# cat <<EOF>>  /etc/sysctl.d/k8s.conf 
net.bridge.bridge-nf-call-ip6tables = 1 
net.bridge.bridge-nf-call-iptables = 1 
net.ipv4.ip_forward = 1 
EOF

      # reboot

      # sysctl --system

 

   4) firewalld 비활성화

      # systemctl stop firewalld
      # systemctl disable firewalld

 

   5) swap off

      # swapoff -a

      # vi /etc/fstab

          /etc/fstab 파일에 아래 코드 주석 처리:
          #/dev/mapper/centos-swap swap                    swap    defaults        0 0

    

 2. Docker 설치

    * master, node1, node2 모두 설치

    # yum -y install yum-utils 

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

    # yum -y install docker-ce  docker-ce-cli containerd.io

    # mkdir /etc/docker

# cat <<EOF>>  /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF

    # systemctl start docker && systemctl enable docker

 

 3. kubernetes 설치

   1) repolist 추가      

# 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=0
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
exclude=kube*
EOF

   2) kubeadm, kubectl, kubelet 설치

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

    # systemctl enable kubelet && systemctl start kubelet

   * 특정버전을 설치하고자 할 경우

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

 

   3) Master 에서 실행

kubeadm init   \
--pod-network-cidr=10.244.0.0/16    \
--apiserver-cert-extra-sans=<MasterIP>

Your Kubernetes master has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/
You can now join any number of machines by running the following on each node
as root:
  kubeadm join 172.16.1.100:6443 --token yrc47a.55b25p2dhe14pzd1 --discovery-token-ca-cert-hash sha256:2a7a31510b9a0b0da1cf71c2c29627b40711cdd84be12944a713ce2af2d5d148

 

  * 설치가 끝나면 Master 노드에서 아래 입력

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

  * node1, node2 에서 아래 입력 

      kubeadm join 172.16.1.100:6443 --token yrc47a.55b25p2dhe14pzd1 --discovery-token-ca-cert-hash sha256:2a7a31510b9a0b0da1cf71c2c29627b40711cdd84be12944a713ce2af2d5d148

 

** 에러 발생시 

[init] Using Kubernetes version: v1.22.3
[preflight] Running pre-flight checks
error execution phase preflight: [preflight] Some fatal errors occurred:
        [ERROR FileContent--proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forward contents are not set to 1
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
To see the stack trace of this error execute with --v=5 or higher

 

 위의 에러가 발생할 경우 echo '1' > /proc/sys/net/ipv4/ip_forward 입력 하고 재 실행

 

   4) 환경변수 설정

    # export KUBECONFIG=/etc/kubernetes/admin.conf

 

4. CNI 설치

 1) CNI란? 

    컨테이너는 서로 다른 노드끼리 (master - node1 - node2) 통신을 할 수가 없다.

    노드끼리 통신을 위한 네트워크 구성을 별도로 만들어야 하는데 쿠버네티스는 자체적으로 네트워크 구성을

    해주지 않기 때문에 CNI(컨테이너 네트워크 인터페이스)플러그인을 설치해야한다.

 2) 설치 방법

    위의 kubernetes 과정이 문제가 없다면 아래의 명령을 사용

# curl https://docs.projectcalico.org/manifests/calico.yaml -O
# vi calico.yaml
    apiVersion: policy/v1beta1   ->  apiVersion: policy/v1  변경
    - name: CALICO_IPV4POOL_CIDR
              value: "10.244.0.0/16"       변경 
    

# kubectl apply -f calico.yaml

 

위의 과정을 진행하게 되면 쿠버네티스 3대 구성 Master-Node1-Node2 는 완성 된다.

 

다음시간에는 Kubernetes dashboard와 LoadBalancer 타입을 지원하는 metallb를 진행하도록 하겠습니다.

 

KubernetesKuberenetes 설치카테고리의 다른글

Ingress 설치  (0) 2022.12.05
Monitoring 구축 (prometheus, grafana)  (0) 2022.12.02
NFS-Client-Provisioner 설치  (0) 2022.12.02
argoCD 설치 방법  (0) 2022.12.02
Kubernetes설치 2/2  (0) 2021.11.16