Kubernetes

K2 설치

아르비스 2017. 7. 26. 03:09

K2 (Kraken version 2.0) 은 CoreOS위에 Kubernetes 형태의 Container를 Ansibile과 Terraform을 사용하여, Cloud (AWS, GKE)에 배포하는 툴이다.

단순 배포만 하는게 아니라, kubectl 과 helm을 사용할 수 있도록 cli를 지원해주고, 로그 및 failing task를 관리(모니터링) 해준다.

https://github.com/samsung-cnct/k2


Default는 AWS로 되어 있으며, script처럼 일련의 과정으로 진행되는 사항이라, 사전에 계정 할당 및 EC2 인스턴스, VPC, ELB, ESB, IAM 등과 같은 생성이 필요하다.


우선 github에서  k2 image를 받는다.

docker pull quay.io/samsung_cnct/k2:latest 

실행시, 환경변수로 저장되어야 할 내용들이 좀 있다.

Shell Script 로 만들어도 되고, 환경변수에 넣어줘도 된다. 단...실행전 정의 되어 있어야 한다.

KRAKEN=${HOME}/.kraken          # This is the default output directory for K2
SSH_KEY=${HOME}/.ssh/id_rsa     # This is the default rsa key configured
SSH_PUB=${HOME}/.ssh/id_rsa.pub
AWS_CONFIG=${HOME}/.aws/config  # Use these files when using the aws provider
AWS_CREDENTIALS=${HOME}/.aws/credentials
K2OPTS="-v ${KRAKEN}:${KRAKEN}
        -v ${SSH_KEY}:${SSH_KEY}
        -v ${SSH_PUB}:${SSH_PUB}
        -v ${AWS_CONFIG}:${AWS_CONFIG}
        -v ${AWS_CREDENTIALS}:${AWS_CREDENTIALS}
        -e HOME=${HOME} 

        --rm=true 


위 내용은 수정 안하는게 좋다.. 그냥 쓰자..ㅠㅠ

괜스레 수정했다가... 정말 이상한 곳에서 에러가 났다.

예를 들면..

TASK [kraken.config : Fail if still using old style configuration format] ******

fatal: [localhost]: FAILED! => {"failed": true, "msg": "The conditional check 'kraken_config_user.version is undefined' failed. The error was: error while evaluating conditional (kraken_config_user.version is undefined): 'kraken_config_user' is undefined\n\nThe error appears to have been in '/kraken/ansible/roles/kraken.config/tasks/main.yaml': line 24, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n- name: Fail if still using old style configuration format\n  ^ here\n"}


kraken.config 파일이 오래됬는데.. kraken_config_user라는걸 정의 못해서 문제라는..

ㅎㅎㅎ ㅠㅠ 

하지만 문제는 앞에 경로설정이 잘못되어서 그런거고, 실제로는 자동 생성되는 거라.. 

이런 문제가 발생한다면.. 첨부터 다시해보자.


1.  Initial K2 Directory

docker run $K2OPT quay.io/samsung_cnct/k2:latest ./up.sh --generate 

위 와 같이 실행하고 나면, k2를 실행하기 위한 config file이 아래 경로에 생긴다

${KRAKEN}/config.yaml 

default경로이고 원하면 바꿀수 있다.

ex ) /User/${ID}/.kraken/config.yaml

파일을 오픈해서 배포할 Cluster Name을 넣어준다. 13글자 이하여야 한다.

deployment:

  clusters:

    - name: YOURCLUSTER 

config.yaml을  Cluster   별로 관리 되므로, ${clusterName}.ymal로 변경하는걸 권고한다.

왜냐면 default라서 자꾸 지워진다.


2. AWS credentials

comand를 통해서 aws 계정의 설정값을 넣어줄수도 있다.

docker run $K2OPTS quay.io/samsung_cnct/k2:latest bash -c 'aws configure' 

넣어줄수는 있지만.. 그냥 configuration yaml file에서 넣어주는게 편할 수도 있다.

    authentication:

        accessKey: {accessKey}

        accessSecret: {accessSecret}

        credentialsFile: "$HOME/.aws/credentials"

        credentialsProfile:

      ingressSecurity:

... 


3. Cluster 생성

나만의 Cluster를 생성한다.

 config file에 작성한 Cluster Name으로 생성된다.

docker run $K2OPTS quay.io/samsung_cnct/k2:latest ./up.sh --config $HOME/.kraken/${CLUSTER}.yaml 


3-1) kubectl

cluster가 생성되면, K2를 통해서 kubectl command를 실행할 수 있다.

docker run $K2OPTS quay.io/samsung_cnct/k2:latest kubectl --kubeconfig $HOME/.kraken/${CLUSTER}/admin.kubeconfig get nodes 

3-2) helm

마찬가지로, K2를 통해서 helm command를 실행할 수 있다.

docker run $K2OPTS -e HELM_HOME=$HOME/.kraken/${CLUSTER}/.helm -e KUBECONFIG=$HOME/.kraken/${CLUSTER}/admin.kubeconfig quay.io/samsung_cnct/k2:latest helm list 

3-3) ssh

ssh를 통해서 Node에 접근 가능하게 된다. 물론 K2를 통해서.

ssh master-3 -F ~/.kraken/${CLUSTER}/ssh_config 

"master-3"의 경우, 기 정의된 nodePool인데.. 다음 과 같은 내용이 기 정의되어 있다.


  • etcd-1 through etcd-5
  • etcdEvents-1 through etcdEvents-5
  • master-1 through master-3
  • clusterNodes-1 through clusterNodes-3
  • specialNodes-1 through specialNodes-2

4) Start Up my own Kubernetes cluster

docker run $K2OPTS quay.io/samsung_cnct/k2:latest ./up.sh --config $HOME/.kraken/${CLUSTER}.yaml 

4-1) verifying cluster

docker run $K2OPTS quay.io/samsung_cnct/k2:latest kubectl --kubeconfig ~/.kraken/${CLUSTER}/admin.kubeconfig get nodes 

실제로는 kubectl get nodes와 같은 명령으로, alias를 통해서 미리 정의해도 된다.

5) Changing configuration

cluster Name 혹은 기타 설정값이 변경된 경우

docker run $K2OPTS quay.io/samsung_cnct/k2:latest ./update.sh --config $HOME/.kraken/${CLUSTER}.yaml 

./up.sh 혹은 ./update.sh를 실행시켜 주면된다.

--nodepools or -n 옵션을 통해서 node들에 대한 설정 변경도 가능하다.

--addnodepools 노드 풀 추가

--rmnodepools 노드풀 삭제


6) Destorying a Kubernetes Cluster

다 사용한 cluster는 반드시 아래 명령어를 통해서 cluster를 삭제해야 한다.

docker run $K2OPTS quay.io/samsung_cnct/k2:latest ./up.sh --config $HOME/.kraken/${CLUSTER}.yaml  

이유는 돈나가니까~~

삭제시간은 무지 오래 걸린다. 참고

K2를 위와 같이 실행해 보면, 왜  K2cli를 만들었지.. 조금은 알것 같다.