Blob Stores에서 AWS S3 Bucket 생성 및 설정 

 

로그인 후 상단 톱니바퀴 아이콘 > Reopsitories > Blob Stores > 오른쪽 상단 create Blob Store 

 

 

타입은 두가지가 있는데 File타입으로 만들면 로컬에 파일등을 저장하고 관리할 수 있도록 만들 수 있습니다. 여기서의 로컬은 렉서스 서버에 대한 로컬입니다.

우리는 s3버킷을 생성하고 오브젝트 파일들을 s3버킷에 저장하도록 설정하고 blob store을 s3에 연동된 상태로 만들고자 합니다. 

> s3선택

 

 

region은 서울 리전을 사용하기 때문에 ap-northeast-2를 선택했습니다.

prefix는 해당 s3버킷 내에서 사용될 디렉토리 이름인데 test라는 이름의 디렉토리를 만듭니다.

Expiration Days는 s3버킷에 저장되어있는 파일을 넥서스에서 삭제하면, 넥서스에서는 해당 파일의 대한 정보가 삭제되더라도 s3버킷에서는 설정한 날짜 뒤에 삭제가 됩니다. 

Authentication (Optional)의 Access Key ID와 Secret Access Key를 입력한 후 save 버튼을 누릅니다. 

 

 

버킷명은 이미 있는 이름이어서 따로 수정했습니다.

 

save를 누르면 nexus에서도 생성이 되고

 

제 aws s3에서도 생성이 되었습니다. 

 

 

https://fastcampus.co.kr/dev_online_devopskit

 

DevOps 마스터 Kit with Linux, Kubernetes, Docker | 패스트캠퍼스

0부터 시작하는 DevOps의 모든 것! DevOps 엔지니어/SRE가 되기 위한 Linux 기초부터 Docker, Kubernetes의 활용과 이직을 위한 데브옵스 인터뷰 준비까지 이 강의 하나로 빠짐없이 학습해 보세요.

fastcampus.co.kr

 

https://school.programmers.co.kr/learn/courses/30/lessons/132265

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

import java.util.*;

class Solution {
     public static int solution(int[] topping) {
        List<Integer> list1 = new ArrayList<>();
        List<Integer> list2 = new ArrayList<>();
        int res = 0;
        int[] reverseTopping = new int[topping.length];
        for (int i = 0; i < topping.length; i++) {
            reverseTopping[topping.length - 1 - i] = topping[i];
        }

        //list를 채우는 메서드
        fillList(list1, topping);
        fillList(list2, reverseTopping);
        Collections.reverse(list2);

        //토핑 갯수가 동일한 구간 구하기
        for (int i = 0; i < list1.size() - 1; i++) {
            if (list1.get(i).equals(list2.get(i + 1))) res++;
        }

        return res;
    }

    static void fillList(List<Integer> list, int[] topping) {
        Set<Integer> set = new HashSet<>();
        int cnt = 0;

        for (int j : topping) {
            if (!set.contains(j)) {
                set.add(j);
                list.add(++cnt);
            } else {
                list.add(cnt);
            }
        }
    }
}

 

원래 값 비교 부분에서 == 을 이용해서 답이 안나왔다.

if (list1.get(i) == list2.get(i + 1)) res++;

 

Boxed primitive 또는 Wrapper class(Integer) 끼리 비교 하는 경우, 

== 연산자 각 객체의 주소 값 비교 하게 된다. 값끼리의 비교는 equal 메소드를 사용해야한다.

if (list1.get(i).equals(list2.get(i + 1))) res++;

 

 

참고

https://marobiana.tistory.com/130

 

Java의 Integer, int 숫자 비교의 주의사항

예전에 프로그램에 버그가 있었고 원인을 한참을 못찾은적이 있었다.숫자 비교하다 생긴 문제였고, 무심코 코딩하다 틀리고 삽질할 수 있는 부분이라 블로그에 남겨본다.ㅎㅎ 아래는 숫자를 저

marobiana.tistory.com

 

icacls.exe <key이름>.pem /reset


icacls.exe <key이름>.pem /grant:r "$($env:username):(r)"


icacls.exe <key이름>.pem /inheritance:r

순서대로 하면 된다. 

 

참고

https://youtu.be/P1erVo5X3Bs

 

https://leetcode.com/problems/jump-game-ii/description/

 

Jump Game II - LeetCode

Jump Game II - You are given a 0-indexed array of integers nums of length n. You are initially positioned at nums[0]. Each element nums[i] represents the maximum length of a forward jump from index i. In other words, if you are at nums[i], you can jump to

leetcode.com

 

문제

nums[i]의 값만큼 인덱스를 점프해서 마지막 인덱스까지 도달하는 최소한의 점프 값을 구해야 한다.

 

