데브옵스
86 posts
M1 Mac에서 iTerm2 세팅하기

맥북을 아주 오래전에 산 뒤에 iTerm을 세팅해두었었는데, 어떻게 세팅했었는지 기억이 전혀 나지 않아 이번에 M1 Mac북을 사용하게 되면서 새로 iTerm2를 세팅하면서 방법을 정리해두려고 한다. M1 Mac에서 iTerm2 세팅하기 맥OS에서도 기본 터미널을 제공하지만, 기능이 더 많이 추가 되고 가독성도 좋은 iTerm2를 설치하면 생산성을 높을 수 있다. iTerm2 다운로드 iTerm을 다운로드 하기 위해서는 공식 사이트에서 다운로드 받거나, Homebrew를 설치한 경우 MacOS 패키지 관리자인 Homebrew를 사용해( 명령어 사용) 다운로드 받을 수도 있다. oh-my-zsh 설치 여러 편리한 기능을 제공하는 oh-my-zsh를 설치해보도록 하겠다. 참고로 최근 MacOS의 기본 쉘이 bash에서 zsh로 변경되어 터미널에서 zsh를 설치하는 작업은 별도로 필요 없어져서, 바로 아래 명령어를 입력하면 된다. iTerm2 테마 설정 자동완성 기능 추가 iTerm2 …

October 06, 2022
데브옵스
Linux Local Disk 관리: 디스크 추가 & 정보 보기

Linux Local Disk 관리: 디스크 추가 & 정보 보기 1. 디스크 정보 보기 1-1. 디스크 용량 단위 운영체제는 저장 장치의 단위로 바이트(Byte = 8 Bit)를 사용한다. 1bit = on/off 로 구분될 수 있는 가장 작은 단위 1 바이트 크기는 한 문자에 해당 $2^{10}$의 거듭제곱으로 계산 $2^{10}$=1024 1000바이트 단위: KB(kilobyte), MB, GB, TB, PB, EB, ZB로 표시 1000byte ⇒ 1KB, 1000KB ⇒ 1MB , 1000MB ⇒ 1GB 1024바이트 단위: KiB(kibibyte), MiB, GiB, TiB, PiB, EiB, ZiB로 표시 1024byte ⇒ 1KiB, 1024KiB ⇒ 1MiB 1-2. df 파티션 단위로 디스크 사용량 출력 리눅스 시스템의 디스크 사용량 확인 df -h ⇒ human-readable. 사람이 보기 좋게 메가(M), 기가(G)단위로 디스크 공간을 확인 df -a ⇒ a…

October 03, 2022
데브옵스
리눅스(Linux) 3-Tier Architecture

3-Tier Architecture 1. 3-Tier Architecture WEB - WAS(PHP) - DATABASE Apache, PHP, MariaDB 연동해서 게시판(그누보드) 만들기 편의를 위해 강의에서는 하나의 서버에 WEB-WAS-DB 모두 구축 (일반적으로는 각 서버를 분리) 1. MariaDB 설치 데이터베이스를 생성하고 관리하는 시스템 데이터베이스 관리 시스템(database management system, DBMS) 오픈소스 DBMS: MariaDB MariaDB를 설치하고 DB 관리자 패스워드를 설정한다. 2. Apache Web Server 설치 Web Server: NGINX, Apache Apache2를 설치하고 서비스 동작해보기. 3. PHP 설치 PHP 설치 후 Apache와 연동되었는지 확인 Apache → 동적(dynamic) 한 프로그램을 받아줄 수 없음 ⇒ PHP 필요 PHP는 Apache와 연동되어야 한다: libapache2-mod…

October 02, 2022
데브옵스
MacOS의 패키지 관리 툴 Homebrew 다운로드하기

MacOS의 패키지 관리 툴 Homebrew 다운로드하기 1. Homebrew란? Homebrew란 Ubuntu의 apt, CentOS의 yum과 같이 커맨드라인에서 사용가능한 패키지 관리자로, MacOS의 사실상 표준(De facto standard)이다. 맥스 호웰(Max Howell)이라는 개발자에 의해 개발되었으며, 루비(Ruby)기반으로 개발되었다. 2. Homebrew 다운로드 아래와 같은 명령어를 터미널에 입력해주면 간단하게 Homebrew를 설치할 수 있다. 다음으로는 다음 세 명령어를 사용해 환경변수를 설정 해준다. 3. Homebrew 사용법 Homebrew 버전 확인 먼저 명령어로 Homebrew가 잘 설치되어있는지 확인하자. 패키지 다운로드 패키지를 다운로드 받으려면 아래와 같이 명령어를 입력해주면 된다. 이번 예시에서는 을 다운로드 해볼 것이다. 패키지 파일 목록 확인 명령어로 패키지가 설치한 파일 목록을 확인할 수 있으며, 패키지 업그레이드 패키지를 …

October 01, 2022
데브옵스
리눅스(Linux) File Attribute

File Attribute 1. File attributes lsattr 리눅스 파일시스템의 파일 속성을 보는 명령어 chattr 명령어의 결과를 확인할 수 있음. chattr (Change attribute) 파일을 보호하는 명령어 파일 시스템의 파일 속성을 변경하여 파일 손상을 방지함. 속성 설정 + 속성 추가하기 - 속성 제거하기 = 원래 파일이 가지고 있는 속성 유지하기 속성 의미 A(no atime updates) Access가 발생하더라도 파일 시스템의 파일 정보에 저장되는 atime이 갱신되지 않음 a(append only) 해당 파일을 추가만 할 수 있음(파일 보안을 위해 주로 사용하는 속성) C(no copy on write) 기록 중 복사 업데이트가 적용되지 않음. c(compressed) 디스크에 자동적으로 압축된 상태로 저장됨 D(synchronous directory updates) 디렉터리의 변경사항을 동기화 시킴. d(no dump) dump 명령어로 백…

September 30, 2022
데브옵스
리눅스(Linux) SetUID, SetGID, and Sticky bit

SetUID, SetGID, and Sticky bit 10. SetUID, SetGID, and Sticky bit 1. Special Permissions on Files SetUID, SetGID, and Sticky bit | SetUID | SetUID가 설정된 프로그램이 실행될 때, 그 프로그램이 실행되는 동안에는 파일 소유자의 권한으로 권한이 변경되어 실행되는 퍼미션 user 퍼미션에 $가 설정되어있는 프로그램 ttabae$ lls -l /usr/bin/passwd -rwsr-xr-x 1 root root 68208 5월 28 2020 /usr/bin/passwd | | --- | --- | | SetGID | SetGID가 설정된 프로그램이 실해오딜 때 그 프로그램이 실행되는 동안에는 파일 소유 그룹 멤버로의 권한으로 권한이 변경되어 실행되는 퍼미션 ttabae$ ls -l /usr/bin/passwd -rwxrwsr-x 1 root root 68208 5월 28 2…

September 29, 2022
데브옵스
깃헙(Github) 액세스토큰 사용 시 refusing to allow a Personal Access Token to create or update workflow… 에러 해결

1. 배경 상황 CNCF 용어집 한글화 작업 중 기존에 올려 두었던 PR을 수정해야하는 일이 생겼는데, 수정 후 origin(원본 github repository를 fork해서 받아놓은 내 repository)에 변경사항을 push하려고 하니 아래와 같은 에러메시지가 발생했다. 에러 메시지를 읽어보면 로컬의 브랜치에서 origin의 브랜치로 push하던 중 에러가 발생했다고 한다. 에러 원인은 PAT(Personal Access Token)에 workflow scope이 포함되어있지 않아서, 라는 워크플로를 생성 혹은 업데이트가 거부되었다라는 메시지였다. 2. 해결 방법 먼저 본인 깃허브 계정에 접속해 페이지 가장 우측 상단의 프로필 아이콘을 클릭한 뒤 탭으로 접속한다. 좌측 메뉴리스트 가장 하단의 라는 버튼을 클릭한다. 그 다음 화면의 좌측 메뉴 리스트의 탭을 클릭한다. 참고로 PAT의 scope은 토큰 생성 후에도 변경이 가능하기 때문에, scope을 추가하기 …

September 28, 2022
데브옵스
리눅스(Linux) Default Permissions(umask)

Default Permissions(umask) 1. Default Permission 설정 파일과 디렉토리가 생성될 때 기본으로 적용되는 설정 예시 file1과 dir1이 생성된 직후 부여받는 permission 설정 → umask file directory default 0666 0777 umask 0002 0002 permission 0664 0775 default permission rw-rw-r— rwxrwxr-x default - umask = permission umask의 값을 변경해 기본 퍼미션을 변경할 수 있다. example

September 27, 2022
데브옵스
리눅스(Linux) Managing File Permissions

Managing File Permissions Authentication vs. Authorization https://learn.microsoft.com/ko-kr/azure/active-directory/develop/authentication-vs-authorization 1. Permission 정보 보기 permission, 허락, 권한을 뜻하는 말(나무위키) 리눅스 시스템에서는 파일이나 디렉토리에 사용자들이 접근할 수 있는 권한을 할당해서 운영 파일 소유자, 그룹 멤버들, 그 외 사용자들 read, write, execute file directory read(r) 파일의 내용을 읽기(cat, more, less…) 디렉토리 내용을 읽기(ls) write(w) 파일의 내용을 변경 디렉토리 내용을 변경 execute(x) 파일을 프로그램으로 실행 디렉토리 안에 저장된 파일의 세부 속성 확인 현재 작업 디렉토리로 설정 가능 파일의 permission 보기 d로 시작 → 디…

September 26, 2022
데브옵스
리눅스(Linux) Password Administration

