Taints + Tolerations + Node Affinity

개념 요약

  • Taints: 노드에 "오염(Taint)"을 적용해, 특정 조건의 Pod가 아니면 해당 노드에 스케줄링되지 않도록 제한합니다.
  • Tolerations: Pod가 특정 Taint를 "관용(Tolerate)"할 수 있도록 설정해, 해당 노드에 스케줄링될 수 있게 허용합니다.
  • Node Affinity: 노드에 설정된 Label 기반으로 Pod가 선호하거나 반드시 배치되어야 하는 노드를 지정합니다.

한계점

  1. Taints + Tolerations의 한계
    • Taint가 설정된 노드에 대해, Toleration이 없는 Pod는 스케줄링되지 않지만, Toleration이 있는 Pod는 Taint가 없는 일반 노드에도 스케줄링될 수 있습니다.
      • ❗즉, 특정 노드에만 배치되기를 원하지만, 다른 일반 노드에 배치될 수 있는 가능성 존재
      • 예: Toleration: color=blue인 Pod는 color=blue Taint가 있는 노드에도, 아무 설정 없는 노드에도 스케줄될 수 있음
  2. Node Affinity의 한계
    • Node Affinity는 특정 조건(label)에 맞는 노드에 스케줄을 유도할 수 있지만,
    • Affinity 조건이 없는 Pod는 해당 노드에 스케줄링이 가능함 (차단 기능이 아님)
    • 또한 preferredDuringScheduling는 단순 선호이므로 강제성이 없음

완벽한 제어 방법

  • 세 가지를 조합해야 특정 노드에만 특정 Pod가 스케줄되도록 완벽한 제어가 가능:

기능 역할

Taint (노드) 노드에 "이 Pod 아니면 거절" 조건 부여 (NoSchedule, PreferNoSchedule 등)
Toleration (Pod) Taint 조건을 만족하는 Pod만 스케줄 가능하게 허용
Node Affinity (Pod) 특정 라벨이 있는 노드에만 스케줄되도록 제어

✅ 예시 구성

  • 노드 설정:
    • node1 → Label: node-type=blue, Taint: key=color:blue:NoSchedule
  • Pod 설정:
    • Toleration: key=color, value=blue, effect=NoSchedule
    • Node Affinity: requiredDuringSchedulingIgnoredDuringExecution → node-type=blue

→ 이렇게 설정하면:

  • 해당 Pod는 node-type=blue인 노드에만 스케줄링되고,
  • color=blue Taint가 없으면 거절되므로,
  • 해당 조건을 모두 만족하는 노드에만 Pod가 배치됨

🔚 결론

  • Taints + Tolerations은 접근을 차단/허용하는 장치
  • Node Affinity배치 조건을 지정하는 장치
  • 이 둘은 상호보완적으로 사용되어야 완전한 스케줄링 제어가 가능

강의 회차 : #5.4 Inheritance ~#5.7 Code Challange

1. Inheritance(상속)

상속이란, 클래스의 Method들을 클래스간에 공유 하는 기능으로써 반복 작업을 제거해주는 객체지향프로그래밍의 중요한 기능중 하나이다. 각 Class에 대해 반복적인 프로퍼티가 있을경우 상속을 하여 반복작업을 제거 해준다.  아래와 같이 Class 선언시 상속 Class를 적어주면 된다. 

class ClassName(InheritanceClassName):

 

상속을 받은 Class에서 __init__Method가 없을경우 자동으로 부모Class의 init Method를 호출한다. 

init을 선언할때 super()를 통해 아래와  같이 부모class의 init method를 참조할수있다 

class Dog:
    def __init__(self, name,breed , age):
        self.name = name
        self.breed = breed
        self.age = age

class GuardDog(Dog):
    def __init__(self, name ,breed):
        super().__init__(name,breed,5)

    def rrrrr(self):
        print("stay away!")

class Puppy(Dog):
    def __init__(self,name,breed):
        super().__init__(name, breed, 0.1)

    def woofwoof(self):
        print("woof woof!")

ruffus = Puppy(
    name = "ruffus",
    breed = "beagle",

)

bibi = GuardDog(
     name = "bibi",
    breed = "dodog",
)

ruffus.woofwoof()

 

class Puppy와 GuardDog는 Dog 클래스를 참조하게 되어있고, name,breed,age를 상속 받는다. 그리고 각 GuardDog와 Puppy는 supper().__init__()을 통해서 age의 값을 따로 선언하게끔 되어있다

'Study > Python' 카테고리의 다른 글

Python 공부 8일차  (0) 2024.04.03
Python 공부 7일차  (0) 2024.03.26
Python 공부 6일차  (0) 2024.03.14
Python 공부 5일차  (0) 2024.03.13
Python 공부 4일차  (0) 2024.03.10

강의 회차 : #5.0 Introduction ~ #5.3 Methods

 

1. OOP(object oriented programming)

 

OOP는 데이터를 기반으로 동작하는 함수로 데이터를 캡슐화 할수있다.

OOP를 사용하면 다른 종류의 데이터와 함수들을 모두 하나의 파일에 가지고 있는 것보다 데이터를 더 구체적으로 구성할 수 있습니다. 이를 Box, Object, Bubble 등으로 부를 수 있습니다.

함수와 데이터구조(리스트,튜플,딕셔너리)들이 연결 관계에 있게끔 구성하는게 아닌,

