20210820 (금) Kubespray로 쿠버네티스 설치하기
쿠버네티스 설치
minikube | 테스트 환경용 (기본 1대) |
kubeadm | 온프레미스 환경에서 설치 명령어 2~3 개 입력으로 간단하게 설치 사전 요구 사항을 만족 (사전 설정 필요) 버전 관리가 어렵다. → kubelet 과의 버전이 마이너 1개 차이 |
kubespray | kubeadm 도구 + Ansible 을 사용 자동화 구성, 버전 관리가 조금 더 쉬움 |
kops | AWS와 같은 퍼블릭 클라우드에서 인스턴스를 이용한 배포 → 클라우드 환경의 배포 도구 |
kubespray 배포도구를 통한 실습
( https://kubernetes.io/ko/docs/setup/production-environment/tools/kubespray/ )
<버전정보>
vagrant : win10 가상머신 배포
vagrant box : ubuntu/focal64 (virtualbox, 20210816.0.0)
kubespray 2.14 (ansible 2.10.11, python version = 3.8.10)
<vagrant plugin>
PS C:\Users\user\k8s> vagrant plugin install vagrant-vbguest
PS C:\Users\user\k8s> vagrant plugin list
vagrant-disksize (0.1.3, global)
vagrant-hostmanager (1.8.9, global)
vagrant-vbguest (0.30.0, global)
0. vagrantfile 작성
# -*- mode: ruby -*- # vi: set ft=ruby : Vagrant.configure("2") do |config| ##### MASTER (control plane) ##### config.vm.define "k8s-master" do |cfg| cfg.vm.box = "ubuntu/focal64" cfg.vm.provider "virtualbox" do |vb| vb.name="k8s-master" vb.memory=4096 vb.cpus=1 end cfg.vm.host_name = "master" cfg.vm.network "private_network", ip: "192.168.56.11" cfg.vm.synced_folder "../data", "/vagrant", diabled: true end ##### WORKER NODES ##### config.vm.define "worker1" do |cfg| cfg.vm.box = "ubuntu/focal64" cfg.vm.provider "virtualbox" do |vb| vb.name="k8s-worker1" vb.memory=2048 vb.cpus=1 end cfg.vm.host_name = "worker1" cfg.vm.network "private_network", ip: "192.168.56.21" cfg.vm.synced_folder "../data", "/vagrant", diabled: true end config.vm.define "worker2" do |cfg| cfg.vm.box = "ubuntu/focal64" cfg.vm.provider "virtualbox" do |vb| vb.name="k8s-worker2" vb.memory=2048 vb.cpus=1 end cfg.vm.host_name = "worker2" cfg.vm.network "private_network", ip: "192.168.56.22" cfg.vm.synced_folder "../data", "/vagrant", diabled: true end config.vm.define "worker3" do |cfg| cfg.vm.box = "ubuntu/focal64" cfg.vm.provider "virtualbox" do |vb| vb.name="k8s-worker3" vb.memory=2048 vb.cpus=1 end cfg.vm.host_name = "worker3" cfg.vm.network "private_network", ip: "192.168.56.23" cfg.vm.synced_folder "../data", "/vagrant", diabled: true end end #### ubuntu 설정파일 수정 및 ssh 설정 #### 가능하다면, 마스터+노드들에 provision 세팅도 해줄 것. 모든 노드가 생성된 후 실행되어야함. (실행순서 체크) cfg.vm.provision "shell", inline: sudo sed -i 's/archive.ubuntu.com/ftp.daum.net/g' /etc/apt/sources.list cfg.vm.provision "shell", inline: sudo sed -i 's/security.ubuntu.com/ftp.daum.net/g' /etc/apt/sources.list PasswordAuthentication yes ChallengeResponseAuthentication yes cfg.vm.provision "shell", inline: ssh-keygen -t rsa -f "$HOME/.ssh/id_rsa" -P "" cfg.vm.provision "shell", inline: 또는 cfg.vm.provision "shell", inline: <<-SHELL sudo sed -i 's/archive.ubuntu.com/ftp.daum.net/g' /etc/apt/sources.list sudo sed -i 's/security.ubuntu.com/ftp.daum.net/g' /etc/apt/sources.list ssh-keygen -t rsa -f "$HOME/.ssh/id_rsa" -P "" ssh-copy-id vagrant@192.168.56.11 → localhost ssh-copy-id vagrant@192.168.56.21 → node1 ssh-copy-id vagrant@192.168.56.22 → node2 ssh-copy-id vagrant@192.168.56.23 → node3 ##### ssh-keygen ##### ssh-keygen -t rsa -f "$HOME/.ssh/id_rsa" -P "" type : rsa file : ~/.ssh/id_rsa Password : "" null → id_rsa / id_rsa.pub 두개생성 ※ ubuntu/focal64 박스의 자동생성된 vagrant사용자는 sudo 명령어가 가능한 상태로 생성된다. |
1. master (control plane) 설정
vagrant@master:~$ sudo apt update
vagrant@master:~$ sudo apt upgrade
vagrant@master:~$ sudo apt install git python3 python3-pip -y
1-1. git
vagrant@master:~$ git clone https://github.com/kubernetes-sigs/kubespray.git
vagrant@master:~$ cd kubespray
vagrant@master:~/kubespray$ git checkout -b release-2.14 → 릴리즈 버전에 맞게 브랜치 버전 변경
vagrant@master:~/kubespray$ sudo pip3 install -r requirment.txt → 지정된 파일의 패키지들 설치
vagrant@master:~/kubespray$ cp -rfp inventory/sample inventory/mycluster → 샘플파일 복사
2. 설정 : group_vars 디렉터리의 설정파일 편집
<관련경로>
/home/vagrant/kubespray/inventory/mycluster/group_vars/k8s_cluster/addons.yml
/home/vagrant/kubespray/inventory/mycluster/group_vars/k8s-cluster/k8s-cluster.yml
/home/vagrant/kubespray/inventory/mycluster/inventory.ini
→ hostname세팅과 인벤토리의 hostname을 일치하도록 세팅(언더바 불가)
/home/vagrant/kubespray/cluster.yml
/home/vagrant/kubespray/reset.yml (설치도중 문제발생시 초기화 playbook)
/home/vagrant/kubespray/scale.yml (노드 수 변경)
/home/vagrant/kubespray/recover-control-plane.yml
필요하면 ansible.cfg 파일도 편집
3-1. ansible-playbook 준비
실행전 환경 확인(ansible.cfg, inventory.ini)
(현재) 작업디렉터리에 있는 ansible.cfg
~/.ansible/ansible.cfg
/etc/ansible/ansible.cfg
vagrant@master:~/kubespray$ ansible --version
ansible 2.10.11
config file = /home/vagrant/kubespray/ansible.cfg
configured module search path = ['/home/vagrant/kubespray/library']
ansible python module location = /usr/local/lib/python3.8/dist-packages/ansible
executable location = /usr/local/bin/ansible
python version = 3.8.10 (default, Jun 2 2021, 10:49:15) [GCC 9.4.0]
vagrant@master:~/kubespray$ ansible-playbook cluster.yml --list-hosts
호스트 확인 (필요시, --syntax-check, -C 등 실행)
3-2. ansible-playbook 실행
설치 명령어
vagrant@master:~/kubespray$ ansible-playbook cluster.yml --become --become-user=root -i inventory/mycluster/inventory.ini
▶ Friday 20 August 2021 08:42:07 +0000 (0:00:00.329) 1:34:02.974 *********
약 1시간 30분 넘게 소요. playbook 양이 많음.
4. 설치완료 후 admin.conf 파일 복사
vagrant@controlplane:~$ pwd
/home/vagrant
vagrant@controlplane:~$ mkdir .kube
vagrant@controlplane:~$ sudo cp -i /etc/kubernetes/admin.conf ~/.kube/
vagrant@controlplane:~$ sudo chown vagrant:vagrant ~/.kube/admin.conf
5. 간단 명령어
vagrant@controlplane:~$ kubectl get pod
vagrant@controlplane:~$ kubectl cluster-info
Kubernetes control plane is running at https://127.0.0.1:6443
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
vagrant@controlplane:~$ kubectl get node
NAME STATUS ROLES AGE VERSION
controlplane Ready control-plane,master 21m v1.21.3
node1 Ready <none> 20m v1.21.3
node2 Ready <none> 20m v1.21.3
node3 Ready <none> 20m v1.21.3
vagrant@controlplane:~$ kubectl get node -o=jsonpath='{.items[0].metadata.name}'
controlplane