복습
- 객체 스토리지(Bucket)
- URL 링크로 파일을 다운로드 받을 수 있었다. (wget 사용가능)
- 블록 스토리지(Persistent Disk)
Cloud Filestore
- GCP의 파일 스토리지 기능이다.
- AWS EFS, Azure files, NFS , SMB(Samba)와 같다.
Cloud Filestore
- Cloud Filestore IP를 사용설정 해야한다.
인스턴스 만들기
- 검색창에서 filestore를 검색하여 Cloud Filestore에 들어간다.
- 이름 : cocudent220609
- 인스턴스 유형 : 기본
- 인스턴스 유형 비교표이다.
- Enterprise는 리전을 다수에 영역을 분산하여 고가용성을 목표로 한다.
- asia-northeast3가 서울이다.
- 파일 공유 이름: share, 폴더이름을 share로 하겠다.
- 또, 액세스 제어 설정을 여기서 할 수 있다.
- 파일스토어 인스턴스가 생성중이다.
- 생성되면 오른쪽 점x3을 눌러
마운트 지점 복사
를 눌러준다.
10.206.243.74:/share
VM 인스턴스 만들기 (web01)
- Firestore의 인스턴스를 사용해보기위해 VM인스턴스를 2개 만들어야 한다.
- ComputeEngine항목으로 이동한다.
- 이름 : web01
- 리전 : asia-northeast3 (서울), 나중에 팀프로젝트시에는 여러가지 대륙의 리전을 사용해보는 것도 좋다.
- 머신 시리즈 : E2
- 머신 유형 : e2-micro
- 부팅 디스크 : CentOS7
- 커스텀 이미지 : 내가 생성한 이미지를 사용할 수 있다.
- 스냅샷 : 기존에 백업해놓은 스냅샷 사용
- 기존 디스크 : 기존에 보유한 디스크(볼륨), 인스턴스를 지웠는데 디스크가 살아있다면 그대로 인스턴스로 다시 만들 수 있다.
- 관리 -> 자동화 -> 시작 스크립트, 에서 httpd를 설치해준다.
#!/bin/bash
yum install -y httpd
systemctl enable --now httpd
- 방화벽에서 HTTP (80)포트 열어주는거 잊지마록~
- 만들기
VM 인스턴스 확인 (web01)
- 잘 접속되었다.
- 마운트가 잘 안된다.
- fstab을 모른다는 것이다.
sudo yum install nfs-utils
: nfs-utils로 fstab과 nfs를 설치해줘야 한다.
- 그냥 마운트는 되지만, 인터넷에서 연결되는 smb의 마운트는 몰랐기 때문에 nfs-utils를 설치해야 한다.
- Ubuntu에서는
nfs-common
으로 설치해야 한다.
- 마운트가 잘 되었고, /mnt에 잘 마운트 된 것을 볼 수 있다.
- MobaXterm을 이용해 gcp.tar를 넣고, filestore에 복사해준다.
sudo tar -xvf gcp.tar -C /var/www/html/
로 gcp.tar파일을 압축 해제해준다.
- 이제 ip을 알아내고, 웹브라우져로 접속해야한다.
curl ipconfig.io
IP반환받기
- 잘 접속된다.
web02 만들기
- 이름 : web02
- 리전 : asia-northeast3-a
- 머신 구성 : e2-micro
- 컨테이너
- DEPLOY CONTAINER : 내가 지금 만드는 VM인스턴스에 컨테이너를 만들 수 있는 컨테이너 이미지를 배포한다.
- 컨테이너 이미지 :
halilinux/homepage:v1.0
: 강사님의 도커허브에 올려져있는 도커 이미지이다.
- 아직 도커는 안들어갔으니, 기본값으로 설전한다 선택버튼 클릭
- 컨테이너가 올려졌다.
- 아래 부팅 디스크가 기존Debian에서 Container-Opimized OS로 바뀌었다.
- 도커 컨테이너 실행을 위해, 도커가 설치된 OS이미지이다.
- 액세스 범위 : 모든Cloud API에 대한 전체 액세스 허용
- 방화벽 : HTTP 트래픽허용
- 관리에 자동화 스크립트를 설치하지 않아도 된다. 이미 도커 이미지에 존재한다.
- 만들기 클릭
- 잘 접속된다.
- 도커 이미지파일에 html코드와 토끼 이미지, 웹서버까지 설치되어있었다.
5. GCP 이미지 서비스
- 운영체제 이미지를 사용하여 인스턴스의 부팅디스크를 만들 수 있다.
- 정상상태VM의 부팅디스크을 이미지로 만들어 VM에 문제가 생겼을 때, 빠르게 복원, 복사, 복제하기위해 사용한다.
- 이미지 생성 -> 이미지 사용 -> 이미지 재생성
VM인스턴스를 만드는 4가지 방법
- 우리가 매번 작업했던 새 VM인스턴스
- 템플릿에서 VM인스턴스로 만들 수 있다. 이미지보다 더 빠르게 만들 수 있다.
- 머신 이미지에서 VM 인스턴스를 만들 수 있다.
- Marketplace에서 바로 사용할 수 있는 솔루션을 구할 수도 있다.
커스텀 이미지
- 템플릿을 만들 떄 사용한다.
- 그대로 만들기를 눌러준다.
- 다양한 이미지들이 벌써 존재한다.
- 이미지 만들기로 새로운 이미지를 만들어 본다.
- 커스텀 이미지를 만들때의 소스를 다양하게 선택할 수 있다. 디스크와 스냅샷을 선택할 수 있고, 이미지는 기존 커스텀이미지를 불러올 수 있다.
- web02는 도커에 이슈가 있더 web01로 만들어준다.
- 그러나 디스크를 소스로 하게되면, 디스크가 운영중이라면 멈추고 이미지를 만들어야 한다.
- 이렇게 되면 소스를 디스크가 아니라 스냅샷으로 해야겠다.
- 이름과 소스, 위치를 바꿔주고 만들기를 눌러준다.
- 생성되고 있다.
- 템플릿은 수평적확장에서도 쓰인다. AutoScailing할 떄 템플릿으로 수평적확장을 진행할 수 있다.
이어서 템플릿 만들기
- 인스턴스 템플릿 만들기로 들어간다.
- 머신 유형을 e2-micro로 만들어준다.
- 부팅 디스크의 공개 이미지가 아니라 커스텀 이미지를 클릭하면 방금 생성한 커스텀 이미지를 찾을 수 있다.
- 액세스 범위, 방화벽을 설정해준다.
- 이미지에 세팅이 되어있기 때문에 사용자 명령어를 넣어줄 필요 없다.
- 잘 생성되었다.
템플릿으로 VM인스턴스 만들기
- 템플릿은 우리가 설정한대로 자동으로 복제할수 있도록 되어있다.\
- 그러나 리전이 설정되어있지 않아 리전은 바꿔줘야 한다.
머신 이미지
- 디스크나 볼륨(특히 root디스크)를 이미지로 만드는 것이다. 바로바로VM으로 만들 수 있다.
- 이름 : my-machine-image
- 소스 VM 인스턴스
- 위치를 저장할 수도 있다. 머신 이미지를 사용할 때에 가용성을 위해 멀티 리전을 사용할 수 있고, 하나의 리전만 사용할 수 있다.
- 암호화는 기본으로 설정되어잇다.
- 머신 이미지를 생성하였다.
- 오른쪽 작업을 클릭하면 인스턴스 만들기 버튼이 있다.
- 기존 인스턴스를 세팅했던 스펙 그대로 존재한다. 다만 이름만 바뀌어잇다.
스냅샷
- 볼륨이나 디스크를 사진찍듯이 찍어놓고, 나중에 에러가 생기면 다시 돌아올 수 있는 타임머신 기능을 위해 사용한다.
- 스냅샷을 만들어 본다.
- 머신 이미지를 만들때와 비슷하다.
- 소스 디스크는 스냅샷을 생성할 소스가 되는 디스크를 말한다.
- 머신이미지로 web01을 만들었으니 이번엔 web02로 해본다.
- 위치는 서울로 만든다.
- 만들기
- 잘 만들어 졌다. 현재 10:48에 만들어졌고, 이후 에러가나면 이 시간대의 web02로 복구해준다.
스냅샷으로 인스턴스 만들기
- 머신 이미지처럼 모든 설정이 같지 않다. 기존 인스턴스 생성할 떄 처럼 리전과 머신 구성을 설정해주어야 한다.
- 리전을 서울, e2-micro로 만들어준다.
- 다만 부팅 디스크에서 OS이미지가 snapshot-1로 들어가 있는것을 볼 수 잇다.
- 액세스 범위 : 모든 Cloud API에 대한 전체 액세스 허용
- 방화벽 : HTTP트래픽 허용
- 인스턴스를 만들어준다.
- 우리가 원하는 토깡이가 안나온다.
- 터미널로 접속해준다.
- 접속이 가능하다.
docker ps
: 현재 컨테이너가 실행중이다.
curl 127.0.0.1
: 현재 스스로의 웹페이지에서 어떤 출력이 나오고있는지 확인
- html이 잘 나오고 있으니 이 문제는 아니다.
도커에서 에러가 나기 때문에 WEB01도 스냅샷으로 복제해본다.
- 이름을 구별하기 위해 web01-snapshot-2으로 해준다.
- 생성이 잘 됬다면 인스턴스를 만들어 본다.
- 이름 : web01-snapshot
- 리전 : 서울
- 머신유형 : e2-micro
- 모든 CloudAPI에 대한 전체 액세스 허용
- HTTP 트래픽 허용
- 만들기
- 잘 접속 된다.
커스텀 이미지 VS 머신 이미지
- 머신이미지는 우리가 클릭으로 편하게 VM인스턴스를 만들 수 있게 해준다.
- 커스텀이미지(템플릿)은 머신 이미지처럼 설정이 미리 저장되어있지만, 이후 자동으로 AutoScale될때 템플릿을 이용하여 VM인스턴스가 생성되게 한다. 즉, 자동화가 될 수 있다.
6. GCP 네트워크 서비스
- GCP에서는 Default로 기본으로 생성되어있다.
- 전세계에 default VPC가 잡혀있지만 GCP는 특이하게 리전별로 IP주소범위가 다르다. 서울은 10.178.0.0/20의 주소범위를 가진다.
- web01만 봐도 10.178.0.4/32 의 IP를 가지고 있고, 물론 범위 안에 있다.
- 만약 회사에서 오랜기간 사용한 고정된 특정 IP범위가 있다면, 우리가 VPC를 구성하여 그 IP주소범위를 그대로 사용할 수 있도록 해야한다.
VPC네트워크 만들기
- 이름 : my-vpc
- vpc에서 IPv6를 사용하지 않을 것이다.
- 서브넷도 커스텀으로 만들어준다.
- 이름 : my-subnet
- 리전 : asia-northeast3 (서울)
- IPv4만 사용하는 단일 스택으로 사용한다.
- IPv4의범위는 기존에 사용했던 10.28.0.0/16을 그대로 사용한다.
- 서브넷이 더 필요하다면 서브넷을 추가할 수 있다.
- 방화벽 규칙
- 방화벽의 의미로 서브넷단위로 방화벽 규칙을 정의하게 된다.
- AWS나 Azure와 다르게 기본으로 icmp, rdp, ssh포트들이 다 열려있다.
- 80포트는 현재 오픈할 필요 없지만, 나중에 추가할 수 있다.
- 인그레스 : 인바운드 (들어와야 하는 신호, 모두거부됨)
- 이그레스 : 아웃바운드 (나가야 하는 신호, 모두허용됨)
- 만들기
- my-vpc로 잘 만들어졌다.
방화벽 규칙 만들기
- VPC 네트워크 메뉴에서 방화벽에 들어간다.
- 방화벽 규칙을 만들어준다.
- 이름 : http
- 네트워크를 방금 생성한 my-vpc로 만들어준다.
- 이 보안규칙을 적용할 인스턴스는 http80 태그를 달면된다.
- 들어오는 소스 IPv4의 범위는 0.0.0.0/0으로 모든 IP에 대해 적용한다.
- 프로토콜 및 포트는 tcp 포트로 80(http)번 포트를 허용한다.
- 방화벽 규칙을 만든다.
- my-vpc에서 방화벽 규칙이 생성되었다.
오후강의
web03만들기
- VM 인스턴스를 새로 만들어준다.
- 이름 : web03
- 리전, 머신구성 동일하게
- 부팅 디스크 : Ubuntu 18.04LTS를 사용해본다.
- 액세스 범위 및 방화벽 설정
- 네트워킹 -> 네트워크 인터페이스 -> 네트워크 인터페이스 수정에서 방금 생성한 my-vpc네트워크로 설정해준다.
- 관리 -> 자동화 시작스크립트
#!/bin/bash
apt update
apt install -y apache2
- 만들기 클릭
- 웹페이지가 안나온당...
- web03에서 수정을눌러 네트워크 태그를 넣어줘야 한다.
- http80을 넣어줬어야 한다.
- It works!
CloudDNS
- 이번에도 새로운 서비스를 사용할 때, API사용 버튼을 눌러 활성화 해야한다.
DNS영역 생성
- DNS영역 만들기로 들어가 준다.
- 영역 이름 : 도메인주소 - .shop = cocudeny
- DNS 이름 : 도메인 주소 = cocudeny.shop
- 이렇게 만들어준다.
- 영역이 생성되었다.
- NS (네임서버)를 클릭해서 아래 데이터(빨간 원) 안에 데이터를 가비아 사이트에들어가서 등록해준다.
- 잘 설정되었다.
레코드 세트 추가
- 이제 A레코드를 추가한다.
- DNS이름은
blog.cocudeny.shop
- IPv4주소를 web01 인스턴스의 IP주소를 넣어준다.
- A레코드가 잘 생성되었다.
- 그러나 잘 나오지 않는다. 역시 DNS설정에는 시간이 필요하다.
7. GCP 데이터베이스 서비스
Cloud SQL
- 검색창에 SQL을 검색해야 들어갈 수 있다.
- 완전 관리형 서비스인 관계형 MySQL, PostgreSQL, SQL Server 데이터 베이스이다. Google에서 복제 및 관리를 하기 때문에 가용성과 성능이 보장된다.
- SQL을 검색해서 들어간 화면이다.
- 인스턴스를 만들어본다.
- MySQL을 사용해 보도록 한다.
- 인스턴스 ID와 패스워드를 정해준다.
- 데이터베이스의 버전은 MySQL 5.7을 사용하도록 한다.
- 리전 : asia-northeast3(서울)
- 영역 가용성 : 단일 영역(서비스 중단시 장애에 대한 조치가 없다.)
- 여러 영역을 선택한다면 고가용성을 지킬 수 있다. 그러나 비용이 증가한다.
- 머신 유형은 경량 (vCPU 1개, 3.75Gb)로 한다.
- 저장용량
- 인스턴스 IP 할당
- 비공개 IP를 선택한다.
- 공개 IP는 외부 유저도 자유롭게 접속하게되어 보안이 떨어진다.
- 연결된 네트워킹
- default 네크워크로 설정해준다. web01 인스턴스가 현재 default에 존재하기 때문에 default로 한다.
- 또, 내부 VPC IP주소 (비공개IP)를 할당받아 쓰기 때문에 같은 VPC에 존재해야 한다.
- 연결 설정을 누르면 Service Networking API를 사용설정해야 한다고 나온다. 사용설정해준다.
- 접속할 수 있는 IP 범위를 할당하는데 자동으로 할당된 IP범위를 사용한다.
- 연결을 만들어 준다.
- 만들기를 눌러준다.
- 생성중이며, 이 생성중이 오래 걸릴 것이다.
web01 Wordpress설치
- 현재 seLinux가 존재한다. SELINUX를 꺼준다.
sudo yum install -y mysql
: mysql을 설치해준다. 다만 이 설치법은 Client의 설치법이다.
- MySQL인스턴스에 DB에 접속할 수 있는 비공개 IP주소가 나왔다.
mysql -h [비공개 IP주소] -u root -p
명령어로 SQL에 접속한다.
CREATE USER 'wpuser'@'%' IDENTIFIED BY 'wppass';
CREATE DATABASE IF NOT EXISTS wordpress;
GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'%';
quit
sudo yum install -y httpd php php-mysql php-gd php-mbstring wget unzip
wget https://ko.wordpress.org/wordpress-4.8.2-ko_KR.zip
cd /var/www/html
sudo unzip /home/r2com/wordpress-4.8.2-ko_KR.zip
sudo mv ./wordpress/* .
sudo chown -R apache:apache /var/www/*
sudo systemctl enable --now httpd
- wordpress에 잘 들어왔다.
- wordpress 설치 진행까지 완료
GCP 정리
- VM정리
- SQL 삭제
- DNS 삭제
- 레코드 삭제 (A 레코드만 삭제할 수 있다.)
- 레코드가 삭제되면, 위 영역삭제 눌러줌
- 인스턴스 템플릿 삭제
- 머신이미지 삭제
- 스냅샷 삭제
- 스토리지 -> 이미지 삭제 (커스텀 이미지)
- VPC중에서 my-vpc는 지우지 않겠다. 나중에 팀플할 떄 사용 가능
- Filestore 삭제 (인스턴스를 삭제한다.)
Alibaba
- 알리바바는 다른 CSP들중에서 잘 안쓰이고, 꺼림찍한 CSP이긴 하다.
- 오히려 NCP나 KT Cloud를 쓰는게 좋을 수도 있지만 커리큘럼에 포함되어 있기 때문에 사용해본다.