각각의 우리의 데이터를 어떻게 구조화 해야하는지 알려주고, 그 데이터를 수정하기 위해 어떤 함수를 사용해야하는지 안내해주며, 이는 명확한 수준의 경계를 말해준다고 볼수있다. 

 

 

2. Class

Class란 데이터와 데이터를 처리하는 함수들을 함께 묶어놓은것이며 이를 통해 데이터 구조화를 도와준다. 

선언하는 방법은 아래와 같이 간단하다.

class Puppy:

 

3. Methods

간단히 정의하면 함수가 class 밖에 있으면 함수 안에 있으면 method다

method의 가장 중요한 규칙은 아래와 같다

클래스 내 어떠한 메쏘드던지 첫번째 아규먼트는 자동적으로 자기 자신(self)을 첫번째 아규먼트로 받는다.

그 예시를 보자면

class Puppy:

  def __init__(self, name, breed):
    self.name = name
    self.breed = breed
    
ruffus = Puppy("ruffus","beagle")

print(ruffus.name,ruffus.breed)

결과 값은 아래와 같다

 

즉, ruffus를 선언할때 Puppy Class를 호출하는데, Method내 첫번째 아규먼트인 self는 ruffus 자체가 된다는 의미이다.

 

 

 

'Study > Python' 카테고리의 다른 글

Python 공부 9일차  (0) 2024.04.28
Python 공부 7일차  (0) 2024.03.26
Python 공부 6일차  (0) 2024.03.14
Python 공부 5일차  (0) 2024.03.13
Python 공부 4일차  (0) 2024.03.10

강의 회차 : #4. 3  For Loops ~#4.9 Recap

 

1. For Loops

 

기본포맷

for 변수 in 데이터:
	조건문 또는 실행문

 

반복문으로써 tuple list dic등 데이터구조에서 각 아이템을 활용해서 코드를 실행하기 위한 구문

for문 안에는 다양한 조건문 또는 실행문을 작성할수있다.

변수는 아무 변수나 선언이 가능하나 해당 변수는 불러온 데이터구조의 각 아이템을 의미한다.

websites = (
	"google.com",
    "airbnb.com",
    "https://twitter.com"
)

for items in websites
	print(f"현재 item은 {items},입니다")

실행 결과값은 아래와 같다.

items라는 변수가 websites lists의 각각의 아이템을 가져오는것을 확인 할 수 있다.

 

 

2. PYPI

PYPI란?

파이썬 표준라이브러리에서 제공하지않는 개발자가 자체 개발한 모듈들을 찾을 수 있는 사이트다.

다양한 모듈이 개발되어있어, 앞으로 개발공부를 하면서 많이 참조할듯하다.

 

3. Requests

 

Requests는 PYPI에서 다운로드할수 있는 라이브러리로써 get과 post등 http의 method를 사용 할 수 있는 라이브러리이다. 아래와 같이 import하여 사용이 가능하며 from import를 통해 특정 함수(get)만 사용도 가능하다.

import requests

from requests import get

get 함수를 이용한 예제

 

4.  예제풀이

 line 1 : requests module의 get function을 import 한다.

 line 3: websites list를 선언한다.

 line 11 : results 라는 빈 dictionary를 선언한다.

 line 15 : for loop를 통해 websites 리스트를 반복문내에 website 변수로 선언하며 반복문 실행

 line 16-17 : if not 구문을 통하여, website변수(string)의 startswith method를 통해 https://로 시작여부를 bool로 받는다. 이경우 if not 이기때문에, https://로 시작하지 않는 string변수에 한해 조건문 하단 실행문을 실행한다.(실행문 : website 변수앞에 https://를 추가.)

 line 19 : response변수를 선언하여 import했던 get함수를 통해 website 변수를 호출한다.

 line 20-21 : response변수의 status_code가 만약 200일 경우 results dictionary에 키에 대한 값을(OK) 추가한다.

 line 22-23 : response변수의 status_code가 200외의 값일 경우에 results dictionary에 키에 대한 값(FAILED)을 추가한다

 line 25 : results dictionary를 전부 print한다.

'Study > Python' 카테고리의 다른 글

Python 공부 9일차  (0) 2024.04.28
Python 공부 8일차  (0) 2024.04.03
Python 공부 6일차  (0) 2024.03.14
Python 공부 5일차  (0) 2024.03.13
Python 공부 4일차  (0) 2024.03.10

강의 회차 : #4. 3  Dicts ~#4.4 Recap

 

1. Dicts

키와 값 한쌍(Key Value Pair)으로 구성, Dictionary의 형태는 아래와 같다

zosys_info = { 
  'name' : 'zosys', 
  'age' : 30,
  'merried' : True,
  'fav_food' : ["steak","noodle"]
}

중괄호{}로 키와 값을 각각 선언해 주고, 값은 list, string, boolean, number 등 다양한 값을 선언할 수 있다.

print(zosys_info['age'])

기존 tuple이나 list처럼 정렬된 값을 가져오는것과 달리 키를 통해서 값을 가져올 수 있다.

 

'Study > Python' 카테고리의 다른 글

Python 공부 8일차  (0) 2024.04.03
Python 공부 7일차  (0) 2024.03.26
Python 공부 5일차  (0) 2024.03.13
Python 공부 4일차  (0) 2024.03.10
Python 공부 목표  (0) 2024.03.07

+ Recent posts