-
네이버 클라우드에 Kubernetes (k8s) cluster 구성하기 (Calico)NAVER Cloud 2018. 11. 30. 16:20
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) 인벤토리 파일 수정
cp -r inventory/sample inventory/ncloudcd /kubespraydeclare -a IPS=(10.41.4.220 10.41.2.83 10.41.0.188) <- Master/Node 서버의 Public IP 입력CONFIG_FILE=inventory/ncloud/hosts.ini python3.6 contrib/inventory_builder/inventory.py ${IPS[@]}/kubespray/inventory/ncloud/hosts.ini 파일을 열어보면 아래와 같이 설정되어 있음을 확인할 수 있다.
[all]
node1 ansible_host=10.41.4.220node2 ansible_host=10.41.2.83node3 ansible_host=10.41.0.188[kube-master]node1node2[etcd]node1node2node3[kube-node]node1node2node3[k8s-cluster:children]kube-masterkube-node[calico-rr][vault]node1node2node32-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
NAME STATUS ROLES AGE VERSIONnode1 Ready master,node 5m v1.11.2node2 Ready master,node 5m v1.11.2node3 Ready node 5m v1.11.2# kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGEkube-system calico-node-2w7pq 1/1 Running 0 5mkube-system calico-node-pk6st 1/1 Running 0 5mkube-system calico-node-w5f55 1/1 Running 0 5mkube-system kube-apiserver-node1 1/1 Running 0 5mkube-system kube-apiserver-node2 1/1 Running 0 5mkube-system kube-controller-manager-node1 1/1 Running 0 6mkube-system kube-controller-manager-node2 1/1 Running 0 6mkube-system kube-dns-6d54bdd9d6-rrp4m 3/3 Running 0 5mkube-system kube-dns-6d54bdd9d6-xsw99 3/3 Running 0 4mkube-system kube-proxy-node1 1/1 Running 0 5mkube-system kube-proxy-node2 1/1 Running 0 5mkube-system kube-proxy-node3 1/1 Running 0 5mkube-system kube-scheduler-node1 1/1 Running 0 6mkube-system kube-scheduler-node2 1/1 Running 0 6mkube-system kubedns-autoscaler-76f87d889d-dgs6z 1/1 Running 0 4mkube-system kubernetes-dashboard-8595fbc877-v8rc2 1/1 Running 0 4mkube-system nginx-proxy-node3 1/1 Running 0 5m반응형'NAVER Cloud' 카테고리의 다른 글
오브젝트 스토리지를 파일시스템으로 마운트해서 사용하기 (0) 2020.02.10 rclone 으로 오브젝트 스토리지에 파일 동기화 하기 (0) 2020.02.07 네이버클라우드플랫폼 Certificate Manager 에 LetsEncrypt 인증서 등록 (0) 2020.02.03 네이버클라우드플랫폼에서 Windows 서버 백업 오브젝트 스토리지에 보관하기 - 2 (0) 2019.01.14 네이버클라우드플랫폼에서 Windows 서버 백업 오브젝트 스토리지에 보관하기 - 1 (0) 2019.01.14