
https://kubernetes.io/blog/2019/07/18/api-deprecations-in-1-16/
-야물파일로 Object 정의시
test 네임스페이스 생성 / 확인 : #kubectl create namespace test
야물파일을 이용해서 네임스페이스 생성시 명령어 [green.yaml]
test네임스페이스 삭제 : #kubectl delete 이름
네임스페이스 교체시 참고 파일 : context #kubectl config --help
이름을 blue 로교체 명령어 : #kubectl config use-context
*컨테이너 : app.js ⇒ 도커파일 생성 ⇒ 도커 빌드 ⇒ 생성



https://kubernetes.io/ko/docs/concepts/workloads/pods/pod-lifecycle/
모니터링용 하나 마스터 복제 후
*파드 생성 2가지 방법
pods 생성
- kubectl run webserver --image nginx:1.14
- 마스터 창을 2개 열어서 kubectl get pods -o wide --watch로 pending, running 확인
-yaml 파일로 생성
야물파일 생성 하는 방법은

yaml파일을 통해 pods 생성
- vim pod-nginx.yaml
- 파드 생성 내용 작성
- kubectl create -f pod-nginx.yaml
- kubectl get pods
- kubectl get pods nginx-pod -o json | grep -i podip
- kubectl get pods nginx-pod -o json | grep -i namespace로 확인

하나의 파드에서 두개의 이미지를 배포 ( multi-pod )
- vim pod-multi.yaml
- 하나의 파드안에 두개의 컨테이너를 포함하며, 하나의 ip를 공유해서 사용
( command: 백그라운드로 동작하는 내용 )
- kubectl create -f pod-multi.yaml
- 10.44.0.1의 ip를 공유해서 사용
-컨테이너 접속시 이름으로 구분해서 접속을 함.
[root@master ~]# kubectl exec multipod -it -c centos-container -- /bin/bash
[root@master ~]# kubectl logs multipod -c nginx-container
200: 접속 성공
[root@master ~]# kubectl logs multipod -c centos-container ⇒ 200번 보여지지 않음
-여러개의 파드 한번에 삭제
-동작중인 파드 확인/정보 보기
멀티파드 접속
- kubectl exec multipod -it -c centos-container -- /bin/bash
( -c centos-container: 실행하고자 하는 컨테이너의 이름을 지정하는 옵션 )
- 진입해서 curl http://localhost로 확인
- kubectl exec multipod -it -c nginx-container -- /bin/bash
( nginx로 접속 )
- cd /usr/share/nginx/html/
- echo "TEST 05-09" > index.html
- 컨테이너에서 나와서 ip 호출로 확인
- kubectl logs multipod -c nginx-container로 접속 log 확인
멀티파드 삭제
- kubectl delete pods --all
-동작 중인 파드 수정
동작 중인 파드 수정
- kubectl run webserver --image nginx
- kubectl edit pods webserver로 수정 후 재시작
일반 파드 야물파일을 라이브네스로 수정
#vi pod-nginx-liveness.yaml

[root@master ~]# kubectl create -f pod-nginx-liveness.yaml
liveness를 통해 파드 관리 ( HTTP get )
- vim pod-nginx-liveness.yaml
- livenessProbe가 정의되어 있어 해당 컨테이너의 라이브니스 검사를 수행
( httpGet을 사용하여 "/" 경로에 대한 HTTP GET 요청을 80번 포트로 수행 )
- kubectl create -f pod-nginx-liveness.yaml
- kubectl describe pod nginx-pod-liveness | grep -i Liveness로 확인


-아래 내용을 추가 한다면
야물파일을 노드에서 작성후 저장하고 빠져 나오면 바로 파드 실행됨.
⇒ 노드2의 /etc/kubernetes/manifests 이동 후 아래와 같은 야물파일 생성 하고

⇒ 이 파일을 마스터에서 실행시키면 static 이 아닌 일반 파드가 생성(노드는 랜덤)
static pod를 통해 노드를 정해서 파드 생성
- node2 접속해서 cd /etc/kubernetes/manifests/로 이동
- vim pod-nginx.yaml
- pod를 생성하는 yaml 파일 작성후 저장
- node2에서 yaml 파일 저장하면 마스터에서 nginx-pod 생성,
node2에서 yaml 파일 삭제하면 pod 삭제
-상황에 따라서 마스터를 하나의 노드로 동작 시키기
마스터를 노드로 동작 (master를 static pod로 지정)
- cp pod-nginx.yaml /etc/kubernetes/manifests/
- 복사하는 즉시 파드 생성
- rm -rf /etc/kubernetes/manifests/pod-nginx.yaml로 파드 삭제
#pod-nginx-resources.yaml 파일 생성 후 수정