tmp 배열을 하나 만들어서 배열의 인덱스 i 까지 올수 있는 최소한의 점프 수를 저장한다.

배열에 이미 값이 있으면 그 값이 최소값이므로, 이미 있는 값이 0 일때만 tmp[출발한 인덱스]의 값에 +1 해준다.

 

코드

 

package LeetCode;

public class L45 {
    public int jump(int[] nums) {
        int[] tmp = new int[nums.length];

		//tmp 배열 만들기
        for (int i = 0; i < nums.length; i++) {
        	// 인덱스값이 배열의 길이를 넘지 않게 해준다.
            for (int j = 1; j < nums[i] + 1 && (i + j) < nums.length; j++) {
            	// 값이 0일때만 새로운 값 지정하기
                if (tmp[i + j] == 0) tmp[i + j] = tmp[i] + 1;
            }
        }

        return tmp[nums.length - 1];
    }
}

https://leetcode.com/problems/find-peak-element/description/

 

Find Peak Element - LeetCode

Find Peak Element - A peak element is an element that is strictly greater than its neighbors. Given a 0-indexed integer array nums, find a peak element, and return its index. If the array contains multiple peaks, return the index to any of the peaks. You m

leetcode.com

 

문제

peek 은 양 옆의 수보다 큰 수 

peek을 찾는 문제 

배열의 처음-1 과 마지막+1 자리는 가장 작은 수 되어 있어서 처음이나 마지막 원소가 그 전 원소보다 크면 peek이다

 

you must write an algorithm that runs in O(log n) time.

> 이진 탐색으로 풀어라

 

 

코드 

 

public class L162 {
    public int findPeakElement(int[] nums) {
        int left = 0;
        int right = nums.length - 1;

        while (left < right) {
            int mid = (left + right) / 2;
            if (nums[mid] < nums[mid + 1]) {
                left = mid + 1;
            } else {
                right = mid;
            }
        }

        return left;
    }
}

Kubernetes 쿠버네티스 기능

자동화된 롤아웃과 롤백 지원

  • 애플리케이션 또는 애플리케이션 설정 변경시 배포 기능 지원, 장애 시 롤백 지원

 

서비스 디스커버리와 로드 밸런싱

  • k8s 설계상 파드에는 모두 고유한 ip가 부여되고, 포트를 바꿔가면서 파드에 접근할 필요가 없게 되는 장점이 있습니다.
  • 파드 집합에 대한 단일 DNS명을 부여합니다. 
  • 기본적으로 인터널 DNS가 구성되고 그 다음에 로드밸런싱이 수행됩니다.
  • 인터널 DNS가 구성되기 때문에 별도의 DNS구성 없이 도메인 이름 기반의 서비스 접근이 가능해집니다.

 

 

시크릿과 구성 관리

  • 시크릿과 애플리케이션 구성을 안전하게 배포하고 업데이트 하는 기능을 지원하기 때문에 더이상 비밀번호 하드코딩을 할 필요가 없습니다. 
  • 시크릿 관리 기능을 이용해서 암호한 형태로 패스워드나 민감한 정보들을 저장 할 수 있습니다.

 

 

자동 빈 패킹 (bin packing)

  • 리소스 요구 사항과 기타 제약 조건에 따라 컨테이너를 자동으로 배치 가능하다. 

 

자가 치유

오류가 발생한 컨테이너를 재시작하고, 노드가 죽었을 때 컨테이너를 교체하기 위해 다시 스케줄하고, 사용자 정의 상태 체크에 응답하지 않는 컨테이너를 제거하며, 서비스를 제공할 준비가 될 때까지 클라이언트에 해당 컨테이너를 알리지 않습니다.

 

 

배치 실행

  • 쿠버네티스는 서비스 외에도 배치(batch)와 CI 워크로드를 관리할 수 있으며, 원하는 경우 실패한 컨테이너를 교체할 수 있습니다.

 

Horizontal 스케일링

  • 간단한 명령어나 UI를 통해서 또는 CPU 사용량에 따라 자동으로 애플리케이션의 스케일을 업 또는 다운합니다.

 

 

확장성을 고려하여 설계됨

  • 쿠버네티스 업스트림 소스 코드 수정 없이 쿠버네티스 클러스터에 기능을 추가할 수 있습니다.

 

 

참고

https://kubernetes.io/ko/

 

운영 수준의 컨테이너 오케스트레이션

운영 수준의 컨테이너 오케스트레이션

kubernetes.io

https://fastcampus.co.kr/dev_online_devopskit

 

DevOps 마스터 Kit with Linux, Kubernetes, Docker | 패스트캠퍼스

0부터 시작하는 DevOps의 모든 것! DevOps 엔지니어/SRE가 되기 위한 Linux 기초부터 Docker, Kubernetes의 활용과 이직을 위한 데브옵스 인터뷰 준비까지 이 강의 하나로 빠짐없이 학습해 보세요.

