DevOps/Kubernetes

[k8s] kubespray 로 k8s Install

twoDeveloper 2021. 10. 23. 00:24

■ k8s (Kubernetes) 란?

https://kubernetes.io/ko/docs/concepts/overview/what-is-kubernetes/

 

쿠버네티스란 무엇인가?

쿠버네티스는 컨테이너화된 워크로드와 서비스를 관리하기 위한 이식할 수 있고, 확장 가능한 오픈소스 플랫폼으로, 선언적 구성과 자동화를 모두 지원한다. 쿠버네티스는 크고 빠르게 성장하

kubernetes.io

· 컨테이너 오케스트레이션 시스템 종류 중 하나

· 어플리케이션 동작이 목적

· 격리된 환경에서 동작할 경우 안전성 확보

· 리눅스 프로세스 자원을 격리 사용 (cgroup / chroot) => Isolate 기능 제공 (컨테이너)

장점 (제공하는 기능) 단점 (지원하지 않는 기능)
컨테이너 플랫폼 (오케스트레이션)
MSA (Micro Service Arcitecture) 플랫폼
이식성 높은 플랫폼
CI/CD 파이프라인
로깅
모니터링
알람

 

 

■ k8s Install

□ k8s 설치 도구

minikube, kops, kubeadm, kubespray

minikube 간단한 테스트 환경 구성에 사용
kops Cloud 환경에서 k8s 구성시 사용하는 도구
kubeadm k8s 설치(배포)에 사용하는 명령어 도구
kubespray kubeadm과 ansible을 이용한 배포 도구
물리적인 시스템, 가상 머신, 클라우드

vagrant : 특정 하이퍼바이저 기반의 가상머신 배포를 자동화 해주는 도구

 

□ Kubespray 배포시 사전 설정 !

1) Key 기반 인증 구성

2) sudo 권한 설정

3) ansible v2.9 + python-netaddr

4) Jinja v2.11 +

5) 인터넷 연결

6) 방화벽 비활성화

7) CPU : 1 core 이상

8) RAM : 2G 이상 ( 노드는 1G 이상 )

 

1. 가상머신 생성 (VirtualBox)

- Vagrant를 이용해서 배포 진행

https://twodeveloper.tistory.com/67

 

[Vagrant] Vagrant Install

■ Vagrant 란? https://www.lesstif.com/laravelprog/vagrant-24445417.html Vagrant 란 하이퍼바이저를 설치하는 실제 운영체제(윈도, OS X, 리눅스 등)를 호스트(Host) OS 라 하고 하이퍼바이저 위에 만든 가상..

twodeveloper.tistory.com

Vagrant.configure("2") do |config|
  config.vm.define "controll-plane" do |config|
    config.vm.box = "ubuntu/bionic64"
      config.vm.provider "virtualbox" do |vb|
        vb.name = "controll-plane"
        vb.memory = "2048"
        vb.cpus = 2
      end
      config.vm.hostname = "controll-plane.example.com"
      config.vm.network "private_network", ip: "192.168.56.11"
  end

  config.vm.define "node1" do |config|
    config.vm.box = "ubuntu/bionic64"
      config.vm.provider "virtualbox" do |vb|
        vb.name = "node1"
        vb.memory = "1024"
        vb.cpus = 1
      end
      config.vm.hostname = "node1.example.com"
      config.vm.network "private_network", ip: "192.168.56.21"
  end

  config.vm.define "node2" do |config|
    config.vm.box = "ubuntu/bionic64"
      config.vm.provider "virtualbox" do |vb|
        vb.name = "node2"
        vb.memory = "1024"
        vb.cpus = 1
      end
      config.vm.hostname = "node2.example.com"
      config.vm.network "private_network", ip: "192.168.56.22"
  end

  config.vm.define "node3" do |config|
    config.vm.box = "ubuntu/bionic64"
      config.vm.provider "virtualbox" do |vb|
        vb.name = "node3"
        vb.memory = "1024"
        vb.cpus = 1
      end
      config.vm.hostname = "node3.example.com"
      config.vm.network "private_network", ip: "192.168.56.23"
  end

  config.hostmanager.enabled = true
  config.hostmanager.manage_guest = true
  config.vm.provision "shell", inline: <<-SHELL
    sed -i 's/ChallengeResponseAuthentication no/ChallengeResponseAuthentication yes/g' /etc/ssh/sshd_config
    sed -i 's/archive.ubuntu.com/ftp.daum.net/g' /etc/apt/source.list
    sed -i 's/security.ubuntu.com/ftp.daum.net/g' /etc/apt/source.list
    systemctl restart sshd
   SHELL
