다시 시작하는 쿠버네티스 세팅

created : 2022-11-16T17:33:21+00:00
modified : 2022-11-28T15:31:26+00:00

k8s

개요

  • 뭔가 너무 막썻다. 처음부터 다시 천천히 기록하면서 클러스터를 세팅하자

목표

인프라적 목표

  • kubespray 를 통한 설치
  • argocd 만 helm 으로 관리, 나머지는 모두 argocd 를 통한 gitops
  • monitoring 을 위한 loki 와 grafana dashboard
  • vault 와 harbor 설치

사용 관점의 목표

  • jupyter notebook 를 띄워서 언제나 접속해서 간단한 스크립팅을 할수 있는 환경
  • 임시 pod 과 이를 위한 계정 발급을 통한 리눅스 샌드박스 서버 찍어내기
  • github action runner 를 통한 다중 architecture 빌드 및 테스트 지원

1. kubespray 설정

  • 참고자료 :
    • 한국어로 되어있는 것중에서는 제일 괜찮은 듯
  • 모든 노드에서 swap off
swapoff -a
  • 모든 노드에서 ip_forward 설정을 한다.
echo 1 > /proc/sys/net/ipv4/ip_forward
# check configuration
# cat /proc/sys/net/ipv4/ip_forward
  • 모든 노드에서 password 없이 root 를 사용할 수 있도록 설정한다.
groupadd wheel
usermod -G wheel <username>
# edit /etc/pam.d/su
# uncomment auth sufficient pam_wheel.so trust use_uid
# edit /etc/sudoers
# Add <username> ALL=(ALL) NOPASSWD: ALL
  • 실행은 mac 에서 할것이므로 /etc/hosts 에 다음과 같이 내용을 추가한다.
192.168.0.8 master
192.168.0.9 worker1
  • working directory 를 만들고 그곳에 asdf 를 통해 환경 버전관리를 한다.
mkdir -p ~/workspace/minuk-cluster
  • kubespray repo clone
git clone https://github.com/kubernetes-sigs/kubespray
  • install libraries
# on kubespray/
pip3 install -r requirements.txt
  • configure inventory
cp -rfp inventory/sample inventory/minuk-cluster
[all]
master  ansible_user=<username> ansible_host=192.168.0.8 ip=192.168.0.8
worker1 ansible_user=<username> ansible_host=192.168.0.9 ip=192.168.0.9

[kube-master]
master

[etcd]
master

[kube-node]
worker1


[calico_rr]

[k8s_cluster:children]
kube_control_plane
kube_node
calico_rr
  • provisioning cluster
ansible-playbook -i ./inventory/minuk-cluster/inventory.ini cluster.yml --become --become-user=root
  • 실제로 실행시켜보면, github 에서 파일 다운 받는데, 중간중간 실패한다. 단순히 다시 실행해주면 해결된다.
  • 다시 실행해도 안되면 reset 하고 다시 하면 된다.

    ansible-playbook -i ./inventory/minuk-cluster/inventory.ini reset.yml --become --become-user=root
    
  • 중간에 이것저것 하다보니 calico 가 설치가 이상하게 되었다는 것을 알았다.:
    • /opt/cni/calico 와 관련되어 파일이 없다고 나올 때 : 다음 링크 를 참고하여 파일을 노드 위에 설치해주자

2. argocd 설정

  • 앞으로 cluster 위의 모든 자원을 argocd 로 gitops 할 계획이므로, argocd 를 설치한다.
  • 따라서, helm 으로 argocd 를 설치한다.

  • 해당 디렉토리 확인

  • argocd 초기 admin password 얻기
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
  • argocd 에 접속하기(현재는 ingress 가 전혀 없으므로, 그냥 port-forward 로 접속한다.)
kubectl port-forward service/argocd-server -n argocd 8080:443

3. ingress 설정

4. cert-manager, cluster issuer 설정

  • 앞으로도 argocd 를 이렇게 접속할 수는 없다. nginx 로 설정해주기 전에 cluster issuer 를 등록해준다.
  • 해당 디렉토리 확인

  • 드는 고민: 순서상으로 argocd 를 먼저 설치, nginx 를 그 다음에 설치했는데, 이제 nginx 에 argocd ingress 옵션을 켜주면 되긴 하는데, 이러면 순서대로 실행했을때 동일한 상태가 안나온다.:
    • argocd 를 깔때 nginx 에 대한 dependency 가 생기기 때문에
    • 결론 : values 를 두가지를 유지하자. 하나는 nginx 를 설치하기 전, 하나는 nginx 를 설치한 이후로 분리해서 보관하자. 일단은 시간이 늦었으니 고민만 해두고 오늘은 여기까지