Vagrant
Vagrant.configure("2") do |config|
# Define VM
config.vm.define "knode1" do |ubuntu|
ubuntu.vm.box = "ubuntu/focal64"
ubuntu.vm.hostname = "knode1"
ubuntu.vm.network "private_network", ip: "192.168.100.100"
ubuntu.vm.provider "virtualbox" do |vb|
vb.name = "knode1"
vb.cpus = 2
vb.memory = 3000
end
end
config.vm.define "knode2" do |ubuntu|
ubuntu.vm.box = "ubuntu/focal64"
ubuntu.vm.hostname = "knode2"
ubuntu.vm.network "private_network", ip: "192.168.100.101"
ubuntu.vm.provider "virtualbox" do |vb|
vb.name = "knode2"
vb.cpus = 2
vb.memory = 3000
end
end
config.vm.define "knode3" do |ubuntu|
ubuntu.vm.box = "ubuntu/focal64"
ubuntu.vm.hostname = "knode3"
ubuntu.vm.network "private_network", ip: "192.168.100.102"
ubuntu.vm.provider "virtualbox" do |vb|
vb.name = "knode3"
vb.cpus = 2
vb.memory = 3000
end
end
config.vm.provision "shell", inline: <<-SHELL
sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config
sed -i 's/archive.ubuntu.com/mirror.kakao.com/g' /etc/apt/sources.list
sed -i 's/security.ubuntu.com/mirror.kakao.com/g' /etc/apt/sources.list
systemctl restart ssh
SHELL
end
코드 | 의미 |
---|
config.vm.provision | 프로비전중에 실행할 스크립트 |
<<-SHELL ... SHELL | 쉘 스크립트의 시작과 끝을 알림 |
sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config | 패스워드 인증을 열어준다 이후에 패스워드 인증을 통해 키인증을 등록할 예정이다. |
sed -i 's/archive.ubuntu.com/mirror.kakao.com/g' /etc/apt/sources.list | 우분투는 기본값으로 영국에 있는 서버에서 업데이트 목록을 가져오기 때문에 mirror서버를 사용해서 업데이트시에 더욱 빠르게 업데이트 목록을 받아올 수 있게 된다. |
SSH 키 생성 및 복사
ssh-keygen
ssh-copy-id vagrant@192.168.100.100
ssh-copy-id vagrant@192.168.100.101
ssh-copy-id vagrant@192.168.100.102
ssh 192.168.100.100
ssh 192.168.100.101
ssh 192.168.100.102
kubespray 소스 다운로드
cd ~
git clone -b v2.18.1 https://github.com/kubernetes-sigs/kubespray.git
cd kubespray
ls
cat ~/kubespray/requirements.txt
ansible, netaddr, jinja 등 패키지 설치
sudo apt update
sudo apt install -y python3-pip
sudo pip3 install -r requirements.txt
인벤토리 구성
cp -rpf ~/kubespray/inventory/sample/ ~/kubespray/inventory/mycluster
vi ~/kubespray/inventory/mycluster/inventory.ini
[all]
node1 ansible_host=192.168.100.100 ip=192.168.100.100
node2 ansible_host=192.168.100.101 ip=192.168.100.101
node3 ansible_host=192.168.100.102 ip=192.168.100.102
### ip는 ectd가 접속하는 환경변수임
[kube_contorl_plane]
node1
[etcd]
node1
[kube_node]
node1
node2
node3
[calico_rr]
[k8s_cluster:children]
kube_control_plane
kube_node
calico_rr
변수 설정
cd ~/kubespray/inventory/mycluster/group_vars
플레이북 실행
ansible all -m ping -i ~/kubespray/inventory/mycluster/inventory.ini
ansible-playbook -i ~/kubespray/inventory/mycluster/inventory.ini cluster.yml -b
인증정보 복사
mkdir ~/.kube
sudo cp /etc/kubernetes/admin.conf ~/.kube/config
sudo chown vagrant:vagrant ~/.kube/config
검증
sudo kubectl get nodes
kubectl get pods -A -o wide
컨테이너 | 역할 |
---|
calico-node-xxxxx | 네트워크를 담당하는 컨테이너 |
coredns-847.. | dns를 담당하는 컨테이너 |
kube-scheduler | 프로세스 스케쥴을 담당하는 컨테이너 |
kube-apiserver | 프로세스들을 연결하는 중앙 컨테이너 |
kube-controller-manager | 컨테이너들을 관리하는 컨테이너 |