Ace-T's Blog 내 검색 [네이버 커넥트 이웃 합니다~^-^/ 요청 大 환영~~]

k8s 스터디 흔적

OpenSource/K8s 2020. 10. 22. 11:49
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T

kubectl 롤링 업데이트 해보기!

img만들고

docker build -t idock.xxx.io/teri_epi/kubia:v1

docker build -t idock.xxx.io/teri_epi/kubia:v2

 

docker hub에 push

docker push idock.xxx.io/teri_epi/kubia:v1

docker push idock.xxx.io/teri_epi/kubia:v2

 

k : kubectl  / rolling update!

k rolling-update kubia-v1 kubia-v2 --image=idock.daumkakao.io/teri_epi/kubia:v2

 

kubectl 롤링 업데이트는 더이상 사용되지 않는다. Why? -> 더 나은 업데이트 방법이 존재!

kubectl를 통한 업데이트는 네트워크가 원활하지 않을 시 업데이트 프로세스가 모두 중단!

-> 디플로이먼트라는 새로운 리소스를 도입!!

 

디플로이먼트 : 레플리케이션컨트롤러 or 레플리카셋을 통해 업데이트를 수행.

애플리케이션을 배포하고 이를 선언적으로 업데이트하는데 사용하는 상위 수준의 리소스.

디플로이먼트 생성 : 레플리케이션컨트롤러 작성과 큰차이가 없다.

라벨셀렉터, 원하는 복제본 수, 포트 템플릿으로 구성된다.

 

소스 : github.com/luksa/kubernetes-in-action/blob/master/Chapter09/kubia-deployment-v1.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: kubia
spec:
  replicas: 3
  template:
    metadata:
      name: kubia
      labels:
        app: kubia
    spec:
      containers:
      - image: luksa/kubia:v1
        name: nodejs
  selector:
    matchLabels:
      app: kubia

k create -f kubia-deployment-v1.yaml --record

k rollout status deployment kubia

 

k get po
NAME                     READY   STATUS    RESTARTS   AGE
kubia-556c55c694-5kjzc   1/1     Running   0          6d22h
kubia-556c55c694-mb5pk   1/1     Running   0          6d22h
kubia-556c55c694-z85lw   1/1     Running   0          6d22h

 

위에서 가운데 숫자의 의미는?

레플리카셋의 pod 템플릿의 해시 값!

디플로이먼트는 pod를 직접 관리 하지 않는다. 그 대신 레플리카셋을 생성하고 레플리카셋이 관리를 하도록 위임한다.

k get replicasets
NAME               DESIRED   CURRENT   READY   AGE
kubia-556c55c694   3         3         3       6d22h

레플리카셋의 이름도 해당 pod 템플릿의 해시 값을 포함한다.

 

디플로이먼트 전략

- 디폴트 전략 : RollingUpdatge라는 롤링 업데이트 전략을 수행.

                       오래된 pod를 하나씩 제거하는 동시에 새로운 pod를 추가해 전체 업데이트 프로세스에 걸쳐 애플리케이션을

                       사용할 수 있도록 함.

- Recreate 전략 : 레플리케이션컨트롤러의 pod 템플릿을 수정 한 후 모든 pod를 삭제하는것과 마찬가지로

                            한번에 모든 기존 pod를 삭제한 새로운 pod를 생성한다.

                            새버전을 시작하기전에 이전 버전을 완전히 중지해야하는 경우 이 전략을 사용한다.

 

k patch deployment kubia -p '{"spec":{"minReadySeconds": 10}}'

업데이트 프로세스를 조금 늦출 필요가 있으며 위의 명령어를 통해 실제로 롤링 방식으로 수행되는지 확인 할 수 있다.(10초로 설정)

 

k set image deployment kubia nodejs=idock.xxx.io/teri_epi/kubia:v2

deployment.extensions/kubia image updated

위의 명령을 수행하면  kubia 디플로이먼트의 pod 템플릿이 업데이트돼 nodejs컨테이너에서 사용하고 있는 이미지가 v1에서 idock.xxx.io/teri_epi/kubia:v2로 변경 된다.

 

디플로이먼트와 그밖의 리소스를 수정하는 방법

1. k edit : 기본 편집기에서 객체의 매니페스트 파일을 연다. ex) k edit deployement kubia

2. k patch : 객체의 개별 속성을 수정한다. ex) k patch deployment kubia -p '{"spec":{"minReadySeconds": 10}}'

