네트워크 알고리즘은 데이터 전송과 네트워크 관리를 최적화하기 위해 설계된 다양한 기법들을 포함합니다. 여러 종류의 네트워크 알고리즘과 그 설명은 다음과 같습니다:

  1. 라우팅 알고리즘(Routing Algorithms):

    • Distance Vector: 각 라우터가 인접 라우터와의 거리 정보를 공유합니다. 라우터는 이 정보를 기반으로 최적의 경로를 계산합니다. 예: RIP (Routing Information Protocol).
    • Link State: 각 라우터가 전체 네트워크의 상태 정보를 수집하여 최적의 경로를 계산합니다. 예: OSPF (Open Shortest Path First), IS-IS.
    • Path Vector: BGP(Border Gateway Protocol)와 같이, 라우터가 경로 정보를 사용하여 라우팅 결정을 내립니다. 인터넷에서 주로 사용됩니다.
  2. 흐름 제어 알고리즘(Flow Control Algorithms):

    • Window-based Flow Control: TCP에서 사용되는 방법으로, 전송률을 조절하기 위해 데이터를 전송하는 '윈도우'의 크기를 조정합니다.
    • Rate-based Flow Control: 데이터 전송률을 직접 제한하여 네트워크 혼잡을 방지합니다.
  3. 혼잡 제어 알고리즘(Congestion Control Algorithms):

    • Additive Increase/Multiplicative Decrease (AIMD): TCP에서 널리 사용되며, 네트워크 혼잡이 감지되면 전송률을 감소시키고, 혼잡이 없을 때는 서서히 증가시킵니다.
    • Random Early Detection (RED): 네트워크 혼잡이 심각해지기 전에 패킷을 무작위로 드롭하여 혼잡을 예방합니다.
  4. 로드 밸런싱 알고리즘(Load Balancing Algorithms):

    • Round Robin: 각 서버에 차례대로 요청을 할당합니다.
    • Least Connections: 가장 적은 연결을 가진 서버에 요청을 할당합니다.
  5. 경로 선택 알고리즘(Path Selection Algorithms):

    • Shortest Path First (SPF): 가장 짧은 경로를 선택합니다. 예: Dijkstra's algorithm.
    • Widest Path: 가장 넓은 대역폭을 제공하는 경로를 선택합니다.
  6. 네트워크 코딩(Network Coding):

    • 데이터를 네트워크 내에서 인코딩하고 디코딩하여 전송 효율을 높이는 기술입니다.
  7. 에러 검출 및 수정 알고리즘(Error Detection and Correction Algorithms):

    • Checksum: 데이터의 정확성을 확인하기 위해 사용됩니다.
    • Cyclic Redundancy Check (CRC): 더 강력한 에러 검출 기능을 제공합니다.

이러한 알고리즘들은 네트워크의 효율성, 안정성, 그리고 성능을 극대화하는 데 중요한 역할을 합니다. 사용되는 알고리즘은 네트워크의 종류, 크기, 그리고 특정 요구사항에 따라 다를 수 있습니다.

'Job지식' 카테고리의 다른 글

Apache, Nginx 차이  (0) 2023.12.28
[ChatGPT] 웹브라우저 동작원리  (1) 2023.12.28
[md5] 체크섬  (0) 2023.09.06
[팁] 구글 검색방법  (0) 2021.11.25
[Windows 10] PowerShell을 이용한 다중 서버 ping 테스트 스크립트  (0) 2021.09.03

Apache 웹서버와 Nginx 웹서버는 두 가장 인기 있는 오픈 소스 웹 서버입니다. 이 둘은 서로 다른 아키텍처와 기능을 가지고 있으며, 각각의 서버가 제공하는 특징과 사용 사례에 따라 선택됩니다. 이들의 주요 차이점을 요약하면 다음과 같습니다:

  1. 아키텍처:

    • Apache: 멀티-프로세스 또는 멀티-스레드 모델을 사용하여 요청을 처리합니다. 각 연결에 대해 별도의 스레드 또는 프로세스를 생성하여 리소스를 많이 사용할 수 있습니다.
    • Nginx: 이벤트 기반, 비동기적인 아키텍처를 사용합니다. 이는 적은 수의 스레드로 많은 수의 동시 연결을 처리할 수 있게 해줍니다. 이 방식은 특히 정적 파일을 서빙하거나 리버스 프록시로 사용될 때 효율적입니다.
  2. 성능:

    • Apache: 정적 및 동적 콘텐츠 모두에서 좋은 성능을 제공합니다. 그러나 고부하 상황에서는 Nginx에 비해 성능이 떨어질 수 있습니다.
    • Nginx: 많은 수의 동시 연결을 효율적으로 처리할 수 있어 고성능을 제공합니다. 특히 정적 콘텐츠에서 뛰어난 성능을 보입니다.
  3. 동적 콘텐츠 처리:

    • Apache: 모듈을 통해 PHP, Python 등과 같은 동적 콘텐츠를 직접 처리할 수 있습니다.
    • Nginx: 기본적으로 정적 콘텐츠를 처리하는 데 최적화되어 있으며, 동적 콘텐츠 처리를 위해서는 보통 FastCGI, uwsgi, SCGI 프로토콜을 사용하는 별도의 백엔드 프로세서가 필요합니다.
  4. 구성과 유연성:

    • Apache: .htaccess 파일을 통한 디렉토리 수준의 구성 변경이 가능하며, 이는 호스팅 환경에서 유용합니다. 다양한 모듈을 통해 확장성과 유연성이 높습니다.
    • Nginx: 전체 서버 수준에서 구성 변경을 해야 하며 .htaccess와 같은 디렉토리 수준의 구성 변경을 지원하지 않습니다. 하지만 성능상의 이점을 제공합니다.
  5. 보안:

    • Apache와 Nginx 모두: 우수한 보안 기능을 제공하지만, 설정과 관리 방법에 따라 보안 수준이 달라질 수 있습니다.
  6. 사용 사례:

    • Apache: 전통적인 웹 호스팅, 작은 규모의 웹사이트, 개인 프로젝트에 적합합니다.
    • Nginx: 고성능이 필요하거나 많은 수의 동시 연결을 처리해야 하는 대규모 웹 애플리케이션, 정적 콘텐츠 서빙, 리버스 프록시, 로드 밸런싱에 적합합니다.

최종 선택은 특정 환경, 필요성, 선호도에 따라 달라질 수 있습니다.

웹 브라우저의 동작 원리를 설명하겠습니다.
웹 브라우저는 인터넷에서 웹 페이지를 찾고, 검색하고, 표시하는 소프트웨어입니다. 그 과정은 다음과 같습니다:

  1. URL 처리: 사용자가 브라우저의 주소 창에 URL(Uniform Resource Locator)을 입력하면, 브라우저는 이 URL을 해석하여 해당 서버의 주소를 찾습니다.

  2. 서버 요청: 브라우저는 해석된 주소를 사용하여 해당 웹 서버에 HTTP 요청을 보냅니다. 이 요청은 웹 페이지를 요청하는 메시지입니다.

  3. 서버 응답: 웹 서버는 브라우저의 요청을 받고, 요청된 웹 페이지에 해당하는 데이터(HTML, CSS, JavaScript 등)를 HTTP 응답으로 브라우저에게 전송합니다.

  4. HTML 파싱: 브라우저는 받은 HTML 문서를 파싱하여 DOM(Document Object Model) 트리를 생성합니다. 이 트리는 웹 페이지의 구조를 나타냅니다.

  5. CSS 파싱: CSS는 디자인과 레이아웃을 담당합니다. 브라우저는 CSS 파일을 파싱하여 웹 페이지의 스타일을 결정합니다.

  6. 자바스크립트 처리: JavaScript 파일은 브라우저에서 실행되며, 웹 페이지의 동적인 기능을 담당합니다. 브라우저는 이를 해석하고 실행합니다.

  7. 렌더링: DOM 트리와 CSS 정보를 결합하여 렌더 트리를 생성합니다. 이 트리는 웹 페이지가 시각적으로 어떻게 보일지 결정합니다.

  8. 디스플레이: 최종적으로 브라우저는 렌더 트리에 따라 화면에 웹 페이지를 표시합니다.

이 과정은 사용자가 웹 페이지에서 링크를 클릭하거나 새로운 페이지를 요청할 때마다 반복됩니다. 웹 브라우저는 또한 캐시, 쿠키 및 기타 기능을 사용하여 사용자 경험을 개선하고 효율성을 높입니다.

'Job지식' 카테고리의 다른 글

[ChatGPT] 네트워크 알고리즘  (1) 2023.12.28
Apache, Nginx 차이  (0) 2023.12.28
[md5] 체크섬  (0) 2023.09.06
[팁] 구글 검색방법  (0) 2021.11.25
[Windows 10] PowerShell을 이용한 다중 서버 ping 테스트 스크립트  (0) 2021.09.03

체크섬

- 파일 다운로드가 이상없이 됐는지 체크하는 용도로 사용하는 방법
- 파일을 고유하게 식별하는데 사용되는 문자열

샘플파일

linux_files.tar

체크섬 파일 생성

md5sum linux_files.tar > linux_files.tar.MD5SUMS

파일에 대한 md5 문자열 확인

openssl dgst -md5 linux_files.tar
-> MD5(linux_files.tar)= e556fe600d36c110d92f739821ca30bc

*파일 용량에 따라 시간이 길어지는 듯

체크섬 확인

echo $(cat linux_files.tar.MD5SUMS) | md5sum --check
-> linux_files.tar: OK

*파일 용량에 따라 시간이 길어지는 듯

1. 구성내용

- 강사용 deploy 서버 1대

- 교육생 별 5대

 

ssh 192.168.x.x (openstack deploy node)
source ~/venv/openstackclient/bin/activate
source /etc/kolla/k8sedu-openrc.sh

# 192.168.x.x edu-main 생성
openstack server create --image ubuntu-focal-20.04-20220615-osc --flavor C2R4D50 --key-name openstack-deploy --nic net-id=ex-net,v4-fixed-ip=192.168.200.5 edu-main

password
-> PASSWORD 설정


apt update
apt install -y python3-venv python3-pip

apt install ansible

 

VM 생성

192.168.x.11 edu01-master1
192.168.x.12 edu01-master2
192.168.x.13 edu01-master3
192.168.x.14 edu01-worker1
192.168.x.15 edu01-worker2

192.168.x.21 edu02-master1
192.168.x.22 edu02-master2
192.168.x.23 edu02-master3
192.168.x.24 edu02-worker1
192.168.x.25 edu02-worker2
		                
192.168.x.21 edu03-master1
192.168.x.22 edu03-master2
192.168.x.23 edu03-master3
192.168.x.24 edu03-worker1
192.168.x.25 edu03-worker2
		              
192.168.x.31 edu04-master1
192.168.x.32 edu04-master2
192.168.x.33 edu04-master3
192.168.x.34 edu04-worker1
192.168.x.35 edu04-worker2
				               
192.168.x.41 edu05-master1
192.168.x.42 edu05-master2
192.168.x.43 edu05-master3
192.168.x.44 edu05-worker1
192.168.x.45 edu05-worker2
		            
openstack server create --image ubuntu-focal-20.04 --flavor C2R4D50 --key-name edu-main-key --nic net-id=ex-net,v4-fixed-ip=192.168.x.11 edu01-master1
openstack server create --image ubuntu-focal-20.04 --flavor C2R4D50 --key-name edu-main-key --nic net-id=ex-net,v4-fixed-ip=192.168.x.12 edu01-master2
openstack server create --image ubuntu-focal-20.04 --flavor C2R4D50 --key-name edu-main-key --nic net-id=ex-net,v4-fixed-ip=192.168.x.13 edu01-master3
openstack server create --image ubuntu-focal-20.04 --flavor C2R4D50 --key-name edu-main-key --nic net-id=ex-net,v4-fixed-ip=192.168.x.14 edu01-worker1
openstack server create --image ubuntu-focal-20.04 --flavor C2R4D50 --key-name edu-main-key --nic net-id=ex-net,v4-fixed-ip=192.168.x.15 edu01-worker2
																									
