본문 바로가기

Kubernates

Kubernetes 쿠버네티스 CKA (Udemy 강의#03)

섹션 4: Logging & Monitoring

84) Monitor Cluster Components

 

EX/ git clone 주소 다운

cd 서버주소/

kubectl create -f . 

kubectl top node

kubectl top pod

 

87) Managing Application Logs

 

docker run kodekloud/event-simulator

docker run -d kodekloud/event-simulator

docker logs -f ecf

 

event-simulator.yaml

 

apiVersion: v1

kind: Pod

metadata:

  name: event-simulator-pod

spec:

  containers:

  - name: event-simulator

    image: kodekloud/event-simulator

 

kubectl create -f event-simulator.yaml

kubectl logs -f event-simulator-pod

kubectl logs -f event-simulator-pod event-simulator ( 두개 이상 컨테이너의 경우 하나 지정)

이번 섹션은 엄청 짧고 간단하게 끝났다

 

섹션 4: Application Lifecycle Management

92) Rolling Updates and Rollback

Rollout and Versioning

kubectl rollout status deployment/myapp-deployment

kubectl rollout history deployment/myapp-deployment

 

Recreate strategy - goes down

Rolling updates - one by one updates

 

kubectl appy -f deployment-definition.yml

kubectl edit deployment deployment/myapp-deployment

kubectl set image deployment/myapp-deployment \ nginx-contaciner=nginx:1.9.1  수정 시 주의 요

 

kubectl rollout undo deployment/myapp-deployment

kubectl get replicasets 로 모니터링 가능

 

Lab and Solutions

 

96) Commands

 

docker run --name ubuntu-sleeper ubuntu-sleeper

docker run ubuntu-sleeper 10 

docker run --entrypoint sleep2.0 ubuntu-sleeper 10

 

FROM Ubuntu

ENTRYPOINT ["sleep"]

CMD ["5"]

 

apiVersion: v1

kind: Pod

metadata:

  name: ubuntu-sleeper-pod

spec:

  containers:

  - name: ubuntu-sleeper

    image: ubuntu-sleeper

    command: ["sleep2.0"]

    args: ["10"]

 

100) Configure Enviroment Variables in Applications

 

env:

  - name: APP_COLOR

    value: pink

env:

  - name: APP_COLOR

    valueFrom:

       configMapKeyRef:

env:

  - name:

    valueFrom:

       secretKeyRef:

 

pod 내부에 많은 value 가 존재할때 따로 configmap 이라는것을 구성한 뒤에 pod 에 적용시키기

 

kubectl create configmap

kubectl create -f

 

구성 요소로 지정

kubectl create configmap \ app-config --from-literal=APP_COLOR=blue \ --from-literal=APP_MOD=prod

구성 파일로 지정

kubectl create configmap \ app-config --from-tile=app_config.properties

yaml 파일로 지정

apiVersion: v1

kind: ConfigMap

metadata:
  name: app-config

data:

APP_COLOR: blue

APP_MODE: prod

kubectl create -f config-map.yaml

kubectl get configmaps

 

pod 에 적용시키는 방법 #1

sepc:

containers:

  envFrom:

     - configMapRef:

          name: app-config

#2

  env:

    - name: APP_COLOR

      valueFrom:

          configMapKeyRef:

             name: app-config

             key:APP_COLOR

#3

  volumes:

    - name: app-config-volume

      configMap:

          name: app-config

 

11 번 문제 pod 에 귀속시키는 작업이 조금 까다로웠다

이런 명령어들은 다들 실제로 외우지 않고 docs 로 찾아보면서 하는걸까..?? / YES

 

임시 파일로 Delete 하고 Create 하는 대신 가능한 방법

kubectl replace --force -f file.yaml

 

104) Configure Secrets in Applications

 

Web-MY SQL APP 같은 경우 데이터를 config-map.yaml 으로 진행하는데

password 같은 보안 정보를 사용할때 sercrets 필요

 

#1 Secret 생성

#2 POD 에 적용

 

kubectl create secret generic app-secret --from-literal=DB_Host=mysql

kubectl create secret generic app-secret --from-file=<path-to-file>

 

kubectl create -f

 

apiVersion: v1

kind: Secret

metadata:
name: app-secret

data:

DB_Host: mysql  echo -n 'mysql' | base64 엔코딩 하기

DB_User: root echo -n 'mysql' | base64

DB_password: paswrd echo -n 'mysql' | base64

echo -n 'afds=' | base64 --decode코딩 하기

 

kubectl get secrets

kubectl get secrets app-secret -o yaml

kubectl describe secrets

 

evnFrom:

  - secretRef:

       name: app-config

 

env:

  - name: DB_Password

    valueFrom:

       secretKeyRef:

         name: app-secret

         key: DB_Password

 

volumes:

  - name: app-secret-volume

    secret:

      secretName: app-secret

 

Secrets 들은 encoded 되지만 encrypted 되지 않음

 

7 번 마지막 문제는 어려워서 다시 확인 해야겠다

 

108) Demo: Encrypting Secret Data at Rest.

 

Secret 을 안전하게 보관하기 위해 encrypt 시키는 데모 동영상인데 

꽤나 복잡하다

나중에 필요시 이부분만 다시 집중적으로 공부해야한다 

 

110) Multi Container Pods

다양한 컨테이너 (각기 다른 기능을 가진 앱) 로 하나의 앱 구현할 때

pod-definition.yaml 

apiVersion: v1

kind: Pod

metadata:

  name: simple-webapp

  labels:

     name: simple-webapp

spec:

  containers:

  - name: simple-webapp

    image: simple-webapp

    ports:

       - containerPort: 8080

  - name: log-agent

    image: log-agent

 

Lab and Solutions

 

 

kubectl run yellow --image=busybox --dry-run=client -o yaml > yellow.yaml

In yaml -> command: [ "sleep" , "1000" ]

 

kubectl logs app -n elastic-stack

kubectl -n elastic-stack exec -it app -- cat /log/app.log

 

containers:

  - image: kodekloud

    name: sidecar

    volumeMounts:

     - mountPath: /var/log

       name: log-volume

 

114) InitContainers

 

spec:

 containers:

   - name: my-app

     image: busybox:1.28

     command: [ 'sh', '-c', 'echo The app is running ! && sleep 3600' ]

  initContainers:

   - name: init-myservice

     image: busybox

     command: [ 'sh' , '-c' , 'git clone <some-repository,that-will-be-used-by-application> ; done;' ]

   - name: init-mydb

     image: busybox

     command: [ 'sh' , '-c' , 'git clone <some-repository,that-will-be-used-by-application> ; done;' ]

 

Lab and Solutions

kubectl logs orange -c init-myservice -> 오류찾기

 

섹션 4 & 5도 마무리 되었다!

복습은 필수로..!!