네이버 클라우드에 Kubernetes (k8s) cluster 구성하기 (Calico)
Kubernetes 관련 다양한 매니지드 형태의 상품들을 클라우드 서비스에서 제공하고 있으나 VM 을 활용하여 Kubernetes Cluster 환경을 구성해 보았다.
CNI 는 Calico 를 사용한다.
1. 네이버클라우드플랫폼에서 VM 생성하기
총 4대의 서버를 생성한다. 1대는 cluster 설치 playbook 을 수행할 Ansible 서버이고 나머지 3대는 K8S master, node 서버로 구성한다.
ansible 수행은 서버가 아니라 PC 에서도 가능하다.
1-1) ACG (Security Group) 설정
각 서버 별 용도에 맞게 ACG 룰을 설정한다.
Server |
Protocol |
Port |
용도 |
Ansible |
TCP |
22 |
SSH |
Master Node |
TCP |
22 |
SSH |
TCP |
6443 |
Kubernetes API Server |
|
TCP |
2379-2380 |
etcd server client API |
|
TCP |
10250 |
Kubelet API |
|
TCP |
10251 |
Kube-scheduler |
|
TCP |
10252 |
Kube-controller-manager |
|
TCP |
10255 |
Read-Only Kubelet API |
|
Worker Node | TCP | 22 | SSH |
TCP | 10250 | Kubelet API | |
TCP | 10255 | Read-Only Kubelet API | |
TCP | 30000-32767 | NodePort Services |
1-2) VM 생성
필요한 SPEC 에 맞게 각 용도 별 VM 을 생성한다. OS 는 CentOS 를 사용한다.
서버 생성 방법은 NCP 가이드 참고 ( http://docs.ncloud.com/ko/compute/compute-1-1-v2.html )
1-3) Master / Worker Node 에 Public IP 할당하기
Ansible 서버의 경우 포트 포워딩 설정해서 ssh 접속만 하면 되므로 Public IP 는 필요치 않다.
하지만 서비스 포트로 접근이 필요한 Master/Node 서버에는 Public IP 를 할당해야 외부에서 접근이 가능하다.
2. Ansible 설치하기
2-1) ansible 서버의 ssh key 생성 및 master/node 서버에 key 복사
ansible 서버에서 kubernetes cluster 설치를 위해 master/node 서버 접근 시 패스워드 입력 없이 접근하기 위해 ansible 서버의 키를 master/node 서버에 복사한다.
ANSIBLE 서버에서 실행 (키 생성/키 복사)
ssh-keygen
cp id_rsa.pub root@$master/nodeIP:id_rsa.pub
Master/Node 서버에서 실행
mkdir /root/.ssh (디렉토리가 있으면 생성하지 않아도 됨)
cat id_rsa.pub >> /root/.ssh/authorized_keys
2-2) ansible 패키지 설치
yum install epel-release -y
yum install ansible -y
2-3) swapoff
swapoff -a
2-4) ip forward 설정
sysctl -w net.ipv4.ip_forward=1
2-4) Git clone kubespray
git clone https://github.com/kubernetes-incubator/kubespray.git
cd kubespray
sudo pip install -r requirements.txt
2-5) Python 3 설치
sudo yum install -y https://centos7.iuscommunity.org/ius-release.rpm
sudo yum install -y python36u python36u-libs python36u-devel python36u-pip
2-6) 인벤토리 파일 수정
/kubespray/inventory/ncloud/hosts.ini 파일을 열어보면 아래와 같이 설정되어 있음을 확인할 수 있다.
[all]
2-7) Cluster Services, Pods Subnet IP range 설정
네이버클라우드플랫폼에서는 지정되지 않은 사설 IP 를 사용할 경우 drop 되어 통신이 안되는 경우가 있다.
따라서 docker/k8s 사용시에는 아래와 같은 IP range 를 사용하는 것을 권장한다.
vi /kubespray/inventory/ncloud/group_vars/k8s-cluster/k8s-cluster.yml
-> kube_service_addresses: 172.16.0.0/13
-> kube_pods_subnet: 172.24.0.0/13
2-8) K8S Cluster deploy
ansible 서버에서 playbook 을 실행시키고 설치 status , 에러를 확인한다. (아래 커맨드를 모두 붙여서 한줄에 쓴다.)
ansible-playbook -i inventory/ncloud/hosts.ini cluster.yml -b -v --private-key=~/.ssh/id_rsa --extra-vars "sysctl_file_path=/etc/sysctl.d/kubespray_sysctl.conf"
3. k8s cluster 상태 확인
ansible 로 설치한 k8s cluster 가 정상적으로 설치 되었는지 Master 서버에 접속하여 확인한다.
Master 서버에서 확인
# kubectl get nodes
# kubectl get pods --all-namespaces