오픈소스컨설팅 Playce Cloud Team 정진이 입니다. 배우고 지식을 나누며 함께 성장하고 싶습니다.
안녕하세요! 오픈소스컨설팅 Playce Cloud Team 정진이입니다.
들어가면서
2023년 2월 오픈소스컨설팅에서 Playce Kube 2.0을 오픈하게 되어 설치 과정을 설명 드리려고 합니다.
Playce Kube 2.0은 Playce Kube 사이트에서 다운 받을 수 있으며 설치 프로그램에는 Deploy 서버 및 Kubernetes 구성 요소가 모두 포함되어 있습니다. Playce Kube 클러스터에서 지원되는 플랫폼은 OpenStack, AWS, GCP, Azure, Baremetal이 있으며 사용 환경에 맞춰 설치할 수 있습니다.
이번 Playce Kube 2.0은 OpenStack에서 Rocky 8.5를 사용하여 설치하는 과정을 설명 드리겠습니다.
1 보안 그룹 생성
첫 번째로 각 서버에 맞게 보안 그룹을 생성합니다.
프로토콜 | 방향 | 포트 범위 | 용도 |
---|---|---|---|
TCP | 인바운드 | 8443 | Dashboard HTTPS |
TCP | 인바운드 | 9443 | Deploy Keycloak |
TCP | 인바운드 | 5000 | Docker Registry (HTTPS) |
TCP | 인바운드 | 80 | Repository HTTP |
TCP | 인바운드 | 443 | Repository HTTPS |
UDP | 인바운드 | 123 | Network Time Protocol (chrony) |
TCP/UDP | 인바운드 | 53 | Domain Name System (bind9) |
TCP | 인바운드 | 2049 | Network File System |
TCP | 인바운드 | 22 | SSH |
프로토콜 | 방향 | 포트 범위 | 용도 |
---|---|---|---|
TCP | 인바운드 | 6443 | Kubernetes API Server |
TCP | 인바운드 | 2379-2380 | etcd server client API |
TCP | 인바운드 | 10250 | Kubelet API |
TCP | 인바운드 | 10259 | kube-scheduler |
TCP | 인바운드 | 10257 | kube-controller-manager |
TDP | 인바운드 | 30000-32767 | NodePort Service |
TCP/UDP | 인바운드 | 53 | Domain Name System (bind9) |
TCP | 인바운드 | 179 | Calico networking (BGP) |
TCP | 인바운드 | 22 | SSH |
프로토콜 | 방향 | 포트 범위 | 용도 |
---|---|---|---|
TCP | 인바운드 | 10250 | Kubelet API |
TDP | 인바운드 | 30000-32767 | NodePort Service |
TCP/UDP | 인바운드 | 53 | Domain Name System (bind9) |
TCP | 인바운드 | 179 | Calico networking (BGP) |
TCP | 인바운드 | 22 | SSH |
프로토콜 | 방향 | 포트 범위 | 용도 |
---|---|---|---|
TCP | 인바운드 | 10250 | Kubelet API |
TDP | 인바운드 | 30000-32767 | NodePort Service |
TCP/UDP | 인바운드 | 53 | Domain Name System (bind9) |
TCP | 인바운드 | 80 | Ingress HTTP Port |
TCP | 인바운드 | 443 | Ingress HTTPS Port |
TCP | 인바운드 | 179 | Calico networking (BGP) |
2 인스턴스 생성
외부망과 연결된 Bastion 서버와 내부망으로 이루어진 Deploy, Master, Worker 세 대의 서버를 생성합니다.
Hostname | OS | IP | Spec |
---|---|---|---|
Bastion | Rocky-8.5 | 외부망, 내부망 | vCPU 8core RAM 16GB Disk 500GB |
Deploy | Rocky-8.5 | 내부망 | vCPU 8core RAM 16GB Disk 50GB + 800GB |
Master | Rocky-8.5 | 내부망 | vCPU 8core RAM 16GB Disk 50GB |
Worker | Rocky-8.5 | 내부망 | vCPU 8core RAM 16GB Disk 50GB |
3 Private Key 접속을 위한 설정
# 패스워드 변경
[root@bastion-rocky ~]# passwd
# scp [옵션] [파일명] [원격지 계정]@[원격지 IP]:[파일이 저장될 경로]
# Private Key File 전송 확인
[root@bastion-rocky ~]# ls -al .ssh
ls 옵션 | 의미 |
---|---|
-a | .(점)을 포함한 경로 안의 모든 파일과 디렉토리 표시 |
-l | 지정한 디렉토리의 내용을 자세히 출력 |
# Private Key File 권한 변경
[root@bastion-rocky ~]# chmod 600 .ssh/test-key.pem
# Private Key File 권한 변경 확인
[root@bastion-rocky ~]# ls -al .ssh
# sshd_config 파일 설정 변경
[root@bastion-rocky ~]# vi /etc/ssh/sshd_config
PubkeyAuthentication yes 주석 제거
# sshd 서비스 재시작
[root@bastion-rocky ~]# systemctl restart sshd.service
# Deploy 서버 접속
[root@bastion-rocky ~]# ssh -i .ssh/test-key.pem root@10.252.3.29
# Master 서버 접속
[root@bastion-rocky ~]# ssh -i .ssh/test-key.pem root@10.252.0.173
# Worker 서버 접속
[root@bastion-rocky ~]# ssh -i .ssh/test-key.pem root@10.252.1.53
4 Bastion 서버에 설치 파일과 체크섬 다운로드
[root@bastion-rocky ~]# mkdir -p /playcecloud/srcdata
# PlayceCloud.Kube.v2.0.tar 설치 파일 다운로드
[root@bastion-rocky ~]# curl -L http://download.playcecloud.io:13300/playcekube/PlayceCloud.Kube.v2.0.tar -o /playcecloud/srcdata/PlayceCloud.Kube.v2.0.tar
# PlayceCloudData.DeployBase.v2.0.tar 데이터 파일 다운로드
[root@bastion-rocky ~]# curl -L http://download.playcecloud.io:13300/playcekube/PlayceCloudData.DeployBase.v2.0.tar -o /playcecloud/srcdata/PlayceCloudData.DeployBase.v2.0.tar
# PlayceCloudData.K8SRegistry.v2.0.tar 데이터 파일 다운로드
[root@bastion-rocky ~]# curl -L http://download.playcecloud.io:13300/playcekube/PlayceCloudData.K8SRegistry.v2.0.tar -o /playcecloud/srcdata/PlayceCloudData.K8SRegistry.v2.0.tar
# PlayceCloudData.K8SRepo.v2.0.tar 데이터 파일 다운로드
[root@bastion-rocky ~]# curl -L http://download.playcecloud.io:13300/playcekube/PlayceCloudData.K8SRepo.v2.0.tar -o /playcecloud/srcdata/PlayceCloudData.K8SRepo.v2.0.tar
# PlayceCloudData.OSRepo.rocky8.v2.0.tar 데이터 파일 다운로드
[root@bastion-rocky ~]# curl -L http://download.playcecloud.io:13300/playcekube/PlayceCloudData.OSRepo.rocky8.v2.0.tar -o /playcecloud/srcdata/PlayceCloudData.OSRepo.rocky8.v2.0.tar
# PlayceCloud.Kube.v2.0.tar 체크섬 다운로드
[root@bastion-rocky ~]# curl -L http://download.playcecloud.io:13300/playcekube/PlayceCloud.Kube.v2.0.tar.MD5SUMS -o /playcecloud/srcdata/PlayceCloud.Kube.v2.0.tar.MD5SUMS
[root@bastion-rocky ~]# curl -L http://download.playcecloud.io:13300/playcekube/PlayceCloud.Kube.v2.0.tar.SHA256SUMS -o /playcecloud/srcdata/PlayceCloud.Kube.v2.0.tar.SHA256SUMS
# PlayceCloudData.DeployBase.v2.0.tar 체크섬 다운로드
[root@bastion-rocky ~]# curl -L http://download.playcecloud.io:13300/playcekube/PlayceCloudData.DeployBase.v2.0.tar.MD5SUMS -o /playcecloud/srcdata/PlayceCloudData.DeployBase.v2.0.tar.MD5SUMS
[root@bastion-rocky ~]# curl -L http://download.playcecloud.io:13300/playcekube/PlayceCloudData.DeployBase.v2.0.tar.SHA256SUMS -o /playcecloud/srcdata/PlayceCloudData.DeployBase.v2.0.tar.SHA256SUMS
# PlayceCloudData.K8SRegistry.v2.0.tar 체크섬 다운로드
[root@bastion-rocky ~]# curl -L http://download.playcecloud.io:13300/playcekube/PlayceCloudData.K8SRegistry.v2.0.tar.MD5SUMS -o /playcecloud/srcdata/PlayceCloudData.K8SRegistry.v2.0.tar.MD5SUMS
[root@bastion-rocky ~]# curl -L http://download.playcecloud.io:13300/playcekube/PlayceCloudData.K8SRegistry.v2.0.tar.SHA256SUMS -o /playcecloud/srcdata/PlayceCloudData.K8SRegistry.v2.0.tar.SHA256SUMS
# PlayceCloudData.K8SRepo.v2.0.tar 체크섬 다운로드
[root@bastion-rocky ~]# curl -L http://download.playcecloud.io:13300/playcekube/PlayceCloudData.K8SRepo.v2.0.tar.MD5SUMS -o /playcecloud/srcdata/PlayceCloudData.K8SRepo.v2.0.tar.MD5SUMS
[root@bastion-rocky ~]# curl -L http://download.playcecloud.io:13300/playcekube/PlayceCloudData.K8SRepo.v2.0.tar.SHA256SUMS -o /playcecloud/srcdata/PlayceCloudData.K8SRepo.v2.0.tar.SHA256SUMS
# PlayceCloudData.OSRepo.jammy.v2.0.tar 체크섬 다운로드
[root@bastion-rocky ~]# curl -L http://download.playcecloud.io:13300/playcekube/PlayceCloudData.OSRepo.rocky8.v2.0.tar.MD5SUMS -o /playcecloud/srcdata/PlayceCloudData.OSRepo.rocky8.v2.0.tar.MD5SUMS
[root@bastion-rocky ~]# curl -L http://download.playcecloud.io:13300/playcekube/PlayceCloudData.OSRepo.rocky8.v2.0.tar.SHA256SUMS -o /playcecloud/srcdata/PlayceCloudData.OSRepo.rocky8.v2.0.tar.SHA256SUMS
# 파일 다운로드 확인
[root@bastion-rocky ~]# ls -l /playcecloud/srcdata/
5 Deploy 서버 볼륨 확장
# 디바이스 정보 확인
[root@deploy-rocky ~]# lsblk
# 디스크 파티셔닝
[root@deploy-rocky ~]# fdisk /dev/vdb
# 디스트 파티셔닝 확인
[root@deploy-rocky ~]# lsblk
# ext4 파일 시스템 포맷
[root@deploy-rocky ~]# mkfs.ext4 /dev/vdb1
# 디렉토리 생성
[root@deploy-rocky ~]# mkdir -p /playcecloud
# Deploy 서버에 마운트
[root@deploy-rocky ~]# mount /dev/vdb1 /playcecloud
# 마운트 확인
[root@deploy-rocky ~]# df -Th
df 옵션 | 의미 |
---|---|
-T | 파일의 Type 항목을 출력 |
-h | 사람이 읽기 쉬운 형태(단위)로 출력 (K, M, G) |
6 Deploy 서버에 Playce Kube 설치
# Deploy 서버 패스워드 변경
[root@deploy-rocky ~]# passwd
# Bastion 서버에서 설치 파일, 데이터 파일, 체크섬 전송
[root@bastion-rocky ~]# scp -r /playcecloud/srcdata root@10.252.3.29:/playcecloud
# Deploy-Rocky에서 파일 전송 확인
[root@deploy-rocky ~]# ls -l /playcecloud/srcdata
# 체크섬 파일이 있는 폴더로 이동
[root@deploy-rocky ~]# cd /playcecloud/srcdata/
# MD5SUMS 체크섬 확인
[root@deploy-rocky srcdata]# cat PlayceCloud.Kube.v2.0.tar.MD5SUMS | md5sum --check
[root@deploy-rocky srcdata]# cat PlayceCloudData.DeployBase.v2.0.tar.MD5SUMS | md5sum --check
[root@deploy-rocky srcdata]# cat PlayceCloudData.K8SRegistry.v2.0.tar.MD5SUMS | md5sum --check
[root@deploy-rocky srcdata]# cat PlayceCloudData.K8SRepo.v2.0.tar.MD5SUMS | md5sum --check
[root@deploy-rocky srcdata]# cat PlayceCloudData.OSRepo.rocky8.v2.0.tar.MD5SUMS | md5sum --check
# PlayceCloud.Kube.v2.0.tar 설치 파일 압축 해제
[root@deploy-rocky ~]# tar xpf /playcecloud/srcdata/PlayceCloud.Kube.v2.0.tar -C /playcecloud
# /playcecloud 확인
[root@deploy-rocky ~]# ls -l /playcecloud
# /playcecloud/playcekube 확인
[root@deploy-rocky ~]# ls -l /playcecloud/playcekube/
# Playce Kube 버전 확인
[root@deploy-rocky ~]# cat /playcecloud/playcekube/release.txt
tar 옵션 | 의미 |
---|---|
-x | 파일 압축 해제 |
-p | 파일 사용 권한에 대한 정보 출력 |
-f | 압축될 파일명 지정 |
-C | 대상 디렉토리 지정 |
# playcecloud.conf.example 파일 복사
[root@deploy-rocky ~]# cp /playcecloud/playcekube/playcecloud.conf.example /playcecloud/playcecloud.conf
# playcecloud.conf 파일 복사 확인
[root@deploy-rocky ~]# ls -l /playcecloud/
# playcecloud.conf 파일 설정 확인
[root@deploy-rocky ~]# cat /playcecloud/playcecloud.conf
# PLAYCE_DEPLOY가 Deploy-VM IP를 자동으로 설정하는지 확인
[root@deploy-rocky ~]# ip -4 -o a | grep -Ev "\slo\s" | head -n 1 | awk '{ print $4 }' | sed 's/\(.*\)\/.*/\1/'
# Playce Kube 설치
[root@deploy-rocky ~]# /playcecloud/playcekube/bin/install_playcekube
# NTP(systemd) 상태 확인
[root@deploy-rocky ~]# systemctl status chronyd
# Playce Kube 서비스 설치 확인
[root@deploy-rocky ~]# docker ps
# PORTS 리슨 상태 비교 확인
[root@deploy-rocky ~]# ss -nap | grep docker-proxy
7 SSH 접속을 위한 인증키 복사
# kubespray_ssh와 kubespray_ssh.pub 파일 확인
[root@deploy-rocky ~]# ls -al /playcecloud/playcekube/kubespray/
# kubespray_ssh와 kubespray_ssh.pub 파일 백업
[root@deploy-rocky ~]# mv /playcecloud/playcekube/kubespray/kubespray_ssh /playcecloud/playcekube/kubespray/kubespray_ssh.backup
[root@deploy-rocky ~]# mv /playcecloud/playcekube/kubespray/kubespray_ssh.pub /playcecloud/playcekube/kubespray/kubespray_ssh.pub.backup
# kubespray_ssh와 kubespray_ssh.pub 파일 백업 확인
[root@deploy-rocky ~]# ls -al /playcecloud/playcekube/kubespray/
# Bastion 서버에서 Deploy 서버로 개인키 전송
[root@bastion-rocky ~]# scp -i .ssh/test-key.pem .ssh/test-key.pem 10.252.3.29:/playcecloud/playcekube/kubespray/kubespray_ssh
# Deploy 서버에서 vi 편집기로 공개키 저장
[root@deploy-rocky ~]# vi /playcecloud/playcekube/kubespray/kubespray_ssh.pub
# kubespray_ssh와 kubespray_ssh.pub 파일 확인
[root@deploy-rocky ~]# ls -al /playcecloud/playcekube/kubespray/kubespray_*
# Deploy 서버에서 Master 서버로 SSH 접속 확인
[root@deploy-rocky ~]# ssh -i /playcecloud/playcekube/kubespray/kubespray_ssh root@10.252.0.173
# Deploy 서버에서 Worker 서버로 SSH 접속 확인
[root@deploy-rocky ~]# ssh -i /playcecloud/playcekube/kubespray/kubespray_ssh root@10.252.1.53
8 클러스터 설치 및 구성
# kubespray-sample.env 파일을 k8s.env 파일로 복사
[root@deploy-rocky ~]# cp -rp /playcecloud/playcekube/kubespray/kubespray-sample.env /playcecloud/data/kubespray/envfiles/k8s.env
# k8s.env 파일 내용 수정
[root@deploy-rocky ~]# vi /playcecloud/data/kubespray/envfiles/k8s.env
# 클러스터 설치 쉘 실행
[root@deploy-rocky ~]# /playcecloud/playcekube/bin/playcekube_kubespray.sh -f /playcecloud/data/kubespray/envfiles/k8s.env
# context 변경
[root@deploy-rocky ~]# kubectl config use-context admin@k8s
# Node 확인
[root@deploy-rocky ~]# kubectl get node -o wide
# Pod 확인
[root@deploy-rocky ~]# kubectl get pod -A
9 Addons 설치
# helm chart repo 확인
[root@deploy-rocky ~]# helm search repo
# kube-packages 디렉토리 확인
[root@deploy-rocky ~]# ls -l /playcecloud/playcekube/kube-packages
# helm chart 설치 확인
[root@deploy-rocky ~]# helm list -A
# Addons 설치 리스트 확인
[root@deploy-rocky ~]# ls -l /playcecloud/playcekube/kube-packages/*/install*.sh
# keycloak 설치
[root@deploy-rocky ~]# /playcecloud/playcekube/kube-packages/keycloak/install-helm-charts.sh
# oauth2-proxy 설치
[root@deploy-rocky ~]# /playcecloud/playcekube/kube-packages/oauth2-proxy/install-helm-charts.sh
# prometheus 설치
[root@deploy-rocky ~]# /playcecloud/playcekube/kube-packages/prometheus/install-helm-charts.sh
# velero 설치
[root@deploy-rocky ~]# /playcecloud/playcekube/kube-packages/minio/install-helm-charts.sh
[root@deploy-rocky ~]# /playcecloud/playcekube/kube-packages/velero/install-helm-charts.sh
# gitea 설치
[root@deploy-rocky ~]# /playcecloud/playcekube/kube-packages/gitea/install-helm-charts.sh
# harbor 설치
[root@deploy-rocky ~]# /playcecloud/playcekube/kube-packages/harbor/install-helm-charts.sh
# tekton 설치
[root@deploy-rocky ~]# /playcecloud/playcekube/kube-packages/tekton/install-helm-charts.sh
# argo-cd 설치
[root@deploy-rocky ~]# /playcecloud/playcekube/kube-packages/argo-cd/install-helm-charts.sh
[root@deploy-rocky ~]# /playcecloud/playcekube/kube-packages/argo-rollouts/install-helm-charts.sh
[root@deploy-rocky ~]# /playcecloud/playcekube/kube-packages/argo-events/install-helm-charts.sh
# linkerd2 설치
[root@deploy-rocky ~]# /playcecloud/playcekube/kube-packages/linkerd2/install-helm-charts.sh
[root@deploy-rocky ~]# /playcecloud/playcekube/kube-packages/linkerd-viz/install-helm-charts.sh
[root@deploy-rocky ~]# /playcecloud/playcekube/kube-packages/linkerd-jaeger/install-helm-charts.sh
[root@deploy-rocky ~]# /playcecloud/playcekube/kube-packages/linkerd-multicluster/install-helm-charts.sh
# opendistro-es 설치
[root@deploy-rocky ~]# /playcecloud/playcekube/kube-packages/opendistro-es/install-helm-charts.sh
[root@deploy-rocky ~]# kubectl get ingress -A | grep -v "ADDRESS" | awk '{ print "curl -o /dev/null -sL -w \"%{http_code} https://"$4"\n\" --resolve "$4":443:"$5" https://"$4 }' | bash
마치며.
여기까지 OpenStack에서 Playce Kube 2.0을 설치해 보았습니다.
처음 설치하는 분도 쉽게 따라할 수 있을 만큼 상세하게 설명했는데 어떠셨나요?
Playce Kube 2.0은 Kubernetes를 기반으로 애플리케이션을 손쉽게 배포하고 자동화된 운영 관리를 제공하는 PaaS 솔루션입니다.
다양한 컴포넌트를 유기적으로 결합한 최적의 플랫폼으로 유연한 클라우드 네이티브 애플리케이션을 위한 환경을 제공하는 오픈소스컨설팅의 Playce Kube 2.0을 지금 만나보시기 바랍니다.
오픈소스컨설팅 Playce Cloud Team 정진이 입니다. 배우고 지식을 나누며 함께 성장하고 싶습니다.