openstack server create --image ubuntu-focal-20.04 --flavor C2R4D50 --key-name edu-main-key --nic net-id=ex-net,v4-fixed-ip=192.168.x.21 edu02-master1
openstack server create --image ubuntu-focal-20.04 --flavor C2R4D50 --key-name edu-main-key --nic net-id=ex-net,v4-fixed-ip=192.168.x.22 edu02-master2
openstack server create --image ubuntu-focal-20.04 --flavor C2R4D50 --key-name edu-main-key --nic net-id=ex-net,v4-fixed-ip=192.168.x.23 edu02-master3
openstack server create --image ubuntu-focal-20.04 --flavor C2R4D50 --key-name edu-main-key --nic net-id=ex-net,v4-fixed-ip=192.168.x.24 edu02-worker1
openstack server create --image ubuntu-focal-20.04 --flavor C2R4D50 --key-name edu-main-key --nic net-id=ex-net,v4-fixed-ip=192.168.x.25 edu02-worker2
																									
openstack server create --image ubuntu-focal-20.04 --flavor C2R4D50 --key-name edu-main-key --nic net-id=ex-net,v4-fixed-ip=192.168.x.31 edu03-master1
openstack server create --image ubuntu-focal-20.04 --flavor C2R4D50 --key-name edu-main-key --nic net-id=ex-net,v4-fixed-ip=192.168.x.32 edu03-master2
openstack server create --image ubuntu-focal-20.04 --flavor C2R4D50 --key-name edu-main-key --nic net-id=ex-net,v4-fixed-ip=192.168.x.33 edu03-master3
openstack server create --image ubuntu-focal-20.04 --flavor C2R4D50 --key-name edu-main-key --nic net-id=ex-net,v4-fixed-ip=192.168.x.34 edu03-worker1
openstack server create --image ubuntu-focal-20.04 --flavor C2R4D50 --key-name edu-main-key --nic net-id=ex-net,v4-fixed-ip=192.168.x.35 edu03-worker2
																									
openstack server create --image ubuntu-focal-20.04 --flavor C2R4D50 --key-name edu-main-key --nic net-id=ex-net,v4-fixed-ip=192.168.x.41 edu04-master1
openstack server create --image ubuntu-focal-20.04 --flavor C2R4D50 --key-name edu-main-key --nic net-id=ex-net,v4-fixed-ip=192.168.x.42 edu04-master2
openstack server create --image ubuntu-focal-20.04 --flavor C2R4D50 --key-name edu-main-key --nic net-id=ex-net,v4-fixed-ip=192.168.x.43 edu04-master3
openstack server create --image ubuntu-focal-20.04 --flavor C2R4D50 --key-name edu-main-key --nic net-id=ex-net,v4-fixed-ip=192.168.x.44 edu04-worker1
openstack server create --image ubuntu-focal-20.04 --flavor C2R4D50 --key-name edu-main-key --nic net-id=ex-net,v4-fixed-ip=192.168.x.45 edu04-worker2
																									
openstack server create --image ubuntu-focal-20.04 --flavor C2R4D50 --key-name edu-main-key --nic net-id=ex-net,v4-fixed-ip=192.168.x.51 edu05-master1
openstack server create --image ubuntu-focal-20.04 --flavor C2R4D50 --key-name edu-main-key --nic net-id=ex-net,v4-fixed-ip=192.168.x.52 edu05-master2
openstack server create --image ubuntu-focal-20.04 --flavor C2R4D50 --key-name edu-main-key --nic net-id=ex-net,v4-fixed-ip=192.168.x.53 edu05-master3
openstack server create --image ubuntu-focal-20.04 --flavor C2R4D50 --key-name edu-main-key --nic net-id=ex-net,v4-fixed-ip=192.168.x.54 edu05-worker1
openstack server create --image ubuntu-focal-20.04 --flavor C2R4D50 --key-name edu-main-key --nic net-id=ex-net,v4-fixed-ip=192.168.x.55 edu05-worker2

 

 

 

VM 셋팅

#apt install sshpass


---------------------------

# ansible-hosts 작성
[all]

edu01-master1 ansible_host=192.168.x.11 ip=192.168.x.11
edu01-master2 ansible_host=192.168.x.12 ip=192.168.x.12
edu01-master3 ansible_host=192.168.x.13 ip=192.168.x.13
edu01-worker1 ansible_host=192.168.x.14 ip=192.168.x.14
edu01-worker2 ansible_host=192.168.x.15 ip=192.168.x.15

edu02-master1 ansible_host=192.168.x.21 ip=192.168.x.21
edu02-master2 ansible_host=192.168.x.22 ip=192.168.x.22
edu02-master3 ansible_host=192.168.x.23 ip=192.168.x.23
edu02-worker1 ansible_host=192.168.x.24 ip=192.168.x.24
edu02-worker2 ansible_host=192.168.x.25 ip=192.168.x.25

edu03-master1 ansible_host=192.168.x.31 ip=192.168.x.31
edu03-master2 ansible_host=192.168.x.32 ip=192.168.x.32
edu03-master3 ansible_host=192.168.x.33 ip=192.168.x.33
edu03-worker1 ansible_host=192.168.x.34 ip=192.168.x.34
edu03-worker2 ansible_host=192.168.x.35 ip=192.168.x.35

edu04-master1 ansible_host=192.168.x.41 ip=192.168.x.41
edu04-master2 ansible_host=192.168.x.42 ip=192.168.x.42
edu04-master3 ansible_host=192.168.x.43 ip=192.168.x.43
edu04-worker1 ansible_host=192.168.x.44 ip=192.168.x.44
edu04-worker2 ansible_host=192.168.x.45 ip=192.168.x.45

edu05-master1 ansible_host=192.168.x.51 ip=192.168.x.51
edu05-master2 ansible_host=192.168.x.52 ip=192.168.x.52
edu05-master3 ansible_host=192.168.x.53 ip=192.168.x.53
edu05-worker1 ansible_host=192.168.x.54 ip=192.168.x.54
edu05-worker2 ansible_host=192.168.x.55 ip=192.168.x.55

------------------------


vi /etc/ssh/ssh_config
StrictHostKeyChecking no

ansible -m shell -a "sed -i \"s/#   StrictHostKeyChecking*/StrictHostKeyChecking no/\"  /etc/ssh/sshd_config" -i ansible-hosts all
ansible -m shell -a "systemctl restart sshd" -i ansible-hosts all

# key 복사
cat /etc/hosts | grep 192.168.x | awk '{print "sshpass ssh-copy-id " $1}' | sh

#root 로그인 허용
ansible -m shell -a "sed -i \"s/#PermitRootLogin.*/PermitRootLogin yes/\"  /etc/ssh/sshd_config" -i /root/update-root-pw/ansible-hosts all

 

 

 

VM root P/W 변경을 위한 yaml 파일

vi update-root-pw.yaml
---
- hosts: all
  gather_facts: no
  tasks:
  - name: Update Root user's Password
    user:
      name: root
      update_password: always
      password: "{{ PASSWORD | password_hash('sha512') }}"




#root 패스워드 변경
ansible-playbook -i ansible-hosts update-root-pw.yaml --extra-vars "PASSWORD=password123123"

 

 

 

1. 개요

- 프록시를 사용하여 서비스 또는 마이크로서비스 간의 서비스 간 통신을 용이하게 하기 위한 전용 인프라 계층

- 애플리케이션 트래픽을 관리, 추적 및 보안성을 강화하기 위해 플랫폼 레이어에 구성되는 네트워크 제어 방법

 

2. 마이크로 서비스와 서비스 매쉬

2.1 프록시

MSA 구조의 경우 수 백, 수 천개 이상의 서비스가 존재 할 수있으며, 서비스 → 서비스 호출 시 장애 전파 현상으로 원인을 찾기가 어려움. B Service에 장애가 날 경우, A Service에서도 응답을 제대로 받지 못해 장애가 전파 됨.

서비스 앞에 프록시를 이용하여 트래픽을 네트워크 단에서 통제 할 수 있다. 프록시에서 메시지 헤더를 보고 원하는 대상으로 라우팅(지능형 라우팅)을 할 수 있다.

ex. Client 필드가 Android이면, 안드로이드 서비스로 라우팅

 

 

 

 

서비스 수에 따라 프록시 수도 증가하기 때문에 프록시 설정이 어려워지며, 설정 정보를 중앙 집중화된 컨트롤러가 통제하는 구조를 취할 수 있다.

 

 

 

출처) https://bcho.tistory.com/1293

 

3. 서비스매시 솔루션

3.1 istio vs linkerd

  • 서비스 매시를 구현하기 위해서는 사이드카 프록시가 필요하다.
  • istio 등장으로 서비스 매시 개념이 전파되었으며, 유연하고 범용적인 프록시인 엔보이를 사용한다. 엔보이는 인그레스, 이그레스, 서비스메시 사이트가 등 다양한 방법으로 사용할 가능하여 보다 복잡하고 사용이 까다롭다.
  • linkerd 에서는 linkerd2-proxy라는 프록시를 사용하며, 엔보이보다 가볍고 사용하기 쉽다.
  • 엔보이는 오버플로우에 취약한 C++로 작성되었으며, linkerd2-proxy는  메모리 안전성이 특징인 Rush로 작성되어 보안적으로 유리할 것이라고 한다.
  • linkerd가 istio 보다 리소스 사용량이 훨씬 적으며, 네트워크 지연도 적게 발생.
  • 아래 글을 보면 아키텍처 및 태생 언어에 대한 이유로  istio에 비해 linkerd가 더 작고 빠르고 보안에 뛰어나다고 한다.

 

 

4. Linkerd(링커디) 설치 및 사용법

4.1 Install the CLI

curl --proto '=https' --tlsv1.2 -sSfL https://run.linkerd.io/install | sh

# Add the linkerd CLI to your path
export PATH=$PATH:/root/.linkerd2/bin

# linkerd version
Client version: stable-2.13.5
Server version: unavailable

4.2 Validate your Kubernetes cluster

root@edu03-master1:~# linkerd check --pre
kubernetes-api
--------------
√ can initialize the client
√ can query the Kubernetes API

kubernetes-version
------------------
√ is running the minimum Kubernetes API version

pre-kubernetes-setup
--------------------
√ control plane namespace does not already exist
√ can create non-namespaced resources
√ can create ServiceAccounts
√ can create Services
√ can create Deployments
√ can create CronJobs
√ can create ConfigMaps
√ can create Secrets
√ can read Secrets
√ can read extension-apiserver-authentication configmap
√ no clock skew detected

linkerd-version
---------------
√ can determine the latest version
√ cli is up-to-date

Status check results are √

4.3 Install Linkerd onto your cluster

linkerd install --crds | kubectl apply -f -

linkerd install | kubectl apply -f -
root@edu03-master1:~# kubectl -n linkerd get pod
NAME                                      READY   STATUS    RESTARTS   AGE
linkerd-destination-8554fb9f7f-gglc7      4/4     Running   0          84s
linkerd-identity-8476c4dd4-grpfl          2/2     Running   0          85s
linkerd-proxy-injector-66875b9fd6-fpvqh   2/2     Running   0          84s


linkerd check

4.4 Install the demo app

(1) Emojivoto 데모 애플리케이션 설치

 - Emojivoto is a simple standalone Kubernetes application that uses a mix of gRPC and HTTP calls to allow the user to vote on their favorite emojis.

 - Install Emojivoto into the emojivoto namespace by running:

$ curl --proto '=https' --tlsv1.2 -sSfL https://run.linkerd.io/emojivoto.yml \
  | kubectl apply -f -
  
  
$ kubectl -n emojivoto edit svc web-svc
  Change ServiceType : ClusterIP -> NodePort 
  
  
$ kubectl -n emojivoto get svc | grep web-svc
web-svc      NodePort    10.233.4.174            80:31873/TCP        5m13s

 

(2) 브라우저 접속 - http://192.168.110.31:31873/

 

(3) 도넛 이모지에 투표 할 경우, 404 에러 발생

 
 

(4) linkerd inject 수행

  • linkerd-proxy라는 이름의 사이트카 프록시 컨테이너 생성
  • inject 해도 서비스에 변경은 없으며, 사이드카 컨테이너가 추가 된 것을 볼 수 있다.
