kubernets

 

 

Service Account

  • 대시보드, 젠킨스, 프로메테우스 같은 서비스 애플리케이션이 사용하는 계정이다.
  • 생성된 토큰을 사용하여 통신한다.
  • 디폴트 토큰이 있지만 기능이 매우 제한적이다. (그러므로 만들어서 사용하자)

 

# Service Account

# 생성
$ kubectl create serviceaccount dashboard-sa
# 혹은
$ kubectl create sa dashboard-sa

# 조회
$ kubectl get sa

# 상세보기
$ kubectl describe sa dashboard-sa

# 토큰 보기
$ kubectl describe secret dashboard-sa-token-kbbdm
## 해당 토큰은 API 에 사용된다.

 

아래는 default token 확인 방법이다.

 

# default token 확인
# 해당 명령어는 deprecated 됨
#$ kuberctl exec -it my-kubernetes-dashboard ls /var/run/secrets/kubernetes.io/serviceaccount
#$ kuberctl exec -it my-kubernetes-dashboard cat /var/run/secrets/kubernetes.io/serviceaccount/token

# 토큰이 저장되는 /var/run/secrets/kubernetes.io 을 주목하자
$ kuberctl exec my-kubernetes-dashboard -- ls /var/run/secrets/kubernetes.io/serviceaccount
$ kuberctl exec my-kubernetes-dashboard -- cat /var/run/secrets/kubernetes.io/serviceaccount/token

 

serviceAccountName 필드를 통해 sa 를 설정할 수 있고, automountServiceAccountToken 을 사용해 디폴트 토큰에 접근하는 것을 막을 수 있다.

 

apiVersion: v1
kind: Pod
metadata:
  name: my-kubernetes-dashboard
spec:
  containers:
  - name: my-kubernetes-dashboard
    image: my-kubernetes-dashboard
  serviceAccountName: dashboard-sa
  automountServiceAccountToken: false

 

Resource Request

  • 쿠버네티스는 각 컨테이너 마다 리소스를 할당할 수 있다.
  • 설정하지 않으면 자동으로 리소스가 할당이 되며, request 는 기본 256MiB, limit 은 512MiB 가 된다.
  • 클러스터의 각 노드에는 최소 2GiB의 메모리가 요구된다.

https://kubernetes.io/docs/tasks/configure-pod-container/assign-memory-resource/

 

Assign Memory Resources to Containers and Pods

This page shows how to assign a memory request and a memory limit to a Container. A Container is guaranteed to have as much memory as it requests, but is not allowed to use more memory than its limit. Before you begin You need to have a Kubernetes cluster,

kubernetes.io

 

apiVersion: v1
kind: Pod
metadata:
  name: simple-webapp-color
spec:
  containers:
  - name: simple-webapp-color
    image: simple-webapp-color
    ports:
      - containerPort: 8080
    resources:
      requests:
        memory: "1Gi"
        cpu: 1
      limits:
        memory: "2Gi"
        cpu: 2

 

Taints(테인트) And Toleration(톨러레이션)

  • 비유하자면, Taints 는 모기(Intoleration Pod)를 막기위해 사람(Node)에게 뿌리는 일종의 모기약 같은(?) 것이다.
  • 모기는 사람에게 다가갔지만 Taints 가 걸려져있기 때문에 접근 할 수 없다.
  • 하지만 모기약 냄새를 좋아하는 고양이(Toleration Pod)는사람에게 다가갈 수 있다.

라는 식의 개념이다. (???)

처음에는 이해가 안갔지만 대충 이해가 갈 것 같다...!

 

Taints 생성

# 생성
$ kubectl taint nodes node-name key=value:taint-effect

## taint-effect 는 NoSchedule | PreferNoSchedule | NoExecute 가 있다.

# 예시
$ kubectl taint nodes node1 key1=value1:NoSchedule

 

Toleration 을 사용하는 Pod 생성

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
spec:
  containers:
  - image: nginx-container
    image: nginx
  tolerations:
  - key: "app"
    operator: "Equal"
    value: "blue"
    effect: "NoSchedule"

 

하지만 중요한 것은, Taints 및 Tolerations는 포드를 특정 노드로 이동하도록 지시하는 것이 아니다.

대신 노드가 확실한 Tolerations을 갖는 Pod 를 자신의 노드로 이동할 수 있게 하는 것이다.

 

자세한 내용은 공식 문서를 참고해보도록 한다...

 

오늘은 이것저것 정리했는데, 3장에는 내용이 특히 많아서 좀 빠르게 진도를 나가보도록 하자!