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 명령 사용]
제 글을 복사할 시 출처를 명시해주세요.
글에 오타, 오류가 있다면 댓글로 알려주세요! 바로 수정하겠습니다!
'Kubernetes > Kubernetes 이론' 카테고리의 다른 글
Sandbox key 정보로 Pod안의 Container 찾기(1) : 환경구성 (0) | 2020.11.07 |
---|---|
Kubernetes Version upgrade (7) | 2020.11.07 |
Custom Resource Definition (CRD) Golang (0) | 2020.11.05 |
Custom Resource Definition (CRD) Python (0) | 2020.11.05 |
Kubernetes Custom Resource 개념 (0) | 2020.11.05 |