1
1
---
2
2
reviewers :
3
- title : 고가용성 쿠버네티스 클러스터 마스터 설정하기
3
+ title : 고가용성 쿠버네티스 클러스터 컨트롤 플레인 설정하기
4
4
content_type : task
5
5
---
6
6
7
7
<!-- overview -->
8
8
9
9
{{< feature-state for_k8s_version="v1.5" state="alpha" >}}
10
10
11
- 구글 컴퓨트 엔진(Google Compute Engine, 이하 GCE)의 ` kube-up ` 이나 ` kube-down ` 스크립트에 쿠버네티스 마스터를 복제할 수 있다.
12
- 이 문서는 kube-up/down 스크립트를 사용하여 고가용(HA) 마스터를 관리하는 방법과 GCE와 함께 사용하기 위해 HA 마스터를 구현하는 방법에 관해 설명한다.
11
+ 구글 컴퓨트 엔진(Google Compute Engine, 이하 GCE)의 ` kube-up ` 이나 ` kube-down ` 스크립트에 쿠버네티스 컨트롤 플레인 노드를 복제할 수 있다.
12
+ 이 문서는 kube-up/down 스크립트를 사용하여 고가용(HA) 컨트롤 플레인을 관리하는 방법과 GCE와 함께 사용하기 위해 HA 컨트롤 플레인을 구현하는 방법에 관해 설명한다.
13
13
14
14
15
15
@@ -27,68 +27,69 @@ content_type: task
27
27
28
28
새 HA 호환 클러스터를 생성하려면, ` kube-up ` 스크립트에 다음 플래그를 설정해야 한다.
29
29
30
- * ` MULTIZONE=true ` - 서버의 기본 존 (zone)과 다른 존에서 마스터 복제본의 kubelet이 제거되지 않도록 한다.
31
- 다른 존에서 마스터 복제본을 실행하려는 경우에 권장하고 필요하다.
30
+ * ` MULTIZONE=true ` - 서버의 기본 영역 (zone)과 다른 영역에서 컨트롤 플레인 kubelet이 제거되지 않도록 한다.
31
+ 여러 영역에서 컨트롤 플레인 노드를 실행(권장됨)하려는 경우에 필요하다.
32
32
33
33
* ` ENABLE_ETCD_QUORUM_READ=true ` - 모든 API 서버에서 읽은 내용이 최신 데이터를 반환하도록 하기 위한 것이다.
34
34
true인 경우, Etcd의 리더 복제본에서 읽는다.
35
35
이 값을 true로 설정하는 것은 선택 사항이다. 읽기는 더 안정적이지만 느리게 된다.
36
36
37
- 선택적으로 첫 번째 마스터 복제본이 생성될 GCE 존을 지정할 수 있다.
37
+ 선택적으로, 첫 번째 컨트롤 플레인 노드가 생성될 GCE 영역을 지정할 수 있다.
38
38
다음 플래그를 설정한다.
39
39
40
- * ` KUBE_GCE_ZONE=zone ` - 첫 마스터 복제본이 실행될 존 .
40
+ * ` KUBE_GCE_ZONE=zone ` - 첫 번째 컨트롤 플레인 노드가 실행될 영역 .
41
41
42
- 다음 샘플 커맨드는 europe-west1-b GCE 존에 HA 호환 클러스터를 구성한다.
42
+ 다음 샘플 커맨드는 europe-west1-b GCE 영역에 HA 호환 클러스터를 구성한다.
43
43
44
44
``` shell
45
45
MULTIZONE=true KUBE_GCE_ZONE=europe-west1-b ENABLE_ETCD_QUORUM_READS=true ./cluster/kube-up.sh
46
46
```
47
47
48
- 위에 커맨드는 하나의 마스터로 클러스터를 생성한다.
49
- 그러나 후속 커맨드로 새 마스터 복제본을 추가할 수 있다.
48
+ 위의 커맨드는 하나의 컨트롤 플레인 노드를 포함하는 클러스터를 생성한다.
49
+ 그러나 후속 커맨드로 새 컨트롤 플레인 노드를 추가할 수 있다.
50
50
51
- ## 새 마스터 복제본 추가
51
+ ## 새 컨트롤 플레인 노드 추가
52
52
53
- HA 호환 클러스터를 생성한 다음 그것의 마스터 복제본을 추가할 수 있다.
54
- ` kube-up ` 스크립트에 다음 플래그를 사용하여 마스터 복제본을 추가한다.
53
+ HA 호환 클러스터를 생성했다면, 여기에 컨트롤 플레인 노드를 추가할 수 있다.
54
+ ` kube-up ` 스크립트에 다음 플래그를 사용하여 컨트롤 플레인 노드를 추가한다.
55
55
56
- * ` KUBE_REPLICATE_EXISTING_MASTER=true ` - 기존 마스터의 복제본을
56
+ * ` KUBE_REPLICATE_EXISTING_MASTER=true ` - 기존 컨트롤 플레인 노드의 복제본을
57
57
만든다.
58
58
59
- * ` KUBE_GCE_ZONE=zone ` - 마스터 복제본이 실행될 존 .
60
- 반드시 다른 복제본 존과 동일한 존에 있어야 한다.
59
+ * ` KUBE_GCE_ZONE=zone ` - 컨트롤 플레인 노드가 실행될 영역 .
60
+ 반드시 다른 컨트롤 플레인 노드가 존재하는 영역과 동일한 지역(region)에 있어야 한다.
61
61
62
62
HA 호환 클러스터를 시작할 때, 상속되는 ` MULTIZONE ` 이나 ` ENABLE_ETCD_QUORUM_READS ` 플래그를 따로
63
63
설정할 필요는 없다.
64
64
65
- 다음 샘플 커맨드는 기존 HA 호환 클러스터에서 마스터를 복제한다.
65
+ 다음 샘플 커맨드는 기존 HA 호환 클러스터에서
66
+ 컨트롤 플레인 노드를 복제한다.
66
67
67
68
``` shell
68
69
KUBE_GCE_ZONE=europe-west1-c KUBE_REPLICATE_EXISTING_MASTER=true ./cluster/kube-up.sh
69
70
```
70
71
71
- ## 마스터 복제본 제거
72
+ ## 컨트롤 플레인 노드 제거
72
73
73
- 다음 플래그가 있는 ` kube-down ` 스크립트를 사용하여 HA 클러스터에서 마스터 복제본을 제거할 수 있다.
74
+ 다음 플래그가 있는 ` kube-down ` 스크립트를 사용하여 HA 클러스터에서 컨트롤 플레인 노드를 제거할 수 있다.
74
75
75
76
* ` KUBE_DELETE_NODES=false ` - kubelet을 삭제하지 않기 위한 것이다.
76
77
77
- * ` KUBE_GCE_ZONE=zone ` - 마스터 복제본이 제거될 존 .
78
+ * ` KUBE_GCE_ZONE=zone ` - 컨트롤 플레인 노드가 제거될 영역 .
78
79
79
- * ` KUBE_REPLICA_NAME=replica_name ` - (선택) 제거할 마스터 복제본의 이름.
80
- 비어있는 경우 , 해당 존의 모든 복제본이 제거된다.
80
+ * ` KUBE_REPLICA_NAME=replica_name ` - (선택) 제거할 컨트롤 플레인 노드의 이름.
81
+ 명시하지 않으면 , 해당 영역의 모든 복제본이 제거된다.
81
82
82
- 다음 샘플 커맨드는 기존 HA 클러스터에서 마스터 복제본을 제거한다.
83
+ 다음 샘플 커맨드는 기존 HA 클러스터에서 컨트롤 플레인 노드를 제거한다.
83
84
84
85
``` shell
85
86
KUBE_DELETE_NODES=false KUBE_GCE_ZONE=europe-west1-c ./cluster/kube-down.sh
86
87
```
87
88
88
- ## 마스터 복제 실패 처리
89
+ ## 동작에 실패한 컨트롤 플레인 노드 처리
89
90
90
- HA 클러스터의 마스터 복제본 중 하나가 실패하면,
91
- 클러스터에서 복제본을 제거하고 동일한 존에서 새 복제본을 추가하는 것이 가장 좋다.
91
+ HA 클러스터의 컨트롤 플레인 노드 중 하나가 동작에 실패하면,
92
+ 클러스터에서 해당 노드를 제거하고 동일한 영역에 새 컨트롤 플레인 노드를 추가하는 것이 가장 좋다.
92
93
다음 샘플 커맨드로 이 과정을 시연한다.
93
94
94
95
1 . 손상된 복제본을 제거한다.
@@ -97,25 +98,29 @@ HA 클러스터의 마스터 복제본 중 하나가 실패하면,
97
98
KUBE_DELETE_NODES=false KUBE_GCE_ZONE=replica_zone KUBE_REPLICA_NAME=replica_name ./cluster/kube-down.sh
98
99
```
99
100
100
- 1. 기존 복제본 대신 새 복제본을 추가한다.
101
+ 1. 기존 복제본 대신 새 노드를 추가한다.
101
102
102
103
` ` ` shell
103
104
KUBE_GCE_ZONE=replica-zone KUBE_REPLICATE_EXISTING_MASTER=true ./cluster/kube-up.sh
104
105
` ` `
105
106
106
- # # HA 클러스터에서 마스터 복제에 관한 모범 사례
107
+ # # HA 클러스터에서 컨트롤 플레인 노드 복제에 관한 모범 사례
107
108
108
- * 다른 존에 마스터 복제본을 배치하도록 한다. 한 존이 실패하는 동안, 해당 존에 있는 마스터도 모두 실패할 것이다.
109
- 존 장애를 극복하기 위해 노드를 여러 존에 배치한다
110
- (더 자세한 내용은 [멀티 존](/ko/docs/setup/best-practices/multiple-zones/)를 참조한다).
109
+ * 다른 영역에 컨트롤 플레인 노드를 배치하도록 한다. 한 영역이 동작에 실패하는 동안,
110
+ 해당 영역에 있는 컨트롤 플레인 노드도 모두 동작에 실패할 것이다.
111
+ 영역 장애를 극복하기 위해 노드를 여러 영역에 배치한다
112
+ (더 자세한 내용은 [멀티 영역](/ko/docs/setup/best-practices/multiple-zones/)를 참조한다).
111
113
112
- * 두 개의 마스터 복제본은 사용하지 않는다. 두 개의 복제 클러스터에 대한 합의는 지속적 상태를 변경해야 할 때 두 복제본 모두 실행해야 한다.
113
- 결과적으로 두 복제본 모두 필요하고, 어떤 복제본의 장애에도 클러스터가 대부분 장애 상태로 변한다.
114
- 따라서 두 개의 복제본 클러스터는 HA 관점에서 단일 복제 클러스터보다 열등하다.
114
+ * 두 개의 노드로 구성된 컨트롤 플레인은 사용하지 않는다. 두 개의 노드로 구성된
115
+ 컨트롤 플레인에서의 합의를 위해서는 지속적 상태(persistent state) 변경 시 두 컨트롤 플레인 노드가 모두 정상적으로 동작 중이어야 한다.
116
+ 결과적으로 두 컨트롤 플레인 노드 모두 필요하고, 둘 중 한 컨트롤 플레인 노드에만 장애가 발생해도
117
+ 클러스터의 심각한 장애 상태를 초래한다.
118
+ 따라서 HA 관점에서는 두 개의 노드로 구성된 컨트롤 플레인은
119
+ 단일 노드로 구성된 컨트롤 플레인보다도 못하다.
115
120
116
- * 마스터 복제본을 추가하면, 클러스터의 상태(Etcd)도 새 인스턴스로 복사된다.
121
+ * 컨트롤 플레인 노드를 추가하면, 클러스터의 상태(Etcd)도 새 인스턴스로 복사된다.
117
122
클러스터가 크면, 이 상태를 복제하는 시간이 오래 걸릴 수 있다.
118
- 이 작업은 [여기 ](https://coreos.com/etcd/ docs/latest /admin_guide.html #member-migration) 기술한 대로
123
+ 이 작업은 [etcd 관리 가이드 ](https://etcd.io/ docs/v2.3 /admin_guide/ # member-migration)에 기술한 대로
119
124
Etcd 데이터 디렉터리를 마이그레이션하여 속도를 높일 수 있다(향후에 Etcd 데이터 디렉터리 마이그레이션 지원 추가를 고려 중이다).
120
125
121
126
@@ -128,7 +133,7 @@ Etcd 데이터 디렉터리를 마이그레이션하여 속도를 높일 수 있
128
133
129
134
# ## 개요
130
135
131
- 각 마스터 복제본은 다음 모드에서 다음 구성 요소를 실행한다.
136
+ 각 컨트롤 플레인 노드는 다음 모드에서 다음 구성 요소를 실행한다.
132
137
133
138
* Etcd 인스턴스: 모든 인스턴스는 합의를 사용하여 함께 클러스터화 한다.
134
139
@@ -142,8 +147,8 @@ Etcd 데이터 디렉터리를 마이그레이션하여 속도를 높일 수 있
142
147
143
148
# ## 로드 밸런싱
144
149
145
- 두 번째 마스터 복제본을 시작할 때, 두 개의 복제본을 포함된 로드 밸런서가 생성될 것이고, 첫 번째 복제본의 IP 주소가 로드 밸런서의 IP 주소로 승격된다.
146
- 비슷하게 끝에서 두 번째의 마스터 복제본을 제거한 후에는 로드 밸런서가 제거되고
150
+ 두 번째 컨트롤 플레인 노드를 배치할 때, 두 개의 복제본에 대한 로드 밸런서가 생성될 것이고, 첫 번째 복제본의 IP 주소가 로드 밸런서의 IP 주소로 승격된다.
151
+ 비슷하게 끝에서 두 번째의 컨트롤 플레인 노드를 제거한 후에는 로드 밸런서가 제거되고
147
152
해당 IP 주소는 마지막으로 남은 복제본에 할당된다.
148
153
로드 밸런서 생성 및 제거는 복잡한 작업이며, 이를 전파하는 데 시간(~20분)이 걸릴 수 있다.
149
154
@@ -152,17 +157,17 @@ Etcd 데이터 디렉터리를 마이그레이션하여 속도를 높일 수 있
152
157
쿠버네티스 서비스에서 최신의 쿠버네티스 API 서버 목록을 유지하는 대신,
153
158
시스템은 모든 트래픽을 외부 IP 주소로 보낸다.
154
159
155
- * 단일 마스터 클러스터에서 IP 주소는 단일 마스터를 가리킨다.
160
+ * 단일 노드 컨트롤 플레인의 경우, IP 주소는 단일 컨트롤 플레인 노드를 가리킨다.
156
161
157
- * 다중 마스터 클러스터에서 IP 주소는 마스터 앞에 로드밸런서를 가리킨다.
162
+ * 고가용성 컨트롤 플레인의 경우, IP 주소는 마스터 앞의 로드밸런서를 가리킨다.
158
163
159
- 마찬가지로 Kubelet은 외부 IP 주소를 사용하여 마스터와 통신한다.
164
+ 마찬가지로 Kubelet은 외부 IP 주소를 사용하여 컨트롤 플레인과 통신한다.
160
165
161
- # ## 마스터 인증서
166
+ # ## 컨트롤 플레인 노드 인증서
162
167
163
- 쿠버네티스는 각 복제본의 외부 퍼블릭 IP 주소와 내부 IP 주소를 대상으로 마스터 TLS 인증서를 발급한다.
164
- 복제본의 임시 공개 IP 주소에 대한 인증서는 없다.
165
- 임시 퍼블릭 IP 주소를 통해 복제본에 접근하려면, TLS 검증을 건너뛰어야 한다.
168
+ 쿠버네티스는 각 컨트롤 플레인 노드의 외부 퍼블릭 IP 주소와 내부 IP 주소를 대상으로 TLS 인증서를 발급한다.
169
+ 컨트롤 플레인 노드의 임시 퍼블릭 IP 주소에 대한 인증서는 없다.
170
+ 임시 퍼블릭 IP 주소를 통해 컨트롤 플레인 노드에 접근하려면, TLS 검증을 건너뛰어야 한다.
166
171
167
172
# ## etcd 클러스터화
168
173
@@ -171,7 +176,7 @@ etcd를 클러스터로 구축하려면, etcd 인스턴스간 통신에 필요
171
176
172
177
# ## API 서버 신원
173
178
174
- {{< feature-state state=" alpha" for_k8s_version=" v1.20" > }}
179
+ {{< feature-state state=" alpha" for_k8s_version=" v1.20" > }}
175
180
176
181
API 서버 식별 기능은
177
182
[기능 게이트](/ko/docs/reference/command-line-tools-reference/feature-gates/)에
0 commit comments