3. k apply : 전체 YAML 또는 JSON 파일의 속성 값을 적용해 객체를 수정한다. YAML/JSON객체가 존재 하지 않으면 생성.

                   리소스의 전체 정의가 요구된다.(ex. k apply -f kubia-depoyment-v2.yaml)

4. k replace : 객체를 YAML/JSON 파일의 새 객체로 바꾼다. 적용명령과 달리 명령은 객체가 존재 해야한다. 그렇지 않으면 오류 출력.

                    ex) k replace -f kubia-deployment-v2.yaml

5. k set image :  pod, 레플리케이션컨트롤러의 템플릿, 디플로이먼트, 데몬셋, 잡 또는 레플리카셋에 정의 된 컨테이너 이미지를 변경.

                    ex) k set image deployment kubia nodejs=idock.xxx.io/teri_epi/kubia:v2

 

배포

k set image deployment kubia nodejs=idock.xxx.io/teri_epi/kubia:v3

deployment.extensions/kubia image updated

 

k rollout status deployment kubia

Waiting for deployment "kubia" rollout to finish: 1 out of 3 new replicas have been updated...
Waiting for deployment "kubia" rollout to finish: 1 out of 3 new replicas have been updated...
Waiting for deployment "kubia" rollout to finish: 1 out of 3 new replicas have been updated...
Waiting for deployment "kubia" rollout to finish: 1 out of 3 new replicas have been updated...
Waiting for deployment "kubia" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "kubia" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "kubia" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "kubia" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "kubia" rollout to finish: 1 old replicas are pending termination...
Waiting for deployment "kubia" rollout to finish: 1 old replicas are pending termination...
Waiting for deployment "kubia" rollout to finish: 1 old replicas are pending termination...
deployment "kubia" successfully rolled out

 

롤백

k rollout undo deployment kubia

deployment.extensions/kubia rolled back

 

히스토리

k rollout history deployment kubia

단) --record를 해주지 않으면 나오지 않는다.

특정 디플로이먼트 리비전으로 롤백하기

k rollout undo deployment kubia --to-revision=1

error: unable to find specified revision 1 in history

여기에서 중요한 부분은 --record 옵션을 사용하지 않으면 히스토리에 나오지 않으며 리비전 번호 또한 없다.

즉, 위의 오류처럼 롤백이 불가능하다.

 

롤아웃 프로세스 일시 중지

k rollout pause deployment kubia

deployment.extensions/kubia paused

 

롤아웃 프로세스 재개

k rollout resume deployment kubia

deployment.extensions/kubia resumed

 

레디네스 프로브 적용

k apply -f  kubia-deployment-v3-with-readinesscheck.yaml

'OpenSource > K8s' 카테고리의 다른 글

k8s 스터디 흔적  (0) 2020.10.22
2020.07.16 스터디  (0) 2020.07.16
repository does not exist or may require 'docker login' k8s  (0) 2020.02.20
docker hub login시 error 발생!  (0) 2020.01.29

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

2020.07.16 스터디

OpenSource/K8s 2020. 7. 16. 16:33
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T

6장 볼륨 : 컨테이너에 디스크 스토리지 연결

볼륨은

  1. pod와 라이프사이클이 같다. 즉, pod가 생성 될 때 볼륨이 생성, 삭제될 때 볼륨이 삭제.
  2. pod 스펙에 정의 된다.
  3. pod의 모든 컨테이너에서 볼륨을 사용할 수 있다.(단, 볼륨에 액세스해야하는 각 컨테이너에 볼륨을 마운트 해야 한다.)
  4. 여러가지 종류가 존재
    1. emptyDir: 일시적인 데이터를 저장하는 비어있는 단순 디렉토리.
    2. hostPath : 워커 노드(물리장비)의 파일 시스템에서 pod로 디렉토리를 마운트 하는데 사용.
    3. gitRepo : git스토리지의 내용을 체크아웃해 초기화된 볼륨.
    4. nfs : pod에 마운트 된 NFS 공유.(Network File System)
    5. gcePersistentDisk(구글 컴퓨트 엔진 영구 디스크)
    6. cinder etc.
  • emptyDir 실습

실습01

1. fortune.sh 만들기

#!/bin/bash
trap "exit" SIGINT
mkdir /var/htdocs
while :
do
  echo $(date) Writing fortune to /var/htdocs/index.html
  /usr/games/fortune > /var/htdocs/index.html
  sleep 10
done

※ shell script의 권한 체크 필요!

 

2. Dockerfile 만들기

