Kubernetes
Kubespray를 활용한 Kubernetes 클러스터 구축
김 정출
2023. 5. 31. 13:28
Kubespray를 활용한 Kubernetes 클러스터 구축
설치하는 환경
- Master VM, Worker VM 3
- OS: Ubuntu 22.04
- CPU: 4 core
- Mem: 4096MB
- N/W: Bridge
Kubespray로 Kuberenetes 구축 가이드
Master 노드에서 pip3 설치를 진행합니다.
sudo apt install python3-pip
ssh key 복사
ssh key 복사를 진행합니다. ansible을 기본으로 사용하고 있어 master에서 ssh-keygen 이후에 worker vm 3대로 copy를 진행하면 됩니다.
ssh-keygen
ssh-copy-id 172.16.177.128 # master
ssh-copy-id 172.16.177.129 # worker1
ssh-copy-id 172.16.177.130 # worker2
ssh-copy-id 172.16.177.131 # worker3
Kubespray 설치
kubespray 설치를 진행합니다.
https://github.com/kubernetes-sigs/kubespray
mkdir environment && cd environment
git clone https://github.com/kubernetes-sigs/kubespray
git checkout release-2.22
sudo pip3 install -r requirements.txt
cp -r inventory/sample inventory/cluster
declare -a IPS=(172.16.177.129 172.16.177.130 172.16.177.131) # 설치할 Worker node들의 IP를 작성합니다.
CONFIG_FILE=inventory/cluster/hosts.yaml python3 contrib/inventory_builder/inventory.py ${IPS[@]}
생성된 config file을 확인해봅니다.
vi inventory/cluster/hosts.yaml
addon을 수정하여 필요한 것들을 true로 변경합니다.
vi inventory/cluster/group_vars/k8s_cluster/addons.yml
---
# Kubernetes dashboard
# RBAC required. see docs/getting-started.md for access details.
dashboard_enabled: true
# Helm deployment
helm_enabled: true
# Metrics Server deployment
metrics_server_enabled: true
metrics_server_container_port: 10250
metrics_server_kubelet_insecure_tls: true
metrics_server_metric_resolution: 15s
metrics_server_kubelet_preferred_address_types: "InternalIP,ExternalIP,Hostname"
metrics_server_host_network: true
metrics_server_replicas: 1
# Local volume provisioner deployment
local_volume_provisioner_enabled: true
# Nginx ingress controller deployment
ingress_nginx_enabled: true
# Cert manager deployment
cert_manager_enabled: true
Kubernetes 클러스터 설치 진행
ansible-playbook -i inventory/cluster/hosts.yaml --become --become-user=root --extra-vars ansible_sudo_pass=[SUDO_PASSWORD] cluster.yml
설치에 수십 분 정도 소요됩니다.
kube 설정 파일을 가져옵니다.
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl 명령어 자동 완성
echo "source <(kubectl completion zsh)" >> ~/.zshrc
Alias 설정
vi ~/.zshrc
alias wk='watch kubectl get'
alias wka='watch kubectl get all'
alias wkgp='watch kubectl get pod'
alias k='kubectl'
alias kg='kubectl get'
alias ke='kubectl edit'
alias kdl='kubectl delete'
alias kd='kubectl describe'
alias kde='kubectl delete'
alias kes='kubectl edit service'
alias ked='kubectl edit deployment'
alias kef='kubectl edit statefulset'
alias kgns='kubectl get namespace'
alias kga='kubectl get all'
alias kgp='kubectl get pod'
alias kgd='kubectl get deployment'
alias kgf='kubectl get statefulset'
alias kgs='kubectl get service'
alias kgns='kubectl get ns'
alias kdp='kubectl describe pod'
alias kds='kubectl describe svc'
alias kdd='kubectl describe deployment'
alias kdf='kubectl describe statefulset'
alias kdnd='kubectl describe node'
alias klf='kubectl logs --follow'
alias kgnd='kubectl get node'
alias ksd='kubectl scale deployment'
alias ksud='kubectl scale deployment --replicas=1'
alias ksdd='kubectl scale deployment --replicas=0'
alias ksf='kubectl scale statefulset'
alias ksuf='kubectl scale statefulset -�~@~Treplicas=1'
alias ksdf='kubectl scale statefulset -�~@~Treplicas=0'
alias krd='kubectl rollout restart deployment'
alias krf='kubectl rollout restart statefulset'
source ~/.zshrc
Kubernetes 클러스터의 노드 정보를 확인합니다.
kubectl get node -o wide
kubectl get pod -nkube-system
** Metrics 서버 이슈가 있는 경우 Crashloop back과 더불어 Restart되는 경우
- kubelet이 10250포트를 이미 점유하고 있어 호스트 네트워크 상에 묶여 이미 바인딩된 포트라면서 시작 불가
kgd -nkube-system
ked -nkube-system metrics-server
metrics 서버의 포트를 10250에서 4443 변경합니다.
- container.args에서 --secure-port=4443
- containers.ports에서
Kubespray Kubernetes 업데이트
ansible-playbook -i inventory/cluster/hosts.yaml --become --become-user=root --extra-vars ansible_sudo_pass=[SUDO_PASSWORD] update-cluster.yml
Kubespray Kubernetes 삭제
kubespray를 통해 Kubernetes Cluster 삭제하는 법
ansible-playbook -i inventory/cluster/hosts.yaml --become --become-user=root --extra-vars ansible_sudo_pass=[SUDO_PASSWORD] reset.yml