이쿠의 슬기로운 개발생활

함께 성장하기 위한 보안 개발자 EverNote 내용 공유

클라우드/Kubernetes

37. Kubernetes hyperkube container

이쿠우우 2020. 11. 5. 20:29
반응형

 

 

 

 

hyperkube란?

 

kubernetes는 

kube-apiserver, kubelet, kube-scheduler, kube-controller-manager, kube-proxy, kubectl

과 같은 daemon / binaries로 이루어져있음.

hyperkube는 위 모든 것을 뜻함. 일체형 바이너리임.

hyperkube를 통해서 kubernetes 설치도 가능함.

hyperkube container를 각각 apiserver, controller, proxy 형태로 실행하고 

서로 바라보게 설정만 한다면 kubernetes 와 동일하게 동작할 수 있음.

 

또다른 hyperkube 사용 방법으로는 helm을 통해서 object를 생성하는 경우 사용하기도 함.

 

[ helm을 통해서 object 생성 시 hyperkube 사용하는 이유 1. ] 

helm을 통해서 kubernetes에 리소스를 생성할 시

사용자의 kubernetes version에 따라 helm 에 명시된 yaml 이 배치가 안될수도 잇는데

이런경우 hyperkube container를 통해서 작업하게 되면

다양한 kubernetes 환경에서도 hyperkube를 통해서 자원을 배포해서 

version영향을 받지 않고 helm 설치가 가능함.

 

[ helm을 통해서 object 생성 시 hyperkube 사용하는 이유 2. ] 

kubectl apply -f 명령을 통해서 특정 yaml 파일을 실행 시킬 시

yaml파일 경로를 상대경로로 설정해서 생성할 수도 있지만

더욱 에러없이 하기 위해서는

hyperkube container 내부 특정 경로에 yaml 파일을 놓고

hyperkube에서 kubectl apply -f 명령 사용 시 yaml 파일 경로를 직접경로로 설정하는게

더 안전하게 생성할 수 있음.

 

 

 

hyperkube image정보 

repository : quay.io/coreos/hyperkube

tag : v1.7.6_coreos.0

 


hyperkube Container 사용해보기

 

 

Job으로 사용

 

hyperkube는 kubernetes 의 각종 명령을 사용하기 위해 사용되는 container이므로

보통 job으로 사용됨.

job을 통해 각종 kubectl 명령을 사용할 수 있고 

hyperkube container에서 실행된 각종 명령은

hyperkube가 올라가는 kubernetes cluster에 명령이 적용됨.

 

 

[clusterRoleBinding.yaml]

지금은 단순 Test이기 때문에 clusterRole은 k8s 설치 시 default로 생성된

admin권한을 가지고 있는 cluster-admin을 사용.

실제 사용할 때는 보안을 위해 특정 권한을 가지느 clusterRole을 생성해줘야함.

apiVersion: rbac.authorization.k8s.io/v1

kind: ClusterRoleBinding

metadata:

  name: crd-operator

roleRef:

  apiGroup: rbac.authorization.k8s.io

  kind: ClusterRole

  name: cluster-admin

subjects:

  - kind: ServiceAccount

    name: crd-operator

    namespace: default

 

[sa.yaml]

apiVersion: v1

kind: ServiceAccount

metadata:

  name: hyper-sa

 

 

[hyperkube-job.yaml]

apiVersion: batch/v1

kind: Job

metadata:

  name: hyperkube-job

  namespace: default

spec:

  template:

    metadata:

      name: hyperkube-pod

    spec:

      serviceAccountName: hyper-sa SA를 통해 권한을 부여받아야 정상적으로 hyperkube 사용가능

      restartPolicy: OnFailure

      containers:

        - name: hyperkube

          image: quay.io/coreos/hyperkube:v1.7.6_coreos.0

          command:

          - kubectl

          - create

          - ns

          - iksoon-test

 

 

[job 생성 결과]

생성하면 command 명령대로 

iksoon-test namespace가 생성됨.

 

 

 

 

Pod로 사용

 

hyperkube container는 어떻게 이루어져 있는지 확인하기 위해

Pod로 생성해봄. 

hyperkube는 실행되고 있는 application이 없음으로

cammand 명령으로 sleep을 주어야 

pod를 생성한 후 접속해볼 수 있음.

 

pod또한 SA권한이 있어야 hyperkube container의 각종 명령을 사용할 수 있음

 

[hyperkube pod 생성 예제]

apiVersion: v1

kind: Pod

metadata:

 name: hyperkube

spec:

 serviceAccountName: hyper-sa # SA를 통해 권한을 부여받아야 정상적으로 hyperkube 사용가능

 containers:

 - name: hyperkubetest

   image: quay.io/coreos/hyperkube:v1.7.6_coreos.0

   command: [ "/bin/bash", "-c", "--" ]

   args: [ "while true; do sleep 30; done;" ]

 

 

[hyperkube 접속 후 kubectl 명령 사용]

 


제 글을 복사할 시 출처를 명시해주세요.
글에 오타, 오류가 있다면 댓글로 알려주세요! 바로 수정하겠습니다!


 

반응형