티스토리 뷰
□ 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 |