taint : 파드가 특정 노드에 접근 제한하게 하는 설정(?)
tolerant: 파드가 제한을 뛰어넘을 수 있는 역치
kubectl taint nodes <node-name> key=value:<NoSchedule|PreferNoSchedule|NoExecute>
apiVersion: v1
kind: Pod
metadata:
spec:
containers:
- name: nginx-container
image: nginx
toleration:
- key: "app"
operator: "Equal"
value: "blue"
effect: "NoSchedule"
apiVersion: v1
kind: Pod
metadata:
spec:
containers:
- name: nginx-container
image: nginx
nodeSelector:
size: Large #노드에 지정된 레이블 키밸류
kubectl label node <node-name> <key>=<value>https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity
apiVersion: v1
kind: Pod
metadata:
spec:
containers:
- name: nginx-container
image: nginx
affinity:
nodeAffinity:
requireDuringSchedulingIgnoreDuringExecution:
nodeSeletorTerms:
- matchExpressions:
key: size
operator: In #여러개의 밸류를 추가할 수 있음 (NotIn | Exist | NotExist)
values:
- Large
apiVersion: v1
kind: LimitRange
metadat: cpu-resource-contraint
spec:
limits:
- default:
cpu: 500m
defaultRequest:
cpu: 500m
max:
cpu: "1"
min:
cpu: 100m
type: Container
노드가 1개고 마스터노드 없이 kube-apiserver 없이 그냥 kubelet 하나가 파드를 실행할 수 있을까?
YES : /etc/kubernetes/manifest 폴더에 yml 파일을 두면 직접 읽어 실행할 수 있음
스태틱 파드의 경우엔 kube-apiserver를 통해 삭제 수정 불가
근데 /etc/kubernetes/manifest 폴더에 없으면 /var/lib/kubelet/config.yml 확인해서 매니페스트 폴더가 다른곳에 지정되어 있는지 확인해보기
https://kubernetes.io/docs/reference/scheduling/config/
apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchdulerConfiguration
clientConnection:
kubeconfig: /etc/srv/kubernetes/kube-scheduler/kubeconfig
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
container:
- name: nginx
image: nginx
schdulerName: custom-scheduler1
signal 9 = SIGKILL: 사용자가 직접 kill -9 하거나, 커널이 Out Of Memory(OOM) 시 자동으로 프로세스를 강제 종료할 때 발생
kubectl describe pod <파드명>

kubectl get node -o wide 하면 Internal IP 보임ssh <InternalIP>https://kubernetes.io/docs/reference/access-authn-authz/rbac/
# role.yml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: developer
rules:
apiGroups: [""]
resources: ["pods"]
verbs: ["create", "get", "watch", "list"]
resourceNames: ["blue", "orange"] # 파드명이 이런 경우에만 작업 가능
https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/
어드미션 컨트롤에서 확인이 안되면 api작동도 안함. kubectl get pods에서 pod가 안 보일 수 있음
상황에 따라 pod나 네임스페이스 생성도 가능함
kubectl exec kube-apiserver-controlplane -n kube-system -- kube-apiserver -h | grep enable-admission-plugins
ps -ef | grep kube-apiserver | grep admission-plugins
vi /etc/kubenetes/manifest/kube-apiserver.yml
https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/
# webhook-configure.yml
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
name: "pod-policy.example.com"
webhooks:
- name: "pod-policy.example.com"
rules:
- apiGroups: [""]
apiVersions: ["v1"]
operations: ["CREATE"]
resources: ["pods"]
scope: "Namespaced"
clientConfig:
service:
namespace: "example-namespace"
name: "example-service"
caBundle: <CA_BUNDLE>
admissionReviewVersions: ["v1"]
sideEffects: None
timeoutSeconds: 5
kubectl get pod <파드명> -o yaml 해서 해당 security context를 확인하면 됨. securityContext:
runAsNonRoot: true
runAsUser: 0
git clone http://github.com/kubernetes-incubator/metric-server.git .
kubectl create -f deploy/1.8+/
kubectl top node
kubectl top pod
kubectl logs <파드명>
kubectl logs <파드명> <컨테이너명>