end

 

2. Key 기반 인증 설정 (모든 노드에 배포)

$ ssh-keygen

$ ssh-copy-id node1
$ ssh-copy-id node2
$ ssh-copy-id node3
$ ssh-copy-id localhost

☞ control-plane에서 실행

 

3. Git Install

$ sudo apt-get update

$ sudo apt install -y git

 

4. python3-pip Install

$ sudo apt install -y python3 python3-pip

$ pip3 --version

 

5. kubespray git clone

https://github.com/kubernetes-sigs/kubespray

 

GitHub - kubernetes-sigs/kubespray: Deploy a Production Ready Kubernetes Cluster

Deploy a Production Ready Kubernetes Cluster. Contribute to kubernetes-sigs/kubespray development by creating an account on GitHub.

github.com

$ git clone -b release-2.16 --single-branch https://github.com/kubernetes-sigs/kubespray.git

※ latest가 아닌 release-2.16 버전 이용 (안정적임)

 

6. pip3 로 require.txt 파일에 있는 패키지 설치

$ cd kubespray

$ sudo pip3 install -r requirements.txt

 

7. mycluster 복사

$ cp -rfp inventory/sample/ inventory/mycluster

 

8. inventory.ini 수정

$ vim inventory/mycluster/inventory.ini

---
[all]
node1 ansible_host=192.168.56.21  ip=192.168.56.21
node2 ansible_host=192.168.56.22  ip=192.168.56.22
node3 ansible_host=192.168.56.23  ip=192.168.56.23
controll-plane ansible_host=192.168.56.11  ip=192.168.56.11

[all:vars]
ansible_python_interpreter=/usr/bin/python3

[kube_control_plane]
controll-plane

[etcd]
controll-plane

[kube_node]
node1
node2
node3

[calico_rr]

[k8s_cluster:children]
kube_control_plane
kube_node
calico_rr

 

9. addons.yml 설정

vim group_vars/k8s_cluster/addons.yml

---
metallb_enabled: true
metallb_speaker_enabled: true
metallb_ip_range:
  - "192.168.56.50-192.168.56.99"
metallb_protocol: "layer2"
---

 

10. k8s-cluster.yml 설정

$ vim group_vars/k8s_cluster/k8s-cluster.yml

---
kube_proxy_strict_arp: true
---

 

11. ansible 실행

$ ansible-playbook -i inventory/mycluster/inventory.ini cluster.yml -b

※ 설치 과정이 오래 걸림

 

12. vagrant 사용자로 kubectl 실행 권한 부여

$ mkdir ~/.kube
$ sudo cp /etc/kubernetes/admin.conf ~/.kube/config
$ sudo chown $USER:$USER ~/.kube/config

'DevOps > Kubernetes' 카테고리의 다른 글

[kubernetes] Argo CD Install  (0) 2021.12.22
[kubernetes] Helm으로 Jenkins Deploy  (1) 2021.11.12
[kubernetes] EKS Cluster 내부에 AWS RDS 구축  (0) 2021.11.10
[Kubernetes] AWS ALB Controller  (0) 2021.11.10
[kubernetes] EKS Install  (0) 2021.10.27