국비교육과정을 듣고 처음 클라우드 시장으로 뛰어들었을 때의 트렌드 갈래는 Private Cloud vs Public Cloud 이었다.
모두가 Virtual Machine[VM]에 솔루션을 올리고 IP 기반 라우팅으로 연계를 하는 구조였던 것 같다.
하지만 시간이 지나고 개발환경 셋팅으로 이슈화 되는 갈래는 VM vs Container 가 되었고, Service Mesh, Severless, On-Demanded 등의 서비스가 유행을 타고 그 쪽으로의 교육과정도 많이 생긴거 같다. 이에 기본적인 Native Kubernetes Cluster 배포 방법중 하나인 Kubespray[Ansible]을 활용한 설치를 진행할 것이다.
Kubernetes
쿠버네티스는 컨테이너화된 워크로드와 서비스를 관리하기 위한 이식성이 있고, 확장가능한 오픈소스 플랫폼이다. 쿠버네티스는 선언적 구성과 자동화를 모두 용이하게 해준다. 쿠버네티스는 크고, 빠르게 성장하는 생태계를 가지고 있다. 쿠버네티스 서비스, 기술 지원 및 도구는 어디서나 쉽게 이용할 수 있다.
쿠버네티스란 명칭은 키잡이(helmsman)나 파일럿을 뜻하는 그리스어에서 유래했다. K8s라는 표기는 "K"와 "s"와 그 사이에 있는 8글자를 나타내는 약식 표기이다. 구글이 2014년에 쿠버네티스 프로젝트를 오픈소스화했다. 쿠버네티스는 프로덕션 워크로드를 대규모로 운영하는 15년 이상의 구글 경험과 커뮤니티의 최고의 아이디어와 적용 사례가 결합되어 있다.
Environment
- Cloud : SDDC VMware [ Nested vSphere ]
- OS : Ubuntu 20.04
- Spec : 4 core / 8 G / 17GB + 50GB
- User : altair
- Network : Internet - Facing
※ 모든 CMD는 master01 에서 진행했습니다.
Scenario
- Master : 3 Node
- Worker : 3 Node
Pre-work
- Hosts 정의
vi /etc/hosts
aaa.aaa.aaa.aaa master01
bbb.bbb.bbb.bbb master02
ccc.ccc.ccc.ccc master03
ddd.ddd.ddd.ddd worker01
fff.fff.fff.fff worker02
eee.eee.eee.eee worker03
- SSH Key 생성 및 모든 노드 전달
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:JoZJ69Gg8YwjijcX6bDwtmjFq8GynGdWEwcE0Ikmqow root@inception
The key's randomart image is:
+---[RSA 3072]----+
| .+.+. |
|.o o . |
|+ . o . |
|. B O . |
|* * X * S |
|E= O * o |
|+oB * . |
|o*oO |
|++* |
+----[SHA256]-----+
- SSH Key 모든 노드 전달
$ ssh-copy-id altair@master01
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/altair/.ssh/id_rsa.pub"
The authenticity of host 'master01 (aaa.aaa.aaa.aaa)' can't be established.
ECDSA key fingerprint is SHA256:9Tq9Zwc2QIffrxL2Qv1QveuYULJGOmiy6xj+S9sPnY4.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
altair@master01's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'altair@master01'"
and check to make sure that only the key(s) you wanted were added.
Kubespray
- Ansible 스크립트 소스 받아오기
$ git clone https://github.com/kubernetes-sigs/kubespray.git
# DIR is Your kubespray Path
$ cd $DIR/kubespray
- vi 1. package_install.sh
#!/bin/bash
sudo apt-get update -y
sudo apt-get install -y build-essential python3-pip
pip3 install -r requirements.txt
- vi kubespray_setting.sh
#!/bin/bash
cp -r inventory/sample inventory/mycluster
master01=aaa.aaa.aaa.aaa
master02=bbb.bbb.bbb.bbb
master03=ccc.ccc.ccc.ccc
worker01=ddd.ddd.ddd.ddd
worker02=eee.eee.eee.eee
worker03=fff.fff.fff.fff
declare -a IPS=(${master01} ${master02} ${master03} ${worker01} ${worker02} ${worker03})
CONFIG_FILE=inventory/mycluster/hosts.yaml python3 contrib/inventory_builder/inventory.py ${IPS[@]}
# cat inventory/mycluster/hosts.yaml
# Role에 대한 Hosts파일 정의 확인 필수
- vi kubespray_install.sh
#!/bin/bash
username=altair
password=******
ansible-playbook -i inventory/mycluster/hosts.yaml \
--user=$username --extra-vars "ansible_sudo_pass=$password" \
--become --become-user=root cluster.yml
# altair 계정 진행시 sudo 이슈로 인한 set 추가
mkdir -p $HOME/.kube
sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
클러스터 생성 '전' 수정 사항
- Container Runtime
vi inventory/mycluster/group_vars/k8s_cluster/k8s-cluster.yml
...
## Container runtime
## docker for docker, crio for cri-o and containerd for containerd.
container_manager: containerd
...
- Helm
vi inventory/mycluster/group_vars/k8s_cluster/addons.yml
...
# Helm deployment
helm_enabled: true
...
Install
sh 1.package_install.sh
sh 2.kubespray_setting.sh
sh 3.kubespray_install.sh
Uninstall
$ vi 4.remove_kubespray.sh
username=altair
password=******
ansible-playbook -i inventory/mycluster/hosts.yaml \
--user=$username --extra-vars "ansible_sudo_pass=$password" \
--become --become-user=root reset.yml
질문 환영합니다
감사합니다
'Kubernetes' 카테고리의 다른 글
[Kubernetes] Docker-Compose를 활용한 Harbor 구축 및 연계 (0) | 2022.11.04 |
---|