FROM ubuntu:latest
RUN apt-get update ; apt-get -y install fortune
ADD fortune.sh /bin/fortune.sh
ENTRYPOINT /bin/fortune.sh

3. yml 만들기

apiVersion: v1
kind : Pod
metadata :
  name: fortune
spec:
  containers:
  - image: 화사 도커 허브 주소라서 삭제/teri_epi/fortune
    name: html-generator
    volumeMounts:
    - name: html
      mountPath: /var/htdocs
  - image: nginx:alpine
    name: web-server
    volumeMounts:
    - name: html
      mountPath: /usr/share/nginx/html
      readOnly: true
    ports:
    - containerPort: 80
      protocol: TCP
  volumes:
  - name: html
    emptyDir: {}

4. Docker Image 만들기!

docker build -t 회사도커허브주소/teri_epi/fortune .

5. Docker push!

docker push 회사도커허브주소/teri_epi/fortune

잘되었는지 dockerHub에서 확인.

회사 도커허브

6. k8s pod 수행!

kubectl create -f fortune-pod.yml

k는 kubectl alias해놓음.

7. port 포워드

kubectl port-forward fortune 8080:80

8. 확인

10초 마다 html생성 -> 새로고침 해보면 된다.

메모리를 사용하도록 할 수도 있다.

emptyDir:

  medium: Memory

더 많이 했는데 귀찮아서 정리는 요기까지 ㅋㅋ

 

- 끝 -

'OpenSource > K8s' 카테고리의 다른 글

k8s 스터디 흔적  (0) 2020.10.22
2020.07.16 스터디  (0) 2020.07.16
repository does not exist or may require 'docker login' k8s  (0) 2020.02.20
docker hub login시 error 발생!  (0) 2020.01.29

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

repository does not exist or may require 'docker login' k8s

OpenSource/K8s 2020. 2. 20. 10:12
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T

상황은 이러하다.

1. Dockerfile로 이미지를 만들었다.
Dockerfile  +  docker build 명령어 -> 이미지 뿅~
docker build -t xxxx:v0.1 .

2. docker images로 만들어진 이미지를 확인.
3. docker tag로 tag변경 가능.
4. docker push로 docker hub에 push!!
docker push xxxx:v0.1

k8sdev.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
    name: tomcat-deployment
    labels:
        app: tomcat
spec:
    replicas: 1
    selector:
        matchLabels:
            app: tomcat
    template:
        metadata:
            labels:
                app: tomcat
        spec:
           containers:
           - name: tomcat
             image: address.io/teri_epi/hahahoho:v0.1
             ports:
             - containerPort: 8080

kubectl로 kubernets에 적용.
kubectl apply -f k8sdev.yaml

오류 발생|
repository does not exist or may require 'docker login' k8s

원인
docker hub의 레파지토리가 비공개(private)여서 나타나는 현상이었다.

공개로 바꾸고 처리 끝~:)

private일 경우에 docker login관련 어떤 처리를 해줘야 하는 거 같다.
이 내요은 여기에서 다루지 않는다. 구글 신에게 물어보자! :)

 

'OpenSource > K8s' 카테고리의 다른 글

k8s 스터디 흔적  (0) 2020.10.22
2020.07.16 스터디  (0) 2020.07.16
repository does not exist or may require 'docker login' k8s  (0) 2020.02.20
docker hub login시 error 발생!  (0) 2020.01.29

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

docker hub login시 error 발생!

OpenSource/K8s 2020. 1. 29. 14:40
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T

docker login시에  error가 발생 하였다.

Error saving credentials: error storing credentials 
- err: exit status 1, out: `error storing credentials 
- err: exit status 1, out: `The user name or passphrase you entered is not correct.

 

~/.docker/config.json

{
  "auths" : {

  },
  "credSstore" : "osxkeychain",
  "credsStore" : "desktop",
  "stackOrchestrator" : "swarm"
}

 

다른 사람들과 config.json의 내용 또한 달랐다.

해결 방법

  • first rm /usr/local/bin/docker-credential-osxkeychain
  • modify ~/.docker/config.json "credsStore": ""
  • restart docker

참고 : https://github.com/docker/for-mac/issues/2295

'OpenSource > K8s' 카테고리의 다른 글

k8s 스터디 흔적  (0) 2020.10.22
2020.07.16 스터디  (0) 2020.07.16
repository does not exist or may require 'docker login' k8s  (0) 2020.02.20
docker hub login시 error 발생!  (0) 2020.01.29

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::