티스토리 뷰

DevOps

[GCP] K8S kubespary 구성

김한성 2020. 10. 31. 23:47

□ GCP 클라우드 환경에도 익숙해질겸 GCP에서 K8S를 구성해보겠습니다. bastion 서버 1대 / master 1대 / worker 2대 VM을 생성하여 구성하고, 앞서 NBP에서 구성한것처럼 kubespary로 K8S를 구성해보겠습니다.

 

● 먼저 아래와 같이 서버를 생성해 줍니다.

● bastion 서버에서 hosts에 master노드와 worker노드들의 내부 IP를 추가해줍니다.

sudo vi /etc/hosts

10.179.0.0 k8s-master001 node1
10.129.0.0 k8s-worker001 node2
10.179.0.0 k8s-worker002 node3

● GCP의 경우 GCE의 메타데이터를 이용하여 SSH 키를 자동으로 배포해줄 수 있습니다. bastion 서버의 SSH 키값을 복사하여 메타데이터 -> SSH 키에 추가합니다.

ssh-keygen -t rsa

cat .ssh/id_rsa.pub

 

● 아래와 같이 master node로 접속이 가능해집니다. Naver Cloud 같은 경우 private subnet 으로 묶어 주어야 하는데 GCP는 10점대로 통신이 가능합니다.

● kubespary로 k8s를 구성하기로해서 아래 github를 참고하여 진행하였습니다.

 

github.com/kubernetes-sigs/kubespray

 

● 기본 패키지를 설치해줍니다. (bastion 서버)

$ sudo yum -y install epel-release
$ sudo yum install -y python3-pip

● docker도 설치를 진행해줍니다.

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
                  
                  
sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2
  
  
sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
    
sudo yum -y install docker-ce docker-ce-cli containerd.io

sudo systemctl enable docker.service
sudo systemctl start docker.service

● k8s kubespary 소스코드 다운로드

[choogcp@k8s-bastion ~]$ git clone https://github.com/kubernetes-sigs/kubespray
Cloning into 'kubespray'...
remote: Enumerating objects: 48377, done.
remote: Total 48377 (delta 0), reused 0 (delta 0), pack-reused 48377
Receiving objects: 100% (48377/48377), 14.33 MiB | 6.78 MiB/s, done.
Resolving deltas: 100% (26845/26845), done.

● inventory의 sample폴더를 제가 구성할 hskim-cluster로 복사합니다.

$ cd kubespray

$ sudo pip3 install -r requirements.txt

$ cp -rfp inventory/sample inventory/hskim-cluster

● host 파일의 master 1대  / worker 2대 node들의 IP를 구성해줍니다.

[choogcp@k8s-bastion kubespray]$ declare -a IPS=(10.0.0.1 10.0.0.2 10.0.0.3)
[choogcp@k8s-bastion kubespray]$ CONFIG_FILE=inventory/hskim-cluster/hosts.yaml python3 contrib/inventory_builder/inventory.py ${IPS[@]}
DEBUG: Adding group all
DEBUG: Adding group kube-master
DEBUG: Adding group kube-node
DEBUG: Adding group etcd
DEBUG: Adding group k8s-cluster
DEBUG: Adding group calico-rr
DEBUG: adding host node1 to group all
DEBUG: adding host node2 to group all
DEBUG: adding host node3 to group all
DEBUG: adding host node1 to group etcd
DEBUG: adding host node2 to group etcd
DEBUG: adding host node3 to group etcd
DEBUG: adding host node1 to group kube-master
DEBUG: adding host node2 to group kube-master
DEBUG: adding host node1 to group kube-node
DEBUG: adding host node2 to group kube-node
DEBUG: adding host node3 to group kube-node

● ping 테스트

[choogcp@k8s-bastion kubespray]$ ansible -i inventory/hskim-cluster/hosts.yaml -m ping all
node3 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
node1 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
node2 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}

● network 셋팅

cd /home/choogcp/kubespray/inventory/hskim-cluster/group_vars/k8s-cluster

vi k8s-cluster.yml

kube_service_addresses: 172.18.0.0/16

kube_pods_subnet: 172.19.0.0/16

● hosts.yaml 파일을 보면 kube-master의 node1 node2가 들어가있습니다. 이상태로 cluster를 구성한다면 node1, node2가 master노드로 생성이됩니다. 현재 master node 1개 worker node 2개로 구성할 것이므로 node2를 지워주고 진행해 줍니다.

all:
  hosts:
    node1:
      ansible_host: 10.178.0.3
      ip: 10.178.0.3
      access_ip: 10.178.0.3
    node2:
      ansible_host: 10.128.0.2
      ip: 10.128.0.2
      access_ip: 10.128.0.2
    node3:
      ansible_host: 10.178.0.5
      ip: 10.178.0.5
      access_ip: 10.178.0.5
  children:
    kube-master:
      hosts:
        node1:
        node2:
    kube-node:
      hosts:
        node1:
        node2:
        node3:
    etcd:
      hosts:
        node1:
        node2:
        node3:
    k8s-cluster:
      children:
        kube-master:
        kube-node:
    calico-rr:
      hosts: {}
[choogcp@k8s-bastion kubespray]$ ansible-playbook -i inventory/hskim-cluster/hosts.yaml --become --become-user=root cluster.yml

● 아래 처럼 정상적으로 cluster가 구성됩니다.

 

● kubectl도 설치를 진행해 줍니다.

cd /etc/yum.repos.d

vi kubernetes.repo

[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg

 

sudo yum install -y kubectl

● kubectl config 복사 (master서버에서)

mkdir ~/.kube
sudo cp /etc/kubernetes/admin.conf ~/.kube/config
sudo chown choogcp:choogcp ~/.kube/config

● bastion 서버에서 master서버에 생성한 kube config파일을 복사

#config 파일 scp로 bastion에 이동
$ scp k8s.master001:/home/hskim/.kube/config ~/.kube

● kubectl 명령어로 cluster 구성이 잘 되었는지 확인합니다.

 

 

 

'DevOps' 카테고리의 다른 글

Superset / Chart  (0) 2021.03.15
NextCloud docker로 구성  (0) 2021.02.02
[GCP] 메타데이터 / SSH 접속  (0) 2020.10.31
[NBP] K8S Dashboard(ingress) 구성  (0) 2020.10.30
[NBP] Python Flask API docker image build  (0) 2020.08.19
댓글
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31