[root@master ~]# kubectl create -f pod-nginx-resources.yaml
-리미트가 없이 동작 시켜보기
pod에 리소스 할당 ( ram, cpu ... )
- vim pod-nginx-resources.yaml
- 리소스(requests 및 limits) 섹션
( 환경 변수(env) 섹션에서는 "MYVAR"라는 이름의 환경 변수가 "testvalue"로 설정 )
( 컨테이너가 요청(requests)하는 메모리와 CPU 설정 )
- kubectl create -f pod-nginx-resources.yaml
- kubectl describe pod nginx-pod-env로 확인
-마스터에서 야물파일에 requests 부분은 삭제 리미트만 CPU 2 개로 설정
request를 삭제 하고 limits 만 작성하면 request는 자동으로 리미트와 동일하게 생성됨.

다시 동작 시키면 Pending에서 멈춰있음 즉 생성이 안됨.
⇒ 이유는 노드의 CPU가 2개 인데 파드 에서 2개를 요청해서 생성이 안됨.
-노드에서 실행 시켜도 실행이 안됨 .
cpu 제한 갯수를 증가 시키기
- pod-nginx-resources.yaml파일의 requests를 limits로 변경
( cpu도 2로 변경 )
- kubectl create -f pod-nginx-resources.yaml
- 생성되는 시간 증가 ( cpu를 2로 설정해서 )

#kubectl create -f pod-nginx.yaml
환경변수 지정
- vi pod-nginx
- 환경변수를 지정하는 내용 추가
- kubectl create -f pod-nginx.yaml
- kubectl exec nginx-pod -it -- /bin/bash 로 진입
- env | grep SOLDESK 로 확인
https://matthewpalmer.net/kubernetes-app-developer/articles/multi-container-pod-design-patterns.html




-모니터링은 : # kubectl get pods -o wide
-rc-nginx.yaml 생성 / 실행 / 동작 개수 확인

-똑같은 라벨의 이름을 가진 파드를 생성 하면?
replicas: 3이 기준이 되어서 생성하면 바로 삭제를 시켜버림
(라벨이름이 기준이되어 숫자정해짐)
-라벨의 다른 이름을 가진 파드를 생성 하면? 생성됨
template으로 pod 생성
- vim rc-nginx.yaml
- ReplicationController는 특정 수의 Pod 인스턴스를 유지
- kubectl create -f rc-nginx.yaml
- kubectl get rc rc-nginx 로 갯수 확인
- kubectl get pod --show-labels로 label 확인 ( webui )
- 똑같은 label의 pod를 생성하면 강제 삭제
-야물파일의 개수를 4로 수정 하고 저장하면? ⇒ 바로 생성됨.
-개수를 2개로 축소 하고 저장 하면?
⇒ 최근에 생성된 파드 부터 삭제 진행[ 서로 다른 노드에 있다면 각 노드에서 하나씩 삭제 진행됨 ]
-다시 4개로 변경 하고 , 편집을 하지 않고 축소하기
-만약에 rc-nginx.yaml 에 있는 nginx 버전을 다른것으로 변경하고 저장 하면 새로운 버전의 nginx가 생성이 될까? 안될까?
⇒ 생성이 안됨 ( nginx:1.14 ⇒ 1.15 ) replicas=2 기준 이라 생성안됨.
-그럼 만약에 개수를 하나더 늘리거나 지우면? 어떤 버전으로 생성이 될까?
-> 1.15 버전으로 생성
⇒파드를 중지하지 않고 늘리거나 줄이는것을 롤 업데이트 라고 함.
replication controller 설정
- kubectl scale rc rc-nginx --replicas 2 ( pods 갯수를 2개로 지정 )
- kubectl edit rc rc-nginx ( 편집 모드에서 replicas 갯수를 수정해서 pods 갯수 지정 )
- 로드 밸런스를 고려해서 최근 생성된 pods를 우선 변경
- 편집 기능을 이용해서 이미지를 변경하고 생성하면 이미지 변경 가능 ( 롤링 업데이트 )
⇒rc 와 역할은 같음, 기능은 더 풍부함.

ReplicaSet 에서 사용되는 matchExpressions: 연산자

-기존거 삭제시 파드만 삭제하면 계속해서 다시 생성 됨.
Replicaset 설정
- vim rs-nginx.yaml
- ReplicaSet의 구성을 정의
( "app: webui"와 "ver: 1.15" 라벨을 가진 Pod를 선택하는 selector를 가지고 있다 )
( 이를 통해 ReplicaSet이 관리하는 Pod 인스턴스를 식별 )- kubectl get pods --show-labels로 확인
-컨트롤러를 삭제 하면? 파드는? 모두 삭제됨.
하지만 파드는 유지 하고 싶다면 연쇄 삭제 비활성화
relica set을 삭제해도 pod가 삭제되지 않도록 하는 방법
- kubectl delete rs rs-exam1 --cascade=false