Vagrant 다운로드 및 설치
- 설치 파일 및 패키지(수동 설치) :
<https://www.vagrantup.com/downloads.html>
vagrant 설치 후 cmd 나 파워쉘 등등 cli 환경 실행
powershell에서
cd c:\\
mkdir kubetest
cd kubetest
다음 명령어 실행
### 플러그인 설치
vagrant plugin install vagrant-hostmanager
vagrant plugin install vagrant-disksize
vagrant plugin list
vagrant box add ubuntu/bionic64
vagrant box list
특정 디렉토리 생성 후 이동
mkdir c:\\kube
cd kube
Vagrantfile 파일 작성
(중요:vagrant 명령어를 실행할 위치에 Vagrantfile이 있어야 함.)
> Vagrantfile 내용
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
config.vm.define "kube-master1" do |config|
config.vm.box = "ubuntu/bionic64"
config.vm.provider "virtualbox" do |vb|
vb.name = "kube-master1"
vb.cpus = 2
vb.memory = 3072
end
config.vm.hostname = "kube-master1"
config.vm.network "private_network", ip: "192.168.56.11"
config.disksize.size = "30GB"
end
config.vm.define "kube-node1" do |config|
config.vm.box = "ubuntu/bionic64"
config.vm.provider "virtualbox" do |vb|
vb.name = "kube-node1"
vb.cpus = 2
vb.memory = 3072
end
config.vm.hostname = "kube-node1"
config.vm.network "private_network", ip: "192.168.56.21"
config.disksize.size = "30GB"
end
# Hostmanager plugin
config.hostmanager.enabled = true
config.hostmanager.manage_guest = true
# Enable SSH Password Authentication
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/sources.list
sed -i 's/security.ubuntu.com/ftp.daum.net/g' /etc/apt/sources.list
systemctl restart ssh
SHELL
end
status
| Master | IP | CPU | Memory | Disk |
|--------------|------------------|-----|--------|------|
| kube-master1 | 192.168.56.11/24 | 2 | 3072MB | 30G |
| Node | IP | CPU | Memory | Disk |
|--------------|------------------|-----|--------|------|
| kube-node1 | 192.168.56.21/24 | 2 | 3072MB | 30G |
| Node | IP | CPU | Memory | Disk |
|--------------|------------------|-----|--------|------|
| kube-node2 | 192.168.56.22/24 | 2 | 3072MB | 30G |
| Node | IP | CPU | Memory | Disk |
|--------------|------------------|-----|--------|------|
| kube-node3 | 192.168.56.23/24 | 2 | 3072MB | 30G |
vagrant 명령어
VM 배포
vagrant up
VM 상태확인
vagrant status
VM 접속
vagrant ssh kube-master1
VM 종료
vagrant halt
VM 스냅샷 생성
vagrant snapshot save 스냅샷명
VM 스냅샷 적용
vagrant snapshot restore 스냅샷명
=====================================================================================
쿠버네티스를 설치하기 위한 준비
** Requirements => 설치 패키지들
- Ansible 2.7.16, python-netaddr
- Jinja 2.10.1
- 인터넷 연결(도커 이미지 가져오기)
- IPv4 포워딩
- SSH 키 복사
- 배포 중 문제가 발생하지 않도록 방화벽 비활성
- 적절한 권한 상승(non-root 사용자인 경우, passwordless sudo 설정)
-------------------------------------------------------------------
여기부터 설치 준비
- SSH 키 복사
> ID/PW : vagrant/vagrant
ssh-keygen
ssh-copy-id vagrant@localhost //pw : vagrantd
ssh-copy-id vagrant@kube-node1
ssh-copy-id vagrant@kube-node2
ssh-copy-id vagrant@kube-node3
- python3, pip, git 설치
sudo apt update
sudo apt install -y python3 python3-pip git
Kubespray 배포
- kubespray Git repository 클론
git clone --single-branch --branch v2.12.3 <https://github.com/kubernetes-sigs/kubespray.git>
- 디렉토리 변경
cd kubespray
- requirements.txt 파일에서 의존성 확인 및 설치
sudo pip3 install -r requirements.txt
- 인벤토리 준비
cp -rfp inventory/sample inventory/mycluster
- 인벤토리 수정
vi inventory/mycluster/inventory.ini
밑에 내용을 해당 인벤토리 파일 내용으로 수정
------------------------------------------------------------------------------------------
[all]
kube-master1 ansible_host=192.168.56.11 ip=192.168.56.11 ansible_connection=local
kube-node1 ansible_host=192.168.56.21 ip=192.168.56.21
kube-node2 ansible_host=192.168.56.22 ip=192.168.56.22
kube-node3 ansible_host=192.168.56.23 ip=192.168.56.23
[all:vars]
ansible_python_interpreter=/usr/bin/python3
[kube-master]
kube-master1
[etcd]
kube-master1
[kube-node]
kube-node1
kube-node2
kube-node3
[calico-rr]
[k8s-cluster:children]
kube-master
kube-node
calico-rr
-------------------------------------------------------------------------------------
- 파라미터 확인 및 변경
vi inventory/mycluster/group_vars/k8s-cluster/addons.yml
밑에 항목 true로 수정
metrics_server_enabled: true
ingress_nginx_enabled: true
- Ansible 통신 가능 확인
ansible all -i inventory/mycluster/inventory.ini -m ping
=> 각 호스트별로 엔서블로 통신 가능한지 확인 밑에 내용같이 나오면 설치 준비 완료
kube-master1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
kube-node1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
=> fail 결과가 있을 시 인벤토리 파일 내용에서 빠진 것이 없는지 확인하고 각 노드에 키 기반 로그인 설정 빼먹었는지 확인
- Apt 캐시 업데이트 (모든 노드)
ansible all -i inventory/mycluster/inventory.ini -m apt -a 'update_cache=yes' --become
해당 내용 출력시 준비 완료
kube-master1 | CHANGED => {
"cache_update_time": 1584068822,
"cache_updated": true,
"changed": true
}
kube-node1 | CHANGED => {
"cache_update_time": 1584068827,
"cache_updated": true,
"changed": true
}
- (옵션) apt 업데이트 시 오류가 난다면 해당 VM로 이동해서 아래와 같이 조치
sudo rm -rf /var/lib/apt/lists/*
sudo apt update --fix-missing
sudo apt update
- 플레이북 실행
ansible-playbook -i inventory/mycluster/inventory.ini cluster.yml --become
=> 해당 내용 실행으로 엔서블을 통한 쿠버네티스 설치 시작
> 호스트 시스템 사양, VM 개수, VM 리소스 및 네트워크 성능에 따라 20분~40분 소요
- 자격증명 가져오기
mkdir ~/.kube
sudo cp ~root/.kube/config ~/.kube
sudo chown vagrant:vagrant -R ~/.kube
- kubectl 명령 자동완성
kubectl completion bash | sudo tee /etc/bash_completion.d/kubectl
exec bash
- Kubernetes 클러스터 확인
kubectl get nodes
kubectl cluster-info