목록Study/K8S (72)
전공공부
1. OS Upgrade Node 하나가 사라졌을 경우를 가정해봅시다. (drain 된 상태) ReplicaSet으로 관리되던 Pod는 다시 다른 노드로 롤링 업데이트가 될 것입니다. 그리고, 이때 노드가 내려갔다가 다시 올라 옵니다.(uncordon) 이때, 기존에 붙어 있던 Pod가 다시 붙지는 않습니다. 만일, OS Parameter를 바꾸게 되어서 Node 하나를 재부팅 해야 한다면 Node Drain을 진행해야 한다. 아래 명령어를 쓰면 기존 노드에 존재하던 노드의 포드가 옮겨지고 종료된다. (만일, ReplicaSet 없이 Single Pod가 붙어 있다면 강제 drain을 시켜야 드레인이 가능하다. --force) kubectl drain node-1 추가, 아래 명령어는 기존 POD는 그대..
InitContainers apiVersion: v1 kind: Pod metadata: name: myapp-pod labels: app.kubernetes.io/name: MyApp spec: containers: - name: myapp-container image: busybox:1.28 command: ['sh', '-c', 'echo The app is running! && sleep 3600'] initContainers: - name: init-myservice image: busybox:1.28 command: ['sh', '-c', "until nslookup myservice.$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace..
1. Multi Container Pods Log Agent와 Server가 같이 Pair로 업로드 되는 경우가 필요 할 것이다. 함께 생성되고 함께 파괴가 된다는 생각으로 바라보는것이 좋을 것 같다. Volume Sharing 등의 설정을 하지 않아도 되니 편하다. Pod의 spec.containers 아래에 배열 형태로 나누어서 container 1,2...로 나누어서 배포하면된다. apiVersion: v1 kind: Pod metadata: name: cpu-demo-2 namespace: cpu-example spec: containers: - name: cpu-demo-ctr-2 image: vish/stress - name: test image: nginx
1. Secret 암호화를 사용하는 범위 ConfigMap 활용하여 MySQL 또는 java 파일 구성 시 Docker의 환경 설정을 지정 할 수 있겠다. 예시로 PW, DB_HOST 등의 설정을 구성 할 수 있다. 그러나 아래와 같이 직접적으로 쓸거면 필요가 없다. apiVersion: v1 kind: ConfigMap metadata: name: app-config data: DB_HOST: mysql 자 아래 처럼 사용해보자 First, Create Secret DB_host: mysql DB_User: root DB_Password: passwd 명령 버전 k create secret generic --from-literal== --from-literal 옵션 자체가 key-value 쌍을 저장하..
1. Commands docker run ubuntu [COMMAND] : 이런 식으로 코멘트를 지정 할 수 있습니다. 또는, Docker File을 열어서 CMD 부분을 수정합니다. 예시로, CMD ["sleep","5"] 이런식으로요. 그리고, 코멘드와 value는 무조건 분리가 되어야합니다. CMD ["sleep 5"] 는 안 된다는 거죠. 또는 이런식의 구성은 될까요? CMD ["sleep"] 으로 지정 되어 있고 docker run ubuntu-sleeper 10 이렇게 하면 sleep 10이 실행이 될까요? 네, 실행이 됩니다. 명령줄에 명시되지 않은 명령줄을 보통 실행 시킬때는 FROM Ubuntu ENTRYPOINT ["sleep"] CMD ["5"] 이런 식으로 씁니다. 이렇게 쓰면, E..
해결법 : NFS 서버를 두고 PV - PVC 각각 Pod끼리 파서 연결을 하게 되었다. 서로 같은 네임스페이스에 POD가 공유된다면 볼륨 공유를 하나의 PV - PVC 연결 한 후 Pod or Deployment에 등록하여 사용하면 되지만 실제 업무에서는 이렇지 않은 경우가 종종 발생한다. 그래서, NFS Mount를 하여서 해결하게 되었는데 예제 코드는 아래와 같다. storageClass 정의 아래 내용은 PV를 동적으로 프로비저닝하기 위한 PV이다. (자원 요청이 PV로 부터 들어오면 storageClass가 직접 자원을 가져와서 배치 하는 개념을 생각하자. 클라우드 환경에서는 항상 자원을 가지고 있을 필요가 없으므로 필요 할 때마다 가져와서 쓰기 때문에 이런 프로비저닝 지원이 자유롭다.) api..
1. Rollout and Versioning 버저닝 : Revision을 하여 롤백을 할 수 있게 끔 설정을 도와줌 Rollout Command k rollout status deployment/mydeploy #디플로이먼트 배포 중 상태를 볼 수 있음 k rollout history deployment/mydeploy #해당 디플로이먼트의 히스토리를 볼 수 있습니다. 어떤 버전을 썼는지 # 또는 언제 무슨 명령어로 배포가 되었는지 등등 Deployment 전략 Recreate 전략 : 아예 다 부수고 만드는 방법 Rolling Update 전략 : 하나 하나씩 버전을 pod 별로 내렸다가 하나씩 올리는 것 (기본 전략) Blue Green 전략 : 이전 또는 지금 올릴 것을 Blue로 두고 이전 또는..
1. Monitor Pod Metric이나 Networking 등을 보기 위한 모니터링 툴이 필요한데 이런 것들은 어디서 어떻게 볼 수 있을까? 1-1. Metrics Server 쿠버네티스 클러스터당 하나를 가지고 모니터링 솔루션은 in-memory 솔루션이고 모니터링 데이터는 메모리에 적재되는 것은 아니고 disk로 저장된다. 구동 방식 : kubelet이라는 API 서버로 부터 지시 받고 pod를 러닝하는 요소가 cAdivor를 통해서 pod의 로깅 요청을 읽는다. 설치 방식 : git clone ... metric-server.git (해당 링크는 공식 문서 또는 다른 블로그 참고) k create - f deploy/1.8+ ... (git clone으로 설치된 위치에서 실행) 모니터링 명령어 ..