fastcampus.co.kr

 

'k8s' 카테고리의 다른 글

컨테이너 오케스트레이션 (Container Orchestration) 필요성  (0) 2023.01.17

컨테이너 오케스트레이션의 필요성

 

서비스 초기 / 개발 단계에서는 컨테이너 오케스트레이션이 필요가 없을 수 있습니다. 

  • 직접 메뉴얼한 관리가 가능
  • 관리할 서비스 개수와 서버 개수가 적기때문에 매뉴얼한 방식으로 프로비저닝과 배포를 하면서 진행 가능.
  • 도커 명령을 직접 실행해가면서 서비스를 관리.

 

서비스가 성장하면 앱을 관리할 도구가 필요해 집니다.

  • 여러 앱을 여러개의 서버에 배포를 해야 되는데 복잡도가 높아져 매뉴얼한 관리가 불가능하여 앱을 관리할 도구가 필요해짐.  >  이때 컨테이너 오케스트레이션을 활용.
  • 늘어나는 앱을 늘어나는 서버에 효율적으로 배치해 주기 위해 중간에 컨테이너 오케스트레이션이 들어가짐. app을 자동으로 배포해주고 스케일링 해주고 관리해줌.
  • app구동에 필요한 스토리지, 네트워킹, 보안과 같은 서비스를 간편하게 이용할 수 있도록 구성이 가능해짐.

 

컨테이너 오케스트레이션 도구로는 대부분 Kubernetes 사용

 

 

 

 

https://fastcampus.co.kr/dev_online_devopskit

 

DevOps 마스터 Kit with Linux, Kubernetes, Docker | 패스트캠퍼스

0부터 시작하는 DevOps의 모든 것! DevOps 엔지니어/SRE가 되기 위한 Linux 기초부터 Docker, Kubernetes의 활용과 이직을 위한 데브옵스 인터뷰 준비까지 이 강의 하나로 빠짐없이 학습해 보세요.

fastcampus.co.kr

 

'k8s' 카테고리의 다른 글

Kubernetes 쿠버네티스 기능  (0) 2023.01.17

컨테이너를 구성하는 3가지 주요 리눅스 기술

  • Control groups (cgroups)
  • Namespaces
  • Union mount filesystem

 

Namespace

  • 프로세스 별로 커널 자원을 분할(격리)하는 기능
  • 격리하는 자원 
    • Process ID (pid)
    • Network (net)
    • Filesystem/mount (mnt)
    • Inter-oric comms (ipc)
    • UTS (UTS)
    • User (user)

 

 

cgroups / namespaces 비교

cgroup

how much you can use를 제한 > 얼마나 많은 리소스를 사용할 수 있는지를 제한.

cpu, memory, network, storage I/O 에 대해서 프로세스가 쓸 수 있는 사용량을 제한합니다.

 

namespace

what you can see를 제한 > 해당 프로세스가 볼 수 있는 범위를 제한.

프로세스 자신이 파일 시스템이 볼 수 있는 범위를 제한할 수도 있고, 사용자 정보를 제한할 수도 있습니다. 

 

 

cgroup 과 namespace 두가지를 합쳐서 리눅스 컨테이너의 근간이 됩니다. 

각 자원이 격리된 환경에 있고, 그 격리된 환경에서 각각의 자원들을 얼마나 쓸지 제안을 받는것이 컨테이너 기술의 메인입니다. 

 

namespace 종류

  • PID 네임스페이스 - Process ID .정보를 격리합니다. 네임스페이스 외의 다른 프로세스에서 접근 불가능.
  • Network 네임스페이스 - 네트워크 리소스를 격리및 가상 네트워크 장치를 할당
  • User 네임스페이스 - 프로세스별로 UID, GID 정보를 격리
  • Mount 네임스페이스 -  프로세스별로 마운트 되는 파일 시스템을 격리.
  • IPC 네임스페이스 -  inter-process communication을 격리. 다른 프로세스의 접근이나 제어를 방지.
  • UTS  네임 스페이스 - 호스트명인 도메인명을 격리

 

https://fastcampus.co.kr/dev_online_devopskit

 

DevOps 마스터 Kit with Linux, Kubernetes, Docker | 패스트캠퍼스

0부터 시작하는 DevOps의 모든 것! DevOps 엔지니어/SRE가 되기 위한 Linux 기초부터 Docker, Kubernetes의 활용과 이직을 위한 데브옵스 인터뷰 준비까지 이 강의 하나로 빠짐없이 학습해 보세요.

fastcampus.co.kr

 

'linux' 카테고리의 다른 글

[Linux] cgroup으로 CPU 사용 제한하기  (0) 2023.01.14
[Linux] cgroup  (0) 2023.01.12

+ Recent posts