NHN Cloud의 Kubernetes 환경을 구성과 활용하기 위해 기본 구성부터 응용까지 쉽게 따라갈 수 있게 정리하고자 한다.
NCR 서비스 활성화
NCR(NHN Container Registry; 컨테이너 이미지 관리) 를 활용하기 위하여 서비스를 활성화 한다.
서비스 활성화하기 위해서 최 상단에 서비스 선택 탭을 클릭하면 Container 그룹이 보이고
여기서 2번째 NCR을 클릭한다.
클릭을 통해 활성화 하면 왼쪽 메뉴에 Container하위 메뉴에 NCR이 추가 된다.
보안키 생성
NCR 서비스를 활용을 위해 보안키 생성이 필요하다.
보안키 생성을 위해서
우측 상단 계정(email) 부분을 클릭하여 메뉴를 펼친다.
메뉴에서 API보안 설정을 클릭한다.
API 보안 설정 화면에 진입하면 User Access Key ID 생성을 클릭 > User Access Key ID와 Secret Access Key 생성 클릭 > 확인 을 통하여 보안키를 생성 한다.
생성 완료 창에 나오는 키는 Secret Access Key로 패스워드와 같은 보안키 이다.
이를 별도로 메모 해두길 바란다.
Secret Access Key(비밀키) : WfAPOfckkxNebzAf User Access Key ID : ARpKqDnCahZxzicOUAya
생성 후 API 보안 설정 창으로 돌아오면 새로운 User Access Key ID 가 생성 되어 있다.
User Access Key ID도 메모 해두어야 한다.
이렇게 메모 된 User Access Key ID와 Secret Access Key는 NCR 접속시 ID와 Passwd로 활용 된다.
Kubernetes 클러스터 구성
해당 프로젝트로 이동 후,
왼쪽 메뉴에서 Container > NHN Kubernetes Service(NKS)를 클릭한다.
NKS 화면으로 변경 되면 리스트 위에 클러스터 생성을 클릭한다.
생성 창이 열리면 다음과 같이 설정한다.
- 클러스터 이름 : kube-cluster
- Kubernetes 버전 : v1.25.4
- 기본 노드그룹 > 공용 이미지 : Ubuntu 20.40 LTS
- 가용성 영역 : 임의의 가용성 영역
- 인스턴스 타입 : m2.c1m2
- 노드수 : 3
- 키 페어 : 기존 키페어나 새로 생성(.pem)으로 선택한다.
- 블록 스토리지 타입 : HDD
- 블록 스토리지크기(GB) : 60
위와 같이 설정하고 클러스터 생성을 누르면 클러스터가 생성된다.
생성 이후 NKS 리스트에서 생성한 클러스터의 작업상태가 초록색으로 바뀌면 생성 완료 상태가 된다.
Instance 생성 (kube-mgmt)
Kubernetes 및 Image 관리를 위한 Instance 를 생성한다.
왼쪽 메뉴 창에서 Compute > Instance 클릭, 인스턴스 생성 을 클릭하여 인스턴스를 생성 한다.
- 이미지 > 공용 이미지 : Ubuntu 20.40 LTS
- 인스턴스 이름 : kube-mgmt
- Kubernetes 버전 : v1.25.4
- 가용성 영역 : 임의의 가용성 영역
- 인스턴스 타입 : t2.c1m1
- 인스턴스수: 1
- 키 페어 : 기존 키페어나 새로 생성(.pem)으로 선택한다.
- 블록 스토리지 타입 : HDD
- 블록 스토리지크기(GB) : 20 (기본)
- 플로팅 IP : 사용
- 보안그룹 : 원격접속 정보 오픈
NCR(NHN Container Registry) 설정
NCR은 클러스터 구성을 해서 여러 Instance를 제어하기 위해서 공통의 Conatiner 이미지를 관리 하여야 한다. 이 역할을 수행하는 모듈이 NCR이다. 이를 활용하기 위해서는 우선 활성화를 진행 하여야 한다.
NCR 활성화 : NCR서비스 활성화를 위해 서비스 설정에서 NCR를 선택하여 활성화 한다.
NCR활성화는 왼쪽 메뉴 중 Container > NCR 메뉴가 추가 되어있다.
NCR 레지스트리 생성
왼쪽 메뉴 > Conatiner > NCR 클릭하여 NCR>관리 화면으로 이동한다.
파란 바탕의 레지스트리 생성을 클릭한다.
- 이름 : kube-ncr
- 용도 : 일반
NCR이 생성 되면, Public URI값을 메모장에 추가함.
Secret Access Key(비밀키) : WfAPOfckkxNebzAf User Access Key ID : ARpKqDnCahZxzicOUAya NCR Public URI : d30be173-kr1-registry.container.nhncloud.com/kube-ncr
클라우드 클러스터 운영
kube-mgmt 접속
Computer > Instance 의 인스턴스 목록 중에 kube-mgmt 인스턴스의 접속정보를 확인 한다.
접속 정보를 활용하여 terminal 창에서 접속한다.
docker 설치
docker 공식 홈페이지 설치 부분을 참조 하여 설치한다.
# Add Docker's official GPG key: sudo apt-get update sudo apt-get install ca-certificates curl gnupg sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod a+r /etc/apt/keyrings/docker.gpg # Add the repository to Apt sources: echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
위 shell script는 공식 홈페이지에 게시 된 ubuntu 환경 docker 설치 스크립트이다. 이를 복사하여 설치한다.
설치가 완료 되면 docker version 명령을 실행하여 실행을 확인한다.
kubectl 설치
kubectl은 kubenetes를 운영하기 위한 기본 명령어이다.
이를 설치하여 다양한 kubenetes 에 대한 제어를 가능하게 한다.
설치하기 위해서 Kubenetes 공식 사이트를 참조할 수 있다.
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl kubectl version --client --output=yaml
위 코드를 terminal 창에 복사하여 설치 할 수 있다. ( 사이트 업데이트 주의)
설치 성공을 확인 하기 위해 kubectl version을 활용한다.
NKS 접근을 위한 설정
현재 kube-mgmt에서 kubectl get nodes하면 어떤 정보 연결 되어 있지 않음을 확인 할 수 있다.
연결 할 NKS를 kube-mgmt에 설정하기 위해서 NKS 리스트 중에 kubeconfig 파일을 다운로드 할 수 있다.
kubeconfig.yml 파일을 클러스터에 접속하기 위한 접속 정보가 기입되어 있다.
apiVersion: v1 clusters: - cluster: certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUMzakNDQWNhZ0F3SUJBZ0lRSjdKUTV6M0xTQ3FINkpCaDVuT3IzakFOQmdrcWhraUc5dzBCQVFzRkFEQVgKTVJVd0V3WURWUVFEREF4cmRXSmxMV05zZFhOMFpYSXdIaGNOTWpNeE1qRTNNVEV3TkRNeldoY05Namd4TWpFMgpNVEV3TkRNeldqQVhNUlV3RXdZRFZRUUREQXhyZFdKbExXTnNkWE4wWlhJd2dnRWlNQTBHQ1NxR1NJYjNEUUVCCkFRVUFBNElCRHdBd2dnRUtBb0lCQVFDK3ZseXBOT3ErYzFSd041cUoxM2U5TUtMYnRkWVdZWS8yYXdsdHF1MjIKMDFtMkJ4SmhkcHNGbVlTZ3pkMzhrTXhJQzhiOEZVNHYxS3RlV09FL2tvdHk1am96MXJhMDNGYUZPakFhUi80dQo1NTNWRlBlZTdhYnRadGF0V2xNa1U4RTZlc0VXL2ttTFIzd0RIT05sMVFKVDREd1NsaHFMcXBBZWxsb0txaFJuCnpMNzlVd083Y0ZpTnFNN3VOTUQxTHRJa0I1cFY0Q3g4RTVsZkZ3dzZRK2Myd2ZKNnZFVmd5N0hXNlZDeFl6V3cKMGdtc1RhbEFHV1RRdFJCZXBtMWlUeEJYbEl2Z2ZSNWdmVVF6UUQrVGpvYXJRODZETWFFUzhYK0hLWndxR01oYgovSHRhWVFVRUs4bEs5UDdTMXAwWDlVWnJXUUJGV09SY0dlOEhPdXVlUFhhYkFnTUJBQUdqSmpBa01CSUdBMVVkCkV3RUIvd1FJTUFZQkFmOENBUUF3RGdZRFZSMFBBUUgvQkFRREFnSUVNQTBHQ1NxR1NJYjNEUUVCQ3dVQUE0SUIKQVFBVHIralBYVjR2WVVNVG1Fa1MwYUZzSW5VME1sbHhvRlF4QlNJVEF5bnlhUU5Xa2prdUV4TjhyM3p0Q2lKawpQQ1R6L3RSbTIwQ1BNcFRyNWFLY09QZ3BPYjNXSXZJMEE5VkhyZU4wNU9WUjYvcEVwenYxOGtLTWNud3pkQUlZCkxvemE0Q3RLSS8xdEdWOElJV2dQRFVNTTFkNVkxakFnRUZzVFlxaUQyWTJzSlc2VnQwR3VYSGlaVFRqVWtzMW0KN2xUbXV4YXBRR3lpOXROaUJXSFd2MGovbjYyQnVDaHBJeFRqNXlMMFppS2RYbUJ6TjBDTHJlRWdKZmdQVDNPNwpXbnRPNnJzNkJLdHI5M1JCalYxMnFlL3JsMGwvb1VjUEtCT0ZRM1B3bEttOTJvWWtmS1NTb3F0RTM2eThyc2hsCjc5TVlZSG0vMFpKRG8wakV2R3ZEaUNGYgotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0t server: https://13070ad7-nks-kr1.container.nhncloud.com:6443 name: "toast-kube-cluster" contexts: - context: cluster: "toast-kube-cluster" user: admin name: default current-context: default kind: Config preferences: {} users: - name: admin user: client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUN5RENDQWJDZ0F3SUJBZ0lRSHhiMXN0U25Ub3FsYlhyeThMOHFKekFOQmdrcWhraUc5dzBCQVFzRkFEQVgKTVJVd0V3WURWUVFEREF4cmRXSmxMV05zZFhOMFpYSXdIaGNOTWpNeE1qRTNNVE0wTVRReVdoY05Namd4TWpFMgpNVE0wTVRReVdqQXBNUTR3REFZRFZRUUREQVZoWkcxcGJqRVhNQlVHQTFVRUNnd09jM2x6ZEdWdE9tMWhjM1JsCmNuTXdnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFDNERPNE9wVnpsdFN1MElsRk4KZmorT3BWQlc0VmxzQ3BXUFJTelFLRWV1ckFQdTZhSkZQMU1uU1l1dzVFaUVzbUhuVURVN2I4QnVFYklaamRpTAp5QS9mNFJNd1FJUVg1NENzOU9jdFU5NWlrWGhjN3p4VnJabHJQZENURzVqNGU1TlFCWGJ6UnNrQ2JLb1RabndBCmlFcE9CVjd6YWhTeFdBdlpCUDhwN3VMSGNZWHI5dzhIcVkvWlBYdWpUS01hN2g4WTcyOXJSYzU3QU4rVGdhRDAKV0k1M1pkWlFXWEpzdzE5Ym01WFRLVGZsSFFWUzFuVGNzL0IyazBkWFpTMitiMHJaMFhZZXlXTWhQSkkwZWxMVgplZ0dpSkYxKzAzNlFZTGpFUVpKdDFVdUI0SlBIalBMaDFCbWVXdEN3QW9qU1VxWnYvSUNqbFlZa0cvdDI5MUNpClNIL0RBZ01CQUFFd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFBeTNGd295c1d2QXdlNDl6K05wZGJGMWJYVk0KU2liRi8rdmRtM0Vqdk5PcDJPeWt5Y1dXVEFBRHpIN25LUEU2VkdkZkxSRTdyeERUQ1owZ2twOGJTQWJ2ZUQybgpzY01xdi9vZGdGcE1YakRJVFVIUEhWSTBRNUcrTE9oS1Rib0VBVjMvSWI5L1EwZW9Qb0NnKzZjSW1zYnFUbUw0CkVjeWl2UXh1WW9XZ2QwdUUrNUxYOFFJZ0RPbklKOHloNStscVd5Y3ZNeFIyajJCU1FVTzlvRjNMaTVIeTExOHcKZlJVdi9zL3NNTzUvd0RzcDUwS1NNdldTUjlPRTI4QkpxZTUzeHdieHVFR0t2U2doU2dmWHZFK0w1aVdNVGdxWQowNXRyUmdxSDhWcys5TDhCTnRWTHhZS1RQcmlrRnk3UFVCTE9NelNkS05rZllxeCtNZ2Z5WC95Nm0vST0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQ== client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcFFJQkFBS0NBUUVBdUF6dURxVmM1YlVydENKUlRYNC9qcVZRVnVGWmJBcVZqMFVzMENoSHJxd0Q3dW1pClJUOVRKMG1Mc09SSWhMSmg1MUExTzIvQWJoR3lHWTNZaThnUDMrRVRNRUNFRitlQXJQVG5MVlBlWXBGNFhPODgKVmEyWmF6M1FreHVZK0h1VFVBVjI4MGJKQW15cUUyWjhBSWhLVGdWZTgyb1VzVmdMMlFUL0tlN2l4M0dGNi9jUApCNm1QMlQxN28weWpHdTRmR085dmEwWE9ld0RmazRHZzlGaU9kMlhXVUZseWJNTmZXNXVWMHlrMzVSMEZVdFowCjNMUHdkcE5IVjJVdHZtOUsyZEYySHNsaklUeVNOSHBTMVhvQm9pUmRmdE4ra0dDNHhFR1NiZFZMZ2VDVHg0enkKNGRRWm5sclFzQUtJMGxLbWIveUFvNVdHSkJ2N2R2ZFFva2gvd3dJREFRQUJBb0lCQVFDZjZhd1ZVWnhMZ1lROQplT3ZITndBbUFvQ3hYQThFRHBZdjYxeXFaN1VRa1NqQnRvRmxSVVlNaHB3Mno4SXFlWXNUSGQrQ2l2QlpNa3JhClpTSlhJVGFad01lWlR4VDJhQkNuTmdwK21iWkpVamVRRjlVR1pGVStsbkRZd0V2QzZpdnVoVEQ2NHUvWGlXNmsKZUpFWkxWSFNSRnhoaGpRQWVvMmd1L1N3REgxQjUyY1ZNZzN5dWIvdVFGYW0xamVwcmx6VGd3Y3FFbzl2VEx6SgpCN29kc09ZcjArNkZsWjQrcko3TGpBVzV5SlFOY1pjU3UzS3VzdWtBcng3NDUvYzdJZmNZZGVWNXpRWUhWZklwCjBJQXdxaSsyKzFJN0VSZjIyZlFsSU5zNjhOTEJwNnh2eE9POFc3V255M1kvZUlmeGNKVkJ1bDF1Qk1ja3RkWnYKalBvelRwQXhBb0dCQVBUS0V5ZUxTOFFxdE5GMzNreUw2S0plY0pEcllIVEpXYnJHVkx6dW5QN2FhVGVJVUl5QwpqZVZlQml0Vk9WSy8ycTFON2tuWkN3RzNYQzliZ09SN2s3R3NmRE41dlB1Rnh3UmVhSko3eVlLTVZGOTU4NDY0CnhBbi9ackFiZjVsQ0FhZDZXN0ZldWF6b0RpaytzanlIajdoeWc5MTRlblFHK2swbUgwTVMwYU1QQW9HQkFNQjYKdjhudmxnL28rbUx4SGRXQytQcEZGWGRzZ3VCamlzUVAwK3d3ZTdHNVgzSUYrakJJZTJOK0tQSE1haG5La2trdQplMVBJRlZZMHg2Yzg4MmFEMFJoYU9VTEJCT04wdmRBV1lpQ1hYSFdNZ1lqNU85RkZZY1l5TzcrLzg0QVZTeW5nCjZOYjVWaG9VMis5anB1UEtyc0lpL0dVcEdZVGJwQ3ZDcTl3L3lVZ05Bb0dCQUs2Y0ppV2kreHlteWV4UThNVHgKVjdQYVliazk3TVBoakp2cU5TKy9sVVZGVHFCS0lBcmFaWlVqQ0l1SWN5ZFBxeERMOGhuRE5GSzVGSXpEWEtHZQpkSy9jTll3U1huZWI2V1o0WVdkNzNUVytHOEV2SUVqQ0N6U0dkaDFRd0NmMktXL3BtOVpkbDF4Nit2NzR0Zkx2ClQ5bGw5aUhZZXFDaENaSldpeDR4SWxDSkFvR0JBSWQvNGpRT2JkMlZiVzdwdnM3bi9NNXlnOEltcVp1OWQ1cSsKYWJvRUI0LzlwNnRsZWRNenMyay9EeVBwZTJmY3EwN0pZaGlBNmtSZHM0K1A0T2x5TW1pcVcxVWEvSTREU1B5TQpSVmdjTmdLcWZ5WW1EbTRzSWNDYzdHTDRoanJNd3JVZ2w4bCtqWmFleUpXbDJYN1MyR1BpclR1cHkwVTBPa1owCkxQaElEektoQW9HQVhQMjl1ZDBmWVkyeFRrTUJMYys1RWRyMVo1amp1NlRocG5IMU1iNUlWbEZvb2tyYTBaSEcKK09WbVduTWdCeWJpSWlUbURjMzB2OU5QKzNubERMMk9zY0tlbEhic0JFSXJSRTJ0VTZBUERESjZJb2trK2l1Nwpub3BTOWdDNEwwWHFzTHB1WXNWUnAzbHJVR0F0YUUxKzh4WUtOVU1IamRyM3dvSCt6K0ZDUVNNPQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo=이
이 파일을 다운로드 받아 nodepad와 같은 편집기로 열어 Terminal 창의 에디터에 copy&pasts 할 수 있다.
복사하기 위해 먼저 root계정 홈 디렉토리에서 .kube 디렉토리 생성하고 .kube 디렉토리 이동 한 뒤 vi config로 파일 편집한다.
ls -al 명령어로 config 파일에 붙여넣기가 성공한 것을 알 수 있다.
이제 kubectl get nodes 명령어를 통해 클러스터 정보에 연결 된 것을 확인 할 수 있다.
위와 같이 클러스터에 연결 된 3개의 node를 확인 할 수 있다.
같은 정보를 Compute > Instance 의 인스턴스 리스트에서도 확인 할 수 있다.
NCR 설정
NCR은 클러스터의 인스턴스들을 동시에 업그레이드를 하기 위해 Container Image를 저장하고 버전관리를 해주는 모듈이다. 이를 활용하여 Container 이미지를 생성하고 업그레이드 하는 방법을 알아보자.
우선 kube-mgmt 인스턴스의 docker가 NCR에 접근 가능하여야 하므로 접근권한 부여가 필요하다.
Docker NCR 접근권한 부여
NCR에 접근하기 위해서는 아까 메모 해 둔 접속 정보를 활용해야 할 차례이다. 먼저 메모해둔 접속정보를 확인한다.
User Access Key ID : ARpKqDnCahZxzicOUAya Secret Access Key(비밀키) : WfAPOfckkxNebzAf NCR Public URI : d30be173-kr1-registry.container.nhncloud.com/kube-ncr
docker 접근 명령어를 확인하기 위해서는 NCR 리스트 중 특정 NCR를 선택한다.
선택 되면 아래 상세 기본정보가 나오는데 여기서 Docker 접근 명령어를 확인 한다.
Docker Login
위 이미지에 있는 접근 명령어를 Terminal 실행 하면 Username, Password 를 물어 본다
이는 위 메모해두었던 USer Access Key , Secret Access Key를 복사한다.
Docker Image 준비
NCR에 Docker Image를 업데이트하는 테스트를 하기 위해
잘 알려진 nginx Image를 가져와 Image를 업데이트하는 테스트를 진행 하고자 한다.
docker pull nginx docker images #이미지 확인 docker run -d --name=container_nginx --network=host nginx #nginx 실행 docker ps -a curl localhost
curl로 웹서버가 잘 작동하는 것을 확인 할 수 있으며, kube-mgmt 인스턴스의 플로팅IP를 참고 하여 브라우저에서도 실행 되는 것을 확인 할 수 있다.
Docker Image 변경
docker cp container_nginx:/usr/share/nginx/html/index.html ./index.html vi index.html # nginx를 container_nginx 1.0으로 변 docker cp ./index.html container_nginx:/usr/share/nginx/html/index.html
Conatiner 내 index.html 파일을 꺼내와
index.html 파일 내부의 타이틀들을 nginx에서 container_nginx 1.0으로 변경 하였다.
이를 S/W 업데이트 행위라고 생각하자.
index.html 파일을 cp 명령어를 써서 다시 container 안으로 넣는다.
자 이제 브라우저로 확인해보자.
Docker Image 등록
Docker Image를 NCR에 등록하기 위해서는 우선 docker 에서 실행 되고 있는 container를 이미지화 해야 한다.
이를 위한 실행 명령어는 docker commit 이 준비 되어 있다.
docker commit container_nginx ncr-nginx:latest docker image
위 명령어를 실행하면 실행 중인 container 이미지가 docker(local) image에 ncr-nginx 최종버전으로 저장 된다.
docker(local)에 저장 된 이미지를 docker images로 확인 가능하다.
NCR에 Image 등록
이제 local docker에 등록되어 있는 이미지를 NCR로 등록 하기 위해서는 이미지명에 대한 체계에 따라야 한다. 이미지명 체계는 (NCR URI)/(이미지명):(버전)과 같다. NCR URI를 확인하기 위해 메모해 두었던 정보를 소환한다.
User Access Key ID : ARpKqDnCahZxzicOUAya Secret Access Key(비밀키) : WfAPOfckkxNebzAf NCR Public URI : d30be173-kr1-registry.container.nhncloud.com/kube-ncr
위 메모해 둔 NCR URI정보를 활용하여 다음 명령어를 통하여 NCR에 이미지 등록한다.
docker tag ncr_nginx:latest d30be173-kr1-registry.container.nhncloud.com/kube-ncr/ncr_nginx:1.0 # docker tag 정보를 등록한다. docker push d30be173-kr1-registry.container.nhncloud.com/kube-ncr/container_nginx:1.0
성공적으로 NCR에 Image를 등록하였으면 이를 확인하기 위하여 NCR 목록 중 해당 NCR의 이미지보기>> 아티팩트보기 를 클릭한다.
레지스트리 > kube-ncr > kube-ncr / ncr_nginx 에서 확인 할 수 있다.
Image 업데이트
container 를 업데이트 한다는 것은 개발 등 추가/보완 작업으로 코드가 변경 되는 상황이라 생각할 수 있다.
위에서 했던 작업 처럼 container 의 파일을 복사하여 수정(타이틀 container_nginx 2.0)하고 다시 container 안에 복사 하여 업데이트 할 수 있다.
웹브라우저를 통하여 2.0으로 업데이트 된 container 를 확인 할 수 있습니다.
업데이트 된 container 이미지를 commit하여 다시 NCR Image 등록하여 업그레이드 한다.
docker commit container_nginx d30be173-kr1-registry.container.nhncloud.com/kube-ncr/ncr_nginx:2.0 # docker에 commit 하여 local image를 등록한다. docker push d30be173-kr1-registry.container.nhncloud.com/kube-ncr/ncr_nginx:2.0
위와 같은 명령어를 실행하면 NCR에 성공적으로 업로드 된다.
위 이미지를 보면 push 명령어를 실행하면 index.html 변경에 따른 추가부분만 업로드 하는 것을 확인 할 수 있다.
NHN Cloud 의 NCR 목록에서도 추가 된 이미지를 확인 할 수 있다.
이제 Container Image를 변경하고 업로드 하는 방법을 알아 보았다.
이렇게 등록 된 Container Image를 활용하여 Cluster로 배포하는 방법을 알아보자.
Kubernetes 배포
NHN Cloud의 Kubernetes 환경을 구성과 활용하기 위해 가장 중요한 것은 배포이다.
배포 작업 단위는 POD이다. kubectl get nodes 명령을 이용해 POD 클러스터 구성을 확인한다.
이제 kubectl 에서 NCR에 접근가능 하게 설정이 필요하다.
kubectl의 NCR 접근 권한 설정
kubectl이 NCR 접근을 하기 위해서는 메모 해 둔 Key정보를 활용할 수 있느나, 아래와 같이 기존 docker에 등록 된 정보를 바로 활용할 수 있다.
kubectl create secret generic regcred --from-file=.dockerconfigjson=/root/.docker/config.json --type=kubernetes.io/dockerconfigjson #접근권한 등록 kubectl get secrets regcred #접근권한 등록확인 kubectl describe secrets regcred #적근권한 상세정보 확
배포 스크립트 작성
접근권한이 설정 완료 되면 이 권한을 통하여 deploy 할 수 있다. deploy하기 위한 deployment를 작성하는 방법은 다음과 같다.
아래 yaml파일을 ncr_nginx-deployment.yaml 파일로 저장한다.
apiVersion: apps/v1 kind: Deployment metadata: name: ncr-nginx-deployment labels: app: ncr_nginx spec: replicas: 3 selector: matchLabels: app: ncr_nginx template: metadata: labels: app: ncr_nginx spec: containers: - name: ncr-webserver image: d30be173-kr1-registry.container.nhncloud.com/kube-ncr/ncr_nginx:1.0 #NCRURL ports: - containerPort: 80 imagePullSecrets: - name: regcred #NCR Secret
이제 배포 스크립트를 kubectl에 적용시키는 방법을 알아보자.
kubectl 배포 적용
kubectl 적용은 간단하다.
kubectl apply -f ncr_nginx-deplyment.yaml 명령을 terminal 창에 실행한다.
배포가 성공적인지 확인하기 위해 pods중 하나의 서버에 접속하여 curl localhost를 실행하여 html code를 확인하면
1.0 버전이 성공적으로 업데이트 되어 있음을 확인 할 수 있다.
LoadBalancer 설정
kubernetes cluster 에 구성되어 있는 3개의 node를 트래픽을 적절하게 분산할 수 있도록 LoadBalancer기능을 간단하게 설정 할 수 있다. 다음과 같은 명령어를 통하여 설정 할 수 있다.
kubectl expose deployment ncr-nginx-deployment --name=ncr-nginx-lb --port=80 --target-port=80 --type=LoadBalancer kubectl get services -o wide
root@kube-mgmt:~/.kube# kubectl get services -o wide NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR kubernetes ClusterIP 10.254.0.1 <none> 443/TCP 5h37m <none> ncr-nginx-lb LoadBalancer 10.254.29.106 133.186.132.131 80:31695/TCP 14m app=ncr_nginx root@kube-mgmt:~/.kube#
위 실행 결과로 LoadBalancer 가 잘 동작하고 있는 것을 확인 할 수 있다. 위 외부 IP정보는 LoadBalancer 설정으로 자동 생성 되는 플로팅 IP로 이 IP를 통하여 LoadBalancer 적용된 Site에 접속 할 수 있다.
Cluster환경에서 Image 업데이트 및 배포
Kubenetes pod에 새로운 Image를 업데이트 할 수 있다. pod단위 업데이트를 하기 위해서 다음 명령어를 실행한다.
root@kube-mgmt:~/.kube# kubectl set image deployment/ncr-nginx-deployment ncr-webserver=d30be173-kr1-registry.container.nhncloud.com/kube-ncr/ncr_nginx:2.0 deployment.apps/ncr-nginx-deployment image updated root@kube-mgmt:~/.kube# kubectl get pods NAME READY STATUS RESTARTS AGE ncr-nginx-deployment-57494986cc-khl8d 1/1 Running 0 66s ncr-nginx-deployment-57494986cc-ncdv8 1/1 Running 0 56s ncr-nginx-deployment-57494986cc-s8dbx 1/1 Running 0 61s root@kube-mgmt:~/.kube# kubectl get services -o wide NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR kubernetes ClusterIP 10.254.0.1 <none> 443/TCP 5h47m <none> ncr-nginx-lb LoadBalancer 10.254.29.106 133.186.132.131 80:31695/TCP 23m app=ncr_nginx
위 command를 실행하면 간단하게 2.0으로 업데이트 수행 할 수 있다.
결론
NHN Cloud의 Kubernetes 환경을 구성하고 활용 하기 위해 단계적 접근으로
NCR을 통하여 Container Image를 등록하고
이 Image를 다시 Pod에 배포하고 업데이트 하는 과정을 알아 보았다.
긴 글을 읽어 주셔서 감사합니다.