kubectl get -n emojivoto deploy -o yaml \
  | linkerd inject - \
  | kubectl apply -f -

 

 

 

 

4.5 linkerd 로 문제 파악하기

(1) 대시보드(viz extension) 설치

$ linkerd viz install | kubectl apply -f -


$ kubectl -n linkerd-viz get pod
NAME                           READY   STATUS    RESTARTS   AGE
metrics-api-6d69f7fbfb-vzmv2   2/2     Running   0          56s
prometheus-7ddcdc4b5c-wchs8    2/2     Running   0          55s
tap-55c8f8b67b-8nmvl           2/2     Running   0          55s
tap-injector-55ddf4746-brsjt   2/2     Running   0          53s
web-6fd5fdf594-xxjzz           2/2     Running   0          54s


$ linkerd check


$ kubectl -n linkerd-viz edit svc web
  Change ServiceType - ClusterIP to NodePort

 

 

(2) ingress 설정

apiVersion: v1
kind: Secret
type: Opaque
metadata:
  name: web-ingress-auth
  namespace: linkerd-viz
data:
  auth: YWRtaW46JGFwcjEkbjdDdTZnSGwkRTQ3b2dmN0NPOE5SWWpFakJPa1dNLgoK
---
# apiVersion: networking.k8s.io/v1beta1 # for k8s < v1.19
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: web-ingress
  namespace: linkerd-viz
  annotations:
    nginx.ingress.kubernetes.io/upstream-vhost: $service_name.$namespace.svc.cluster.local:8084
    nginx.ingress.kubernetes.io/configuration-snippet: |
      proxy_set_header Origin "";
      proxy_hide_header l5d-remote-ip;
      proxy_hide_header l5d-server-id;      
    nginx.ingress.kubernetes.io/auth-type: basic
    nginx.ingress.kubernetes.io/auth-secret: web-ingress-auth
    nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required'
spec:
  ingressClassName: nginx
  rules:
  - host: dashboard.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: web
            port:
              number: 8084
kubectl apply -f viz-ingress.yml

root@edu03-master1:~# kubectl -n ingress-nginx get svc
NAME                                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx-controller             NodePort    10.233.27.166   <none>        80:32235/TCP,443:30030/TCP   7m17s
ingress-nginx-controller-admission   ClusterIP   10.233.19.173   <none>        443/TCP                      7m17s

 

(3) 브라우저 접속 - https://dashboard.example.com:30030/

  • hosts 파일 수정
  • protects it with basic auth using admin/admin

 

 

(4) 도넛 이모지에 투표하면(404에러 발생 시) SR(Success Rate)가 내려가는 것을 볼 수 있음.

  • deploy/emoji SR 100%이고, deploy/voting 이 100%가 아니기 때문에, deploy/web에서 voting 기능 일부 요청이 실패한 것으로 추측할 수 있다.
  • 의존성이 있는 deploy 요청 실패는 웹이 반환하는 오류의 원인 일 수 있다.
 
 

(5) 위 캡처 중 [LIVE CALLS] 항목이 나오지 않은 이유는 linkerd 설치 후 서비스 파드가 재기동 되지 않았기 때문이며, 서비스 파드 재기동 후 아래와 같이 Path가 보인다.

  • [LIVE CALLS] 내용 중 호출 된 URL을 보면 deploy/voting 서비스로 POST 메서드로 /emojivoto.v1.VotingService/VoteDoughnut 패스를 요청하는 부분에서 Success Rate가 0인 것을 확인 할 수 있다.

 

 

 

 

참고) https://github.com/linkerd/linkerd2

 

 

 

 

 

'DevOps' 카테고리의 다른 글

Harbor_Registry  (1) 2022.12.28
소프트웨어 스택  (0) 2022.11.08
[GateKeeper] K8s 정책제어  (0) 2022.10.13
[DevOps] ArgoCD 구축/테스트  (0) 2022.10.11

https://musclebear.tistory.com/69

'Linux' 카테고리의 다른 글

MTU Ping Test  (0) 2023.04.24
ssh 터널링  (0) 2023.04.05
dd 명령어  (0) 2023.03.22
[Ansible] Ubuntu Password 일괄 변경  (0) 2023.03.21
[Ubuntu] 20.04 커널버전 업그레이드  (0) 2023.03.20

 

 

 

스테이징 호스트 장비, 스토리지망 인터페이스 설정 : MTU 9000
root@brighforest:~# ifconfig br2
br2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 9000
...





스토리지 서버 Ping 테스트


1. MTU 1500 테스트 - 정상 응답
root@brighforest:~# ping -M do -s 1472 xxx.xxx.xxx.96
PING xxx.xxx.xxx.96 (xxx.xxx.xxx.96) 1472(1500) bytes of data.
1480 bytes from xxx.xxx.xxx.96: icmp_seq=1 ttl=64 time=0.163 ms
1480 bytes from xxx.xxx.xxx.96: icmp_seq=2 ttl=64 time=0.213 ms
1480 bytes from xxx.xxx.xxx.96: icmp_seq=3 ttl=64 time=0.229 ms




2. MTU 1600 테스트 - 정상 응답 안 함
root@brighforest:~# ping -M do -s 1600 xxx.xxx.xxx.96
PING xxx.xxx.xxx.96 (xxx.xxx.xxx.96) 1600(1628) bytes of data.
...



3. MTU 9000 테스트 - 정상 응답 안 함
root@brighforest:~# ping -M do -s 8972 xxx.xxx.xxx.96
PING xxx.xxx.xxx.96 (xxx.xxx.xxx.96) 8972(9000) bytes of data.
...
 
 
참고)
https://blog.naver.com/PostView.naver?blogId=jesstter&logNo=222077975245
 

 

containerd 사용할 경우 insecure registry 설정 방법

 

버전 - containerd://1.6.15

 

 

1. 설정 변경

root@bee-master01:/etc/containerd# cat /etc/containerd/config.toml
version = 2
root = "/var/lib/containerd"
state = "/run/containerd"
oom_score = 0

[grpc]
  max_recv_message_size = 16777216
  max_send_message_size = 16777216

[debug]
  level = "info"

[metrics]
  address = ""
  grpc_histogram = false

