Kubernetes 학습(3) - 레이블, 복제 컨트롤러 만들기
11928 단어 kubernetesDocker
개요
이번에 우리는 복제 컨트롤러를 만들고 이와 관련된 라벨을 정리할 것이다.
태그
라벨이 뭐예요?
Kubernetes의 객체(Pod 등)에 첨부할 수 있는 Key/Value 쌍의 문자열은 객체에 메타정보와 같은 정보를 제공할 수 있습니다.여러 개의 Pod이 존재할 때, 각각의 Pod을 표시하여 Pod을 그룹화하거나 특정한 Pod을 추출할 수 있습니다.
예를 들어, 다음과 같은 두 Pod의 정의가 있다고 가정합니다.
pod-with-label1.yaml :apiVersion: v1
kind: Pod
metadata:
name: pod1
labels:
app: petshop ← ラベル(Key = app, Value = petshop)
env: production ← ラベル(Key = env, Value = production)
spec:
containers:
- name: container1
image: nginx
ports:
- containerPort: 80
pod-with-label2.yaml :apiVersion: v1
kind: Pod
metadata:
name: pod2
labels:
app: petshop ← ラベル(Key = app, Value = petshop)
env: staging ← ラベル(Key = env, Value = staging)
spec:
containers:
- name: container2
image: nginx
ports:
- containerPort: 80
이 Pod을 만들면 탭으로 필터링하면서 Pod을 표시합니다.# Pod の作成
$ kubectl create -f pod-with-label1.yaml
$ kubectl create -f pod-with-label2.yaml
# app=petshop でフィルタ。
# 両方表示される。
$ kubectl get pods -l app=petshop
NAME READY STATUS RESTARTS AGE
pod1 1/1 Running 0 14s
pod2 1/1 Running 0 12s
# env=production でフィルタ。
# pod1 だけ表示される。
$ kubectl get pods -l env=production
NAME READY STATUS RESTARTS AGE
pod1 1/1 Running 0 41s
# pod2 のラベルを更新してみる。
# app : petshop → bookstore
# env : staging → production
$ kubectl label --overwrite pods pod2 app=bookstore
$ kubectl label --overwrite pods pod2 env=production
# そして再び env=production でフィルタ。
# 今度は両方表示される。
$ kubectl get pods -l env=production
NAME READY STATUS RESTARTS AGE
pod1 1/1 Running 0 2m
pod2 1/1 Running 0 1m
# こんな指定も可能。
# app が petshop、bookstore のいずれかに一致するという意味。
$ kubectl get pods -l "app in (petshop, bookstore)"
NAME READY STATUS RESTARTS AGE
pod1 1/1 Running 0 2m
pod2 1/1 Running 0 2m
# こんな指定も可能。
# app=petshop かつ env=production という意味。
$ kubectl get pods -l app=petshop,env=production
NAME READY STATUS RESTARTS AGE
pod1 1/1 Running 0 4m
# 次に進む前に、作成した Pod をすべて削除しておく。
$ kubectl delete --all pods
Replication Controller
그럼 본론으로 들어갑니다.
복제 컨트롤러란 무엇입니까?
복제 컨트롤러는 Pod 복제본(복제) 수를 유지하는 데 사용됩니다.
복제 컨트롤러가 템플릿으로 정의된 Pod을 만드는 수량은 지정한 수량과 같습니다.그리고 감시 대상의 Pod 수는 호스트의 고장 등으로 Pod의 수가 줄어들면 다시 만들고, 반대로 너무 많으면 삭제를 통해 Pod를 일정 수량으로 유지한다.따라서 Pod가 하나만 있는 응용 프로그램이라도 복제 컨트롤러를 사용하는 것을 추천합니다.
또한 복제 컨트롤러가 모니터링하는 Pod(컬렉션)은 레이블에 의해 정의됩니다.인상으로 아래 그림과 같은 느낌.이 그림에서 복제 컨트롤러 감시는 app=petshop의 Pod로 표시됩니다.
복제 컨트롤러 생성
그렇다면 실제로 복제 컨트롤러를 만들어 보자.먼저 다음과 같은 YAML을 준비합니다.
rc.yaml :apiVersion: v1
kind: ReplicationController
metadata:
name: rc1
spec:
replicas: 3
selector:
app: petshop
template:
metadata:
labels:
app: petshop
spec:
containers:
- name: container1
image: nginx
ports:
- containerPort: 80
YAML에는 다음과 같은 정보가 들어 있습니다.
라벨이 뭐예요?
Kubernetes의 객체(Pod 등)에 첨부할 수 있는 Key/Value 쌍의 문자열은 객체에 메타정보와 같은 정보를 제공할 수 있습니다.여러 개의 Pod이 존재할 때, 각각의 Pod을 표시하여 Pod을 그룹화하거나 특정한 Pod을 추출할 수 있습니다.
예를 들어, 다음과 같은 두 Pod의 정의가 있다고 가정합니다.
pod-with-label1.yaml :
apiVersion: v1
kind: Pod
metadata:
name: pod1
labels:
app: petshop ← ラベル(Key = app, Value = petshop)
env: production ← ラベル(Key = env, Value = production)
spec:
containers:
- name: container1
image: nginx
ports:
- containerPort: 80
pod-with-label2.yaml :apiVersion: v1
kind: Pod
metadata:
name: pod2
labels:
app: petshop ← ラベル(Key = app, Value = petshop)
env: staging ← ラベル(Key = env, Value = staging)
spec:
containers:
- name: container2
image: nginx
ports:
- containerPort: 80
이 Pod을 만들면 탭으로 필터링하면서 Pod을 표시합니다.# Pod の作成
$ kubectl create -f pod-with-label1.yaml
$ kubectl create -f pod-with-label2.yaml
# app=petshop でフィルタ。
# 両方表示される。
$ kubectl get pods -l app=petshop
NAME READY STATUS RESTARTS AGE
pod1 1/1 Running 0 14s
pod2 1/1 Running 0 12s
# env=production でフィルタ。
# pod1 だけ表示される。
$ kubectl get pods -l env=production
NAME READY STATUS RESTARTS AGE
pod1 1/1 Running 0 41s
# pod2 のラベルを更新してみる。
# app : petshop → bookstore
# env : staging → production
$ kubectl label --overwrite pods pod2 app=bookstore
$ kubectl label --overwrite pods pod2 env=production
# そして再び env=production でフィルタ。
# 今度は両方表示される。
$ kubectl get pods -l env=production
NAME READY STATUS RESTARTS AGE
pod1 1/1 Running 0 2m
pod2 1/1 Running 0 1m
# こんな指定も可能。
# app が petshop、bookstore のいずれかに一致するという意味。
$ kubectl get pods -l "app in (petshop, bookstore)"
NAME READY STATUS RESTARTS AGE
pod1 1/1 Running 0 2m
pod2 1/1 Running 0 2m
# こんな指定も可能。
# app=petshop かつ env=production という意味。
$ kubectl get pods -l app=petshop,env=production
NAME READY STATUS RESTARTS AGE
pod1 1/1 Running 0 4m
# 次に進む前に、作成した Pod をすべて削除しておく。
$ kubectl delete --all pods
Replication Controller
그럼 본론으로 들어갑니다.
복제 컨트롤러란 무엇입니까?
복제 컨트롤러는 Pod 복제본(복제) 수를 유지하는 데 사용됩니다.
복제 컨트롤러가 템플릿으로 정의된 Pod을 만드는 수량은 지정한 수량과 같습니다.그리고 감시 대상의 Pod 수는 호스트의 고장 등으로 Pod의 수가 줄어들면 다시 만들고, 반대로 너무 많으면 삭제를 통해 Pod를 일정 수량으로 유지한다.따라서 Pod가 하나만 있는 응용 프로그램이라도 복제 컨트롤러를 사용하는 것을 추천합니다.
또한 복제 컨트롤러가 모니터링하는 Pod(컬렉션)은 레이블에 의해 정의됩니다.인상으로 아래 그림과 같은 느낌.이 그림에서 복제 컨트롤러 감시는 app=petshop의 Pod로 표시됩니다.
복제 컨트롤러 생성
그렇다면 실제로 복제 컨트롤러를 만들어 보자.먼저 다음과 같은 YAML을 준비합니다.
rc.yaml :apiVersion: v1
kind: ReplicationController
metadata:
name: rc1
spec:
replicas: 3
selector:
app: petshop
template:
metadata:
labels:
app: petshop
spec:
containers:
- name: container1
image: nginx
ports:
- containerPort: 80
YAML에는 다음과 같은 정보가 들어 있습니다.
복제 컨트롤러는 Pod 복제본(복제) 수를 유지하는 데 사용됩니다.
복제 컨트롤러가 템플릿으로 정의된 Pod을 만드는 수량은 지정한 수량과 같습니다.그리고 감시 대상의 Pod 수는 호스트의 고장 등으로 Pod의 수가 줄어들면 다시 만들고, 반대로 너무 많으면 삭제를 통해 Pod를 일정 수량으로 유지한다.따라서 Pod가 하나만 있는 응용 프로그램이라도 복제 컨트롤러를 사용하는 것을 추천합니다.
또한 복제 컨트롤러가 모니터링하는 Pod(컬렉션)은 레이블에 의해 정의됩니다.인상으로 아래 그림과 같은 느낌.이 그림에서 복제 컨트롤러 감시는 app=petshop의 Pod로 표시됩니다.
복제 컨트롤러 생성
그렇다면 실제로 복제 컨트롤러를 만들어 보자.먼저 다음과 같은 YAML을 준비합니다.
rc.yaml :
apiVersion: v1
kind: ReplicationController
metadata:
name: rc1
spec:
replicas: 3
selector:
app: petshop
template:
metadata:
labels:
app: petshop
spec:
containers:
- name: container1
image: nginx
ports:
- containerPort: 80
YAML에는 다음과 같은 정보가 들어 있습니다.이 파일을 사용하면 복제 컨트롤러를 만들 수 있습니다.
# 作成
$ kubectl create -f rc.yaml
# Replication Controller が作成されたか確認
$ kubectl get rc
CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS
rc1 container1 nginx app=petshop 3
Pod을 보면 app=petshop 탭이 있는 Pod 3개가 만들어졌습니다.또한 -o wide를 지정하면 Pod을 실행하는 호스트의 정보를 표시합니다.$ kubectl get pods -l app=petshop -o wide
NAME READY STATUS RESTARTS AGE NODE
rc1-09r4r 1/1 Running 0 2m ip-172-20-0-13.ap-northeast-1.compute.internal
rc1-k2y95 1/1 Running 0 2m ip-172-20-0-15.ap-northeast-1.compute.internal
rc1-pldl2 1/1 Running 0 2m ip-172-20-0-14.ap-northeast-1.compute.internal
여기서 rc1-pldl2 이 Pod을 삭제해 보십시오.그래서 새로운 Pod(rc1-jmwnc에서 새로 만든 Pod)를 만들 수 있습니다.# 削除
$ kubectl delete pods rc1-pldl2
# Pod を表示。新しい Pod(rc1-jmwnc) が作成されていることが分かる。
$ kubectl get pods -l app=petshop -o wide
NAME READY STATUS RESTARTS AGE NODE
rc1-09r4r 1/1 Running 0 5m ip-172-20-0-13.ap-northeast-1.compute.internal
rc1-jmwnc 0/1 Running 0 4s ip-172-20-0-14.ap-northeast-1.compute.internal
rc1-k2y95 1/1 Running 0 5m ip-172-20-0-15.ap-northeast-1.compute.internal
이어서 Pod(rc1-k2y95)의 라벨을 고의로 변경합니다.그래서 Replication Controller는 app=petshop의 Pod를 하나 줄이고 Pod을 다시 제작한다고 판단했다.# ラベルの変更
$ kubectl label --overwrite pods rc1-k2y95 app=bookstore
# Pod を表示。新しい Pod(rc1-zv5bw) が作成されていることが分かる。
$ kubectl get pods -l app=petshop -o wide
NAME READY STATUS RESTARTS AGE NODE
rc1-09r4r 1/1 Running 0 10m ip-172-20-0-13.ap-northeast-1.compute.internal
rc1-jmwnc 1/1 Running 0 4m ip-172-20-0-14.ap-northeast-1.compute.internal
rc1-zv5bw 1/1 Running 0 23s ip-172-20-0-14.ap-northeast-1.compute.internal
또한 라벨이 변경된 Pod(rc1-k2y95)는 복제 컨트롤러의 감시 대상에서 벗어났지만 삭제된 것이 아니기 때문에 단독 동작입니다.$ kubectl get pods -l app=bookstore -o wide
NAME READY STATUS RESTARTS AGE NODE
rc1-k2y95 1/1 Running 0 12m ip-172-20-0-15.ap-northeast-1.compute.internal
이렇게 하면 Replication Controller는 자신이 생성한 Pod의 사활을 추적하기보다는 selector와 일치하는 Pod의 수량을 감시하는 데 불과하다.마지막으로 복제 컨트롤러를 삭제합니다.Pod도 모두 삭제되었습니다.
# Replication Controller を削除
$ kubectl delete rc rc1
# Pod も削除される
$ kubectl get pods -l app=petshop -o wide
NAME READY STATUS RESTARTS AGE NODE
웹 페이지 정보
Reference
이 문제에 관하여(Kubernetes 학습(3) - 레이블, 복제 컨트롤러 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Arturias/items/87553a3c51aab6b1d277텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)