[K8S Deploy Study by Gasida] - kubespary 배포 방법
[K8S Deploy Study by Gasida] - kubespary 배포 방법
TL;DR
kubespary로 k8s 환경 구축시 목표 환경을 위한 파라미터 설정 방법을 알아본다.
kubespary 설치 사전 요건
https://github.com/kubernetes-sigs/kubespray/tree/master?tab=readme-ov-file#requirements
- k8s version > v1.30
- Ansible v2.14+, Jinja 2.11+
- Control Plane
- Memory : 2GB
- Work Node
- Memory : 1GB
- Linux Kernel Requirements: 5.8+
- Rocky Linux 9, 10 (experimental in 10)
kubespray 다운 및 종속성 설치
1
git clone -b v2.29.1 https://github.com/kubernetes-sigs/kubespray.git /root/kubespray
1
pip3 install -r /root/kubespray/requirements.txt
kubespray를 통한 k8s 배포
- Inventory 디렉터리 복사
1
2
cp -rfp /root/kubespray/inventory/sample /root/kubespray/inventory/mycluster
tree inventory/mycluster/
- inventory.ini 작성
1
2
3
4
5
6
7
8
9
10
11
12
cat << EOF > /root/kubespray/inventory/mycluster/inventory.ini
k8s-ctr ansible_host=192.168.10.10 ip=192.168.10.10
[kube_control_plane]
k8s-ctr
[etcd:children]
kube_control_plane
[kube_node]
k8s-ctr
EOF
전체
1
grep "^[^#]" inventory/mycluster/group_vars/all/all.yml
- 테스트할 기능 관련 수정
1
2
3
4
5
sed -i 's|kube_network_plugin: calico|kube_network_plugin: flannel|g' inventory/mycluster/group_vars/k8s_cluster/k8s-cluster.yml
sed -i 's|kube_proxy_mode: ipvs|kube_proxy_mode: iptables|g' inventory/mycluster/group_vars/k8s_cluster/k8s-cluster.yml
sed -i 's|enable_nodelocaldns: true|enable_nodelocaldns: false|g' inventory/mycluster/group_vars/k8s_cluster/k8s-cluster.yml
sed -i 's|auto_renew_certificates: false|auto_renew_certificates: true|g' inventory/mycluster/group_vars/k8s_cluster/k8s-cluster.yml
sed -i 's|# auto_renew_certificates_systemd_calendar|auto_renew_certificates_systemd_calendar|g' inventory/mycluster/group_vars/k8s_cluster/k8s-cluster.yml
- 확인
1
grep -iE 'kube_network_plugin:|kube_proxy_mode|enable_nodelocaldns:|^auto_renew_certificates' inventory/mycluster/group_vars/k8s_cluster/k8s-cluster.yml
CNI
- flannel 관련 설정 경로
inventory/mycluster/group_vars/k8s_cluster/k8s-net-flannel.yml
1
cat inventory/mycluster/group_vars/k8s_cluster/k8s-net-flannel.yml
- flannel 설정 수정
1
2
echo "flannel_interface: enp0s9" >> inventory/mycluster/group_vars/k8s_cluster/k8s-net-flannel.yml
grep "^[^#]" inventory/mycluster/group_vars/k8s_cluster/k8s-net-flannel.yml
애드온
- 선호하는 애드온 수정할 경우 항목 검색하기
inventory/mycluster/group_vars/k8s_cluster/addons.yml
1
grep "^[^#]" inventory/mycluster/group_vars/k8s_cluster/addons.yml
- 테스트할 기능 관련 수정
1
2
3
4
sed -i 's|helm_enabled: false|helm_enabled: true|g' inventory/mycluster/group_vars/k8s_cluster/addons.yml
sed -i 's|metrics_server_enabled: false|metrics_server_enabled: true|g' inventory/mycluster/group_vars/k8s_cluster/addons.yml
sed -i 's|node_feature_discovery_enabled: false|node_feature_discovery_enabled: true|g' inventory/mycluster/group_vars/k8s_cluster/addons.yml
grep -iE 'helm_enabled:|metrics_server_enabled:|node_feature_discovery_enabled:' inventory/mycluster/group_vars/k8s_cluster/addons.yml
ETCD
- kubespray 에서는 파드가 아닌
systemd unit으로 설치한다. inventory/mycluster/group_vars/all/etcd.yml
1
grep "^[^#]" inventory/mycluster/group_vars/all/etcd.yml
containerd
inventory/mycluster/group_vars/all/containerd.yml
1
cat inventory/mycluster/group_vars/all/containerd.yml
지원되는 버전 정보 확인하기
roles/kubespray_defaults/vars/main/checksums.yml
1
cat roles/kubespray_defaults/vars/main/checksums.yml | grep -i kube -A40
배포
~/kubespray디렉토리에서ansible-playbook을 실행
1
2
3
ansible-playbook -i inventory/mycluster/inventory.ini -v cluster.yml -e kube_version="1.33.3" --list-tasks # 배포 전, Task 목록 확인
ANSIBLE_FORCE_COLOR=true ansible-playbook -i inventory/mycluster/inventory.ini -v cluster.yml -e kube_version="1.33.3" | tee kubespray_install.log
설치확인
- 확인
1
2
3
4
# 설치 확인 : /root/.kube/config
more kubespray_install.log
kubectl get node -v=6
cat /root/.kube/config
1
2
kubectl get node -owide
kubectl get pod -A
- (Optional) 출력 비교하기 위한 정보저장
1
2
3
4
5
6
7
8
9
10
11
12
13
# 기본 환경 정보 출력 저장
ip addr | tee -a ip_addr-2.txt
ss -tnlp | tee -a ss-2.txt
df -hT | tee -a df-2.txt
findmnt | tee -a findmnt-2.txt
sysctl -a | tee -a sysctl-2.txt
# 파일 출력 비교 : 빠져나오기 ':q' -> ':q' => 변경된 부분이 어떤 동작과 역할인지 조사해보기! , ctrl + f / b
vi -d ip_addr-1.txt ip_addr-2.txt
vi -d ss-1.txt ss-2.txt
vi -d df-1.txt df-2.txt
vi -d findmnt-1.txt findmnt-2.txt
vi -d sysctl-1.txt sysctl-2.txt
- (Optional) alias, 자동완성 및 k9s 설치
1
2
3
4
5
6
7
# Source the completion
source <(kubectl completion bash)
source <(kubeadm completion bash)
# Alias kubectl to k
alias k=kubectl
complete -o default -F __start_kubectl k
- k9s 설치 https://github.com/derailed/k9s
1 2 3 4 5 6 7 8
CLI_ARCH=amd64 if [ "$(uname -m)" = "aarch64" ]; then CLI_ARCH=arm64; fi wget https://github.com/derailed/k9s/releases/latest/download/k9s_linux_${CLI_ARCH}.tar.gz tar -xzf k9s_linux_*.tar.gz ls -al k9s chown root:root k9s mv k9s /usr/local/bin/ chmod +x /usr/local/bin/k9s
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.