220516 Today I Learned
일지
이번주는 쉬엄쉬엄 가자
주요 키워드
Kubernetes 구성하는 여러 방식
- kubeadm
- kubespray
- VirtualBox 대신 Azure 상에서
오늘의 할일
- 220516 TIL 작성
- 사이드프로젝트 진행회의
수업 정리
kubernetes 설치 (kubeadm)
VM 배포
공유된 Vagrantfile을 사용하여 VM 배포
> vagrant up
vagrant up 완료 후 스냅샷 저장
> vagrant snapshot save <스냅샷이름>
배포된 VM 구성
ssh를 사용한 연결 / vagrant ssh 명령을 사용한 연결
- 각 VM 별 IP
192.168.56.11: kube-control1
192.168.56.21: kube-node1
192.168.56.22: kube-node2
192.168.56.23: kube-node3
<이후 과정은 모든 노드에서 실행>
Ubuntu APT Repository 추가를 위한 패키지 설치
$ sudo apt-get update -y
$ sudo apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release -y
Docker Repository 추가
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
$ echo \
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt-get update -y
Docker Engine 및 containerd.io Container Runtime 설치
$ sudo apt-get install docker-ce docker-ce-cli containerd.io -y
Kubernetes APT Repository 추가
$ sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
$ echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
$ sudo apt-get update -y
kubernetes 설치
$ sudo apt-get install -y kubelet=1.19.11-00 kubeadm=1.19.11-00 kubectl=1.19.11-00
<kube-control1에서만 실행>
클러스터 초기화 구성
$ sudo kubeadm init --control-plane-endpoint 192.168.56.11 --pod-network-cidr 192.168.0.0/16 --apiserver-advertise-address 192.168.56.11
(주의) 명령어 실행결과에 kubeadm join 명령어가 포함되어있으니 잘 복사해놓을것!
kubectl 명령 사용을 위한 설정 추가
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
네트워크 플러그인 설치
$ kubectl create -f https://docs.projectcalico.org/manifests/calico.yaml
<kube-node1~3에서만 실행>
kubeadm join 명령을 사용한 클러스터 연결 (kubeadm init 명령의 결과에 나온 내용으로 실행) - 앞에 sudo 포함하여 실행
$ sudo kubeadm join 192.168.56.11:6443 --token 2ftstt.248g86xx7ywy9whq \
--discovery-token-ca-cert-hash sha256:f6588d4c4668419c60cf6c7ba68a6123939428e83f28b587129184aba472b3ad
참고) kubeadm join 명령어 유실 시
https://sarc.io/index.php/cloud/1383-join-token
<설치완료 확인 - kube-control1에서만>
각 노드 상태 확인
$ kubectl get nodes
클러스터 정보 확인
$ kubectl cluster-info
kubernetes 설치 (kubespray)
kubespray
쿠버네티스 클러스터 배포 자동화
구성관리(CM, Configuration Management): Ansible
Ansible 사용의 기본 조건
ssh - 키 기반인증
sudo 설정 (/etc/sudoers, /etc/sudoers.d)
python
KubeSpray 설치
Ansible 사용을 위한 키 기반 인증 구성
<control1에서>
$ ssh-keygen
$ ssh-copy-id vagrant@kube-node1
$ ssh-copy-id vagrant@kube-node2
$ ssh-copy-id vagrant@kube-node3
$ ssh-copy-id vagrant@kube-control1
Ansible 사용을 위한 패키지 설치
$ sudo apt -y install python3 python3-pip git
git을 사용하여 kubespray 다운로드
$ git clone --single-branch --branch release-2.17 https://github.com/kubernetes-sigs/kubespray.git
샘플로 제공되는 인벤토리 및 설치 플레이북을 복사
$ cd kubespray
$ cp -rfp inventory/sample/ inventory/cluster
인벤토리 수정 (inventory/cluster/inventroy.ini)
[all]
kube-node1 ansible_host=192.168.56.21 ip=192.168.56.21
kube-node2 ansible_host=192.168.56.22 ip=192.168.56.22
kube-node3 ansible_host=192.168.56.23 ip=192.168.56.23
kube-controlplane1 ansible_host=192.168.56.11 ip=192.168.56.11 ansible_connection=local
[all:vars]
ansible_python_interpreter=/usr/bin/python3
[kube_control_plane]
kube-controlplane1
[etcd]
kube-controlplane1
[kube_node]
kube-node1
kube-node2
kube-node3
[calico_rr]
[k8s_cluster:children]
kube_control_plane
kube_node
calico_rr
kubespray 배포를 위한 ansible 및 기타 도구 설치 (pip installer)
$ sudo pip3 install -r requirements.txt
ansible을 사용한 연결 테스트
$ ansible all -i inventory/cluster/inventory.ini -m ping
각 노드에서 apt 패키지 설치를 위한 apt 레포지토리 업데이트
$ ansible all -i inventory/cluster/inventory.ini -m apt -a 'update_cache=yes' -b
(모듈 실행 중 에러 발생 시 직접 노드에서 업데이트)
$ sudo rm -rf /var/lib/apt/lists/*
$ sudo apt update --fix-missing
$ sudo apt update
플레이북을 사용하여 kubernetes 클러스터 설치 수행
$ ansible-playbook -i inventory/cluster/inventory.ini cluster.yml --become
(실행 결과에 failed가 있을 경우, 플레이북 재실행)
플레이북을 사용한 설치 완료 후 kubectl 명령 사용을 위한 설정 추가 (control plane에서만 실행)
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
Azure 및 클라우드 환경에서 구성 시 주의사항
클라우드 내 인스턴스 간 방화벽(보안그룹, SG, Security Group) 설정
https://kubernetes.io/ko/docs/reference/ports-and-protocols/
Leave a comment