[plugins]
  [plugins."io.containerd.grpc.v1.cri"]
    sandbox_image = "registry.k8s.io/pause:3.8"
    max_container_log_line_size = -1
    enable_unprivileged_ports = false
    enable_unprivileged_icmp = false
    [plugins."io.containerd.grpc.v1.cri".containerd]
      default_runtime_name = "runc"
      snapshotter = "overlayfs"
      [plugins."io.containerd.grpc.v1.cri".containerd.runtimes]
        [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
          runtime_type = "io.containerd.runc.v2"
          runtime_engine = ""
          runtime_root = ""
          base_runtime_spec = "/etc/containerd/cri-base.json"

          [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
            systemdCgroup = true
    [plugins."io.containerd.grpc.v1.cri".registry]
      [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
          endpoint = ["https://registry-1.docker.io"]
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."192.168.110.90:5000"] #추가
          endpoint = ["http://192.168.110.90:5000"]                                  #추가
      [plugins."io.containerd.grpc.v1.cri".registry.configs]                         #추가
        [plugins."io.containerd.grpc.v1.cri".registry.configs."192.168.110.90:5000".tls] #추가
          insecure_skp_verify = true        #추가

 

 

2. containerd 재기동

# systemctl restart containerd

 

 

3. image pull

root@bee-master01:/etc/containerd# crictl pull  192.168.110.90:5000/library/nginx:1.19
Image is up to date for sha256:f0b8a9a541369db503ff3b9d4fa6de561b300f7363920c2bff4577c6c24c5cf6

 

 

 

*ctr 명령어를 사용할 겨우에는 별도 옵션을 추가해야 함. 기본으로 containerd/config.toml 설정을 인식을 안한다고 함

'Kubernetes' 카테고리의 다른 글

[Nexus3] proxy docker registry 구성  (0) 2023.04.03
쿠버네티스 지식 조각모음(작성 중)  (0) 2023.03.26
[K8s ] v1.25 Cgroupv2, MemoryQoS  (0) 2023.03.18
[K8s] 유용한 명령어  (0) 2023.03.08
API 사용법  (0) 2023.02.21
[root@brightforest ~]# more tunnul
ssh -D 0.0.0.0:6666 10.1.10.10

브라우저 - 설정 - 네트워크 설정
SOCKS 호스트 : 192.168.110.1
포트 : 6666

------------------

PC    -     HOST      -     VM
local - 192.168.110.1 - 10.10.0.10

1. VM → HOST
ssh -R 7777:localhost:8081 192.168.110.1

2. PC → HOST
ssh -L 7777:localhost:7777 root@192.168.110.1

web - localhost:7777

------------------

A(211.234.234.234 -p 34522)     |방화벽|        B(192.168.110.1)          C(172.21.10.1)
(1) A에서 C로 연결하기 위해 B → A로 Proxy 설정  (B에서 수행)
ssh -R 60020:172.21.10.1:22 root@211.234.234.234 -p 34522
(2) A → C로 연결 (A에서 수행)
ssh user01@localhost -p 60020

 

 

참고)

https://kimmj.github.io/ubuntu/ssh-tunneling/

1. nexus3 기동

root@sung-deploy:~# docker pull sonatype/nexus3

root@sung-deploy:~# mkdir -p /data2/nexus-data && chown -R 200 /data2/nexus-data/

root@sung-deploy:~# docker run -d -p 8081:8081 -p 5000:5000 --name nexus -v /data2/nexus-data:/nexus-data sonatype/nexus3

 

 

 

2. Blob Store 생성

[docker-hub]

 

 

 

 

 

3. Repository 생성

[Create repository]

 

 

 

 

4. insecure-registry 추가

root@sung-deploy:~# cat /etc/docker/daemon.json
{
                "insecure-registries" : ["192.168.110.90:5000"]
}

 

 

5. docker 재기동

# systemctl restart docker
# docker start CONTAINER_NAME

 

 

 

6. image pull

root@sung-deploy:~# docker pull 192.168.110.90:5000/library/nginx:1.19


*library 붙여야 함

 

---

 

containerd 사용할 경우

버전 - containerd://1.6.15

root@bee-master01:/etc/containerd# cat /etc/containerd/config.toml
version = 2
root = "/var/lib/containerd"
state = "/run/containerd"
oom_score = 0

[grpc]
  max_recv_message_size = 16777216
  max_send_message_size = 16777216

[debug]
  level = "info"

[metrics]
  address = ""
  grpc_histogram = false

[plugins]
  [plugins."io.containerd.grpc.v1.cri"]
    sandbox_image = "registry.k8s.io/pause:3.8"
    max_container_log_line_size = -1
    enable_unprivileged_ports = false
    enable_unprivileged_icmp = false
    [plugins."io.containerd.grpc.v1.cri".containerd]
      default_runtime_name = "runc"
      snapshotter = "overlayfs"
      [plugins."io.containerd.grpc.v1.cri".containerd.runtimes]
        [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
          runtime_type = "io.containerd.runc.v2"
          runtime_engine = ""
          runtime_root = ""
          base_runtime_spec = "/etc/containerd/cri-base.json"

          [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
            systemdCgroup = true
    [plugins."io.containerd.grpc.v1.cri".registry]
      [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
          endpoint = ["https://registry-1.docker.io"]
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."192.168.110.90:5000"] #추가
          endpoint = ["http://192.168.110.90:5000"]                                  #추가
      [plugins."io.containerd.grpc.v1.cri".registry.configs]                         #추가
        [plugins."io.containerd.grpc.v1.cri".registry.configs."192.168.110.90:5000".tls] #추가
          insecure_skp_verify = true        #추가

 

 

 

 

 

 

'Kubernetes' 카테고리의 다른 글

[containerd] insecure registry  (0) 2023.04.05
쿠버네티스 지식 조각모음(작성 중)  (0) 2023.03.26
[K8s ] v1.25 Cgroupv2, MemoryQoS  (0) 2023.03.18
[K8s] 유용한 명령어  (0) 2023.03.08
API 사용법  (0) 2023.02.21

 

1. kube-controller-manager 기능 및 역할, 종류

컨트롤러 프로세스를 실행하는 컨트롤 플레인 컴포넌트.

논리적으로, 각 컨트롤러는 분리된 프로세스이지만, 복잡성을 낮추기 위해 모두 단일 바이너리로 컴파일되고 단일 프로세스 내에서 실행된다.

이들 컨트롤러는 다음을 포함한다.

  • 노드 컨트롤러: 노드가 다운되었을 때 통지와 대응에 관한 책임을 가진다.
  • 잡 컨트롤러: 일회성 작업을 나타내는 잡 오브젝트를 감시한 다음, 해당 작업을 완료할 때까지 동작하는 파드를 생성한다.
  • 엔드포인트 컨트롤러: 엔드포인트 오브젝트를 채운다(즉, 서비스와 파드를 연결시킨다.)
  • 서비스 어카운트 & 토큰 컨트롤러: 새로운 네임스페이스에 대한 기본 계정과 API 접근 토큰을 생성한다

 

 

2. 대규모 클러스터에서 apiserver, etcd 등에 부하가 발생할 경우 해결법은?

-> resource limit 수정(cpu), ssd 사용 이외에 아키텍쳐 등 변화로 가능할지?

-> gpu를 사용하면 빨라지지 않을까?

 

 

3. 쿠버네티스 인증 체계

계정인증

권한인가

...

 

4. apiserver에 명령을 보내면, OS에서 어떻게 처리될까?

...

 

5. probe 종류 및 설명

프로브 종류

kubelet은 실행 중인 컨테이너들에 대해서 선택적으로 세 가지 종류의 프로브를 수행하고 그에 반응할 수 있다.

 

livenessProbe컨테이너가 동작 중인지 여부를 나타낸다.

만약 활성 프로브(liveness probe)에 실패한다면, kubelet은 컨테이너를 죽이고, 해당 컨테이너는 재시작 정책의 대상이 된다. 만약 컨테이너가 활성 프로브를 제공하지 않는 경우, 기본 상태는 Success 이다.

 

readinessProbe컨테이너가 요청을 처리할 준비가 되었는지 여부를 나타낸다.

만약 준비성 프로브(readiness probe)가 실패한다면, 엔드포인트 컨트롤러는 파드에 연관된 모든 서비스들의 엔드포인트에서 파드의 IP주소를 제거한다. 준비성 프로브의 초기 지연 이전의 기본 상태는 Failure 이다. 만약 컨테이너가 준비성 프로브를 지원하지 않는다면, 기본 상태는 Success 이다.

 

startupProbe컨테이너 내의 애플리케이션이 시작되었는지를 나타낸다.

스타트업 프로브(startup probe)가 주어진 경우, 성공할 때까지 다른 나머지 프로브는 활성화되지 않는다. 만약 스타트업 프로브가 실패하면, kubelet이 컨테이너를 죽이고, 컨테이너는 재시작 정책에 따라 처리된다. 컨테이너에 스타트업 프로브가 없는 경우, 기본 상태는 Success 이다.

 

 

6. Network Policy

https://kubernetes.io/ko/docs/concepts/services-networking/network-policies/

 

 

 

7. RBAC 모범사례

https://kubernetes.io/ko/docs/concepts/security/rbac-good-practices/

 

 

 

 

 

 

 

 

 

 

'Kubernetes' 카테고리의 다른 글

[containerd] insecure registry  (0) 2023.04.05
[Nexus3] proxy docker registry 구성  (0) 2023.04.03
[K8s ] v1.25 Cgroupv2, MemoryQoS  (0) 2023.03.18
[K8s] 유용한 명령어  (0) 2023.03.08
API 사용법  (0) 2023.02.21

 

https://kithub.tistory.com/entry/Centos-%EB%A6%AC%EB%88%85%EC%8A%A4-%EC%A0%84%EC%B2%B4%EC%8B%9C%EC%8A%A4%ED%85%9C-%EB%B3%B5%EC%82%AC%ED%95%98%EA%B8%B0

 

# b1 1MB 500개로 이루어진 파일 10개 생성
# 500MB * 10개
for i in {1..10}; do echo $i; dd if=/dev/zero of=$i bs=1MB count=500; sleep 2; done

# bs 1GB 15개로 이루어진 15GB 크기의 file1 파일 생성
dd if=/dev/zero of=file1 bs=1GB count=15

'Linux' 카테고리의 다른 글

MTU Ping Test  (0) 2023.04.24
ssh 터널링  (0) 2023.04.05
[Ansible] Ubuntu Password 일괄 변경  (0) 2023.03.21
[Ubuntu] 20.04 커널버전 업그레이드  (0) 2023.03.20
[Ubuntu] 20.04 -> 22.04 업그레이드  (0) 2023.02.24

1. Python 설치

# Install ansible
apt install ansible

# Set Virtual-env
apt install python3.8-venv
source k8s-venv/bin/activate
pip install ansible==4.10.0

 

2. yaml 파일 생성

# update-root-pw.yaml
---
- hosts: all
  gather_facts: no
  tasks:
  - name: Update Root user's Password
    user:
      name: root
      update_password: always
      password: "{{ PASSWORD | password_hash('sha512') }}"

 

3. ansible-hosts 파일 생성

#  ansible-hosts
[all]
user01-deploy  ansible_host=192.168.110.10 ip=192.168.110.10
user01-master1 ansible_host=192.168.110.11 ip=192.168.110.11
user01-master2 ansible_host=192.168.110.12 ip=192.168.110.12
user01-master3 ansible_host=192.168.110.13 ip=192.168.110.13
user01-worker1 ansible_host=192.168.110.14 ip=192.168.110.14
user01-worker2 ansible_host=192.168.110.15 ip=192.168.110.15

user02-deploy  ansible_host=192.168.110.20 ip=192.168.110.20
user02-master1 ansible_host=192.168.110.21 ip=192.168.110.21
user02-master2 ansible_host=192.168.110.22 ip=192.168.110.22
user02-master3 ansible_host=192.168.110.23 ip=192.168.110.23
user02-worker1 ansible_host=192.168.110.24 ip=192.168.110.24
user02-worker2 ansible_host=192.168.110.25 ip=192.168.110.25

user03-deploy  ansible_host=192.168.110.30 ip=192.168.110.30
user03-master1 ansible_host=192.168.110.31 ip=192.168.110.31
user03-master2 ansible_host=192.168.110.32 ip=192.168.110.32
user03-master3 ansible_host=192.168.110.33 ip=192.168.110.33
user03-worker1 ansible_host=192.168.110.34 ip=192.168.110.34
user03-worker2 ansible_host=192.168.110.35 ip=192.168.110.35

 

4. 적용

ansible-playbook -i ansible-hosts update-root-pw.yaml --extra-vars "PASSWORD=passwd123$"

 

 

 

 

기타) root 로그인 허용

ansible -m shell -a "sed -i \"s/#   StrictHostKeyChecking*/StrictHostKeyChecking no/\"  /etc/ssh/sshd_config" -i ansible-hosts all
ansible -m shell -a "sed -i \"s/#PermitRootLogin.*/PermitRootLogin yes/\"  /etc/ssh/sshd_config" -i /tmp/sllee/ansible-hosts all

'Linux' 카테고리의 다른 글

ssh 터널링  (0) 2023.04.05
dd 명령어  (0) 2023.03.22
[Ubuntu] 20.04 커널버전 업그레이드  (0) 2023.03.20
[Ubuntu] 20.04 -> 22.04 업그레이드  (0) 2023.02.24
[CentOS7] Ansible 5.x 설치  (0) 2023.02.09

목표

 - 5.15.0-60-generic 버전으로 업그레이드

 

 

1. package repository 최신화 및 update 대상 확인
# apt-get update
# apt-cache search linux | grep '5.15.0-60-generic'

2. kernel upgrade 수행
# apt-get install linux-image-5.15.0-60-generic linux-headers-5.15.0-60-generic linux-modules-5.15.0-60-generic linux-modules-extra-5.15.0-60-generic
# dpkg -l | grep linux
# update-grub2

3. kernel upgrade 적용 확인
# cat /boot/grub/grub.cfg | grep gnulinux
# ls -alt /boot/ | grep initrd

# sync;sync;sync
# reboot * 시스템 상태 확인
# df -Ph
# timedatectl
# chronyc sources

* 시스템 message 확인
# cat /var/log/messages |grep -i fail
# cat /var/log/messages |grep -i error
# dmesg |grep -i fail
# dmesg |grep -i error

* 커널 업데이트 확인
# uname -r (5.15.0-60-generic)

'Linux' 카테고리의 다른 글

dd 명령어  (0) 2023.03.22
[Ansible] Ubuntu Password 일괄 변경  (0) 2023.03.21
[Ubuntu] 20.04 -> 22.04 업그레이드  (0) 2023.02.24
[CentOS7] Ansible 5.x 설치  (0) 2023.02.09
[ubuntu] systemd에 관하여  (0) 2022.10.24

1. cgroup

 

cgroup 이란 cpu, memory 등 리소스를 제한/관리하는 리눅스 커널의 기능이며,

리눅스 커널은 cgroup v1, cgroup v2 두 가지 버전의 cgroup을 제공합니다.

 

cgroup v2는 2016년부터 리눅스 커널에서 개발되어 왔으며,

K8s v1.25 버전부터 cgroup v2 기능이 GA (general availability) 되었습니다.

 

 

cgroup v2에서 향상된 기능은 아래와 같습니다.

  • API의 단일 통합 계층 설계
  • 컨테이너에 대한 더 안전한 하위 트리 위임
  • Pressure Stall Information 와 같은 최신 기능
  • 향상된 리소스 할당 관리 및 여러 리소스 간 격리
    • 다양한 유형의 메모리 할당(네트워크 및 커널 메모리 등)에 대한 통합 계정
    • 페이지 캐시 쓰기 되돌림과 같은 즉각적이지 않은 리소스 변경에 대한 설명

 

일부 Kubernetes 기능은 향상된 리소스 관리 및 격리를 위해 cgroup v2를 독점적으로 사용합니다. 예를 들어 MemoryQoS 기능은 메모리 활용도를 개선하고 이를 활성화하기 위해 cgroup v2 기능에 의존합니다. kubelet의 새로운 리소스 관리 기능은 앞으로 나아가는 새로운 cgroup v2 기능을 활용할 것입니다.

 

 

Ubuntu 21.10 버전부터 cgroup v2가 기본으로 설정되어있지만, 이하 버전에서도 커널 5.8 이상(권장)에서 cgroup v2를 사용하도록 설정할 수 있습니다.

 

 

Ubuntu 20.04에서 설정방법

### cgroup v2 사용설정 방법
1. systemd.unified_cgroup_hierarchy=1 옵션 추가
/etc/default/grub 파일의 [grep GRUB_CMDLINE_LINUX=""] 항목에 옵션 추가
-> GRUB_CMDLINE_LINUX="systemd.unified_cgroup_hierarchy=1"


2. grub 업데이트
$ update-grub


3. 재기동
$ reboot


### 확인방법
1.
root@k8s-worker02:~# stat -c %T -f /sys/fs/cgroup
cgroup2fs

# 결과가 cgroup2fs이면 cgroupv2를 사용하는 것
# 결과가 tmpfs이면 cgroupv1을 사용하는 것


2.
아래 파일이 있으면, cgroupv2를 사용하는 것
root@k8s-worker02:~# ls -l /sys/fs/cgroup/cgroup.controllers
-r--r--r-- 1 root root 0 Mar  7 01:20 /sys/fs/cgroup/cgroup.controllers

 

참고)

https://sleeplessbeastie.eu/2021/09/10/how-to-enable-control-group-v2/

https://kubernetes.io/docs/concepts/architecture/cgroups/#check-cgroup-version

https://kubernetes.io/blog/2022/08/31/cgroupv2-ga-1-25/


 

2. MemoryQoS

MemoryQoS는 k8s v1.22에서 추가된 기능으로 현재까지 alpha 단계입니다.

K8s feature-gate 옵션으로 활성화하여 사용 할 수 있습니다.

 

cgroup v1에서는 cpu_share, cpu_set, cpu_quota, cpu_period와 같이 CPU 리소스만 제한할 수 있으며, MemoryQoS는 사용할 수 없으며, cgroup v2에서는 memoryQoS 기능을 지원합니다.

  • 파드 및 컨테이너 메모리 요청 및 제한에 대한 메모리 가용성에 대한 보장을 제공합니다.
  • 노드 리소스의 메모리 가용성에 대한 보장 제공
  • 파드 및 컨테이너 수준 cgroup에 대한 새로운 cgroup v2 memory knobs(memory.min/memory.high) 사용
  • 노드 레벨 cgroup에 대한 새로운 cgroup v2  memory knobs(memory.min) 사용
requests.memory cgroup이 항상 보유해야 하는 최소 메모리 양을 지정
memory.max cgroup의 메모리 사용이 이 제한에 도달하고 줄일 수 없는 경우 cgroup에서 시스템 OOM 킬러가 호출
특정 상황에서 사용량이 일시적으로 memory.high 한도를 초과할 수 있습니다.
memory.low the best-effort memory protection
memory.high 메모리 사용량 스로틀 제한
memory.high = limits.memory/node allocatable memory

 

memory.high 계산 방법

[k8s v1.22]

requests.memory=50, limits.memory=100 경우 조절 계수 0.8을 곱하여 memory.high=80이 됩니다.

throttling factor = 0.8

memory.high=(limits.memory or node allocatable memory) * memory throttling factor, 
where default value of memory throttling factor is set to 0.8

 

[k8s v1.27]

컨테이너 메모리 제한이 지정되지 않은 경우 조절 계수 0.9를 곱하여 적용됩니다.

throttling factor = 0.9

memory.high=floor[(requests.memory + memory throttling factor * (limits.memory or node allocatable memory - requests.memory))/pageSize] * pageSize, where default value of memory throttling factor is set to 0.9

 

 

 

 

k8s v1.25에서 MemoryQoS 활성화 방법

# MemoryQoS 활성화
/etc/kubernetes/kubelet-config.yamlS에 아래 옵션 추가 후 kubelet 재기동
...
featureGates:
  MemoryQoS: true
...


#확인방법
root@k8s-worker02:~# ctr -n k8s.io c info 8b9e8c3f8815425dafea3530281fb967c23f97acd2a83009708b9ce46a6755c4 | grep memory
                "memory": {
                    "memory.high": "107374182",
                    "memory.min": "67108864"
                    
 
 
*kubespray에서 설정방법
vi ~/roles/kubespray-defaults/defaults/main.yaml
kubelet_feature_gates: []
-> kubelet_feature_gates: [MemoryQoS=true]

 

*cgroup v2를 사용해야 MemoryQoS를 활성화 할 수 있습니다.

 

 

 

참고)

https://github.com/kubernetes/enhancements/tree/master/keps/sig-node/2570-memory-qos/#readme

https://kubernetes.io/blog/2021/11/26/qos-memory-resources/

 

 


추가

*MemoryQoS 기능 활성화 후 비정상적인 부하 증가로 인하여, 기능 disable 함.

'Kubernetes' 카테고리의 다른 글

[Nexus3] proxy docker registry 구성  (0) 2023.04.03
쿠버네티스 지식 조각모음(작성 중)  (0) 2023.03.26
[K8s] 유용한 명령어  (0) 2023.03.08
API 사용법  (0) 2023.02.21
Ceph-CSI 구성  (0) 2023.02.10

사용중인 컨테이너 이미지 리스트 확인

root@k8s-master01:~# kubectl get pods --all-namespaces -o jsonpath="{.items[*].spec.containers[*].image}" |tr -s '[[:space:]]' '\n' |sort | uniq -c
      2 docker.io/library/nginx:1.23.2-alpine
      1 quay.io/calico/kube-controllers:v3.24.5
      5 quay.io/calico/node:v3.24.5
      3 quay.io/coreos/etcd:v3.5.6
      2 registry.k8s.io/coredns/coredns:v1.9.3
      1 registry.k8s.io/cpa/cluster-proportional-autoscaler-amd64:1.8.5
      5 registry.k8s.io/dns/k8s-dns-node-cache:1.21.1
      3 registry.k8s.io/kube-apiserver:v1.25.6
      3 registry.k8s.io/kube-controller-manager:v1.25.6
      5 registry.k8s.io/kube-proxy:v1.25.6
      3 registry.k8s.io/kube-scheduler:v1.25.6

 

 

이벤트 정렬

root@k8s-master01:~# kubectl -n kube-system get event --sort-by='lastTimestamp'

'Kubernetes' 카테고리의 다른 글

쿠버네티스 지식 조각모음(작성 중)  (0) 2023.03.26
[K8s ] v1.25 Cgroupv2, MemoryQoS  (0) 2023.03.18
API 사용법  (0) 2023.02.21
Ceph-CSI 구성  (0) 2023.02.10
OS 옵션 변경  (0) 2022.12.26

테스트 - 총 50분 소요

 

대상서버 : 192.168.110.115 k8s-worker02

 

 

기존 설정

root@k8s-master01:~# kubectl get nodes -o wide
NAME           STATUS   ROLES           AGE   VERSION   INTERNAL-IP       EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIME
k8s-master01   Ready    control-plane   56d   v1.24.6   192.168.110.111   <none>        Ubuntu 20.04.4 LTS   5.4.0-135-generic   containerd://1.6.8
k8s-master02   Ready    control-plane   56d   v1.24.6   192.168.110.112   <none>        Ubuntu 20.04.4 LTS   5.4.0-135-generic   containerd://1.6.8
k8s-master03   Ready    control-plane   56d   v1.24.6   192.168.110.113   <none>        Ubuntu 20.04.4 LTS   5.4.0-135-generic   containerd://1.6.8
k8s-worker01   Ready    <none>          56d   v1.24.6   192.168.110.114   <none>        Ubuntu 20.04.4 LTS   5.4.0-135-generic   containerd://1.6.8
k8s-worker02   Ready    <none>          56d   v1.24.6   192.168.110.115   <none>        Ubuntu 20.04.5 LTS   5.4.0-135-generic   containerd://1.6.8

 

Kubernetes 프로세스 종료

root@k8s-worker02:~# systemctl stop kubelet
root@k8s-worker02:~# systemctl stop containerd.service

 


 

업그레이드

  1. 패키지 및 서버 최신버전으로 업데이트
sudo apt update && sudo apt upgrade -y

...

Configuration file '/etc/cloud/cloud.cfg'
 ==> Modified (by you or by a script) since installation.
 ==> Package distributor has shipped an updated version.
   What would you like to do about it ?  Your options are:
    Y or I  : install the package maintainer's version
    N or O  : keep your currently-installed version
      D     : show the differences between the versions
      Z     : start a shell to examine the situation
 The default action is to keep your current version.
*** cloud.cfg (Y/I/N/O/D/Z) [default=N] ?
N
root@k8s-worker02:~# sudo apt dist-upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following packages were automatically installed and are no longer required:
  cgroupfs-mount pigz
Use 'sudo apt autoremove' to remove them.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

2. 불필요 패키지 삭제

root@k8s-worker02:~# sudo apt autoremove
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be REMOVED:
  cgroupfs-mount pigz
0 upgraded, 0 newly installed, 2 to remove and 0 not upgraded.
After this operation, 292 kB disk space will be freed.
Do you want to continue? [Y/n] Y
(Reading database ... 96247 files and directories currently installed.)
Removing cgroupfs-mount (1.4) ...
Removing pigz (2.4-1) ...
Processing triggers for man-db (2.9.1-1) ...

3. 코어 업데이트를 위한 패키지 설치

root@k8s-worker02:~# sudo apt install update-manager-core
Reading package lists... Done
Building dependency tree
Reading state information... Done
update-manager-core is already the newest version (1:20.04.10.11).
update-manager-core set to manually installed.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

4. 업그레이드

root@k8s-worker02:~# sudo do-release-upgrade
Checking for a new Ubuntu release
You have not rebooted after updating a package which requires a reboot. Please reboot before upgrading.

root@k8s-worker02:~# reboot
nginx 종료 기다리고 있어서 하드리부트 

재시도

root@k8s-worker02:~# sudo do-release-upgrade
...
If you continue, an additional ssh daemon will be started at port
'1022'.
Do you want to continue?

Continue [yN] y

---

Do you want to start the upgrade?


5 packages are going to be removed. 105 new packages are going to be
installed. 575 packages are going to be upgraded.

You have to download a total of 567 M. This download will take about
2 minutes with your connection.

Installing the upgrade can take several hours. Once the download has
finished, the process cannot be canceled.

 Continue [yN]  Details [d]
 y
 
 ... 
 

yes

...
Configuration file '/etc/systemd/resolved.conf'
 ==> Modified (by you or by a script) since installation.
 ==> Package distributor has shipped an updated version.
   What would you like to do about it ?  Your options are:
    Y or I  : install the package maintainer's version
    N or O  : keep your currently-installed version
      D     : show the differences between the versions
      Z     : start a shell to examine the situation
 The default action is to keep your current version.
*** resolved.conf (Y/I/N/O/D/Z) [default=N] ?
N
...

중간에 GUI 화면으로 커널 버전 그대로 쓸건지 물어봄 (default : 기존버전사용)

root@k8s-worker02:~# uname -a
Linux k8s-worker02 5.4.0-139-generic #156-Ubuntu SMP Fri Jan 20 17:27:18 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
root@k8s-worker02:~#
root@k8s-worker02:~# more /etc/*release
::::::::::::::
/etc/lsb-release
::::::::::::::
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu 22.04.2 LTS"

커널 업데이트(5.19 테스트)

sudo add-apt-repository ppa:cappelikan/ppa -y

sudo apt install mainline -y
https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.19-rc8/
  wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.19-rc8/amd64/linux-headers-5.19.0-051900rc8_5.19.0-051900rc8.202207242130_all.deb
  wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.19-rc8/amd64/linux-image-unsigned-5.19.0-051900rc8-generic_5.19.0-051900rc8.202207242130_amd64.deb
  wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.19-rc8/amd64/linux-modules-5.19.0-051900rc8-generic_5.19.0-051900rc8.202207242130_amd64.deb
root@k8s-worker02:~# sudo dpkg -i *.deb
reboot -f
root@k8s-worker02:~# uname -r
5.19.0-051900rc8-generic
root@k8s-worker02:~# more /etc/*release
::::::::::::::
/etc/lsb-release
::::::::::::::
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu 22.04.2 LTS"
root@k8s-master01:~# kubectl get nodes -o wide
NAME           STATUS   ROLES           AGE   VERSION   INTERNAL-IP       EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION             CONTAINER-RUNTIME
k8s-master01   Ready    control-plane   56d   v1.24.6   192.168.110.111   <none>        Ubuntu 20.04.4 LTS   5.4.0-135-generic          containerd://1.6.8
k8s-master02   Ready    control-plane   56d   v1.24.6   192.168.110.112   <none>        Ubuntu 20.04.4 LTS   5.4.0-135-generic          containerd://1.6.8
k8s-master03   Ready    control-plane   56d   v1.24.6   192.168.110.113   <none>        Ubuntu 22.04.2 LTS   5.15.0-60-generic          containerd://1.6.8
k8s-worker01   Ready    <none>          56d   v1.24.6   192.168.110.114   <none>        Ubuntu 20.04.4 LTS   5.4.0-135-generic          containerd://1.6.8
k8s-worker02   Ready    <none>          56d   v1.24.6   192.168.110.115   <none>        Ubuntu 22.04.2 LTS   5.19.0-051900rc8-generic   containerd://1.6.8

root@k8s-master01:~# kubectl -n kube-system get pod -o wide
NAME                                      READY   STATUS    RESTARTS          AGE    IP                NODE           NOMINATED NODE   READINESS GATES
calico-kube-controllers-56fd7b8dc-n42cb   1/1     Running   78 (15d ago)      56d    192.168.110.114   k8s-worker01   <none>           <none>
calico-node-6jmxc                         1/1     Running   1 (52d ago)       56d    192.168.110.111   k8s-master01   <none>           <none>
calico-node-k7jpb                         1/1     Running   4 (40d ago)       56d    192.168.110.114   k8s-worker01   <none>           <none>
calico-node-lpf6w                         1/1     Running   7 (78m ago)       56d    192.168.110.115   k8s-worker02   <none>           <none>
calico-node-x55bh                         1/1     Running   1 (52d ago)       56d    192.168.110.112   k8s-master02   <none>           <none>
calico-node-zf7p9                         1/1     Running   2 (2m17s ago)     56d    192.168.110.113   k8s-master03   <none>           <none>
coredns-75dbf65849-m7kl7                  1/1     Running   0                 66m    10.233.113.6      k8s-master02   <none>           <none>
coredns-75dbf65849-mtt7d                  1/1     Running   0                 52d    10.233.66.3       k8s-master01   <none>           <none>
csi-nfs-controller-6495ffdf79-dlgkm       3/3     Running   0                 123m   192.168.110.114   k8s-worker01   <none>           <none>
csi-nfs-node-4mwrh                        3/3     Running   10 (2m17s ago)    51d    192.168.110.113   k8s-master03   <none>           <none>
csi-nfs-node-6nllb                        3/3     Running   0                 51d    192.168.110.111   k8s-master01   <none>           <none>
csi-nfs-node-h9jdc                        3/3     Running   8 (78m ago)       51d    192.168.110.115   k8s-worker02   <none>           <none>
csi-nfs-node-mkd92                        3/3     Running   2 (15d ago)       51d    192.168.110.114   k8s-worker01   <none>           <none>
csi-nfs-node-tp56l                        3/3     Running   0                 51d    192.168.110.112   k8s-master02   <none>           <none>
dns-autoscaler-59b8867c86-tzbwm           1/1     Running   1 (52d ago)       56d    10.233.113.4      k8s-master02   <none>           <none>
etcd-k8s-master01                         1/1     Running   3 (15d ago)       56d    192.168.110.111   k8s-master01   <none>           <none>
etcd-k8s-master02                         1/1     Running   3 (15d ago)       56d    192.168.110.112   k8s-master02   <none>           <none>
etcd-k8s-master03                         1/1     Running   4 (2m17s ago)     56d    192.168.110.113   k8s-master03   <none>           <none>
kube-apiserver-k8s-master01               1/1     Running   50 (15d ago)      56d    192.168.110.111   k8s-master01   <none>           <none>
kube-apiserver-k8s-master02               1/1     Running   48 (15d ago)      56d    192.168.110.112   k8s-master02   <none>           <none>
kube-apiserver-k8s-master03               1/1     Running   40 (2m17s ago)    56d    192.168.110.113   k8s-master03   <none>           <none>
kube-controller-manager-k8s-master01      1/1     Running   389 (25h ago)     56d    192.168.110.111   k8s-master01   <none>           <none>
kube-controller-manager-k8s-master02      1/1     Running   407 (4h53m ago)   56d    192.168.110.112   k8s-master02   <none>           <none>
kube-controller-manager-k8s-master03      1/1     Running   395 (2m17s ago)   56d    192.168.110.113   k8s-master03   <none>           <none>
kube-proxy-7lwpx                          1/1     Running   1 (52d ago)       56d    192.168.110.111   k8s-master01   <none>           <none>
kube-proxy-7p2hw                          1/1     Running   2 (2m17s ago)     56d    192.168.110.113   k8s-master03   <none>           <none>
kube-proxy-gwhtf                          1/1     Running   2 (78m ago)       56d    192.168.110.115   k8s-worker02   <none>           <none>
kube-proxy-tcrq7                          1/1     Running   0                 56d    192.168.110.114   k8s-worker01   <none>           <none>
kube-proxy-tr8fq                          1/1     Running   1 (52d ago)       56d    192.168.110.112   k8s-master02   <none>           <none>
kube-scheduler-k8s-master01               1/1     Running   382 (45h ago)     56d    192.168.110.111   k8s-master01   <none>           <none>
kube-scheduler-k8s-master02               1/1     Running   402 (4h53m ago)   56d    192.168.110.112   k8s-master02   <none>           <none>
kube-scheduler-k8s-master03               1/1     Running   393 (2m17s ago)   56d    192.168.110.113   k8s-master03   <none>           <none>
metrics-server-5ccdd99954-vn7p9           1/1     Running   0                 38d    10.233.125.3      k8s-worker01   <none>           <none>
nginx-proxy-k8s-worker01                  1/1     Running   0                 56d    192.168.110.114   k8s-worker01   <none>           <none>
nginx-proxy-k8s-worker02                  1/1     Running   2 (78m ago)       56d    192.168.110.115   k8s-worker02   <none>           <none>

 


현재 기본으로 사용중인 cgroup 버전 정보

root@k8s-worker02:~#  stat -fc %T /sys/fs/cgroup/
cgroup2fs


cgroup 컨트롤러 확인
root@k8s-worker02:~# ll /sys/fs/cgroup/cgroup.controllers
-r--r--r-- 1 root root 0 Feb 23 05:13 /sys/fs/cgroup/cgroup.controllers


*20.04버전
root@k8s-master01:~# ll /sys/fs/cgroup/cgroup.controllers
ls: cannot access '/sys/fs/cgroup/cgroup.controllers': No such file or directory

'Linux' 카테고리의 다른 글

[Ansible] Ubuntu Password 일괄 변경  (0) 2023.03.21
[Ubuntu] 20.04 커널버전 업그레이드  (0) 2023.03.20
[CentOS7] Ansible 5.x 설치  (0) 2023.02.09
[ubuntu] systemd에 관하여  (0) 2022.10.24
[Linux] CentOS repository 구성  (0) 2022.10.21
k8s 1.24버전부터 sa 생성시 token이 자동으로 생성되지 않음.
기본적으로 영구적인 토큰을 발행하지 않으려고 변경된 듯 함



root@k8s-master01:/etc/kubernetes/ssl# kubectl -n kube-system get clusterrole | grep admin
admin                                                                  2022-12-28T08:53:35Z
cluster-admin                                                          2022-12-28T08:53:35Z
system:aggregate-to-admin                                              2022-12-28T08:53:35Z
system:kubelet-api-admin                                               2022-12-28T08:53:35Z




kubectl create sa admin-user -n kube-system

kubectl create clusterrolebinding --clusterrole=cluster-admin admin-user --serviceaccount=kube-system:admin-user


root@k8s-master01:/etc/kubernetes/ssl# kubectl -n kube-system create token admin-user
eyJhbGciOiJSUzI1NiIsImtpZCI6ImlVbmVfYWR4VE1kMlJneHBMZFBVcUlqUFBpNFBLcTFfQVgwNFBIUEhOU0kifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNjc1MDU3MjM2LCJpYXQiOjE2NzUwNTM2MzYsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsInNlcnZpY2VhY2NvdW50Ijp7Im5hbWUiOiJhZG1pbi11c2VyIiwidWlkIjoiODNkYWI4MzYtNzgyNy00OWY0LWI1OGYtOTk5YzAwNWYwNTcxIn19LCJuYmYiOjE2NzUwNTM2MzYsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTphZG1pbi11c2VyIn0.LdWBWVFX737--9ekdpe2I3sRTsRgz5jEvmYFUK_k_ZRopKIYDSoBXpiGXliTxzvsodtZF4H9ESQLjjYx9YYPOBEk-Pmw5BvPKMvcpx9futRIpz85U7_YNAeGphTJGJnHc4rIUILJ4cngJBjAhyi6XJ55bnT1EDYf3KSdPRtfnV0XmiJuEUb0qboCcaNdr9a3ltipitI6AcjYxqbzzPO4dHo6S4ay5aV6M26ZS_ZsAVI64_oLWX641B-skkZlrP4FoJluZvoHZHbKi_AkvnC2VCIoUCmpcR36uH8j-9ZMUMy9gGjQSxXy_NekXJzm5PSz9Qx5VczyP7Pt89XG3L5X1w

root@k8s-master01:~# cat secret.yml
apiVersion: v1
kind: Secret
type: kubernetes.io/service-account-token
metadata:
  name: admin-user-secret
  namespace: kube-system
  annotations:
    kubernetes.io/service-account.name: "admin-user"

root@k8s-master01:~# kubectl apply -f secret.yml
secret/admin-user-secret created

root@k8s-master01:~# kubectl -n kube-system get secret
NAME                TYPE                                  DATA   AGE
admin-user-secret   kubernetes.io/service-account-token   3      5s



root@k8s-master01:~# kubectl -n kube-system get secrets -o yaml
apiVersion: v1
items:
- apiVersion: v1
  data:
    ca.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUMvakNDQWVhZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJeU1USXlPREE0TlRNeU1Gb1hEVE15TVRJeU5UQTROVE15TUZvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBUFVaCnI5MFgvVjErWVk0aXk4UXdwR0QxL0krckt4Q0dDbUxqVFM3T1RZblE4UTJ5ZXVNa3J5djN3bmg3d2J4NldMK0gKdDNKWm16c3NwdXZGMnM2ZjEza1FFaExUa1lnck5HT3RIRWgyZDF0R25XTTEwdjdaMUQyeldsNjJxeGRwQlh2UQpHTjhxbU9TUEtBcUIrOUhXSlFlYmxTUUN3NWtXWGZPbFVJM240dmNqWHphL20zeUhpSHgyQlgxdWlEZUJrZ1JrCkxkNzU1R1ZHNGpoWUFQcWswOHJVRU9jQ3ZtSEYzaVk4K0Evc1NWWUlJZmZMRTVQZUVSL2JWMzBUWG9LWkIxeFkKN0ppNjVITFJ6Y2tyTWVXeTBLazlFSjJRY09PcWNnQzl5NndBWkY0K2Q0RHhvRGJkQUZzdjRSc2NXRmdaKzc2UApHQ2dsRWFjOVJMNGk2RXIraDBFQ0F3RUFBYU5aTUZjd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZOVVVNU0RRczJhTVVJc3BMTWJ1ZVl3MmdVc01NQlVHQTFVZEVRUU8KTUF5Q0NtdDFZbVZ5Ym1WMFpYTXdEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBSjJKY290SjRUSnZ6VDVseHJJQQprVFRoNmFaM01XVzNUcEFVWWgydDI0U21WUmsyb3lFelZrSitVanJRcXU0Y1ZwZGVZNm5xemVHbHhMNi83V0NvCkE4Q01OdTZqWi9yc0ZMbnVReFJraGJIVFlKVmRGL0Y2ZHJOeFJDbGV3RnppdUxwdDduTFFPbndURVoycFA3OFkKYzZadGxPREtoNWlLM2pPNFgxU1VxUEQxcGcxL0pwWGNUZ09IKy9Gam83TDZEMkNRWXBCZEJGUFpzQ1AyTGtGcwpycGI0aHpkVHZ0YzF1QWhEeW4xSmZZQnFvTG43dzlXQ3F2d0JmVWIvYW9pcjdPZXJ2eWpBUExDbUZDVVpQWjZwCjlvcUJhRTFoZWduTm14TVE5VSthRUp0dGIzcTRhOXAzSzlsQVFCRE40MGVReUNXdGRDOUpqV0wrTm56QThBZ0oKYU1BPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
    namespace: a3ViZS1zeXN0ZW0=
    token: ZXlKaGJHY2lPaUpTVXpJMU5pSXNJbXRwWkNJNkltbFZibVZmWVdSNFZFMWtNbEpuZUhCTVpGQlZjVWxxVUZCcE5GQkxjVEZmUVZnd05GQklVRWhPVTBraWZRLmV5SnBjM01pT2lKcmRXSmxjbTVsZEdWekwzTmxjblpwWTJWaFkyTnZkVzUwSWl3aWEzVmlaWEp1WlhSbGN5NXBieTl6WlhKMmFXTmxZV05qYjNWdWRDOXVZVzFsYzNCaFkyVWlPaUpyZFdKbExYTjVjM1JsYlNJc0ltdDFZbVZ5Ym1WMFpYTXVhVzh2YzJWeWRtbGpaV0ZqWTI5MWJuUXZjMlZqY21WMExtNWhiV1VpT2lKaFpHMXBiaTExYzJWeUxYTmxZM0psZENJc0ltdDFZbVZ5Ym1WMFpYTXVhVzh2YzJWeWRtbGpaV0ZqWTI5MWJuUXZjMlZ5ZG1salpTMWhZMk52ZFc1MExtNWhiV1VpT2lKaFpHMXBiaTExYzJWeUlpd2lhM1ZpWlhKdVpYUmxjeTVwYnk5elpYSjJhV05sWVdOamIzVnVkQzl6WlhKMmFXTmxMV0ZqWTI5MWJuUXVkV2xrSWpvaU9ETmtZV0k0TXpZdE56Z3lOeTAwT1dZMExXSTFPR1l0T1RrNVl6QXdOV1l3TlRjeElpd2ljM1ZpSWpvaWMzbHpkR1Z0T25ObGNuWnBZMlZoWTJOdmRXNTBPbXQxWW1VdGMzbHpkR1Z0T21Ga2JXbHVMWFZ6WlhJaWZRLmFiVUxQRWNnTkZkR2Q1aXg5Mnd1TjRHN3NfZ0t3b20zTWVMYXA3d2wydUxKQVRDaTZtTmFBLTlGOTQ5bVFBVVJKSGJLbTJvZUFkWlBhYnE5MXFDdXh4NEVZNGI5ejhEZF9rTFZqZGxyRlZXaVJJVzBjcnZ3OWlvX05sakV0VWZoT1VBX2o0THJ6VlpkeDhfWmNpclVObTJ0Qmh4NGR4Smp1YUlNVzB5eXFBd2xYeG1lZWlnZnhfOGJOTU9mRlNaSk9ZNXpPSGxybDNSWWMyNTRWWjc1aTlxQXNZVVpEVkxJRFpoeUZRQnVVOGNwUFB1eWhzVV9UdXJmcmdpTzlpUlpEUmNTWjg4WEszSmdVRXF2MnVTTXdtVEI0NURDWGZHN1U0bHBBRDdkQ3IzMTFONlREZ1ZxOHBwcFFhbURTS1lGZGhBX3dxS0tyLWJiWE55dnh4Yk15QQ==
  kind: Secret
  metadata:
    annotations:
      kubectl.kubernetes.io/last-applied-configuration: |
        {"apiVersion":"v1","kind":"Secret","metadata":{"annotations":{"kubernetes.io/service-account.name":"admin-user"},"name":"admin-user-secret","namespace":"kube-system"},"type":"kubernetes.io/service-account-token"}
      kubernetes.io/service-account.name: admin-user
      kubernetes.io/service-account.uid: 83dab836-7827-49f4-b58f-999c005f0571
    creationTimestamp: "2023-01-30T04:49:54Z"
    name: admin-user-secret
    namespace: kube-system
    resourceVersion: "7004507"
    uid: a25ebd8b-083e-4897-9860-fa3f25ac1ed9
  type: kubernetes.io/service-account-token
kind: List
metadata:
  resourceVersion: ""


root@k8s-master01:~# kubectl get secrets -n kube-system admin-user-secret -o jsonpath={.data.token} | base64 --decode
eyJhbGciOiJSUzI1NiIsImtpZCI6ImlVbmVfYWR4VE1kMlJneHBMZFBVcUlqUFBpNFBLcTFfQVgwNFBIUEhOU0kifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXNlY3JldCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJhZG1pbi11c2VyIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiODNkYWI4MzYtNzgyNy00OWY0LWI1OGYtOTk5YzAwNWYwNTcxIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmFkbWluLXVzZXIifQ.abULPEcgNFdGd5ix92wuN4G7s_gKwom3MeLap7wl2uLJATCi6mNaA-9F949mQAURJHbKm2oeAdZPabq91qCuxx4EY4b9z8Dd_kLVjdlrFVWiRIW0crvw9io_NljEtUfhOUA_j4LrzVZdx8_ZcirUNm2tBhx4dxJjuaIMW0yyqAwlXxmeeigfx_8bNMOfFSZJOY5zOHlrl3RYc254VZ75i9qAsYUZDVLIDZhyFQBuU8cpPPuyhsU_TurfrgiO9iRZDRcSZ88XK3JgUEqv2uSMwmTB45DCXfG7U4lpAD7dCr311N6TDgVq8pppQamDSKYFdhA_wqKKr-bbXNyvxxbMyA



*참고
curl --cacert ca.crt --oauth2-bearer "<키>" https://....
curl --cacert ca.crt -H "Authorization: Bearer <키> https://192.168.110.111:6443/api/v1/nodes

curl --cacert ca.crt -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6ImlVbmVfYWR4VE1kMlJneHBMZFBVcUlqUFBpNFBLcTFfQVgwNFBIUEhOU0kifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXNlY3JldCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJhZG1pbi11c2VyIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiODNkYWI4MzYtNzgyNy00OWY0LWI1OGYtOTk5YzAwNWYwNTcxIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmFkbWluLXVzZXIifQ.abULPEcgNFdGd5ix92wuN4G7s_gKwom3MeLap7wl2uLJATCi6mNaA-9F949mQAURJHbKm2oeAdZPabq91qCuxx4EY4b9z8Dd_kLVjdlrFVWiRIW0crvw9io_NljEtUfhOUA_j4LrzVZdx8_ZcirUNm2tBhx4dxJjuaIMW0yyqAwlXxmeeigfx_8bNMOfFSZJOY5zOHlrl3RYc254VZ75i9qAsYUZDVLIDZhyFQBuU8cpPPuyhsU_TurfrgiO9iRZDRcSZ88XK3JgUEqv2uSMwmTB45DCXfG7U4lpAD7dCr311N6TDgVq8pppQamDSKYFdhA_wqKKr-bbXNyvxxbMyA" https://192.168.110.111:6443/api/v1/nodes | jq '[.items[] | select( .metadata.labels."node-role.kubernetes.io/master" | not) | .status.capacity.pods | tonumber] | add'

#특정 파드 정보 가져오기
curl --cacert ca.crt -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6ImlVbmVfYWR4VE1kMlJneHBMZFBVcUlqUFBpNFBLcTFfQVgwNFBIUEhOU0kifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXNlY3JldCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJhZG1pbi11c2VyIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiODNkYWI4MzYtNzgyNy00OWY0LWI1OGYtOTk5YzAwNWYwNTcxIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmFkbWluLXVzZXIifQ.abULPEcgNFdGd5ix92wuN4G7s_gKwom3MeLap7wl2uLJATCi6mNaA-9F949mQAURJHbKm2oeAdZPabq91qCuxx4EY4b9z8Dd_kLVjdlrFVWiRIW0crvw9io_NljEtUfhOUA_j4LrzVZdx8_ZcirUNm2tBhx4dxJjuaIMW0yyqAwlXxmeeigfx_8bNMOfFSZJOY5zOHlrl3RYc254VZ75i9qAsYUZDVLIDZhyFQBuU8cpPPuyhsU_TurfrgiO9iRZDRcSZ88XK3JgUEqv2uSMwmTB45DCXfG7U4lpAD7dCr311N6TDgVq8pppQamDSKYFdhA_wqKKr-bbXNyvxxbMyA" https://192.168.110.111:6443/api/v1/namespaces/kube-system/pods/calico-node-6jmxc



#토큰 변수 설정
export bearertoken=eyJhbGciOiJSUzI1NiIsImtpZCI6ImlVbmVfYWR4VE1kMlJneHBMZFBVcUlqUFBpNFBLcTFfQVgwNFBIUEhOU0kifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXNlY3JldCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJhZG1pbi11c2VyIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiODNkYWI4MzYtNzgyNy00OWY0LWI1OGYtOTk5YzAwNWYwNTcxIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmFkbWluLXVzZXIifQ.abULPEcgNFdGd5ix92wuN4G7s_gKwom3MeLap7wl2uLJATCi6mNaA-9F949mQAURJHbKm2oeAdZPabq91qCuxx4EY4b9z8Dd_kLVjdlrFVWiRIW0crvw9io_NljEtUfhOUA_j4LrzVZdx8_ZcirUNm2tBhx4dxJjuaIMW0yyqAwlXxmeeigfx_8bNMOfFSZJOY5zOHlrl3RYc254VZ75i9qAsYUZDVLIDZhyFQBuU8cpPPuyhsU_TurfrgiO9iRZDRcSZ88XK3JgUEqv2uSMwmTB45DCXfG7U4lpAD7dCr311N6TDgVq8pppQamDSKYFdhA_wqKKr-bbXNyvxxbMyA



#nginx 파드 생성
root@k8s-master01:~# kubectl run --image nginx nginx-pod --dry-run=client -o json | jq -c .
{"kind":"Pod","apiVersion":"v1","metadata":{"name":"nginx-pod","creationTimestamp":null,"labels":{"run":"nginx-pod"}},"spec":{"containers":[{"name":"nginx-pod","image":"nginx","resources":{}}],"restartPolicy":"Always","dnsPolicy":"ClusterFirst"},"status":{}}

curl --cacert ca.crt --oauth2-bearer "$bearertoken" -X POST -H 'Content-Type: application/json' https://192.168.110.111:6443/api/v1/namespaces/default/pods --data '{"kind":"Pod","apiVersion":"v1","metadata":{"name":"nginx-pod","creationTimestamp":null,"labels":{"run":"nginx-pod"}},"spec":{"containers":[{"name":"nginx-pod","image":"nginx","resources":{}}],"restartPolicy":"Always","dnsPolicy":"ClusterFirst"},"status":{}}'


#nginx 파드 생성 다른방법
a.json 파일 생성 후 json 내용 삽입
curl --cacert ca.crt --oauth2-bearer "$bearertoken" -X POST -H 'Content-Type: application/json' https://192.168.110.111:6443/api/v1/namespaces/default/pods --data @a.json


#nginx 파드 삭제
kubectl delete pod nginx-pod --dry-run=client -o json | jq -c .
curl --cacert ca.crt --oauth2-bearer "$bearertoken" -X DELETE https://192.168.110.111:6443/api/v1/namespaces/default/pods/nginx-pod




#deployment 생성
kubectl create deployment nginx-deployment --image=nginx --dry-run=client -o json | jq -c .

root@k8s-master01:~# kubectl create deployment nginx-deployment --image=nginx --dry-run=client -o json | jq -c .
{"kind":"Deployment","apiVersion":"apps/v1","metadata":{"name":"nginx-deployment","creationTimestamp":null,"labels":{"app":"nginx-deployment"}},"spec":{"replicas":1,"selector":{"matchLabels":{"app":"nginx-deployment"}},"template":{"metadata":{"creationTimestamp":null,"labels":{"app":"nginx-deployment"}},"spec":{"containers":[{"name":"nginx","image":"nginx","resources":{}}]}},"strategy":{}},"status":{}}

curl --cacert ca.crt --oauth2-bearer "$bearertoken" -X POST -H 'Content-Type: application/json' https://192.168.110.111:6443/apis/apps/v1/namespaces/default/deployments --data '{"kind":"Deployment","apiVersion":"apps/v1","metadata":{"name":"nginx-deployment","creationTimestamp":null,"labels":{"app":"nginx-deployment"}},"spec":{"replicas":1,"selector":{"matchLabels":{"app":"nginx-deployment"}},"template":{"metadata":{"creationTimestamp":null,"labels":{"app":"nginx-deployment"}},"spec":{"containers":[{"name":"nginx","image":"nginx","resources":{}}]}},"strategy":{}},"status":{}}'

#deployment 삭제
curl --cacert ca.crt --oauth2-bearer "$bearertoken" -X DELETE https://192.168.110.111:6443/apis/apps/v1/namespaces/default/deployments/nginx-deployment



#인증 다른 방법 키 사용
curl --cacert /etc/kubernetes/ssl/ca.crt --cert /etc/kubernetes/ssl/apiserver-kubelet-client.crt --key /etc/kubernetes/ssl/apiserver-kubelet-client.key \
   https://192.168.110.111:6443/api/v1/pods

참고사이트
https://itnext.io/big-change-in-k8s-1-24-about-serviceaccounts-and-their-secrets-4b909a4af4e0
https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.24/





root@k8s-master01:~# kubectl get apiservices.apiregistration.k8s.io
NAME                                   SERVICE                      AVAILABLE   AGE
v1.                                    Local                        True        32d
v1.admissionregistration.k8s.io        Local                        True        32d
v1.apiextensions.k8s.io                Local                        True        32d
v1.apps                                Local                        True        32d
v1.authentication.k8s.io               Local                        True        32d
v1.authorization.k8s.io                Local                        True        32d
v1.autoscaling                         Local                        True        32d
v1.batch                               Local                        True        32d
v1.certificates.k8s.io                 Local                        True        32d
v1.coordination.k8s.io                 Local                        True        32d
v1.crd.projectcalico.org               Local                        True        13d
v1.discovery.k8s.io                    Local                        True        32d
v1.events.k8s.io                       Local                        True        32d
v1.networking.k8s.io                   Local                        True        32d
v1.node.k8s.io                         Local                        True        32d
v1.policy                              Local                        True        32d
v1.rbac.authorization.k8s.io           Local                        True        32d
v1.scheduling.k8s.io                   Local                        True        32d
v1.storage.k8s.io                      Local                        True        32d
v1beta1.batch                          Local                        True        32d
v1beta1.discovery.k8s.io               Local                        True        32d
v1beta1.events.k8s.io                  Local                        True        32d
v1beta1.flowcontrol.apiserver.k8s.io   Local                        True        32d
v1beta1.metrics.k8s.io                 kube-system/metrics-server   True        14d
v1beta1.node.k8s.io                    Local                        True        32d
v1beta1.policy                         Local                        True        32d
v1beta1.storage.k8s.io                 Local                        True        32d
v1beta2.flowcontrol.apiserver.k8s.io   Local                        True        32d
v2.autoscaling                         Local                        True        32d
v2beta1.autoscaling                    Local                        True        32d
v2beta2.autoscaling                    Local                        True        32d

'Kubernetes' 카테고리의 다른 글

[K8s ] v1.25 Cgroupv2, MemoryQoS  (0) 2023.03.18
[K8s] 유용한 명령어  (0) 2023.03.08
Ceph-CSI 구성  (0) 2023.02.10
OS 옵션 변경  (0) 2022.12.26
[kubespray] 1.22 -> 1.23 Upgrade: Calico Error  (0) 2022.12.01

 

1. 사전작업

[root@sllee-ceph01 /]# ceph osd pool create kubernetes 64
pool 'kubernetes' created

[root@sllee-ceph01 /]# rbd pool init kubernetes

[root@sllee-ceph01 /]# ceph auth get-or-create client.kubernetes mon 'profile rbd' osd 'profile rbd pool=kubernetes'
[client.kubernetes]
        key = AQDBlORjNW6aDRAAEdITaRjL42YUdZ3uxmOjgg==

 

 

2. Ceph 정보확인

[root@sllee-ceph01 /]# ceph -s
  cluster:
    id:     2515bf16-1268-455a-b03b-69328a32fbc5   # ID 확인
    health: HEALTH_OK

  services:
    mon: 3 daemons, quorum sllee-ceph01,sllee-ceph02,sllee-ceph03 (age 27h)
    mgr: sllee-ceph02(active, since 27h), standbys: sllee-ceph01, sllee-ceph03
    mds: cephfs:1 {0=sllee-ceph01=up:active} 2 up:standby
    osd: 9 osds: 9 up (since 27h), 9 in (since 27h)

  data:
    pools:   10 pools, 321 pgs
    objects: 23 objects, 2.3 KiB
    usage:   9.1 GiB used, 351 GiB / 360 GiB avail
    pgs:     321 active+clean



[root@sllee-ceph01 /]# ceph fs status
cephfs - 0 clients
======
RANK  STATE       MDS          ACTIVITY     DNS    INOS
 0    active  sllee-ceph01  Reqs:    0 /s    10     13
      POOL         TYPE     USED  AVAIL
cephfs_metadata  metadata  1536k   110G
  cephfs_data      data       0    110G
STANDBY MDS
sllee-ceph03
sllee-ceph02
MDS version: ceph version 15.2.17 (8a82819d84cf884bd39c17e3236e0632ac146dc4) octopus (stable)



[root@sllee-ceph01 /]# ceph auth get client.admin
exported keyring for client.admin
[client.admin]
        key = AQCdWuRjWZt4JxAAnxNuJzkXnavYNKK7l6+KYw==     #Key 확인
        caps mds = "allow *"
        caps mgr = "allow *"
        caps mon = "allow *"
        caps osd = "allow *"

 

 

3. CephFS

[root@sllee-master01 ceph-csi]# tee >  deploy/cephfs/kubernetes/csi-config-map.yaml << EOF
---
apiVersion: v1
kind: ConfigMap
data:
  config.json: |-
    [
      {
        "clusterID": "2515bf16-1268-455a-b03b-69328a32fbc5",
        "monitors": [
          "10.10.0.21:6789",
          "10.10.0.22:6789",
          "10.10.0.23:6789"
        ],
        "cephFS" : {
          "subvolumeGroup": "cephfs"
        }
      }
    ]
metadata:
  name: ceph-csi-config
EOF




[root@sllee-master01 ceph-csi]# tee > examples/cephfs/secret.yaml << EOF
---
apiVersion: v1
kind: Secret
metadata:
  name: csi-cephfs-secret
  namespace: default
stringData:
  # Required for statically provisioned volumes
  userID: admin
  userKey: AQCdWuRjWZt4JxAAnxNuJzkXnavYNKK7l6+KYw==
 
  # Required for dynamically provisioned volumes
  adminID: admin
  adminKey: AQCdWuRjWZt4JxAAnxNuJzkXnavYNKK7l6+KYw==
EOF




[root@sllee-master01 ceph-csi]# vi examples/cephfs/storageclass.yaml
...
  clusterID: 2515bf16-1268-455a-b03b-69328a32fbc5
...
  fsName: cephfs
...


[root@sllee-master01 ceph-csi]# kubectl apply -f examples/ceph-conf.yaml


[root@sllee-master01 ceph-csi]# cd examples/cephfs/
[root@sllee-master01 cephfs]# ./plugin-deploy.sh
serviceaccount/cephfs-csi-provisioner created
clusterrole.rbac.authorization.k8s.io/cephfs-external-provisioner-runner created
clusterrolebinding.rbac.authorization.k8s.io/cephfs-csi-provisioner-role created
role.rbac.authorization.k8s.io/cephfs-external-provisioner-cfg created
rolebinding.rbac.authorization.k8s.io/cephfs-csi-provisioner-role-cfg created
serviceaccount/cephfs-csi-nodeplugin created
Error from server (AlreadyExists): error when creating "./csi-config-map.yaml": configmaps "ceph-csi-config" already exists
service/csi-cephfsplugin-provisioner created
deployment.apps/csi-cephfsplugin-provisioner created
daemonset.apps/csi-cephfsplugin created
service/csi-metrics-cephfsplugin created



### pods를 보면 cephfs, rbd에 대한 csi pods가 pending 상태에 있는 것을 확인 할 수 있음.
### worker1, worker2에는 모두 올라가있으니 deploy를 edit하여 replicas 개수를 3에서 2로 줄여 줌

[root@sllee-master01 cephfs]# kubectl get pod -o wide
NAME                                           READY   STATUS    RESTARTS   AGE     IP             NODE             NOMINATED NODE   READINESS GATES
csi-cephfsplugin-8ggv2                         3/3     Running   0          24m     10.20.0.45     sllee-worker02   <none>           <none>
csi-cephfsplugin-b6svc                         3/3     Running   0          24m     10.20.0.44     sllee-worker01   <none>           <none>
csi-cephfsplugin-provisioner-858dd6bb6-799p9   0/5     Pending   0          2m34s   <none>         <none>           <none>           <none>
csi-cephfsplugin-provisioner-858dd6bb6-97f9s   5/5     Running   0          24m     10.233.93.4    sllee-worker02   <none>           <none>
csi-cephfsplugin-provisioner-858dd6bb6-x9bdx   5/5     Running   0          24m     10.233.108.3   sllee-worker01   <none>           <none>



[root@sllee-master01 cephfs]# kubectl get pvc
NAME             STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS    AGE
csi-cephfs-pvc   Bound    pvc-71a28749-b06a-4247-bd00-68ba8c110d74   1Gi        RWX            csi-cephfs-sc   6s

[root@sllee-master01 cephfs]# kubectl get pv
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                    STORAGECLASS    REASON   AGE
pvc-71a28749-b06a-4247-bd00-68ba8c110d74   1Gi        RWX            Delete           Bound    default/csi-cephfs-pvc   csi-cephfs-sc            46s

 

 

 

4. RBD

[root@sllee-master01 ceph-csi]# tee > deploy/rbd/kubernetes/csi-config-map.yaml << EOF
---
apiVersion: v1
kind: ConfigMap
data:
  config.json: |-
    [
      {
        "clusterID": "2515bf16-1268-455a-b03b-69328a32fbc5",
        "monitors": [
          "10.10.0.21:6789",
          "10.10.0.22:6789",
          "10.10.0.23:6789"
        ]
      }
    ]
metadata:
  name: ceph-csi-rbd-config
 
EOF



[root@sllee-master01 ceph-csi]# tee > examples/rbd/secret.yaml << EOF
---
apiVersion: v1
kind: Secret
metadata:
  name: csi-rbd-secret
  namespace: default
stringData:
  # Key values correspond to a user name and its key, as defined in the
  # ceph cluster. User ID should have required access to the 'pool'
  # specified in the storage class
  userID: kubernetes
  userKey: AQDBlORjNW6aDRAAEdITaRjL42YUdZ3uxmOjgg==
  
  # Encryption passphrase
  encryptionPassphrase: test_passphrase
 
EOF


[root@sllee-master01 ceph-csi]# kubectl apply -f examples/rbd/secret.yaml
secret/csi-rbd-secret configured


[root@sllee-master01 ceph-csi]# vi examples/rbd/storageclass.yaml
   ...
   clusterID: 2515bf16-1268-455a-b03b-69328a32fbc5
   ...
   pool: kubernetes
   ...
   
[root@sllee-master01 ceph-csi]# kubectl create -f examples/rbd/storageclass.yaml
storageclass.storage.k8s.io/csi-rbd-sc created
   
[root@sllee-master01 ceph-csi]# kubectl apply -f examples/ceph-conf.yaml


[root@sllee-master01 ceph-csi]# cd examples/rbd/
[root@sllee-master01 rbd]# ./plugin-deploy.sh



[root@sllee-master01 rbd]# kubectl apply -f pvc.yaml
persistentvolumeclaim/rbd-pvc unchanged

[root@sllee-master01 rbd]# kubectl get pv
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                    STORAGECLASS    REASON   AGE
pvc-1fdf70ea-4fe3-4e34-938f-5b68ba151264   1Gi        RWO            Delete           Bound    default/rbd-pvc          csi-rbd-sc               14m
pvc-71a28749-b06a-4247-bd00-68ba8c110d74   1Gi        RWX            Delete           Bound    default/csi-cephfs-pvc   csi-cephfs-sc            55m

[root@sllee-master01 rbd]# kubectl get pvc
NAME             STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS    AGE
csi-cephfs-pvc   Bound    pvc-71a28749-b06a-4247-bd00-68ba8c110d74   1Gi        RWX            csi-cephfs-sc   55m
rbd-pvc          Bound    pvc-1fdf70ea-4fe3-4e34-938f-5b68ba151264   1Gi        RWO            csi-rbd-sc      14m

 

 

https://github.com/ceph/ceph-csi

'Kubernetes' 카테고리의 다른 글

[K8s] 유용한 명령어  (0) 2023.03.08
API 사용법  (0) 2023.02.21
OS 옵션 변경  (0) 2022.12.26
[kubespray] 1.22 -> 1.23 Upgrade: Calico Error  (0) 2022.12.01
[LoadBalancer] MetalLB  (0) 2022.10.28

+ Recent posts