본문 바로가기

Spinnaker

Spinnaker Halyard Setup

728x90

이 문서의 모든 내용은 Spinnaker Halyard Setup 공식 가이드 문서를 따랐습니다.

이 문서의 작업 순서는 공식 가이드 문서와 다를 수 있습니다.

AWS 관련 작업은 전부 us-west-1에서 진행하였습니다.


1. KeyPair 생성

먼저 인증키로 사용할 키페어를 생성하기 위해 키페어 페이지로 들어간다.

키 페어 생성 버튼을 누르면 다이알로그가 뜨고 키 페어 이름을 입력한 뒤 생성 버튼을 누른다. 생성이 되면 키 페어 파일(*.pem)이 다운받아 지는데 이것은 나중에 인증키로 사용할 것이니 꼭 저장해두자

생성이 성공적으로 완료된다면 목록에 키 페어 이름이 나타난다.



2. EC2 인스턴스 생성

설치를 진행할 EC2 인스턴스를 생성해야 한다. EC2 생성 페이지로 들어가보자

이렇게 다양한 종류들이 있는데 우리는 추후에 Install 쉘 파일로 설치를 할 것이다.

근데 Ubuntu 14.04만 지원을 해서 스크롤을 쭉~~~ 내려서 ubuntu 14.04를 선택한다.

그리고 인스턴스 유형을 t2.xlarge로 선택해주고 검토 및 시작 버튼을 누른다.

메모리를 높게 잡는 이유가 메모리를 적게하면 부족한 경우가 있어서 그렇다.

인스턴스 시작 검토 화면 후에 시작 버튼을 눌러서 인스턴스를 시작한다.

이제 그러면 인증할 키 페어를 선택하라고 하는데 위에서 만든 키 페어 선택하고 밑에 체크박스 체크하고 인스턴스 시작한다.

생성을 하고 인스턴스 화면으로 가면 인스턴스가 잘 생성되고 있을 것이다.

연결 버튼을 누르면 인스턴스에 연결하는 방법들이 나온다.

여기서는 ssh 명령어를 써서 진행하도록 하고 git bash를 사용하여 ssh를 사용할 것이다.

처음 ssh 명령을 써서 접근하려고 하면 Are you sure you want to continue connection (yes/no)? 라고 나오는데 yes라고 입력을 하고 접속하도록 하자.

성공적으로 접속이 되었다면

이렇게 접속이 된다.



3. Halyard 설치

EC2에 접속한 상태에서 Spinnaker Halyard 가이드문서로 가서 ubuntu 14.04 설치하는 InstallHalyard.sh를 가져오자

가이드문서에 이렇게 나와있는데 curl 명령을 복사하여 붙여넣는다.

이렇게 잘 다운이 되고 ls 명령을 통해 확인할 수 있다.

그리고 가이드 문서의 두번째 명령인 sudo bash InstallHalyard.sh 를 친다.

그러면 참 많은게 설치가 된다.

도중에 Would you like to configure halyard to use bash auto-completion? [default=Y]: 라고

이렇게 뜨는데 그냥 엔터 누른다

Where is your bash RC? [default=/home/ubuntu/.bashrc]:

라고 또 물어보는데 단호하게 엔터

그러면 다 설치가 완료되고 hal -v로 설치된 버전을 확인할 수 있다.



4. Cloud Frovider 설정

이제 AWS에서 필요한 작업을 해야된다.


VPC 생성

AWS VPC로 들어간다.



여기서 VPC 마법사 시작을 눌러서 들어간다.

단일 퍼블릭 서브넷 VPC를 선택하고

가이드문서대로 VPC 이름에 defaultvpc, 서브넷 이름에 defaultvpc.internal.us-west-1를 적고 VPC 만들기 버튼을 누른다.

약간의 로딩 후 VPC 생성했다고 뜨면 성공


- IAM EC2 Role 생성

AWS IAM의 Roles로 들어간다.

Create role 버튼을 눌러 새로운 규칙을 생성하자

EC2 -> EC2 를 선택하고 Next를 누른다.

그러면 원래 권한 설정을 해주는데 그냥 아무것도 하지 말고 넘어간다.

이름을 BaseIAMRole 로 입력하고 Create role 버튼 눌러서 생성한다.


- KeyPair 생성

우린 이미 키 페어를 만들었다.


- SpinnakerAssumeRolePolicy  생성

