서비스 중단 없이 애플리케이션을 업데이트 하기 위해서, Kubernetes에서는 rolling update라는 기능을 지원합니다. 이 기능을 통해서 전체 Pod을 일시에 중단/업데이트 하는 것이 아니라, 한번에 n개씩 Pod을 순차적으로 업데이트할 수 있습니다. 이를 통해 서비스 중단 현상 없이 애플리케이션 버전 업데이트 및 롤백을 할 수 있습니다.
minReadySeconds : pod이 Ready 단계 부터 Available 단계 까지 식단 차이 시간을 설정하지 않으면 ready에서 곧바로 avaliable이 되고 순단 현상이 일어난다. 적절한 시간을 테스트하여 설정하는것이 좋다.
strategy.type : “Recreate” or “RollingUpdate”를 설정가능. 기본값은 “RollingUpdate”, Recreate의 경우 Pod가 삭제된 후 재생성
strategy.rollingUpdate.maxSurge : rolling update 중 정해진 Pod 수 이상으로 만들 수 있는 Pod의 최대 개수. 기본값은 25%
strategy.rollingUpdate.maxUnavailable : rolling update 중 unavailable 상태인 Pod의 최대 개수를 설정. rollgin update 중 사용할 수 없는 Pod의 최대 개수. 값은 0보다 큰 정수를 통해 Pod의 절대 개수 설정이 가능하고, “25%“와 같이 percentage 표현 가능 . maxUnavailable에서 percentage 계산은 rounding down(내림) 방식이며 기본값은 25% 이다. maxSurge와 maxUnavailable 값이 동시에 0이 될 수 없다.
/* 정수값을 가진 배열이 있을 때, 임의의 x,y,z 값을 정하고, 0<= x < y < z <= arr.length 라고 정의한다. 문제) a[x+1]에서 a[y-1] 사이의 값들과 a[y+1]에서 a[z-1] 사이의 값을 모두 더했을 때 최대값은 무엇인지 구하시오. function slice(arr) (3 <= arr.length <= 100,000) (-10,000 <= n <= 10,000) 예를 들어 a = [3,2,6, -1,4,5, -1,2] 일 때, (x=0, y=3, z=6) 일 때 a[1] + a[2] + a[4] + a[5] => 2 + 6 + 4 + 5 = 17, (0, 3, 7) a[1] + a[2] + a[4] + a[5] + a[6] => 2 + 6 + 4 + 5 − 1 = 16, (3, 4, 5) 사이 값이 없으므로 0. 따라서 최대값은 17이 된다. */
functionslice_origin(arr){ var sum = 0 ; // x = 0~ arr.length-3 // y = 1~ arr.length-2 // z = 2~ arr.length-1 for(var x=0; x<arr.length-3; x++){ for(var y=0; y<arr.length-2; y++){ for(var z=0; z<arr.length-1; z++){ if(x<y && y<z){ var temp_sum = sums(x,y,z,arr); if(sum < temp_sum){ sum = temp_sum; console.log("==="); console.log("sum"+sum); console.log("==="); console.log(x,y,z); console.log("==="); } } } } } functionsums(x,y,z,arr){ var sum = 0; var xy = arr.slice(x+1,y); for(var i=0; i<xy.length; i++){ sum += xy[i]; } var yz = arr.slice(y+1,z); for(var j=0; j<yz.length; j++){ sum += yz[j]; } return sum; } } var arr = [-3,-1,10,-6,-3,4,5,-1,-5,-1,5,4,1,-5,-1,-5,-11111,-2,0,-9,-10,14,1,-1];// [200,6,1,4,5,1,10,2,4,6,-100,-10000] ; slice_origin(arr);
/* Visual Studio Code와 유사한 Editor+++라는 에디터가 있다. Visual Studio Code에서는 괄호를 입력하면 자동으로 닫는 괄호가 입력되는 것처럼 Editor+++도 자동으로 괄호를 닫는다. 그런데 Editor+++는 가끔 버그로 인해 닫는 괄호를 늦게 다는 경우가 있다. 여기에 Editor+++에서 작성한 텍스트가 있는데 이 텍스트를 Visual Studio Code로 복사하고자 하는데 이 때 괄호가 올바른지 아래와 같이 검증하고자 한다. 예를 들어 (), {()} {()()} 처럼 입력할 때 닫는 괄호가 올바르게 표시되며 이는 올바른 형태이다. 그러나 ([)()] 의 경우 모두 쌍은 맞으나 괄호가 올바를 위치에 있지 않으므로 이는 올바르지 않은 형태이다. 문제) Editor+++에서 작성한 괄호값을 가진 임의의 텍스트가 있을 때, Visual Studio Code에서 인식이 가능한지 파악하고, 가능하면 true, 불가능하면 false를 출력하라. */ functionbracket_replace(str){ var result = true; if(str.length%2==1) returnfalse; var startlength = str.length; do { str = str.replace(/\(\)|\{\}|\[\]/g,''); if(str.length==0) break; if(str.length == startlength) result = false; startlength=str.length; } while (result);
return result; }
3. count arr
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
/* 배열 A가 있다. 이 배열은 배열 B의 몇번째 위치에 값을 증가(++) 시켜야 하는지에 대한 정보를 담고 있다. 예를 들어 a = [3,4,4,5,1,4,4] 인 배열이 있다고 할 때, a[0]= 3 이므로 배열의 3번째 값을 증가 시켜라 (0,0,1,0,0) a[1]= 4 이므로 배열의 4번째 값을 증가 시켜라 (0,0,1,1,0) a[2]= 4 이므로 배열의 4번째 값을 증가 시켜라 (0,0,1,2,0) 이 것을 반복하면 배열 B는 [1,0,1,4,1] 값을 갖는다. */ functioncount_arr(arr){ var max = arr.reduce( function (previous, current) { return previous > current ? previous:current; }); var return_arr = newArray(max); return_arr.fill(0);
for(let val of arr){ return_arr[val-1] = return_arr[val-1]+1; } return return_arr; }
var r = this; if(this.length <= 1) { returnthis; } var less = [], greater = []; var pivot = r.splice(Math.floor(r.length / 2),1); console.log("중간지점값:"+pivot); // 중간값 기준 작은 값 or 큰 값 for (var i = r.length - 1 ; i >= 0; i--){ if ( r[i] <= pivot) { less.push(r[i]); } else { greater.push(r[i]); } } var c = []; return c.concat(less.quickSort(), pivot, greater.quickSort()); }; var a = [3,1,43,5,123,6,231,0]; console.log(a.quickSort());
FROM node:9.4-alpine MAINTAINER authorize <xxx@gmail.com> #작업 디렉토리 WORKDIR /src #원본 소스복사 COPY ./freebex-integrated . # npm 설치 RUN npm install #환경변수 NODE_ENV 의 값을 development 로 설정 #ENV NODE_ENV development
#alpine image FROM nginx:alpine #create the server and location configuration COPY default.conf /etc/nginx/conf.d/default.conf #copies the build app to the default location COPY client/dist/mobile /usr/share/nginx/html
git clone https://github.com/DragOnMe/k8s-1.8-dashboard-heapster-mod.git cd k8s-1.8.1-dashboard/ kubectl apply -f kubernetes-dashboard.yaml kubectl apply -f kubernetes-dashboard-admin-rbac.yaml cd ../ kubectl apply -f k8s-heapster/
[root@localhost k8s-1.8.1-dashboard]# kubectl get pods -nkube-system -w NAME READY STATUS RESTARTS AGE heapster-dfd674df9-k6vr7 1/1 Running 0 3d kubernetes-dashboard-5bd6f767c7-2h6wv 1/1 Running 0 2d monitoring-grafana-76848b566c-cts9n 1/1 Running 0 3d monitoring-influxdb-6c4b84d695-d8j4t 1/1 Running 0 3d
network add-on으로 flannel을 사용할 때는 ‘–pod-network-cidr’ 옵션이 필수이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
$ sudo kubeadm init --pod-network-cidr 10.244.0.0/16 . . . 생략 . . . Your Kubernetes master has initialized successfully!
You should now deploy a pod network to the cluster. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at: http://kubernetes.io/docs/admin/addons/
You can now join any number of machines by running the following on each node:
사용 가능한 network add-on 목록 중 하나를 선택한다. 클러스터 당 하나의 pod network만 설치할 수 있다. 각 network add-on 링크에 접속하면 설치 방법이 나와있다. ‘Weave Net’ 과 ‘Flannel’만이 멀티 플랫폼 환경(amd64, arm64, arhtp)을 지원한다.
Master에서 Pod network설치가 완료되어 ‘kube-dns’가 Running 상태가 되었는지 확인한다.
1 2 3 4 5 6 7 8 9 10 11
$ kubectl get pods --namespace=kube-system NAME READY STATUS RESTARTS AGE etcd-localhost.localdomain 1/1 Running 0 3d kube-apiserver-localhost.localdomain 1/1 Running 0 3d kube-controller-manager-localhost.localdomain 1/1 Running 0 3d kube-dns-6f4fd4bdf-x4k6t 3/3 Running 0 3d kube-flannel-ds-c5l2w 1/1 Running 1 1d kube-flannel-ds-fxknd 1/1 Running 2 3d kube-proxy-dg7xd 1/1 Running 0 3d kube-proxy-pmbsb 1/1 Running 0 1d kube-scheduler-localhost.localdomain 1/1 Running 0 3d
#마스터서버에서 [root@master1]# kubectl get nodes NAME STATUS ROLES AGE VERSION master1 Ready master 3d v1.9.6 node1 Ready node 1d v1.9.6
6. 초기화 - RESET KUBERNETES(MASTER AND CLUSTER)
1 2 3 4 5 6 7 8 9 10 11
kubeadm reset systemctl stop kubelet systemctl stop docker rm -rf /var/lib/cni/ rm -rf /var/lib/kubelet/* rm -rf /etc/cni/ ifconfig cni0 down ifconfig flannel.1 down ifconfig docker0 down ip link delete cni0 ip link delete flannel.1