Password Administration 1. Password 관련 설정파일 1-1. Password 관련 설정 파일 /etc/passwd: 계정정보 파일 login name optional encrypted password x 라는 문자를 가질 경우 실제 encrypted password는 /etc/shadow에 저장 → 이 경우 /etc/passwd에 계정정보가 생성된다. man 명령어로 매뉴얼을 확인해보자. /etc/shadow login name encrypted password: 암호화된 패스워드 man으로 파일 설명 확인 예시 혹은 !가 들어있는 경우 로그인 금지(system account(*), password lock(!)) 로그인 할 수 없는 계정의 비밀번호에 * / ! 가 쓰인 이유 암호화 알고리즘에서 절대 쓸 수 없는 문자이기 때문 date of last password change: 비밀번호 바꾼 날짜 패스워드 수정일(1970.1.1을 기준으로 카운트한 날짜…

September 25, 2022
데브옵스
리눅스(Linux) Account management

Account Management 1. User & Group 관련 betabase file들 1-1. 계정 관련 파일 /etc/passwd 시스템의 모든 계정에 대한 정보를 담고 있는 설정 파일 7개 필드로 구분. 구분자 colon() login name encrypted password: (x) → numerical user ID: root (0), system account(1999: app들이 사용), local user(100059999), system account(60000~65535) numerical group ID: root (0) User Private Group: 개인 그룹 (user가 저마다 개인 그룹을 가지고 있음) user name or comment field: user home directory(login directory): root(root), local user: user (/home/user), ttabae(/home/ttabae) login…

September 24, 2022
데브옵스
리눅스(Linux) Archiving and Compression

05. Archiving and Compression archive: 파일을 보관. 원본의 속성을 그대로 보존 및 여러개 파일/디렉토리 묶어 보존 compression: 파일을 압축. 큰 사이즈의 파일을 작은 사이즈로 압축해 보존 gzip, bzips, xz → 파일 단위로만 압축됨 파일을 전달 할 때: archive(파일을 하나로 묶어줌) → compress (압축) → 전달 & 보존이 용이 1. Archives with tar 명령어: tar, cpio 등 파일 보관 백업 여러 파일을 하나로 묶어 보존 / 전달 tar 여러 파일 혹은 디렉터리를 하나의 아카이브 파일로 모으거나 복원하기 위해 사용하는 명령어 원본의 속성을 유지한 상태로 여러 파일을 묶거나 묶은 파일을 원본으로 되돌림 GNU ‘tar’ saves many files together into a single tape or disk archive, and can restore individual files from t…

September 23, 2022
데브옵스
리눅스(Linux) 파일 퍼미션(File Permission) 및 ACL 차이

리눅스(Linux) 파일 퍼미션(File Permission) 및 ACL 차이 파일 퍼미션 vs ACL link 를 이용해 권한을 결정하는 기존 파일 퍼미션의 경우 사용자 하나와 그룹 하나만 읽기, 쓰기, 실행 권한을 가질 수 있습니다. ACL을 이용하면 추가적으로 여러 명의 사용자와 그룹도 읽기, 쓰기, 실행 권한을 가질 수 있습니다. ACL은 ‘기본값 ACL’이라는 기능을 통해 마치 를 폴더 별로 적용하는 듯한 효과를 만들 수 있습니다. 파일 퍼미션 ACL 관련 명령어 chmod, umask getfacl, setfacl 권한 지정 대상 사용자 하나, 그룹 하나(chmod) 사용자 여렷, 그룹 여럿 기본값 권한 계정 로그인 시 적용(umask) 폴더 별로 적용

September 22, 2022
데브옵스
각종 언어 및 프레임워크의 수명(End of Life) 확인하기

1. 배경 상황 이전 프로젝트에서 Open JDK 특정 버전에 대한 수명을 찾아보려고 자료를 찾다가 유용한 사이트를 발견하여 기록해 두려 한다. 제품 수명의 만료에는 EOL(End of Life)과 EOS(End of Service/End of Sales)크게 두 가지 종류가 있으며, 보통 EOS 을 선언 한 뒤 일정 기간 뒤 EOL을 선언하게 된다. EOS(End of Service/End of Sales) 제조사에서 공식적으로 해당 서비스 / 소프트웨어에 대한 생산 및 판매를 중단한다는 뜻이다. 제품에 대한 신규 판매가 중단된다는 뜻으로 기존 판매된 제품에 대한 버그 수정, 업데이트 혹은 지원 등은 계속해서 제공 될 수 있다. EOL(End of Life) 제조사에서 공식적으로 지원을 중단한다는 뜻이다. 이 시점 이후 신규 기능 추가, 성능 개선, 보안 취약점 대응 등의 지원이 불가하다. 2. 각종 언어 및 프레임 워크의 수명 확인하기 이러한 각종 소프트웨어 서비스에 대한 EO…

September 19, 2022
데브옵스
쿠버네티스(Kubernetes) 리소스 아이콘 모음

1. 배경 상황 이전 회사에서 내부 세미나를 위해 쿠버네티스 컴포넌트를 가지고 아키텍처를 그려야할 일이 생겨서 쿠버네티스 리소스 아이콘이 있는지에 대해 찾아보았다. 2. 리소스 아이콘 링크 쿠버네티스는 오픈소스 프로젝트인 만큼 리소스 아이콘에 대해서도 무료로 개방하고 있는데, 쿠버네티스 깃헙 조직 하위의 community 저장소에 들어가면 확인할 수 있다. 아래 링크를 참조하자. 링크: https://github.com/kubernetes/community/tree/master/icons 참고로 쿠버네티스 아이콘은 PNG, SVG 두가지 형태로 제공되며, 리소스 이름이 영문으로 적힌 아이콘과 그림만 표시된 아이콘 두 가지 버전을 제공하고있다(하지만 개인적으로는 리소스 도형만 보고는 어떤 리소스인지 유추하기 어려워서 이름 레이블이 달린 아이콘을 사용했었다). 자세한 사용법은 위 링크의 README 파일을 참고하면 된다(Visio용 아이콘 파일도 제공하니 참고하자).

September 18, 2022
데브옵스
NGINX 도메인경로에 www를 자동으로 추가/삭제하는 방법

1. 배경 상황 신규로 담당하게 되었던 시스템이 특정 환경에서만 접속이 되지 않아 팀원분들과 함께 원인을 찾아보던 중 ingress의 annotation 중 특이하게 설정되어있는 부분이 있어 해당 어노테이션에 대해 찾아보게 되었다. 내가 눈여겨 보았던 어노테이션은 도메인 경로에서 라는 하위 도메인을 자동으로 추가하는 설정이었는데, 테스트를 위해 해당 시스템의 도메인 정보를 사전에 받았을 때, 하위 도메인이 포함되어있지 않았었다. 따라서 www라는 하위 도메인으로 redirect하는 설정때문에 시스템 접속에 문제가 생긴 것이 아닐까 하고 추측했었다. 하지만 이 설정은 다른 분이 시스템 접속 이슈를 해결하고자 이것 저것 시도해보시다가 들어가게 된 설정이었고, 해당 설정을 하기 전에도 시스템 접속에 문제가 있었던 상황이었다(그리고 해당 이슈의 원인도 결국은 도메인 주소의 문제가 아니라 mime-type 설정의 문제로 밝혀졌다). 2. 설정 방법 NGINX Ingress control…

September 09, 2022
데브옵스
Git / Github 변경사항 없이 커밋 다시 푸시하기(git commit --amend --no-edit)

1. 배경 상황 OSSCA 쿠버네티스 한글화팀에서 기여작업을 진행하게 되면, netlify의 알 수 없는 실패 등의 이유로 이미 올린 PR에 커밋을 다시 푸시할 일이 생긴다. 한글화팀 지난 미팅에서 다른 멘티님들이 이 때 사용할 수 있는 유용한 깃 명령어를 알려주셨었는데, 이번에 CNCF Glossary 한글화 작업을 하다 마침 해당 명령어를 사용해야 해서 내용을 정리해보았다. 참고로 CNCF Glossary프로젝트의 dev-ko 브랜치(한글화 작업용 브랜치) 관리 작업 중에, upstream/dev-ko에 특정 커밋의 hash가 변경되는 상황이 발생해 내가 올린 PR에 해당 hash가 변경되기 이전 커밋이 자동으로 추가 된 상황으로, upstream에 대한 업데이트 & rebase를 진행해 다시 푸시를 해야하는 상황이었다. 참고로 아래 내용들은 상황을 설명하기 위한 것으로 이번 포스팅의 주제인 git 변경사항 없이 커밋을 다시 푸시하는 방법을 바로 보고싶다면 2번 항목으로 바로 …

September 08, 2022
데브옵스
Oracle JDBC drive(ojdbc)란 및 호환 JDK버전

1. 배경 상황 진행하고 있던 프로젝트에서 Oracle DB 버전 업데이트로 인해 ojdbc 라이브러리 파일을 교체했는데, JDBC 자체의 개념에 대해 어렴풋이 이해하기만 하고 깊게 생각해 본 적이 없는 듯해 정리해두려 한다. 2. JDBC란? JDBC란 Java Database Connectivity의 약자로, 자바(Java)에서 데이터베이스에 접근할 수 있게 해주는 API이다. Java는 DBMS(Oracle, MySQL 등)의 종류에 관계 없이 하나의 JDBC 인터페이스I를 이용해 데이터 베이스 작업을 처리하게 된다. 각 데이터베이스 벤터 혹은 서드파티에서 이러한 JDBC 인터페이스를 구현한 드라이버를 제공하고 있다. JDBC는 아래와 같은 역할을 수행한다. Java 코드에서 데이터베이스 서버 접속 SQL문을 구성하고 데이터베이스 서버에서 실행 데이터베이스에서 처리한 결과를 가져옴 데이터베이스 정보 가져옴 3. Oracle JDBC와 JDK 버전 호환성 먼저, ojdbc의 버…

September 04, 2022
데브옵스
Git/Github - upstream이란? upstream 원격 저장소 추가하는 방법

1. 배경 상황 최근 쿠버네티스 한글화 프로젝트를 비롯한 오픈소스 프로젝트에 기여를 진행하고 있는데, 필요할 때 매번 관련 명령어를 찾기 귀찮아서(?) 블로그에 기록해놓으려고 한다. 2. upstream이란? 쿠버네티스 공식문서와 같은 오픈소스 프로젝트의 경우에는 작업자가 로컬에서 바로 원본 저장소로 코드를 push하는 형태가 아니라 개인 원격 저장소(ex. 깃허브)에 fork(소스코드를 복사하는 개념과 유사하다고 생각하면 된다) 한다. 그리고 로컬에서 작업한 내용을 먼저 개인 원격 저장소에 push한 뒤, 원본 저장소에 pull request(repository 측에서 내 수정사항을 당겨받아(pull)달라는 요청)를 올려 관리자의 승인을 받아 반영을 하게 된다. 이 때, 원본 브랜치를 , 내 개인 원격 저장소를 이라고 한다. 이렇듯, 은 일반적으로 fork한 원본 저장소를 뜻하고, 은 fork한 저장소를 뜻하게 된다(다만 fork를 하지 않고, 원본 저장소에 작업자가 바로 pus…

August 18, 2022
데브옵스
MacOS/Linux - CLI환경에서 디렉터리 구조 한눈에 보는 방법(tree 명령어 다운로드)

최근 Django 튜토리얼에 따라 실습을 진행하고 있는데, IDE외에 CLI도 꽤 사용하고 있어서 CLI환경에서 디렉터리 구조를 한 눈에 보고 싶어 를 다운받았다. 는 CLI 환경에서 디렉터리 구조를 표시해주는 패키지로 MacOS나 Ubuntu의 경우 기본설치가 되어있지 않아 별도로 다운받아야 한다. 1. 설치 방법 macOS의 경우 패키지 매니저인 로 간단하게 를 다운로드 받을 수 있다. 리눅스의 경우 마찬가지로 혹은 과 같은 패키지 매니저를 이용해 다운로드 받을 수 있다. 2. 사용 예시 디렉터리 구조를 파악하고 싶은 디렉터리로 이동해 tree 명령어를 사용하면 된다.

August 17, 2022
데브옵스
쿠버네티스(Kubernetes) Pod to Local 파일 복사하는 방법

1. 배경 상황 쿠버네티스 기반 컨테이너 마이그레이션 프로젝트에서 Pod 내의 파일을 local로 다운받아달라는 요청이 들어왔다. 이전 담당 시스템에서도 비슷한 요청(로그 파일을 다운받아달라는 요청)이 있었으나 그 때 당시 알아보았을 때에는 다운로드가 되지 않아 다른 방법을 취했었는데, 이번에 요청을 받고 알아보니 당시와는 환경이 달라 아주 간단하게 파드(Pod)에서 로컬(local)로 파일을 다운로드 받을 수 있었다. 참고로 이전 담당시스템에서 local 복사가 불가했던 이유는 시스템에서 내가 kubectl을 사용할 수 없었기 떄문(kubectl을 사용할 수 있는 권한이 없었기 때문)이었다. 이 때에는 로컬 다운로드 대신 해당 파일을 파드에 마운트해 둔 NAS로 옮겨 운영팀에서 직접 NAS에 접속해 확인 및 다운로드를 하실 수 있도록 처리 했었다. 2. 쿠버네티스 Pod - Local 환경간 파일 복사 쿠버네티스 파드에서 local로 파일을 복사하려면 명령어를 사용해주면 된다(…

August 02, 2022
데브옵스
깃헙(github) 중간 커밋 삭제하기(git rebase -i / git drop)

1. 배경 상황 오픈소스 컨트리뷰션 아카데미에서 쿠버네티스 한글화 프로젝트를 진행중인데, 커밋들이 섞여 올라가서 중간 커밋을 삭제해야하는 상황이 발생했다. 조금 더 구체적으로 설명하자면, 내가 한글화 작업을 진행할 때에는 task별로 이슈를 생성하고(혹은 이미 생성된 이슈에 코멘트를 달아 task를 할당 받고), 이슈별로 PR을 생성해 올리고 있다. 그리고 이슈별로 로컬 브랜치를 생성해 작업 내역들을 분리해 관리하고 있는데… 작업 도중에 외출하고 다녀와서 다른 브랜치로 전환해 작업하다보니 다른 이슈에 대한 작업 커밋을 같이 섞어 올려버렸다🤦 (PR을 생성하기 전에는 항상 git log와 git status를 생활화 하도록 하자…) 2. 해결 방법 순간 PR을 얼른 삭제하고 git reset으로 커밋내역을 싹 감아올린 다음에 새로 작업해서 올릴까 했지만 아무리 생각해도 너무 비효율적인 방법인 듯 해 구글링을 해보니 중간 커밋 내역만 삭제하는 방법이 있었다. 먼저 로 interac…

August 01, 2022
데브옵스
Git에서 .gitignore가 적용이 되지 않는 에러 해결 방법

1. 배경 상황 며칠 전 에 대해 알아보는 포스팅을 올린 적이 있는데, 관련해서 를 적용했음에도 불구하고 커밋 내역에 해당 파일이 계속 남아잇는 문제가 발생해 해결 방법을 적어두려 한다. 2. 해결 방법 에 파일을 추가했음에도 불구하고 파일이 계속해서 커밋 목록에 남아 있는 것은 에 파일을 추가하기 전 stage에 올라갔던 파일들이 캐시가 남아있어 커밋 목록에 뜨게 되는 것이라고 한다. 따라서 해당 파일이 들어 있는 디렉터리로 이동한 후, 아래와 같이 캐시를 삭제해주는 명령어를 입력해주면 된다. ; 현재 디렉터리를 지정 이렇게 캐시를 지운 뒤, git add와 git commit으로 다시 커밋을 생성해주면 이제 가 제대로 적용되는 것을 확인할 수 있다.

July 23, 2022
데브옵스
Git의 .gitignore란? (+사용방법)

는 지금까지 업무에서 종종 사용하고 있었는데, 집에서 Django 실습 진행하다가 를 사용할 일이 생겨 다시금 개념과 사용 방법을 정리해두려 한다. 1. .gitignore란? 프로젝트 내에 remote 저장소에 올리고 싶지 않은 파일이 있을 경우 Git에서 제외할 수 있는 설정 파일이다. 일반적으로 IDE tool과 관련된 설정파일(예를 들면 이클립스의 나 파일), 백업파일이나 로그, 컴파일/빌드가 완료된 파일, 시크릿 정보(AWS root 계정 접속 key나 Django secret key 등)을 제외할 때 사용한다. 2. .gitignore 사용법 .gitignore 파일은 항상 최상위 디렉터리에 존재해야 한다고 한다. .gitignore 파일을 생성 후, 제외할 파일명을 지정해주면 되는데, 여러 옵션을 사용할 수 있다. 위와 같이 제외할 파일을 지정한 뒤에는 GitHub과 같은 원격 저장소에 소스코드와 함께 를 push 해주면 적용된다.

July 20, 2022
데브옵스
마이크로서비스(Microservice)란?

1. 모놀리틱 아키텍처 vs 마이크로서비스 아키텍처 (1) 모놀리틱 아키텍처(Monolithic Architecture) 애플리케이션의 모든 구성 요소가 한 프로젝트에 통합되어있다. 기능별로 독립적이지 않다(예: 한 프로젝트 내에 기능을 폴더로 구분) (2) 마이크로서비스 아키텍처(Microservice Architecture) 하나의 큰 애플리케이션을 작은 애플리케이션으로 쪼개 변경과 조합이 가능하도록 만든 것. 기능별로 독립적인 서비스를 구성한다(예: 기능별 도커 컨테이너 생성) 마틴 파울러와 제임스 루이스에 의하면 마이크로 서비스는 아래와 같다. In short, the microservice architectural style is an approach to developing a single application as a suite of small services, each running in its own process and communicating with light…

July 08, 2022
데브옵스
Github/Git 여러 개의 커밋을 한개로 합치기(git rebase -i HEAD~3/git squash)

1. 배경 상황 올해 2022년 오픈소스 컨트리뷰션 아카데미에 쿠버네티스 한글화 프로젝트가 추가되었다는 소식을 듣고 헐레벌떡 신청했다. 신청하고나니 될지 안될지는 모르지만 컨트리뷰션 아카데미 가이드에 기재된 내용을 보고 예습 겸 PR을 올려보면 좋을 듯 해 쿠버네티스 공식문서의 한글화 가이드와 유투브 영상을 보고 따라서 PR을 올려보았다(두근두근). 하지만… 2022-06-19-Github_Git_Rebase_Squash1.png 내가 번역한 문서에 링크되어있는 YAML파일들이 한국어 버전에 존재하지 않아 빌드에러가 발생했다. 다행히 리뷰어님께서 친절히 해결 방법을 알려주셔서 검색해보니, git squash라는 명령어가 따로 존재하는 건 아니고, interactive rebase의 옵션 중 하나가 squash였다. 2. git rebase -i로 여러 개의 커밋을 한개로 합치는 방법 위에서도 말했듯, 여러 개의 커밋 내역을 한개로 합치려면 (여기서 i는 interactive의 …

June 19, 2022
데브옵스
쿠버네티스(Kubernetes) HPA “failed to get memory utilization: missing request for memory” / Pod의 current metric = Unknown 에러 해결

1. 배경 상황 컨테이너 전환 프로젝트 진행 중 운영 파드들에는 리소스 사용량이 증가하면 스케일아웃(scale-out)을 하도록 HPA를 설정해두었었는데, HPA에서 일부 파드의 현재 메트릭을 수집하지 못해 상태로 떠있게 되었다. 이렇게 될 경우 실제 사용 HPA에서 설정해 둔 리소스의 임계값을 넘게 되어도 오토 스케일링이 작동하지 않게되는 문제가 발생한다. HPA(Horizontal Pod Autoscaler): 리소스 사용량에 따라 쿠버네티스의 워크로드 리소스(디플로이먼트 혹은 스테이트풀셋)를 스케일 아웃(scale-out)하는 오브젝트. 참고로 daemonset은 HPA설정이 불가하다. 2. 해결 방법 경험 상 HPA의 현재 메트릭이 상태로 빠지는 건 아래의 두 가지 경우 중 하나였다. 1. Deployment, ReplicationController, Statefulset의 replica가 0인 경우 HPA는 쿠버네티스의 metrics-server로부터 받은 현재 리소…

June 16, 2022
데브옵스
쿠버네티스 공식문서 번역 - 파드 디버그(Debug Pods)

참고: 쿠버네티스 한글화에 참여하려고 번역했던 문서이나 중복으로 업로드 하지 않음. [Kubernetes]번역 - 파드 디버그 원문: https://kubernetes.io/docs/tasks/debug/debug-application/debug-pods/ 이 가이드는 쿠버네티스에 배포되었으나 제대로 동작하지 않는 애플리케이션을 디버깅하는 유저들을 돕기 위한 것이다. 이 문서는 클러스터를 디버깅하고 싶어하는 사람들을 위한 가이드가 아니다. 클러스터 디버깅을 위해서는 이 가이드를 확인하자. 문제를 진단 트러블슈팅의 첫 단계는 분류이다. 무엇이 문제일까? 파드일까? 레플리케이션 컨트롤러일까? 아니면 서비스일까? 파드 디버그 레플리케이션 컨트롤러 디버그 서비스 디버그 파드 디버그 파드를 디버깅할 떄의 첫 단계는 파드를 살펴보는 것이다. 파드의 현재 상태와 최근 이벤트들을 다음 명령어로 확인하자. 파드 내 컨테이너들의 상태를 확인한다. 모두 인가? 최근에 재시작이 있었는가? 파드의 상태에…

June 15, 2022
데브옵스
Github Pages/Blog 마크다운에서 토글(Toggle) 버튼 / Expander control(접기/펼치기 기능) 만들기

💡 마크다운에서 토글(Toggle) 버튼 / Expander control(접기/펼치기 기능)을 만드려면 HTML의 Details 태그를 활용하자. 최근 기술 면접 관련한 자료를 깃헙 코드 저장소에 하나씩 업로드 하고 있는데, 다른 레포지토리를 보니 예상 질문/답변을 작성할 때 토글버튼을 이용하면 깔끔하게 정리할 수 있어 내 레포지토리에도 적용하기위해 찾아보았다. 결론적으로는, 마크다운(Markdown) 문법 자체를 이용해 토글(Toggle) 버튼 / Expander Control(접기/펼치기) 기능을 만드는 건 불가능하고, 그 대신 html의 details 태그를 이용해 만들 수 있다고 한다. 1. 를 이용한 Toggle/Expander Control 예시 : jekyll에서 html사이에 있는 markdown 문법을 인식시키기 위한 코드 2. 출력 예시 펼쳤을 때 보이는 내용입니다. 펼쳤을 때 보이는 내용입니다.

June 11, 2022
데브옵스
NGINX/Contour에서 HTTP ⇒ HTTPS 자동 리다이렉션 옵션 끄기(auto-redirect)

💡 NGINX에서 HTTPS 자동 리다이렉션 설정은 annotation에서(기본값=off), Contour에서 HTTPS 자동 리다이렉션 설정은 spec 하위에서(기본값=on) 설정한다 1. 발생 상황 현재 컨테이너 이관 프로젝트를 진행 중인데, 프로젝트 초기에 http 기반으로 되어있는 담당 시스템이 이관 후에는 http로 접속해도 https로 리다이렉션 되는 현상이 발생했다. http로 보낸 요청이 https로 변경되어 전송되어 컨테이너에서 요청을 제대로 인식하지 못해 http를 https로 변경하는 옵션을 찾아서 disable 시켜야하는 상황이었다. 현재 프로젝트가 VMware의 Tanzu Kubernetes Cluster라는 솔루션 기반에서 동작하고 있어 같은 VMware에서 시작한 오픈소스들을 많이 사용하고 있었는데, 그래서 Ingress Controller도 일반적으로 사용하는 NGINX가 아닌 Contour라는 솔루션을 사용하고 있었다. 2. 설정 방법 - Cont…

June 10, 2022
데브옵스
쿠버네티스(Kubernetes) Certified Kubernetes Administrator(CKA) 시험 합격 후기: 공부 방법, 문제 유형, 시험 개요 등

2022년 5월 22일에 봤던 Certified Kubernetes Administrator(이하 CKA)자격증 시험 결과가 나와 바로 올리는 따끈따끈한 후기. CKA(Certified Kubernetes Administrator)는 작년 10월 말 새로운 회사에서 데브옵스 엔지니어로 근무하기 시작하면서부터 계속 따려고 생각했던 자격증. 사실 다른 자격증 준비과 기타 공부에 밀려 미루고 있다가 회사에서 자격증 챌린지(!)를 한다는 소식에 이제 더는 미룰 수 없겠다 싶어 취득하게 되었다(그리고 사내 자격증 챌린지는 무사히 1등을 따냈다는 후문😉). CKA 시험 개요 CKA 자격증 시험은 쿠버네티스(Kubernetes) 오픈소스 프로젝트를 관리하는 Linux Foundation 산하의 Cloud Native Computing Foundation(CNCF)라는 단체에서 주관하는 시험이다. CNCF에서 제공하는 쿠버네티스 관련 자격시험은 CKA, CKAD, CKS 총 3가지로, 그 중 …

May 24, 2022
데브옵스
쿠버네티스(Kubernetes) CKA - KillerKoda Q11. Scheduling Priority

Q11. 스케줄링 우선순위(Priority) 네임스페이스에서 가장 높은 우선순위를 가진 파드를 찾아 지우자. 팁 우선순위(Priority)는 파드 정의에 있는 속성(attribute)이다. 해결 방법

May 21, 2022
데브옵스
쿠버네티스(Kubernetes) CKA - KillerKoda Q10. RBAC User Permissions

1. RBAC 사용자 권한 라는 기본 네임스페이스가 존재한다. 사용자는 application 네임스페이스에서 파드, 디플로이먼트, 스테이트풀셋의 생성, 삭제를 할 수 있어야 한다. 사용자는 을 제외한 모든 네임스페이스의 권한을 가지고 있어야 한다. 를 통해 검증하자. RBAC 정보 RBAC 리소스에 대해 얘기해보자. Clusterrole/Role은 전체클러스터 혹은 단일 네임스페이스에서의 사용 가능한 권한들의 집합이다. ClusterRoleBinding/RoleBinding 은 전체 클러스터 혹은 단일 네임스페이스에서의 권한 범위를 계정과 연결한다. 따라서 4가지의 RBAC 조합이 있으며, 이 중 3개만 유효하다. Role + RoleBinding (단일 네임스페이스에서 사용가능하며, 단일 네임스페이스에 적용) Clusterrole + ClusterRoleBinding (전체 클러스터 범위에서 사용가능하며, 전체 클러스터 범위에 적용) Clusterrole + RoleB…

May 21, 2022
데브옵스
쿠버네티스(Kubernetes) CKA - KillerKoda Q9. RBAC Service Account Permission

Q9. 서비스 어카운트 권한(Service Account Permission) 기존 네임스페이스 , 가 존재하는데, 이라는 서비스 어카운트를 두 네임스페이스에 생성하자. 이 서비스 어카운트는 전체 클러스터의 거의 모든 것을 볼 수 있도록 허용해야하며, 기본 Clusterrole인 를 이용할 수 있다. 이 서비스 어카운트는 , 네임스페이스에서 디플로이먼트를 생성하고 삭제할 수 있어야 한다. 를 사용해 검증하자. RBAC 정보 RBAC 리소스에 대해 얘기해보자. Clusterrole/Role은 전체클러스터 혹은 단일 네임스페이스에서의 사용 가능한 권한들의 집합이다. ClusterRoleBinding/RoleBinding 은 전체 클러스터 혹은 단일 네임스페이스에서의 권한 범위를계정과 연결한다. 따라서 4가지의 RBAC 조합이 있으며, 이 중 3개만 유효하다. Role + RoleBinding (단일 네임스페이스에서 사용가능하며, 단일 네임스페이스에 적용) Clusterrol…

May 21, 2022
데브옵스
쿠버네티스(Kubernetes) CKA - KillerKoda Q6. ConfigMap Access in Pods

Q6. 파드(POD)에서의 컨피그맵(ConfigMap) 접근 라는 내용을 갖고있는 라는 이름의 ConfigMap 을 생성하자 로 ConfigMap을 생성하자 팁 해결 방법

May 21, 2022
데브옵스
쿠버네티스(Kubernetes) CKA - KillerKoda Q8. NetworkPolicy

Q8. 네트워크 폴리시의 네임스페이스 선택 네임스페이스 & 에 기존 파드들이 존재한다. 네임스페이스 에 있는 모드 파드들이 네임스페이스 의 파드들로만 외부로 향하는 트래픽을 보낼 수 있도록 제한하는 라는 이름의 네트워크 폴리시가 필요하다. 또한 라는 이름으로 네임스페이스 의 파드들이 의 파드로부터 들어오는 트래픽만 받도록 설정해야한다. 네트워크 폴리시는 53포트의 DNS 트래픽과 TCP, UDP 트래픽을 허용해야 한다. 팁 학습을 위해 네트워크 폴리시 에디터를 확인해보자. 네트워크 폴리시의 는 네임스페이스 레이블로 작동한다. 따라서 네임스페이스들의 기존 레이블을 확인하자. 해결 방법 파트 1 첫번째 네트워크 폴리시를 생성하자. 해결 방법 파트 2 두번째 NP를 생성해보자. 검증

May 21, 2022
데브옵스
쿠버네티스(Kubernetes) CKA - KillerKoda Q7. Ingress Create

(참고: 문제가 생성되다 중단된 듯 하다. 문제에서는 서비스 까지만 생성하도록 안내되어있다.) Q7. 인그레스(Ingress) 생성 네임스페이스에 기존 두 개 디플로이먼트(deployment)가 존재하는데, Ingress를 통해 접근 가능해야한다. 먼저 두 개의 디플로이먼트를 위해 포트 80을 사용하는 서비스(Service)들을 생성한다. 각 서비스는 디플로이먼트와 동일한 이름이어야한다. 팁 해결 방법

May 21, 2022
데브옵스
쿠버네티스(Kubernetes) CKA - KillerKoda Q5. Application Multi Container Issue

Q5. 애플리케이션 멀티 컨테이너 이슈 네임스페이스에 멀티 컨테이너 디플로이먼트(Deployment)가 있으나 이슈가 있어 ready상태가 되지 않은 듯 하다. 파일에 모든 컨테이너의 로그를 기록하자. 장애의 원인이 보이는가? 팁 해결 방법 이슈는 두 컨테이너가 모두 80번 포트에서 리스닝하려는 프로세스를 갖고있기 때문으로 보인다. 컨테이너 순서와 속도에 따라서 처음 컨테이너가 성공하면 다른 쪽 컨테이너가 실패하게 된다.

May 21, 2022
데브옵스
쿠버네티스(Kubernetes) CKA - KillerKoda Q4. Application Misconfigured

Q4. 애플리케이션 설정 오류 네임스페이스에 디플로이먼트가 있으나, 이슈가 있어 준비(Ready)상태가 되지 않은 듯하다. 다른 리소스가 아닌 디플로이먼트(Deployment)만을 수정해 이슈를 해결하자. 팁 해결 방법 명령어로 장애가 발생한 디플로이먼트를 살펴보자. ConfigMap 에서 문제가 발생한 듯 하다. configmap 정보를 살펴보자. 틀린 ConfigMap 이름을 사용한 듯 하다. 설정을 바꿔주자. 조금 기다리면 모든 레플리카가 ready상태인 것을 볼 수 있다.

May 21, 2022
데브옵스
쿠버네티스(Kubernetes) CKA - KillerKoda Q3. Apiserver Misconfigured

Q3. API서버 설정 오류 먼저, API서버 장애 실습을 풀지 않았다면 풀고 오도록 하자. API 서버가 올라오지 않는 상황이다. 매니페스트 파일의 3곳이 잘못 설정되어있다. 에러를 수정하자. 로그 경로 확인해야할 로그 경로는 아래와 같다. + + (도커가 사용될 경우) kubelet 로그: 혹은 이슈 변경사항을 적용하기 위해 다음의 작업을 해야할 수 있다. 파일을 manifests 디렉토리에서 뺀다 API 서버 컨테이너가 사라질때까지 기다린다 ( ) 매니페스트 파일을 다시 돌려놓은 뒤 api서버가 돌아올 때까지 기다린다. 일부 유저들이 kubelet을 재시작해야했다고 보고 했으나() 이론상으로는 필요없다. 해결 방법 1 Kubelet이 파드/컨테이너를 시작도 생성하지도 못하고 있다. Kubelet로그를 syslog로 확인해보자. manifest파일의 metadata 부분에 오타가 있다 를 로 수정해준다. 해결 방법 2 잘못된 YAML을 수정한 뒤에도 …

May 21, 2022
데브옵스
쿠버네티스(Kubernetes) CKA - KillerKoda Q1. Vim Setup

1. KillerKoda란? CKA(Certified Kubernetes Administrator) 시험을 신청하게 되면 Killer.sh 이라는 모의 시험 환경이 제공되는데, 이번에 시험을 신청해보니 Killer.sh 외에도 Killer.sh을 만든 팀에서 KillerKoda라는 실습환경도 제공하고 있어 한 번 풀어보았다. Killer.sh 과 KillerKoda의 차이점은 아래와 같다. [Killer.sh] 시험환경과 유사한 인터페이스를 제공하는 모의고사 CKA 시험을 신청했을 때 접속할 수 있다 동일한 문제가 들어있는 두 개의 시뮬레이터를 제공 각 시뮬레이터는 활성화 한 뒤 36시간동안만 접속할 수 있다 채점 및 해설 제공 난이도: 높은 편(개인적으로 유데미의 CKA 바이블 뭄샤드님의 강의에서 제공하는 모의고사보다 훨씬 어려웠다) [KillerKoda] CKA 실제 시험과는 다소 다른 인터페이스 시간 제한 없이 누구나 무료로 이용할 수 있다 일부 채점 및 해설 제공 난이도: …

May 21, 2022
데브옵스
쿠버네티스(Kubernetes) CKA - KillerKoda Q2. Apiserver Crash

Q2. API서버 장애 이 실습에서는 API서버가 여러 방식으로 망가지도록 잘못 설정한 뒤, 에러를 확인할 수 있는 로그 경로를 확인한다. 당신은 API서버가 올라오지 않는 상황에 익숙해져야 한다. API서버 매니페스트 파일에 이라는 신규 인자(argument)를 설정하자. 파드가 다시 올라오는지 확인하고, 이 설정이 어떤 로그를 발생시키는지 확인하자. 로그 경로 아래는 확인해야할 로그 경로이다. + + (컨테이너 런타임으로 도커를 사용할 경우) Kubelet 로그: 혹은 해결 방법 API 서버가 돌아오지 않는다. 변경사항을 취소하고 다음 실습으로 넘어가자.

May 21, 2022
데브옵스
쿠버네티스(Kubernetes) CKA 모의고사 3.9 - 디플로이먼트(Deployment) 트러블슈팅

1. 모의고사 3.9 - 디플로이먼트(Deployment) 트러블슈팅 1. 문제 요건 We have created a new deployment called . scale the deployment to 3 replicas. Has the replica’s increased? Troubleshoot the issue and fix it. deployment has 3 replicas 2. 내 풀이 1. 사전 작업 kubectl 자동완성 설정을 미리 진행한다(이미 진행한 경우 불필요). 2. 디플로이먼트(Deployment) 트러블슈팅 명령형 커맨드로 디플로이먼트를 3으로 증가시킨다 nginx-deploy의 상세정보를 살펴본다. 특별한 에러 메시지는 보이지 않는다. kube-system 네임스페이스의 kube-controller-manager가 제대로 동작하지 않는다(). kube-controller-manager 파드의 상세 설정을 확인한다. Image: k8s.…

May 19, 2022
데브옵스
쿠버네티스(Kubernetes) CKA 모의고사 3.7 - 레이블(Label)이 여러 개인 파드 생성하기

모의고사 3.7 - 레이블(Label)이 여러 개인 파드 생성하기 1. 문제 요건 Create a pod called  in  namespace belonging to the   and   .image:  Use appropriate labels and create all the required objects if it does not exist in the system already. hr-pod labeled with ? hr-pod labeled with ? 2. 내 풀이 1. 사전 작업 kubectl 자동완성 설정을 미리 진행한다(이미 진행한 경우 불필요). 2. 레이블(Label)이 여러 개인 파드 생성 명령형 커맨드로 파드 생성하기 네임스페이스가 없다는 에러 발생 네임스페이스를 생성한다. 다시 명령형 커맨드로 파드를 생성한다. 명령어로 파드가 잘 생성되었는지 확인한다. 3. 참고 URL kubectl 치트 시트: https://kubernetes.io/ko/d…

May 19, 2022
데브옵스
쿠버네티스(Kubernetes) CKA 모의고사 3.6 - 테인트(Taint) & 톨러레이션(Toleration) 적용하기

1. 모의고사 3.6 - 테인트(Taint) & 톨러레이션(Toleration) 적용하기 1. 문제 요건 Taint the worker node  to be Unschedulable. Once done, create a pod called , image , to ensure workloads are not scheduled to this worker node. Finally, create a new pod called  and image:  with toleration to be scheduled on . key: , value: , operator:  and effect:  Key = env_type Value = production Effect = NoSchedule pod ‘dev-redis’ (no tolerations) is not scheduled on node01? Create a pod ‘prod-redis’ to run on node01 2. 내 풀이 1. 사전 …

May 19, 2022
데브옵스
쿠버네티스(Kubernetes) CKA 모의고사 3.4 - 시큐리티 폴리시(Security Policy)가 적용된 파드(POD) 생성하기

1. 모의고사 3.4 - 시큐리티 폴리시(Security Policy)가 적용된 파드(POD) 생성하기 1. 문제 요건 Create a Pod called  , image: runAsUser: 1000 fsGroup: 2000 Pod non-root-pod fsGroup configured Pod non-root-pod runAsUser configured 2. 내 풀이 1. 사전 작업 kubectl 자동완성 설정을 미리 진행한다(이미 진행한 경우 불필요). 2. 시큐리티 폴리시(Security Policy)가 적용된 파드(POD) 생성 명령형 커맨드로 파드의 매니페스트 파일을 만들어 저장한다. 생성한 매니페스트 파일을 문제 요건에 맞게 수정한다. 명령어로 파드를 생성한다. 명령어로 컨테이너가 잘 생성되었는지 확인한다. 3. 참고 URL kubectl cheat sheet: https://kubernetes.io/ko/docs/reference/kubectl/cheatshe…

May 19, 2022
데브옵스
쿠버네티스(Kubernetes) CKA 모의고사 3.8 - kubeconfig 파일 트러블슈팅

1. 모의고사 3.8 - kubeconfig 파일 트러블슈팅 1. 문제 요건 A kubeconfig file called  has been created under . There is something wrong with the configuration. Troubleshoot and fix it. Fix /root/CKA/super.kubeconfig 2. 내 풀이 1. 사전 작업 kubectl 자동완성 설정을 미리 진행한다(이미 진행한 경우 불필요). 2. kubeconfig 파일 트러블슈팅 명령어로 해당 kubeconfig 내용을 확인한다. control plane과 통신하는 포트번호가 9999 쿠버네티스 클러스터와 통신하려면 kube-apiserver를 통해 통신해야하는데, kube-apiserver의 기본 포트는 6443이다. 포트번호를 6443으로 고친다. 3. 참고 URL Ports and Protocols: https://kubernetes.io/docs/re…

May 19, 2022
데브옵스
쿠버네티스(Kubernetes) CKA 모의고사 3.3 - 멀티컨테이터 파드(Multi-Container POD) 생성하기 및 파드(POD)연결

3.3 - 멀티컨테이터 파드(Multi-Container POD) 생성하기 1. 문제 요건 Create a pod called  with two containers.Container 1, name: , image: Container 2: name: , image: , command: Environment Variables:container 1:Container 2: Pod Name: multi-pod Container 1: alpha Container 2: beta Container beta commands set correctly? Container 1 Environment Value Set Container 2 Environment Value Set 2. 내 풀이 1. 사전 작업 kubectl 자동완성 설정을 미리 진행한다(이미 진행한 경우 불필요). 2. 멀티컨테이터 파드(Multi-Container POD) 생성 명령형 커맨드로 컨테이너가 하나 있는 파드의 매니페스트 파…

May 19, 2022
데브옵스
쿠버네티스(Kubernetes) CKA 모의고사 3.5 - 네트워크 폴리시(Security Policy) 적용하기

1. 모의고사 3.5 - 네트워크 폴리시(Network Policy) 적용하기 1. 문제 요건 We have deployed a new pod called  and a service called . Incoming connections to this service are not working. Troubleshoot and fix it.Create NetworkPolicy, by the name  that allows incoming connections to the service over port . Important: Don’t delete any current objects deployed. Important: Don’t Alter Existing Objects! NetworkPolicy: Applied to All sources (Incoming traffic from all pods)? NetWorkPolicy: Correct Port? NetWorkPolicy: Appl…

May 19, 2022
데브옵스
쿠버네티스(Kubernetes) CKA 모의고사 3.2 - JSON PATH로 노드 Internal IP 출력하기 및 파드(POD) 연결하기

모의고사 3.2 - JSON PATH로 노드 Internal IP 출력하기 1. 문제 요건 List the  of all nodes of the cluster. Save the result to a file . Answer should be in the format:  (in a single line) Task Completed 2. 내 풀이 1. 사전 작업 kubectl 자동완성 설정을 미리 진행한다(이미 진행한 경우 불필요). 2. JSON PATH로 노드 Internal IP 출력 및 파드(POD) 연결 쿠버네티스 치트시트에서 가장 유사한 명령어를 찾아 복사한 뒤 수정한다. 문제에서 지정한 경로에 저장한다. 명령어로 잘 저장되었는지 확인한다. 3. 참고 URL kubectl cheat sheet: https://kubernetes.io/ko/docs/reference/kubectl/cheatsheet/

May 19, 2022
데브옵스
쿠버네티스(Kubernetes) CKA 모의고사 3.1 - 서비스 어카운트(Service Account) 생성 및 파드(POD)연결

모의고사 3.1 - 서비스 어카운트(Service Account) 생성 및 파드(POD)연결 1. 문제 요건 Create a new service account with the name . Grant this Service account access to  all PersistentVolumes in the cluster by creating an appropriate cluster role called  and ClusterRoleBinding called .Next, create a pod called  with the image:  and serviceAccount:  in the default namespace. ServiceAccount: pvviewer ClusterRole: pvviewer-role ClusterRoleBinding: pvviewer-role-binding Pod: pvviewer Pod configured to use ServiceAccount pvv…

May 19, 2022
데브옵스
쿠버네티스(Kubernetes) CKA 모의고사 2.8 - 스태틱 파드(Static Pod) 생성하기

모의고사 2.8 - 스태틱 파드(Static Pod) 생성하기 1. 문제 요건 Create a static pod on  called  with image  and make sure that it is recreated/restarted automatically in case of a failure. Use  as the Static Pod path for example. static pod configured under /etc/kubernetes/manifests ? Pod nginx-critical-node01 is up and running 2. 내 풀이 1. 사전 작업 kubectl 자동완성 설정을 미리 진행한다(이미 진행한 경우 불필요). 2. 스태틱 파드(Static Pod) 생성 명령문으로 파드 매니페스트 파일을 생성한 뒤, 매니페스트 파일을 이용해 파드를 생성한ㄷ. 3. 참고 URL kubectl cheat sheet: https://kubernetes.io/ko/…

May 18, 2022
데브옵스
쿠버네티스(Kubernetes) CKA 모의고사 2.7 - 파드(POD)와 서비스 생성 및 DNS Lookup

모의고사 2.7 - 파드(POD)와 서비스 생성 및 DNS Lookup 1. 문제 요건 Create a nginx pod called  using image , expose it internally with a service called . Test that you are able to look up the service and pod names from within the cluster. Use the image  to create a pod for dns lookup. Record results in  and  for service and pod name resolutions respectively Pod: nginx-resolver created Service DNS Resolution recorded correctly Pod DNS resolution recorded correctly 2. 내 풀이 1. 사전 작업 kubectl 자동완성 설정을 미리 진행한다(이미 진행한 경…

May 18, 2022
데브옵스
쿠버네티스(Kubernetes) CKA 모의고사 2.6 - 유저 생성 및 권한 부여하기

모의고사 2.6 - 유저 생성 및 권한 부여하기 1. 문제 요건 Create a new user called . Grant him access to the cluster. John should have permission to  in the  namespace . The private key exists in the location:  and csr at . : As of kubernetes 1.19, the CertificateSigningRequest object expects a .Please refer the documentation to see an example. The documentation tab is available at the top right of terminal. CSR: ; Status: Approved Role Name: ; namespace: ; Resource:  Access: User ‘john’ has appropriate permissions …

May 18, 2022
데브옵스
쿠버네티스(Kubernetes) CKA 모의고사 2.5 - 디플로이먼트(Deployment) 이미지 업그레이드하기

모의고사 2.5 - 디플로이먼트(Deployment) 이미지 업그레이드하기 1. 문제 요건 Create a new deployment called , with image  and  replica. Next upgrade the deployment to version  using rolling update. Deployment : nginx-deploy. Image: nginx:1.16 Image: nginx:1.16 Task: Upgrade the version of the deployment to 1:17 Task: Record the changes for the image upgrade 2. 내 풀이 1. 사전 작업 kubectl 자동완성 설정을 미리 진행한다(이미 진행한 경우 불필요). 2. 디플로이먼트(Deployment) 이미지 업그레이드 명령문으로 디플로이먼트(Deployment) 매니페스트 파일을 생성한다. 파드 매니페스트 파일로 디플로이먼트를 생성한다. 디플로이먼…

May 18, 2022
데브옵스
쿠버네티스(Kubernetes) CKA 모의고사 2.4 - 퍼시스턴트 볼륨(Persistent Volume)을 마운트한 파드(POD) 생성하기

모의고사 2.4 - 퍼시스턴트 볼륨(Persistent Volume)을 마운트한 파드(POD) 생성하기 1. 문제 요건 A pod definition file is created at . Make use of this manifest file and mount the persistent volume called . Ensure the pod is running and the PV is bound. mountPath:  persistentVolumeClaim Name:  persistentVolume Claim configured correctly pod using the correct mountPath pod using the persistent volume claim? 2. 내 풀이 1. 사전 작업 kubectl 자동완성 설정을 미리 진행한다(이미 진행한 경우 불필요). 2. 퍼시스턴트 볼륨(Persistent Volume)을 마운트한 파드(POD) 생성 문제에서 제공한 파드 …

May 18, 2022
데브옵스
쿠버네티스(Kubernetes) CKA 모의고사 2.3 - Security Context를 지정한 파드(POD) 생성하기

모의고사 2.3 - 커맨드를 지정한 파드(POD) 생성하기 1. 문제 요건 Create a new pod called  with image . Allow the pod to be able to set . The container should sleep for 4800 seconds. Pod: super-user-pod Container Image: busybox:1.28 SYS_TIME capabilities for the conatiner? 2. 내 풀이 1. 사전 작업 kubectl 자동완성 설정을 미리 진행한다(이미 진행한 경우 불필요). 2. 커맨드를 지정한 파드(POD) 생성 명령문으로 파드 매니페스트 파일을 생성한다. 파드 매니페스트 파일에 수정할 부분이 없는지 확인한다. Command sleep, “4800” 추가 을 추가해야한다: 쿠버네티스 공식문서에서 Security Context 검색 > Set capabilities for a Container 탭으로 이동 …

May 18, 2022
데브옵스
쿠버네티스(Kubernetes) CKA 모의고사 2.2 - emptyDir 타입의 볼륨이 마운트 된 파드(POD) 생성하기

모의고사 2.2 - emptyDir 타입의 볼륨이 마운트 된 파드(POD) 생성하기 1. 문제 요건 Create a Pod called  with image:  with a Volume of type  that lasts for the life of the Pod. Specs on the below. Pod named ‘redis-storage’ created Pod ‘redis-storage’ uses Volume type of emptyDir Pod ‘redis-storage’ uses volumeMount with mountPath = /data/redis 2. 내 풀이 1. 사전 작업 kubectl 자동완성 설정을 미리 진행한다(이미 진행한 경우 불필요). 2. emptyDir 볼륨이 마운트 된 파드(POD) 생성 쿠버네티스 공식문서에서 키워드로 검색해 생성 예시를 복사해둔다. vi 에디터로 파일 생성 후 문제 요건에 맞게 수정한다. 작성한 매니페스트 파일을 이용해 파드를…

May 18, 2022
데브옵스
쿠버네티스(Kubernetes) CKA 모의고사 2.1 - ETCD 백업 파일 생성하기

모의고사 2.1 - ETCD 백업 파일 생성하기 1. 문제 요건 Take a backup of the etcd cluster and save it to . Backup Completed 2. 내 풀이 1. 사전 작업 kubectl 자동완성 설정을 미리 진행한다(이미 진행했다면 불필요). 2. ETCD 백업파일 생성 get 명령어로 etcd 파드 이름을 찾는다. describe 명령어로 etcd 백업에 필요한 내용들을 확인한다. etcdctl 실행 시 필요한 파라미터값들을 확인하며 메모로 남겨 놓은 뒤 알맞은 정보를 채워넣는다. ETCD 백업 파일이 잘 생성되었는지 확인한다. 3. 참고 URL ETCD backup: https://kubernetes.io/docs/tasks/administer-cluster/configure-upgrade-etcd/#backing-up-an-etcd-cluster

May 18, 2022
데브옵스
쿠버네티스(Kubernetes) CKA 모의고사 1.12 - 퍼시스턴트 볼륨(Persistent Volume: PV) 생성하기

모의고사 1.12 - 퍼시스턴트 볼륨(Persistent Volume: PV) 생성하기 1. 문제 요건 Create a  with the given specification. Volume Name: pv-analytics Storage: 100Mi Access modes: ReadWriteMany Host Path: /pv/data-analytics 2. 내 풀이 1. 사전 작업 kubectl 자동완성 설정을 미리 진행한다(이미 진행한 경우 불필요). 2. YAML을 이용해 hostpath타입 퍼시스턴트 볼륨(Persistent Volume)생성 hostpath 타입 퍼시스턴트 볼륨 매니페스트 파일의 예시를 복사해둔다. vi 에디터로 파일 생성 후 문제 요건에 맞게 수정한다. 작성한 매니페스트 파일을 이용해 PV를 생성한다. PV가 잘 생성되었는지 확인한다. 3. 참고 URL 퍼시스턴트 볼륨(Persistent Volume): https://kubernetes.io/ko/d…

May 17, 2022
데브옵스
쿠버네티스(Kubernetes) CKA 모의고사 1.11 - JSON PATH로 Node의 osImage 정보 출력

모의고사 1.11 - JSON PATH로 Node의 osImage 정보 출력 1. 문제 요건 Use JSON PATH query to retrieve the s of all the nodes and store it in a file . The  are under the  section under  of each node. Task Completed 2. 내 풀이 1. 사전 작업 kubectl 자동완성 설정을 미리 진행한다(이미 진행한 경우 불필요). 2. JSON PATH를 이용해 리소스의 특정 데이터 출력 kubectl cheat sheet에서 최대한 비슷한 jsonpath 명령어를 복사해둔다. 문제의 제시 정보를 참고해 쿼리문을 작성한다(단계별로 테스트해가며 경로가 맞는지 확인한다). 문제에서 제시한 경로로 쿼리 결과를 저장한다. 쿼리 결과가 잘 저장되었는지 확인한다. 3. 참고 URL kubectl cheat sheet: https://kubernetes.io/ko/do…

May 17, 2022
데브옵스
쿠버네티스(Kubernetes) CKA 모의고사 1.10 - 노드포트(NodePort)타입 서비스(Service) 생성

모의고사 1.10 - 노드포트(NodePort)타입 서비스(Service) 생성 1. 문제 요건 Expose the  as service  application on port  on the nodes on the cluster. The web application listens on port . Name: hr-web-app-service Type: NodePort Endpoints: 2 Port: 8080 NodePort: 30082 2. 내 풀이 1. 사전 작업 kubectl 자동완성 설정을 미리 진행한다(이미 진행한 경우 불필요). 2. 노드포트(NodePort) 타입의 서비스(Service) 생성 노출 대상 애플리케이션이 파드인지 디플로이먼트인지 확인한다. 명령문으로 서비스의 매니페스트 파일을 생성한다. 매니페스트 파일에 잘못된 부분이 없는지 확인하고, NodePort 부분을 추가한다. 서비스가 잘 생성되었는지 확인한다. 3. 참고 URL kubectl cheat sh…

May 17, 2022
데브옵스
쿠버네티스(Kubernetes) CKA 모의고사 1.9 - 파드(POD) 트러블 슈팅

모의고사 1.9 - 파드(POD) 트러블 슈팅 1. 문제 요건 A new application  is deployed. There is something wrong with it. Identify and fix the issue. Issue fixed 2. 내 풀이 1. 사전 작업 kubectl 자동완성 설정을 미리 진행한다(이미 진행한 경우 불필요). 2. 파드(POD) 트러블 슈팅 문제가 되는 리소스를 확인한다. 문제 리소스의 상세 정보를 확인한다. Event 를 살펴보았을 때 init 컨테이너에서 문제가 발생한 것을 알 수 있다. orange 파드의 매니페스트 파일을 저장한다. 문제가 있는 부분을 찾아서 고친다. sleeeeep 2 ⇒ sleep 2로 수정한다. 기존에 생성되었던 파드를 지운다. 수정한 매니페스트 파일을 이용해 파드를 재생성한다. 파드가 잘 동작하는지 확인한다. 3. 참고 URL kubectl cheat sheet: https://kubernetes.io…

May 17, 2022
데브옵스
쿠버네티스(Kubernetes) CKA 모의고사 1.8 - 파드(POD) 특정 네임스페이스에 생성하기

모의고사 1.8 - 파드(POD) 특정 네임스페이스에 생성하기 1. 문제 요건 Create a POD in the  namespace named  with the image . Name: temp-bus Image Name: redis:alpine 2. 내 풀이 1. 사전 작업 kubectl 자동완성 설정을 미리 진행한다(이미 진행한 경우 불필요). 2. 특정 네임스페이스(Namespace)에 파드(POD)생성 명령문으로 파드의 매니페스트 파일을 생성한다. 매니페스트 파일이 잘 생성되었는지 확인한다. 매니페스트 파일을 이용해 파드를 생성한다. 파드가 잘 생성되었는지 확인한다. 3. 참고 URL kubectl cheat sheet: https://kubernetes.io/ko/docs/reference/kubectl/cheatsheet/

May 17, 2022
데브옵스
쿠버네티스(Kubernetes) CKA 모의고사 1.5 - 서비스(Service) 노출하기

모의고사 1.5 - 서비스(Service) 노출하기 1. 문제 요건 Create a service  to expose the  application within the cluster on port . Use imperative commands. Service: messaging-service Port: 6379 Type: ClusterIp Use the right labels 2. 내 풀이 1. 사전 작업 kubectl 자동완성 설정을 미리 진행한다(이미 진행한 경우 불필요). 2. 명령형 커맨드를 이용해 서비스(Service) 생성 명령문으로 서비스의 매니페스트 파일을 생성한 뒤 저장한다. 매니페스트 파일이 제대로 생성되었는지 확인한다. 매니페스트 파일을 이용해 서비스를 생성한다. 서비스가 잘 생성되었는지 확인한다. 3. 참고 URL kubectl cheat sheet: https://kubernetes.io/ko/docs/reference/kubectl/cheatsheet/

May 17, 2022
데브옵스
쿠버네티스(Kubernetes) CKA 모의고사 1.6 - 디플로이먼트(Deployment) 생성하기

모의고사 1.6 - 디플로이먼트(Deployment) 생성하기 1. 문제 요건 Create a deployment named  using the image  with  replicas. Name: hr-web-app Image: kodekloud/webapp-color Replicas: 2 2. 내 풀이 1. 사전 작업 kubectl 자동완성 설정을 미리 진행한다(이미 진행한 경우 불필요). 2. 명령문으로 디플로이먼트(Deployment) 생성 명령문으로 디플로이먼트의 매니페스트 파일을 생성한 뒤 저장한다. 매니페스트 파일이 제대로 생성되었는지 확인한다. 매니페스트 파일을 이용해 디플로이먼트를 생성한다. 디플로이먼트가 잘 생성되었는지 확인한다. 3. 참고 URL kubectl cheat sheet: https://kubernetes.io/ko/docs/reference/kubectl/cheatsheet/

May 17, 2022
데브옵스
쿠버네티스(Kubernetes) CKA 모의고사 1.7 - 스태틱 파드(Static Pod) 생성하기

모의고사 1.7 - 스태틱 파드(Static Pod) 생성하기 1. 문제 요건 Create a static pod named  on the controlplane node that uses the  image and the command . Name: static-busybox Image: busybox 2. 내 풀이 1. 사전 작업 kubectl 자동완성 설정을 미리 진행한다(이미 진행한 경우 불필요). 2. YAML 파일을 선언형으로 생성해 스태틱 파드(Static Pod) 생성 스태틱 파드가 생성되는 경로를 찾는다. 매니페스트 파일을 저장한다. 매니페스트 파일이 잘 생성되었는지 확인한다. 스태틱 파드(Static Pod)가 잘 생성되었는지 확인한다. 3. 참고 URL 스태틱 파드 생성하기: https://kubernetes.io/ko/docs/tasks/configure-pod-container/static-pod/

May 17, 2022
데브옵스
쿠버네티스(Kubernetes) CKA 모의고사 1.4 - 리소스 JSON 형태로 출력하기

모의고사 1.4 - 리소스 JSON 형태로 출력하기 1. 문제 요건 Get the list of nodes in JSON format and store it in a file at . Task completed 2. 내 풀이 1. 사전 작업 kubectl 자동완성 설정을 미리 진행한다(이미 진행한 경우 불필요). 2. 리소스 JSON 형태로 출력하기 리소스 조회 명령어에 옵션을 더해 노드를 JSON 형태로 출력한다. 명령문을 실행해 결과값이 올바르게 뜨는지 확인 후, 파일에 저장한다. 저장이 잘 되었는지 확인한다. 3. 참고 URL kubectl cheat sheet: https://kubernetes.io/ko/docs/reference/kubectl/cheatsheet/ 노드: https://kubernetes.io/ko/docs/concepts/architecture/nodes/

May 17, 2022
데브옵스
쿠버네티스(Kubernetes) CKA 모의고사 1.1 - 기본적인 파드(POD) 생성하기

모의고사 1.1 - 기본적인 파드(POD) 생성하기 1. 문제 요건 Deploy a pod named  using the  image. Once done, click on the  button in the top right corner of this panel. You may navigate back and forth freely between all questions. Once done with all questions, click on . Your work will be validated at the end and score shown. Good Luck! Name: nginx-pod Image: nginx:alpine 2. 내 풀이 1. 사전 작업 kubectl 자동완성 설정을 미리 진행한다. 2. 명령문으로 파드(POD)생성 명령문을 사용해 Pod 매니페스트 파일을 생성한다. 생성된 매니페스트 파일 내용이 맞는지 확인한다. 매니페스트 파일을 이용해 파드를 생성한다. 파드…

May 17, 2022
데브옵스
쿠버네티스(Kubernetes) CKA 모의고사 1.3 - 네임스페이스(Namespace) 생성하기

모의고사 1.3 - 네임스페이스(Namespace) 생성하기 1. 문제 요건 Create a namespace named . Namespace: apx-x9984574 2. 내 풀이 1. 사전 작업 kubectl 자동완성 설정을 미리 진행한다(이미 설정해놓은 경우 불필요). 2. 명령문을 사용해 네임스페이스(Namespace) 생성 명령문을 사용해 네임스페이스(namespace)를 생성한다. 네임스페이스가 제대로 생성되었는지 확인한다. 3. 참고 URL kubectl cheat sheet: https://kubernetes.io/ko/docs/reference/kubectl/cheatsheet/

May 17, 2022
데브옵스
쿠버네티스(Kubernetes) CKA 모의고사 1.2 - 레이블(Label)을 지정한 파드(POD) 생성하기

모의고사 1.2 - 레이블(Label)을 지정한 파드(POD) 생성하기 1. 문제 요건 Deploy a  pod using the  image with the labels set to . Pod Name: messaging Image: redis:alpine Labels: tier=msg 2. 내 풀이 1. 사전 작업 kubectl 자동완성 설정을 미리 진행한다(이미 설정했으면 중복 설정 불필요). 2. 명령문으로 파드(POD) 생성 명령문을 사용해 Pod 매니페스트 파일을 생성한다. 생성된 매니페스트 파일 내용이 맞는지 확인한다. 매니페스트 파일을 이용해 파드를 생성한다. 파드가 제대로 생성되었는지 확인한다. 3. 참고 URL kubectl cheat sheet: https://kubernetes.io/ko/docs/reference/kubectl/cheatsheet/

May 17, 2022
데브옵스
쿠버네티스(Kubernetes) CKA Lightning Lab 7 - Secret이 마운트된 Pod 생성하기

7. Secret이 마운트된 Pod 생성하기 [문제 요건] 네임스페이스에 이미지를 가지고 라는 파드를 생성 파드 내 컨테이너명은 반드시 여야함 초동안 sleep하는 명령어 실행 컨테이너에 마운트 되는 시크릿 볼륨은 여야 하며, 컨테이너는 경로에 시크릿 볼륨을 마운트해야한다. 시크릿 이름은 채점 기준: 파드가 올바르게 생성되었는가? [내 풀이] kubectl 명령어로 pod의 yaml 파일을 생성해준다. Tip: 옵션을 사용해 파드를 생성하지 않고 매니페스트 파일만 생성한다. 생성한 매니페스트 파일(yaml)을 편집한다. 문제 요건에 맞게 pod의 yaml 파일을 수정한다. 파드의 컨테이너명을 으로 수정한다. 쿠버네티스 공식 문서의 Secret 문서를 참고하여 Secret Volume과 VolumeMounts 구문을 추가한다. 명령어를 사용해 파드를 생성한 뒤, 잘 생성되었는지 확인한다. [참고 URL] kubectl reference: https://kuberne…

May 15, 2022
데브옵스
쿠버네티스(Kubernetes) CKA Lightning Lab 6 - ETCD 백업파일 생성하기

6. ETCD 백업파일 생성하기 [문제 요건] ETCD 백업을 의 에 생성한다. 채점기준: 트러블 슈팅으로 이슈 해결 [내 풀이] 명령어를 사용해 etcd 파드 정보를 확인한다. 위의 etcd 파드(POD)의 정보를 참조하여 백업 명령어를 작성한다. : listen-client-urls 참조 : trusted-ca-file 참조 : cert-file 참조 : key-file 참조 백업파일이 잘 생성되었는지 확인한다. [참고 URL] etcd backup: https://kubernetes.io/docs/tasks/administer-cluster/configure-upgrade-etcd/#backing-up-an-etcd-cluster

May 15, 2022
데브옵스
쿠버네티스(Kubernetes) CKA Lightning Lab 4 - 디플로이먼트(Deployment) 생성 및 이미지 업데이트

4. 디플로이먼트(Deployment) 생성 및 이미지 업데이트 [문제 요건] 네임스페이스에 이미지를 사용하는 신규 디플로이먼트 를 생성해야한다. 레플리카 수는 1. 그 뒤, 디플로이먼트의 버전을 롤링 업데이트(Rolling Update)로 로 업데이트 채점기준 이미지: nginx:1.16 작업: 디플로이먼트의 버전을 1.17로 업그레이드 [내 풀이] 쿠버네티스 공식 문서의 kubectl cheatsheet 페이지 참조해 디플로이먼트 리소스 생성 같은 페이지의 리소스 업데이트 탭을 참조해 이미지 업데이트 Tip: 이미지를 업데이트할 때에는 명령어를 사용하면 이미지가 롤링업데이트 된다. [참고 URL] 이미지 업데이트: https://kubernetes.io/ko/docs/reference/kubectl/cheatsheet/#리소스-업데이트

May 15, 2022
데브옵스
쿠버네티스(Kubernetes) CKA Lightning Lab 5 - 디플로이먼트 관련 이슈 트러블슈팅

5. 디플로이먼트 관련 이슈 트러블슈팅 [문제 요건] 네임스페이스의 디플로이먼트(Deployment)가 배포되었으나, 파드(POD)가 동작하지 않는 이슈를 해결해야 한다. 해당 디플로이먼트는 경로에 마운트 된 퍼시스턴트 볼륨(Persistent Volume)을 사용해야하며, root 비밀번호를 공백으로 만들기 위해 환경변수를 설정해야한다. 중요: 퍼시스턴트 볼륨을 교체하지 말 것 채점 기준: 트러블 슈팅하여 이슈 해결 [내 풀이]

May 15, 2022
데브옵스
쿠버네티스(Kubernetes) CKA Lightning Lab 3 - KubeConfig 관련 이슈 트러블 슈팅

3. KubeConfig 트러블 슈팅 [문제 요건] 경로에 kubeconfig 파일이 생성되었으나 무언가 잘못되었다. 트러블 슈팅 후 고칠 것 채점 기준 /root/CKA/admin.kubeconfig 고치기 [내 풀이] kubeconfig 파일을 살펴보자.

May 15, 2022
데브옵스
쿠버네티스(Kubernetes) CKA Lightning Lab 2 - JSON PATH 사용하기

2. JSON PATH 사용하기 [문제 요건] 다음 포맷에 맞춰 네임스페이스의 모든 디플로이먼트를 출력 . 예시: 데이터들은 을 기준으로 오름차순으로 정렬 채점 기준: 제시된 작업이 완료되었는가? [내 풀이] 으로 대상 디플로이먼트들을 확인한다. 으로 JSON 파일 구조를 확인한다. custom-column을 이용한 간단한 쿼리문을 작성한 뒤 잘 작동하는지 테스트해본다. 위에서 출력했던 json 포맷을 잘 참고하여 나머지 열에 대한 쿼리도 작성해준다. Tip: 열과 열을 구분하기 위해서는 (콤마)를 사용한다. Tip: 각 항목이 잘 출력되었는지 확인하기 위해 kubectl get deployment 명령어를 잘 활용한다(예: CONTAINER_IMAGE가 잘 출력되었는지 확인 ) Tip: 요소가 딕셔너리가 아닌 리스트 형태일 경우(예: containers) 반드시 출력할 리스트 요소를 지정해주어야한다(예: containers ⇒ (X), containers[0] ⇒ (O)…

May 15, 2022
데브옵스
쿠버네티스(Kubernetes) CKA Lightning Lab 1 - kubeadm으로 클러스터 업그레이드

유데미(Udemy) 에서 구입한 CKA 강의 수강을 완료하고 마지막 연습문제를 풀고 있는데, 챕터별 연습문제와는 다르게 답안이 제공되지 않아 기록을 위해 문제 풀이 과정을 블로그에 올려두려 한다. 참고로 아래의 문제 요건은 편의를 위해 한국어로 번역한 것이고, 강의에서 제공하는 시험 및 실제 시험은 100% 영어로 출제된다. 1. Kubeadm 으로 클러스터 업그레이드 하기 [문제 요건] 쿠버네티스 버전을 현재  버전에서  로 업그레이드( 툴을 이용) 업그레이드는 마스터 노드부터 한번에 한 노드씩 이루어져야 한다. 다운타임(downtime)을 최소화하기위해, 각 노드를 업그레이드 하기 전 디플로이먼트가 대체 노드로 스케줄링 되어야한다. 노드를 먼저 업그레이드 노드를 업그레이드 전 드레인(drain)  디플로이먼트들의 파드는 에 스케줄링 되어야한다. 채점 포인트 클러스터가 업그레이드 되었는가? ‘gold-nginx’의 파드들이 컨트롤플레인에 스케줄링 되었는가? [내 풀이] …

May 15, 2022
데브옵스
쿠버네티스(Kubernetes) Pod의 /etc/hosts 파일에 DNS 추가하는 방법(HostAlias)

💡Pod의 /etc/hosts 파일에 DNS를 추가하기 위해서는 Deployment의 hostalias 옵션을 사용한다. 1. 배경 상황 프로젝트 진행 중 인프라팀에서 NAS의 연결 주소를 내부 private IP로 변경하기위해서 파드 내 컨테이너의 /etc/hosts 파일을 변경해달라는 요청을 받았다. 2. 설정 방법 Pod의 /etc/hosts 파일을 변경하기 위해서는 Pod(Pod가 Deployment에 의해 생성되었을 경우에는 Deployment) YAML 파일의 hostAlias 항목에 도메인, 그리고 도메인과 맵핑할 ip를 기입해주면 된다. ※ 컨테이너 내부의 호스트 파일을 수동으로 변경하면 안된다. 컨테이너는 휘발성이기 때문에, 컨테이너 종료 시 변경사항이 손실된다. Deployment에 등록할 경우 spec.template.hostAliases.ip ⇒ /etc/hosts 파일에 등록할 ip spec.template.hostAliases.hostnames ⇒ /etc…

May 11, 2022
데브옵스
쿠버네티스(Kubernetes) 네트워킹(4) - Container Networking

💡 쿠버네티스 네트워킹을 알아보기에 앞서 컨테이너 네트워킹에 대해 알아보자. 1. Container Networking 도커 컨테이너를 띄운 호스트 호스트 eth0: 192.168.1.10 도커 컨테이너 네트워킹 옵션 3가지 None network: 컨테이너 외부 접속 불가 & 외부에서 컨테이너 접속 불가 Host network: 호스트와 컨테이너의 네트워크가 격리되지 않음 추가 포트 매핑 불필요 포트 80에 어플리케이션을 배포 ⇒ http://192.168.1.10:80 에서 애플리케이션 접속 가능 단, 다른 컨테이너에서 동일 포트로 애플리케이션을 배포할 경우 작동하지 않음 Bridge network 1. Bridge network 내부 사설망이 형성됨 (Bridge network: 172.0.0 - container a 172.17.0.2, container b 172.12.0.3) Docker가 호스트에 설치 기본적으로 Bridge 라는 내부 사설 네트워크 생성 ( 커맨드…

May 03, 2022
데브옵스
쿠버네티스(Kubernetes) 네트워킹(3) - Linux Namespaces

💡 쿠버네티스 네트워킹을 알아보기에 앞서 리눅스의 네임스페이스에 대해 알아보자. 1. Linux Namespaces 1. 네임스페이스 호스트 안의 격리된 공간(집 안에 방이 있는 것과 같음): 컨테이너를 생성할 때 컨테이너를 격리해 다른 컨테이너가 표시되지 않도록 하고 싶은 경우 네임스페이스 안의 컨테이너 ⇒ 자기자신만 볼 수 있음 Underlying (기본) 호스트: 모든 프로세스를 볼 수 있음 로 확인할 수 있음 ⇒ 네임스페이스 내부/외부에서 같은 프로세스지만 PID가 상이하게 됨 호스트 LAN에 연결하는 인터페이스 존재 라우팅 테이블 ARP 테이블: IP - MAC 주소 일대일 대응한 테이블 ⇒ 컨테이너에서 위 세부사항을 보이지 않게 하고 싶다면? 네임스페이스 내에 컨테이너 생성 시 호스트에 대한 네트워크 정보에 대한 가시성 없어짐 네임스페이스는 자체 가상 인터페이스(veth) 및 라우팅 테이블/ARP 테이블을 가질 수 있음 2. 네트워크 네임스페이스 생성 : h…

May 03, 2022
데브옵스
쿠버네티스(Kubernetes) 네트워킹(2) - DNS & CoreDNS

1. DNS(Domain Name System) 1. DNS란? 지난 포스팅에서 들었던 시스템 A, B의 예시를 다시 살펴보자. 만약 시스템 A에서 시스템 B에 접속할 때, 라는 IP 대신 라는 이름/별칭을 사용하고 싶다면 어떻게 해야할까? 1.png 시스템 A 에 를 등록하면 된다. 단 주의할 사항은, 시스템 B의 실제 호스팅명(시스템 B에서 명령어로 확인할 수 있다)이 실제로 db가 아니라 host-2와 같이 다른 이름일 경우에도 로 접속이 된다는 점이다. 이처럼 DNS는 IP주소를 사람이 읽을 수 있는 도메인명으로 바꿔주는 시스템을 뜻한다. 2. Name Resolution 위의 예와 같이, 호스트에서 파일 내에 DNS명과 IP명을 읽고 변환하는 작업을 Name Resolution 이라고 한다. 오늘날에는 환경이 커지고 너무 많은 항목이 생겨서 파일을 관리하기가 어렵기 때문에, 해당 정보를 한개의 단일 서버로 관리하게 되는데, 이 서버를 DNS 서버이다. 그렇다면…

May 02, 2022
데브옵스
쿠버네티스(Kubernetes) 네트워킹(1) - 스위칭 & 라우팅

💡 쿠버네티스 네트워킹을 알아보기에 앞서 리눅스 머신에서의 스위칭 & 라우팅에 대해 알아보자. 1. 스위칭 2022-05-01-Kubernetes-Networking-Swtiching-Routing1 컴퓨터 A와 B가 통신하기 위해서는 각 컴퓨터(호스트)에 물리, 혹은 가상 인터페이스가 필요하다. 각 리눅스 머신(=컴퓨터), 스위치에 IP 주소를 할당하자. A, B는 같은 네트워크 안에 있으므로, 스위치를 통해 서로 통신할 수 있다. 컴퓨터 A(192.168.1.10)에서 컴퓨터 B(192.168.1.11)로 통신 가능 컴퓨터 B(192.168.1.11)에서 컴퓨터 A(192.168.1.10)로 통신 가능 2. 라우팅 1. 다른 네트워크에 존재하는 머신과 통신 컴퓨터 A & B와 다른 네트워크에 컴퓨터 C & D 가 존재할 때, 컴퓨터 A, B에서 어떻게 시스템 C, D로 도달하게 될까? 2022-05-01-Kubernetes-Networking-Swtiching-Routin…

May 01, 2022
데브옵스
리눅스(Linux)/우분투(Ubuntu) 시간을 한국 표준시(KST)로 변경하기

💡 리눅스의 기본 Timezone은 PDT/UST 이므로 KST로 재설정해주어야 한다. 1. 리눅스(Linux) 시간을 한국 표준시(KST)로 변경 깃허브 블로그(Github Pages)용으로 VMware Fusion에서 우분투(Ubuntu)를 설치하고 난 뒤, Jekyll과 Git으로 블로그에 포스팅을 진행했다. 하지만 Github에서 표시되는 commit 일시와 실제 commit 일시가 다른 현상이 발생했는데, 확인해보니 Timezone이 한국표준시가 아닌 다른 시간대로 설정되어 생긴 현상이었다. 구글링으로 찾아보니 리눅스를 설치할 때 Timezone을 설정하지 않으면 PDT/UST 등이 기본으로 설정된다고 한다. 시스템 자체에 문제가 생긴 부분은 아니지만 패스트캠퍼스에서 매일 포스팅 업로드 챌린지를 하고 있는데, 나중에 업로드 일자가 문제가 될까 싶어서 아래와 같은 방법으로 Timezone을 KST로 변경해주었다. 참고로 현재 내 환경은 아래와 같다. MacOS Montere…

April 27, 2022
데브옵스
Kubernetes NGINX Ingress의 Sticky Session 설정이 되지 않는 이슈 해결

💡 NGINX Ingress Controller 사용 시 nginx.ingress.kubernetes.io 어노테이션을 사용해야 Sticky session 등의 설정값이 적용된다(일반 ingress.kubernetes.io 설정 적용시 설정 적용 안됨) 1. 에러 상황 컨테이너 전환 프로젝트 진행 도중 Ingress Controller를 Contour에서 NGINX-Ingress Controller로 변경 후, 시스템에 간헐적으로 접속이 되지 않는 현상이 발생했다(구체적으로는 브라우저에서 관리자에게 문의하라는 페이지가 뜨며 접속이 되지 않다가 새로고침 시 접속이 되는 현상). 해당 시스템은 Multi Pod로 구성되어있었는데(replicas = 2), 각 Pod로그를 보니 아래와 같은 SQL 에러가 발생하고 있었다. 로그를 추가적으로 살펴보니 user 정보를 SELECT하는 데에서 오류가 나고 있었고, 각 파드에서 로그인 아이디 정보를 찍어주는 로그에 아래와 같은 로그가 발생하고…

April 23, 2022
데브옵스
VMware Fusion에서 Ubuntu 20.04 설치하기

💡 MacOS 환경에서 VMware로 Ubuntu를 설치하려면 “VMware Fusion”을 설치해야 한다. 이번 포스팅에서는 VMware Fusion에서 Ubuntu 20.04 버전을 설치해보도록 하겠다. 코딩 강의를 수강하거나 스터디 할 때 실습 환경을 맞춰주기 위해서 우분투를 설치했었는데, 이번에는 Jekyll을 설치하기 위해 우분투 환경을 만들어주게 되었다. 만약 나와 같이 MacOS(Catalina 이상 버전)에서 Jekyll 설치에 실패했던 사람은 Ubuntu 20.04 버전에서 설치 해보는 걸 추천한다. (참고로 Ubuntu 18.04 버전에서는 Jekyll 설치는 가능했었으나 테마 적용에서 버전 이슈가 발생했다.) 그럼 VMware Fusion과 Ubuntu가 무엇인지에 대해 간단하게 살펴본 뒤 두 소프트웨어를 설치해보도록 하자. 1. VMware Fusion이란? VMware Fusion은 VMware사에서 제공하는 MacOS 컴퓨터용 가상머신 소프트웨어이다. 무료…

April 16, 2022
데브옵스