AWS IAM의 Policies로 들어간다.


그 다음 Create Policy를 눌러 새로운 Policies를 생성하자

이렇게 3가지 타입이 나오는데 Create Your Own Policy를 Select 한다.

Policy Name에 SpinnakerAssumeRolePolicy 입력하고 Policy Document에 

{
    "Version": "2012-10-17",
    "Statement": [{
        "Action": "sts:AssumeRole",
        "Resource": [
            "arn:aws:iam::${MANAGING_ACCOUNT_ID}:role/spinnakerManaged",
            "arn:aws:iam::${MANAGED_ACCOUNT_ID}:role/spinnakerManaged"
        ],
        "Effect": "Allow"
    }]
}

이거를 입력해준다.

여기서 ACCOUNT_ID는 고유값으로 IAM Dashboard에 IAM users sign-in link에 앞에 숫자 12자리이다.

이렇게 입력을 하고 우측 하단 Create Policy 클릭~~

성공적으로 만들어졌다면 이렇게 뜬다.


이제 두가지의 길을 선택할 수 있는데 

Spinnaker가 EC2 안에서 돌아가고 있다면 Option1을 선택하고

Spinnaker가 EC2 밖에서 돌아가고 있다면 Option2를 선택한다.


- Option 1: Add an IAM role to the Spinnaker EC2 instance

Spinnaker가 EC2 안에서 동작한다면 이 옵션을 실행하면 된다.

IAM -> Roles로 가보자

새로운 Role을 만들기 위해 Create role 클릭 후 Type에서 EC2 -> EC2 선택하고 Next를 누른다.

그리고 권한을 PowerUserAccess, SpinnakerAssumeRolePolicy 두가지를 선택한다.

Next를 하고 Role name에 SpinnakerAuthRole 입력하고 Create role를 한다.


그리고 EC2 인스턴스로 가서 현재 사용중인 인스턴스를 선택한다.

여기서 이렇게 IAM 역할 연결/바꾸기 를 눌러서 방금 막 만들어준 SpinnakerAuthRole로 IAM 역할을 선택하고 적용한다.

성공했다고 나오면 성공한거다.


- Option 2: Add a user and access key / secret pair

Spinnaker가 EC2 밖에서 동작한다면 이 옵션을 실행하면 된다.

AWS IAM -> Users로 이동한다.

여기서 Add user 클릭해서 User 하나를 생성하자

User name은 가이드대로 Spinnaker로 입력하고 Access Type에 Programmatic access를 체크하고 Next로 넘어간다.

3번재 Attach existing policies directly 선택 후 PowerUserAccess SpinnakerAssumeRolePolicy 두개를 선택하고 Next를 누른다.

그러면 Review 화면이 나오고 Create user 버튼을 눌러 User 생성을 마무리 한다.

생성되면 이렇게 뜨는데 여기서 꼭 CSV 파일을 다운해놓자

나중에 Secret access Key가 필요한데 지금밖에 볼 기회가 없다

생성되었으면 EC2 터미널로 이동한다.

이렇게 config 명령으로 access key를 지정해준다.

그러면 Secret Key를 물어보는데 복사해서 붙여넣어준다

이렇게 Success가 뜨면 성공


Configuring the Managed Account

AWS IAM -> Policies 로 이동한다.

Create policy 버튼을 클릭한다.

이번에는 여기서 두번째인 Policy Generator를 Select 한다.

Effect는 Allow,
AWS Service는 AWS Identity and Access Management,

Actions는 PassRole,

Amazon Resource Name은 *로 하고 Add Statement를 한 뒤에 Next Step으로 넘어간다.

Policy Name에 SpinnakerPassRole 이라고 적어주고

Policy Document에는

{
    "Version": "2012-10-17",
    "Statement": [{
        "Effect": "Allow",
        "Action": [ "ec2:*" ],
        "Resource": "*"
    },
    {
        "Effect": "Allow",
        "Action": "iam:PassRole",
        "Resource": "arn:aws:iam::${MANAGING_ACCOUNT_ID}:role/BaseIAMRole"
    }]
}

이렇게 적는다.

여기서 MANAGING_ACCOUNT_ID는 숫자 12자리 그 id이다.

생성을 완료한 뒤에 Roles로 이동한다.

새로운 Role을 생성하기 위해 Create role 클릭

Type은 EC2 -> EC2로 해주고 Permission은 PowerUserAccess SpinnakerPassRole 두개로 해준다.

