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 로 만들어도 되고, 환경변수에 넣어줘도 된다. 단...실행전 정의 되어 있어야 한다.
--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인데.. 다음 과 같은 내용이 기 정의되어 있다.
|
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를 만들었지.. 조금은 알것 같다.