Next로 넘어가서 Role name에 spinnakerManaged 입력 후 생성한다.

그리고 방금 생성한 spinnakerManaged에 들어가서 Trust relationships 탭의 Edit trust relationship을 클릭한다.

이렇게 AWS 에 아까 만든 SpinnakerAuthRole 의 ARN을 붙여넣고 Update Trust Policy를 클릭한다.


이제 halyard에서 작업을 한다.

이렇게 hal config provider aws account add $AWS_ACCOUNT_NAME --account-id ${ACCOUNT_ID} --assume-role role/spinnakerManaged 명령으로 account-id와 role을 적용한 다음

hal config provider aws enable을 한번 해준다



5. Storage

이제 저장소를 추가해야한다.

hal config storage s3 edit --access-key-id $YOUR_ACCESS_KEY_ID --secret-access-key --region $REGION

이 형식으로 추가를 해주면 된다.

이렇게 명령어를 치면 성공한걸 확인할 수 있고 실제로 S3로 가보면 생성이 된 것을 알 수 있다.

그리고 hal config storage edit --type s3 이 명령을 한번 더 쳐서 storage type을 s3로 지정해준다.



6. Deploy

먼저 hal version list로 버전 확인을 해보면

이렇게 You are on version "" 으로 버전이 비어있다.

hal config version edit --version 1.0.0 명령으로 version을 수정해주자

성공적으로 버전이 수정되었으면 다시 한번 hal version list로 확인해보자

You are on version "1.0.0" 으로 바뀐 것을 확인할 수 있다.

그러면 이제 deploy를 해보자

hal deploy apply 명령을 사용하면 된다.

만약 /home/ubuntu/.hal/default/install.sh must be executed with root permissions; 과 같은 오류가 난다면 permission 오류이니 sudo를 앞에 붙여주자

명령어를 실행하게 되면 무언가 막 나온다. 기다리자

게속 기다리다보면 나중에

마지막 줄에 보면 spinnaker start/running 이라고 뜨면서 spinnaker가 실행중임을 알 수 있다.

http://localhost:9000 으로 들어가면 확인이 가능하다.

만약에

이렇게 뜬다하면 exit로 인스턴스에서 나왔다가

ssh -i "HalyardKey.pem" -L 9000:localhost:9000 ubuntu@ec2-54-215-134-247.us-west-1.compute.amazonaws.com

이렇게 -L 옵션으로 9000번 포트를 연결해주며 다시 접속한다.

그리고 다시 들어가보면

이렇게 나온다


잘 작동이 되나 확인하는 방법은 왼쪽 상단에 Actions를 눌러서 Create Application을 눌러보는 것이다.

정상적으로 작동이 된다면


이렇게 나오는게 맞지만 만약에 


위처럼 계속 로딩만 된다 하면 문제가 있는 것이다

이때 F12키를 눌러 콘솔을 보면

이러한 오류가 날 가능성이 크다 내용을 보면 credentials 에서 나는 오류인듯 하다

여태까지 설정밖에 한게 없는데 오류가 나는걸 보면 설정오류다

hal config 명령으로 설정한 현황을 보자

아까 account id를 설정할 때에 name을 my-aws-account로 했어서 name엔 my-aws-account가 들어가 있다.

이번엔 /home/spinnaker/.aws/credentials 파일이 있으니 vi 를 써서 들어가보자

여기엔 default로 설정이 되어있다.

이 두개가 달라서 halyard에서는 my-aws-account로 된 계정을 찾으려 하고 파일에는 default로 되어있어서 나는 오류인거 같다.

credentials 파일에서 [dafault]를 hal config에 나오는 이름으로 바꿔주면 된다.

그리고 

sudo restart spinnaker

를 하고 http://localhost:9000 으로 들어가서 Actions -> Create Application을 누르면 이렇게 잘 나온다


이제 설치가 끝났으니 Bake & Deploy Test부터 진행해보면 된다.

Bake & Deploy 공식 가이드 문서

Bake & Deploy 블로그 포스팅 문서



반응형

'Spinnaker' 카테고리의 다른 글

Spinnaker Hello Deployment  (2) 2017.10.24
Spinnaker Bake and Deploy Pipeline  (0) 2017.10.19
Spinnaker Quickstart 설치  (0) 2017.10.19
Spinnaker란?  (0) 2017.10.19